diff --git a/build.gradle b/build.gradle
index e6ff11c6a40d255aa75557319822c9ead4a97bde..1b71340cbe71b78e3d453d2eb54df68783ca0fd8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -57,11 +57,6 @@ project(":desktop") {
         // h2 database
         runtimeOnly 'com.h2database:h2'
 
-        // ormlite
-        compile group: 'com.j256.ormlite', name: 'ormlite-jdbc', version: '4.48'
-        compile 'com.j256.ormlite:ormlite-android:4.48'
-        compile 'com.j256.ormlite:ormlite-core:4.48'
-
         compile group: 'com.h2database', name: 'h2', version: '1.4.199'
     }
 }
@@ -105,11 +100,6 @@ project(":core") {
         // https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter
         testCompile group: 'org.mockito', name: 'mockito-junit-jupiter', version: '3.3.3'
 
-        // ormlite
-        compile group: 'com.j256.ormlite', name: 'ormlite-jdbc', version: '4.48'
-        compile 'com.j256.ormlite:ormlite-android:4.48'
-        compile 'com.j256.ormlite:ormlite-core:4.48'
-
         testCompile 'junit:junit:4.12'
         compile 'junit:junit:4.12'
     }
diff --git a/core/database.mv.db b/core/database.mv.db
index 7e2e1de2540f765ebf278401a0ed46fd69b52434..9dbdffc5c5d72fd1cf5f84151e6d3282d8f5cb4f 100644
Binary files a/core/database.mv.db and b/core/database.mv.db differ
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java
index ee52cb5a890ab90bddefa1af41684daabd72d392..ebc56560effbe0dfd67209f9e10464102a0c10e0 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Crew/Crew.java
@@ -1,9 +1,6 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Crew;
 
 import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room;
-import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System;
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
 import javax.persistence.*;
@@ -53,6 +50,7 @@ public class Crew implements Serializable {
     /**
      * The room this crew member is in
      */
+    @OneToOne
     private Room currentRoom;
 
     /**
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java
index 767140814e9b7bb8abff17464a6b16323ede4879..ebde8497d8ba6bc99209fb211cd632bb2e843257 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Overworld.java
@@ -1,33 +1,40 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Map;
 
 
-import com.j256.ormlite.field.DatabaseField;
-import lombok.Data;
+import lombok.AccessLevel;
+import lombok.NoArgsConstructor;
 import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
 
+import javax.persistence.*;
 import java.io.Serializable;
 import java.util.HashMap;
-
+import java.util.Map;
+
+@Entity
+@NoArgsConstructor(access = AccessLevel.PUBLIC)
+@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
+@NamedQueries({
+        @NamedQuery(name = "Overworld.getByUsername", query = "select o from Overworld o where o.associatedUser =: name")
+})
 public class Overworld implements Serializable {
 
     /** ID */
     @NonNull
-    @DatabaseField(id = true,columnName = "ID")
+    @Id
     private int id;
 
     /** Username used as ID */
     @NonNull
-    @DatabaseField(columnName = "user")
     private String associatedUser;
 
     /** Stores planet and their location on the map */
-    @NonNull
-    @DatabaseField(columnName = "planetMap")
-    private HashMap<float[],Planet> planetMap;
+    @OneToMany
+    private Map<String,Planet> planetMap;
 
     /** The start planet */
     @NonNull
-    @DatabaseField(columnName = "startPlanet")
+    @OneToOne
     private Planet startPlanet;
 
     /** Constructor */
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Planet.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Planet.java
index 7e51cccf3f684f86f3374b69af9bc685eb2fb36a..4e0a1a2de46f1c82cd03c219eb86e2ee23c1a8e6 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Planet.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Planet.java
@@ -1,59 +1,61 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Map;
 
-import com.badlogic.gdx.scenes.scene2d.ui.List;
+
 import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
-import com.j256.ormlite.field.DatabaseField;
+
 import lombok.*;
 
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
+import javax.persistence.OneToOne;
 import java.io.Serializable;
+import java.util.List;
 
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
+@Entity
 public class Planet implements Serializable {
 
     /**
      * Planet name
      */
-    @DatabaseField(id = true, columnName = "name")
+    @Id
     @NonNull
     private String name;
 
     /**
      * Horizontale Position auf der Karte
      */
-    @DatabaseField(columnName = "posX")
     @NonNull
     private float posX;
 
     /**
      * Vertikale Position auf der Karte
      */
-    @DatabaseField(columnName = "posY")
     @NonNull
     private float posY;
 
     /**
      * Ereignis dass auf diesem Planeten eintrifft
      */
-    @DatabaseField(columnName = "event", foreign = true)
     @NonNull
     private Enum<PlanetEvent> event;
 
     /**
      * If already discovered set to true
      */
-    @DatabaseField(columnName = "discovered")
     @NonNull
     private boolean discovered = false;
 
     /** Ships at this planet */
-    @DatabaseField(foreign = true, columnName = "ships")
     @NonNull
+    @OneToMany
     private List<Ship> ships;
 
     /** Trader */
-    @DatabaseField(foreign = true)
+    @OneToOne
     private Trader trader;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Trader.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Trader.java
index 6323ffd72aebb015f7da3a2951d183b827c56872..ce267d3b4dde64a83094a4dd026e6c3b150c6649 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Trader.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Map/Trader.java
@@ -1,46 +1,44 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Map;
 
-import com.badlogic.gdx.scenes.scene2d.ui.List;
+import java.util.List;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
 import java.io.Serializable;
 
 @Getter
 @Setter
-@DatabaseTable(tableName = "trader")
+@Entity
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 public class Trader extends Planet implements Serializable {
 
     /** ID */
-    @DatabaseField(id = true)
+    @Id
     private int id;
 
     /** Associated user */
-    @DatabaseField(foreign = true)
     private Planet planet;
 
     /** Weapons for sale */
-    @DatabaseField(foreign = true)
     @NonNull
+    @OneToMany
     private List<Weapon> weaponStock;
 
     /** Rockets for sale */
-    @DatabaseField
     @NonNull
     private int missileStock;
 
     /** Fuel for sale */
-    @DatabaseField
     @NonNull
     private int fuelStock;
 
     /** Crew for sale */
-    @DatabaseField(foreign = true)
+    @OneToMany
     @NonNull
     private List<Crew> crewStock;
 
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java
index 08417b50a2a0ab1d04d36eefbbe963cb30342c02..a6c8b61e4c66bd1edc01111dd6d4080a79b4c291 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Ship.java
@@ -1,25 +1,26 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model;
 
-import com.badlogic.gdx.scenes.scene2d.ui.List;
-import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet;
 import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.*;
 import java.io.Serializable;
+import java.util.List;
 
 @AllArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
-@DatabaseTable(tableName = "ship")
+@Entity
+@NamedQueries({
+        @NamedQuery(name = "Ship.getByUsername", query = "select s from Ship s where s.associatedUser =: username")
+})
 public class Ship implements Serializable {
 
     /** ID */
-    @DatabaseField(id = true,columnName = "ID")
+    @Id
     @NonNull
     private int id;
 
@@ -27,7 +28,6 @@ public class Ship implements Serializable {
      * The user this ship belongs to
      * (uses the user's username)
      */
-    @DatabaseField(columnName = "associatedUser")
     @NonNull
     private String associatedUser;
 
@@ -35,84 +35,72 @@ public class Ship implements Serializable {
      * HP
      */
     @NonNull
-    @DatabaseField(columnName = "HP")
     private int hp;
 
 
     /** Coins */
     @NonNull
-    @DatabaseField(columnName = "coins")
     private int coins;
 
     /** Amount of available missiles */
     @NonNull
-    @DatabaseField(columnName = "missles")
     private int missiles;
 
     /** Amount of fuel left*/
     @NonNull
-    @DatabaseField(columnName = "fuel")
     private int fuel;
 
     /**
      * Energy to be distributed
      */
     @NonNull
-    @DatabaseField(columnName = "energy")
     private int energy;
 
     /**
      * Shields that are currently active
      */
     @NonNull
-    @DatabaseField(columnName = "shieldCharge")
     private int shieldCharge;
 
     /**
      * Total number of Shields that are powered. Possibly redundant through Shield.getEnergy/2
      */
     @NonNull
-    @DatabaseField(columnName = "maximumShieldCharge")
     private int maxShieldCharge;
 
     /**
      * chance for the ship to dodge incoming attacks
      */
     @NonNull
-    @DatabaseField(columnName = "evasionChance")
     private float evasionChance;
 
     /**
      * The planet the ship is currently at
      */
     @NonNull
-    @DatabaseField(foreign = true,columnName = "planet")
     private Planet planet;
 
     /** Shields */
     @NonNull
-    @DatabaseField(columnName = "shields")
     private int shields;
 
     /**
      * time needed until position can be changed again
      */
     @NonNull
-    @DatabaseField(columnName = "FTLCharge")
     private int FTLCharge;
 
     /** This ship's systems */
     @NonNull
-    @DatabaseField(columnName = "systems",foreign = true)
+    @ElementCollection
     private List<Room> systems;
 
     /** Inventory */
     @NonNull
-    @DatabaseField(foreign = true, columnName = "inventory")
+    @ElementCollection
     private List<Weapon> inventory;
 
     /** Whether or not the ship is in combat */
-    @DatabaseField(columnName = "inCombat")
     @NonNull
     private boolean inCombat = false;
 
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/BlankRoom.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/BlankRoom.java
index 4742bded7cb67bd24ae1008e127aa743b2ff1bf6..87d66ac535dee296e4d866e5fd5753461a8ad01e 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/BlankRoom.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/BlankRoom.java
@@ -1,18 +1,13 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
+
 @Getter
 @Setter
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
-@NoArgsConstructor(access = AccessLevel.PUBLIC)
-@DatabaseTable(tableName = "blankRoom")
+@Entity
 public class BlankRoom extends Room {
 
-    /** ID */
-    @NonNull
-    @DatabaseField(id = true)
-    private int id;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java
index 9d6fab8e91331b8a9b78dafa045b70b02b216263..926ab420c5cb9d58d8c39af2b4d56eeb0ea82efd 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Engine.java
@@ -1,21 +1,19 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
-@DatabaseTable(tableName = "engine")
+@Entity
 public class Engine extends System implements Serializable {
 
     /**
      * Ob ein Crew mitglied das System stärkt
      */
-    @DatabaseField(columnName = "manned")
     @NonNull
     private boolean manned = false;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java
index 7cf0fe03e7279e8a85a83666021109d7dd368fd3..f97cbaab0a4bd0be65784ffd8e547c35b7d62633 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Room.java
@@ -1,26 +1,33 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
 
 
-import com.j256.ormlite.field.DatabaseField;
 import lombok.*;
 
+import javax.persistence.Entity;
+import javax.persistence.Id;
 import java.io.Serializable;
 
 @Getter
 @Setter
+@Entity
 public abstract class Room implements Serializable {
 
+    /**
+     * ID
+     */
+    @Id
+    @NonNull
+    private int id;
+
     /**
      * Höhe des Raumes. Räume sind immer rechteckig.
      */
-    @DatabaseField(columnName = "height")
     @NonNull
     private int height;
 
     /**
      * Weite des Raumes. Räume sind immer rechteckig.
      */
-    @DatabaseField(columnName = "width")
     @NonNull
     private int width;
 
@@ -28,24 +35,20 @@ public abstract class Room implements Serializable {
      * Wenn ein Raum Schaden kriegt kann ein Loch entstehen.
      * Die Zahl ist der Wert wie lange dieses repariert werden muss um geschlossen zu werden.
      */
-    @DatabaseField(columnName = "breach")
     @NonNull
     private int breach;
 
     /**
      * Der Sauerstoffgehalt des Raumes
      */
-    @DatabaseField(columnName = "oxygen")
     @NonNull
     private int oxygen;
 
     /** X position */
     @NonNull
-    @DatabaseField(columnName = "posX")
     private int posX;
 
     /** Y position */
     @NonNull
-    @DatabaseField(columnName = "posY")
     private int posY;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java
index 0aae955a8a4c8cf4d9080c8a421d58a9bfd2c1d3..6123d64af944f0a2854050d472c130d7b9570299 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/Shield.java
@@ -1,21 +1,19 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @Getter
 @Setter
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
-@DatabaseTable(tableName = "shield")
+@Entity
 public class Shield extends System implements Serializable {
 
     /**
      * Ob ein Crewmitglied das System stärkt
      */
-    @DatabaseField(columnName = "manned")
     @NonNull
     private boolean manned = false;
 
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java
index cb03eed2508c80bf68d99aca24491fe7ee6a98b8..247b142d0e50d472fcae85cf462fd6d083609b9e 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/System.java
@@ -1,51 +1,43 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
 
-import com.badlogic.gdx.scenes.scene2d.ui.List;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
-import com.j256.ormlite.field.DatabaseField;
 import lombok.*;
 
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.OneToMany;
 import java.io.Serializable;
+import java.util.List;
 
 @Getter
 @Setter
+@Entity
 public abstract class System extends Room implements Serializable {
 
-    /**
-     * ID
-     */
-    @DatabaseField(columnName = "ID", id = true)
-    @NonNull
-    private int id;
-
     /**
      * A system's energy level
      */
-    @DatabaseField(columnName = "energy")
     @NonNull
     private int energy;
 
     /**
      * Maximum energy a system can take
      */
-    @DatabaseField(columnName = "maxEnergy")
     @NonNull
     private int maxEnergy;
 
     /**
      * Damage the system has taken
      */
-    @DatabaseField(columnName = "damage")
     @NonNull
     private int damage;
 
     /** Crew in this system */
-    @DatabaseField(foreign = true, columnName = "crew")
     @NonNull
+    @OneToMany
     private List<Crew> crew;
 
     /** Whether or not the system is disabled */
-    @DatabaseField(columnName = "disabled")
     @NonNull
     private boolean disabled = false;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/WeaponSystem.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/WeaponSystem.java
index 5a0348473af8d8369d378e5139433af21d2dc73c..04622e6a4e888aaf62bfb9c81ee20efa9b931b7d 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/WeaponSystem.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/ShipLayout/WeaponSystem.java
@@ -1,24 +1,26 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout;
 
-import com.badlogic.gdx.scenes.scene2d.ui.List;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
-@DatabaseTable(tableName = "weaponSystem")
+import javax.persistence.ElementCollection;
+import javax.persistence.Entity;
+import javax.persistence.ManyToOne;
+import javax.persistence.OneToMany;
+import java.util.List;
+
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
+@Entity
 public class WeaponSystem extends System {
 
     /** whether or not its manned */
     @NonNull
-    @DatabaseField(columnName = "manned")
     private boolean manned = false;
 
     /** List of weapons this ship has */
-    @DatabaseField(foreign = true,columnName = "shipWeapons")
+    @OneToMany
     private List<Weapon> shipWeapons;
 
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/User.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/User.java
index 93448a58c7b4b56b3daf54c0b3181d5ae0b2ee0e..bc0748dcd89b62291c83caafbe22e742e0a56271 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/User.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/User.java
@@ -2,8 +2,7 @@ package com.galaxytrucker.galaxytruckerreloaded.Model;
 
 import lombok.*;
 
-import javax.persistence.Entity;
-import javax.persistence.Id;
+import javax.persistence.*;
 import java.io.Serializable;
 
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
@@ -11,6 +10,9 @@ import java.io.Serializable;
 @Getter
 @Setter
 @Entity
+@NamedQueries({
+        @NamedQuery(name = "User.getByUsername",query = "select u from User u where u.username =: username")
+})
 public class User implements Serializable {
 
     /**
@@ -23,6 +25,7 @@ public class User implements Serializable {
     /**
      * The user's ship
      */
+    @OneToOne
     private Ship userShip;
 
     /** Whether or not the user is logged in */
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Bomb.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Bomb.java
index b1191f1fefb02f63a7f4969c5dbf627f71f04e05..f5b5695f6c2f81a78a47a2948e9c74e11606d7f6 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Bomb.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Bomb.java
@@ -1,20 +1,18 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
-@DatabaseTable(tableName = "bomb")
+@Entity
 public class Bomb extends Weapon implements Serializable {
 
     /** Weapon name */
-    @DatabaseField(columnName = "bombWeaponName")
     @NonNull
     private String name;
 
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/HealBomb.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/HealBomb.java
index 57a69f7a86346352e81374bfbac0e5093433bac6..c090f1d631e3fa78d417b79e09db8598c716df7e 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/HealBomb.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/HealBomb.java
@@ -1,20 +1,20 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
-@DatabaseTable(tableName = "healBombWeapon")
+@Entity
 public class HealBomb extends Weapon implements Serializable {
 
-    /** Weapon name */
-    @DatabaseField(columnName = "healBombWeaponName")
+    /**
+     * Weapon name
+     */
     @NonNull
     private String name;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/LaserBlaster.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/LaserBlaster.java
index b7ac04b158e137f151bed767225046b46a0d4f40..b16e8b20817f187513f5524f631e7790567c7603 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/LaserBlaster.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/LaserBlaster.java
@@ -1,20 +1,18 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
-@DatabaseTable(tableName = "laserBlasterWeapon")
+@Entity
 public class LaserBlaster extends Weapon implements Serializable {
 
     /** Weapon name */
-    @DatabaseField(columnName = "laserWeaponName")
     @NonNull
     private String name;
 
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/RadiationBomb.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/RadiationBomb.java
index 195072af94ffa6b1ec2b6e0f89de8fe7fe39b363..74353550320f7eca15e7f76da6bbc1aab567c4b0 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/RadiationBomb.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/RadiationBomb.java
@@ -1,20 +1,18 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
-@DatabaseTable(tableName = "radiationBomb")
+@Entity
 public class RadiationBomb extends Weapon implements Serializable {
 
     /** Weapon name */
-    @DatabaseField(columnName = "radiationBombName")
     @NonNull
     private String name;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Radio.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Radio.java
index 787cb13e9a6e685aa3a3f6cf8e18eac38bb650b1..517a7eb35af7b7c9b2ff79210046190e9ed4e944 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Radio.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Radio.java
@@ -1,20 +1,18 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @Getter
 @Setter
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
-@DatabaseTable(tableName = "radioWeapon")
+@Entity
 public class Radio extends Weapon implements Serializable {
 
     /** Weapon name */
     @NonNull
-    @DatabaseField(columnName = "radioWeaponName")
     private String name;
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Rocket.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Rocket.java
index f3aa5c0e8be988e83d844531a579e506d11dd635..7040ee5d27c069bc9dc4eb015d33d2844806369d 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Rocket.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Rocket.java
@@ -1,20 +1,18 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
 
-import com.j256.ormlite.field.DatabaseField;
-import com.j256.ormlite.table.DatabaseTable;
 import lombok.*;
 
+import javax.persistence.Entity;
 import java.io.Serializable;
 
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 @NoArgsConstructor(access = AccessLevel.PUBLIC)
 @Getter
 @Setter
-@DatabaseTable(tableName = "rocketWeapon")
+@Entity
 public class Rocket extends Weapon implements Serializable {
 
     /** Weapon name */
-    @DatabaseField(columnName = "rocketWeaponName")
     @NonNull
     private String weaponName;
 
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Weapon.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Weapon.java
index e3026834f7df8cf440f8165dfdf61b0323baebd3..d251c9bea88ff51205963a0c5d45afb31e044fe9 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Weapon.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Model/Weapons/Weapon.java
@@ -1,101 +1,90 @@
 package com.galaxytrucker.galaxytruckerreloaded.Model.Weapons;
 
-import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
 import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.System;
-import com.j256.ormlite.field.DatabaseField;
 import lombok.*;
 
+import javax.persistence.*;
 import java.io.Serializable;
 
 
 @Getter
 @Setter
+@Entity
 public abstract class Weapon implements Serializable {
 
     /**
      * ID
      */
-    @DatabaseField(id = true, columnName = "ID")
     @NonNull
+    @Id
     private int id;
 
     /** Weapon level */
     @NonNull
-    @DatabaseField(columnName = "weaponLevel")
     private int weaponLevel;
 
     /**
      * Weapon damage
      */
     @NonNull
-    @DatabaseField(columnName = "damage")
     private int damage;
 
     /**
      * Amount of rounds for the weapon to be used again
      */
     @NonNull
-    @DatabaseField(columnName = "cooldown")
     private int cooldown;
 
     /**
      * Weapon energy
      */
     @NonNull
-    @DatabaseField(columnName = "energy")
     private int energy;
 
     /**
      * Amount of missiles spent per attack
      */
     @NonNull
-    @DatabaseField(columnName = "missleCost")
     private int missileCost;
 
     /**
      * Weapon accuracy
      */
     @NonNull
-    @DatabaseField(columnName = "accuracy")
     private float precision;
 
     /**
      * probability of randomly finding this weapon
      */
     @NonNull
-    @DatabaseField(columnName = "dropChance")
     private float dropChance;
 
     /**
      * Amount of shield bars this Weapon can ignore
      */
     @NonNull
-    @DatabaseField(columnName = "shieldPiercing")
     private int shieldPiercing;
 
     /**
      * Probability of causing a breach in the section on hit
      */
     @NonNull
-    @DatabaseField(columnName = "breachChance")
     private float breachChance;
 
     /**
      * Damage taken by crew in the hit section
      */
     @NonNull
-    @DatabaseField(columnName = "crewDamage")
     private int crewDamage;
 
     /**
      * How many projectiles are fired per burst
      */
     @NonNull
-    @DatabaseField(columnName = "weaponBurst")
     private int burst;
 
     /** Weapon system this weapon belongs to */
-    @DatabaseField(columnName = "weaponSystem",foreign = true)
+    @OneToOne
     private System weaponSystem;
 
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/CrewDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/CrewDAO.java
index 30012c2dfb41efd5f439ada57749e68186f929f6..c18bc10c5ed417a2738447b8f549b679f7f98d68 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/CrewDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/CrewDAO.java
@@ -1,6 +1,7 @@
 package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 
 import com.galaxytrucker.galaxytruckerreloaded.Model.Crew.Crew;
+import com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.CrewNotFoundException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateCrewException;
 
@@ -60,13 +61,4 @@ public class CrewDAO extends ObjectDAO<Crew> {
             throw new CrewNotFoundException();
         }
     }
-
-    /**
-     * Constructor
-     *
-     * @param entityManager - the EntityManager
-     */
-    public CrewDAO(EntityManager entityManager) {
-        this.entityManager = entityManager;
-    }
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ObjectDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ObjectDAO.java
index 42f5bc451d409279da0c8aaf49e8a181b7338e5b..7947b5ba8432b80684b28b24d28d9e037fa4a2f4 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ObjectDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ObjectDAO.java
@@ -1,5 +1,7 @@
 package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 
+import com.galaxytrucker.galaxytruckerreloaded.Server.Database.Database;
+
 import javax.persistence.EntityManager;
 import javax.persistence.PersistenceContext;
 
@@ -8,7 +10,7 @@ public abstract class ObjectDAO<T> {
 
     /** EntityManager */
     @PersistenceContext(name = "database")
-    public EntityManager entityManager;
+    public EntityManager entityManager = Database.getEntityManager();
 
     /**
      * Save the object to the database
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/OverworldDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/OverworldDAO.java
index fe6702a08e0923bd37a78987114d6fc25a48ce35..15cb1071d8bb5a114235829e1d4901afb5557b6c 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/OverworldDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/OverworldDAO.java
@@ -3,13 +3,10 @@ package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Overworld;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateOverworldException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.OverworldNotFoundException;
-import com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.ObjectDAO;
-import com.j256.ormlite.dao.Dao;
+import lombok.NonNull;
 
-public class OverworldDAO extends ObjectDAO<Overworld> {
 
-    /** OverworldDAO */
-    private Dao<Overworld,String> overworldDAO;
+public class OverworldDAO extends ObjectDAO<Overworld> {
 
     /**
      * Add a new OverWorld to the database
@@ -19,7 +16,15 @@ public class OverworldDAO extends ObjectDAO<Overworld> {
      */
     @Override
     public void persist(Overworld o) throws DuplicateOverworldException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(o);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicateOverworldException();
+        }
     }
 
     /**
@@ -30,7 +35,15 @@ public class OverworldDAO extends ObjectDAO<Overworld> {
      */
     @Override
     public void remove(Overworld o) throws OverworldNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(o);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new OverworldNotFoundException();
+        }
     }
 
     /** Get the overworld of a designated user
@@ -38,6 +51,15 @@ public class OverworldDAO extends ObjectDAO<Overworld> {
      * @return the user's world map
      * @throws OverworldNotFoundException if the overworld couldn't be found */
     public Overworld getOverworldByUser(String username) throws OverworldNotFoundException{
-        return null;
+        try {
+            entityManager.getTransaction().begin();
+            @NonNull Overworld o = entityManager.createNamedQuery("Overworld.getByUsername",Overworld.class).setParameter("name",username).getSingleResult();
+            entityManager.getTransaction().commit();
+            return o;
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new OverworldNotFoundException();
+        }
     }
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/PlanetDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/PlanetDAO.java
index 7c2f42798813040ebd25cba1d9cad980138a4c2d..92b827ff4f93517376b423e5753aca38d10fecc0 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/PlanetDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/PlanetDAO.java
@@ -3,13 +3,9 @@ package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Planet;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicatePlanetException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.PlanetNotFoundException;
-import com.j256.ormlite.dao.Dao;
 
 public class PlanetDAO extends ObjectDAO<Planet> {
 
-    /** Planet DAO */
-    private Dao<Planet,String> planetDAO;
-
     /**
      * Add a new planet to the database
      *
@@ -18,7 +14,15 @@ public class PlanetDAO extends ObjectDAO<Planet> {
      */
     @Override
     public void persist(Planet p) throws DuplicatePlanetException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(p);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicatePlanetException();
+        }
     }
 
     /**
@@ -28,7 +32,15 @@ public class PlanetDAO extends ObjectDAO<Planet> {
      * @throws PlanetNotFoundException if the planet cannot be found in the database
      */
     public void update(Planet p) throws PlanetNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.merge(p);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new PlanetNotFoundException();
+        }
     }
 
     /**
@@ -39,6 +51,14 @@ public class PlanetDAO extends ObjectDAO<Planet> {
      */
     @Override
     public void remove(Planet p) throws PlanetNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(p);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new PlanetNotFoundException();
+        }
     }
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/RoomDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/RoomDAO.java
index 9fbbb566c1e7e5cbd9bb5934b02fd19f7ef73249..459d518e433943afd7e5867ef8015f893185f94b 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/RoomDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/RoomDAO.java
@@ -3,14 +3,11 @@ package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateRoomException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.RoomNotFoundException;
-import com.j256.ormlite.dao.Dao;
+
 
 /** This class manages room objects in the database */
 public class RoomDAO extends ObjectDAO<Room> {
 
-    /** RoomDAO */
-    private Dao<Room,String> roomDAO;
-
     /**
      * Add a new room to the database
      *
@@ -19,7 +16,15 @@ public class RoomDAO extends ObjectDAO<Room> {
      */
     @Override
     public void persist(Room r) throws DuplicateRoomException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(r);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicateRoomException();
+        }
     }
 
     /**
@@ -29,7 +34,15 @@ public class RoomDAO extends ObjectDAO<Room> {
      * @throws RoomNotFoundException if the room cannot be found in the database
      */
     public void update(Room r) throws RoomNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.merge(r);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new RoomNotFoundException();
+        }
     }
 
     /**
@@ -40,6 +53,14 @@ public class RoomDAO extends ObjectDAO<Room> {
      */
     @Override
     public void remove(Room r) throws RoomNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(r);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new RoomNotFoundException();
+        }
     }
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ShipDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ShipDAO.java
index 2519a4893d7066ace3f3346ac1f3a76b6aca4b3b..19352c357ccf72af2fd947c249c879028151968e 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ShipDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/ShipDAO.java
@@ -3,25 +3,10 @@ package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateShipException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.ShipNotFoundException;
-import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.UserNotFoundException;
-import com.j256.ormlite.dao.Dao;
-import com.j256.ormlite.support.ConnectionSource;
 
-public class ShipDAO extends ObjectDAO<Ship> {
-
-    /**
-     * ShipDAO
-     */
-    private Dao<Ship, String> shipDAO;
+import lombok.NonNull;
 
-    /**
-     * Constructor
-     *
-     * @param source - the database connection source
-     */
-    public ShipDAO(ConnectionSource source) {
-
-    }
+public class ShipDAO extends ObjectDAO<Ship> {
 
     /**
      * Add a new ship to the database
@@ -30,14 +15,30 @@ public class ShipDAO extends ObjectDAO<Ship> {
      */
     @Override
     public void persist(Ship s) throws DuplicateShipException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(s);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicateShipException();
+        }
     }
 
     /** Update a ship in the database
      * @param s - the ship to update
      * @throws ShipNotFoundException if the ship cannot be found in the database */
     public void update(Ship s) throws ShipNotFoundException{
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.merge(s);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new ShipNotFoundException();
+        }
     }
 
     /**
@@ -45,8 +46,17 @@ public class ShipDAO extends ObjectDAO<Ship> {
      *
      * @param user - the ship's associated user
      */
-    private Ship getShipByUser(String user) throws ShipNotFoundException, UserNotFoundException {
-        return null;
+    private Ship getShipByUser(String user) throws ShipNotFoundException {
+        try {
+            entityManager.getTransaction().begin();
+            @NonNull Ship s = entityManager.createNamedQuery("Ship.getByUsername",Ship.class).setParameter("username",user).getSingleResult();
+            entityManager.getTransaction().commit();
+            return s;
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new ShipNotFoundException();
+        }
     }
 
     /**
@@ -56,6 +66,14 @@ public class ShipDAO extends ObjectDAO<Ship> {
      */
     @Override
     public void remove(Ship s) throws ShipNotFoundException{
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(s);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new ShipNotFoundException();
+        }
     }
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/TraderDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/TraderDAO.java
index 0388a8396f3595af814f0fb4c64064370a4e843e..b91b19dae3f46503f38564ca6fe3b16b1846526c 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/TraderDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/TraderDAO.java
@@ -3,16 +3,12 @@ package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Trader;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateTraderException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.TraderNotFoundException;
-import com.j256.ormlite.dao.Dao;
 
 /**
  * This class handles trader objects in the database
  */
 public class TraderDAO extends ObjectDAO<Trader> {
 
-    /** TraderDAO */
-    private Dao<Trader,String> traderDAO;
-
     /**
      * Add a new trader to the database
      *
@@ -21,7 +17,15 @@ public class TraderDAO extends ObjectDAO<Trader> {
      */
     @Override
     public void persist(Trader t) throws DuplicateTraderException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(t);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicateTraderException();
+        }
     }
 
     /**
@@ -31,7 +35,15 @@ public class TraderDAO extends ObjectDAO<Trader> {
      * @throws TraderNotFoundException if the trader cannot be found in the database
      */
     public void update(Trader t) throws TraderNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.merge(t);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new TraderNotFoundException();
+        }
     }
 
     /**
@@ -42,6 +54,14 @@ public class TraderDAO extends ObjectDAO<Trader> {
      */
     @Override
     public void remove(Trader t) throws TraderNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(t);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new TraderNotFoundException();
+        }
     }
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/UserDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/UserDAO.java
index 45c79cb5ee04d0d9d1c60c4c4f2c7ff8bf838ae9..cf642be92bf0918aed8cbe228f60df345790a557 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/UserDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/UserDAO.java
@@ -3,25 +3,10 @@ package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 import com.galaxytrucker.galaxytruckerreloaded.Model.User;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateUserException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.UserNotFoundException;
-import com.j256.ormlite.dao.Dao;
-import com.j256.ormlite.support.ConnectionSource;
+import lombok.NonNull;
 
 public class UserDAO extends ObjectDAO<User> {
 
-    /**
-     * UserDAO
-     */
-    private Dao<User, String> userDAO;
-
-    /**
-     * Constructor
-     *
-     * @param source - database connection source
-     */
-    public UserDAO(ConnectionSource source) {
-
-    }
-
     /**
      * Add a new user to the database
      *
@@ -29,14 +14,31 @@ public class UserDAO extends ObjectDAO<User> {
      */
     @Override
     public void persist(User u) throws DuplicateUserException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(u);
+            entityManager.getTransaction().commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new DuplicateUserException();
+        }
     }
 
-    /** Update a user in the database
+    /**
+     * Update a user in the database
+     *
      * @param u - the user to update
-     * @throws UserNotFoundException if the user cannot be found in the database */
+     * @throws UserNotFoundException if the user cannot be found in the database
+     */
     public void update(User u) throws UserNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.merge(u);
+            entityManager.getTransaction().commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new UserNotFoundException();
+        }
     }
 
     /**
@@ -45,7 +47,15 @@ public class UserDAO extends ObjectDAO<User> {
      * @param username - the username of the user
      */
     private User getUserByUsername(String username) throws UserNotFoundException {
-        return null;
+        try {
+            entityManager.getTransaction().begin();
+            @NonNull User u = entityManager.createNamedQuery("User.getByUsername",User.class).setParameter("username",username).getSingleResult();
+            entityManager.getTransaction().commit();
+            return u;
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new UserNotFoundException();
+        }
     }
 
     /**
@@ -55,7 +65,14 @@ public class UserDAO extends ObjectDAO<User> {
      */
     @Override
     public void remove(User u) throws UserNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(u);
+            entityManager.getTransaction().commit();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new UserNotFoundException();
+        }
     }
 
     /**
@@ -64,7 +81,8 @@ public class UserDAO extends ObjectDAO<User> {
      * @param username - the username of the user to delete
      */
     private void removeUserByUsername(String username) throws UserNotFoundException {
-
+        User u = getUserByUsername(username);
+        remove(u);
     }
 
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/WeaponDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/WeaponDAO.java
index 01872911dafc60294a4f189ffad06c05ceea6d29..d8cdeec9f061d899d0119ffc9dccbe6aaaa12402 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/WeaponDAO.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/WeaponDAO.java
@@ -3,16 +3,13 @@ package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateWeaponException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.WeaponNotFoundException;
-import com.j256.ormlite.dao.Dao;
+
 
 /**
  * This class manages weapons in the database
  */
 public class WeaponDAO extends ObjectDAO<Weapon> {
 
-    /** WeaponDAO */
-    private Dao<Weapon,String> weaponDAO;
-
     /**
      * Add a new weapon to the database
      *
@@ -21,7 +18,15 @@ public class WeaponDAO extends ObjectDAO<Weapon> {
      */
     @Override
     public void persist(Weapon w) throws DuplicateWeaponException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(w);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicateWeaponException();
+        }
     }
 
     /**
@@ -31,7 +36,15 @@ public class WeaponDAO extends ObjectDAO<Weapon> {
      * @throws WeaponNotFoundException if the weapon doesn't exist in the database
      */
     public void update(Weapon w) throws WeaponNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.merge(w);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new WeaponNotFoundException();
+        }
     }
 
     /**
@@ -42,7 +55,15 @@ public class WeaponDAO extends ObjectDAO<Weapon> {
      */
     @Override
     public void remove(Weapon w) throws WeaponNotFoundException {
-
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(w);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new WeaponNotFoundException();
+        }
     }
 
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java
index 6fc08e4b2af9df28739ba517dfd04b93bdd121ba..3bcc4ce105e70d2f97b45a0c49ebe5819ccafa43 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Server.java
@@ -1,6 +1,5 @@
 package com.galaxytrucker.galaxytruckerreloaded.Server;
 
-import com.j256.ormlite.support.ConnectionSource;
 
 import java.net.Socket;
 
@@ -21,20 +20,9 @@ public class Server {
 
     }
 
-    /** Start serverServiceCommunicator
-     * @param source - the database connection source */
-    private void startServerServiceCommunicator(ConnectionSource source){
-
-    }
-
     /** Receive some data from the client and return a response
      * @param socket - the client socket */
     private void receiveAndSendData(Socket socket){
     }
 
-    /** Initialize database
-     * @return the database connection source */
-    private ConnectionSource initializeDatabase(){
-        return null;
-    }
 }
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java
index b6c0cdf2c4f588894162243b2f5cdc3955615b07..59ddc12cfbad4b698a080f3a44f1432c1d3f4e2e 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/ServerServiceCommunicator.java
@@ -1,7 +1,6 @@
 package com.galaxytrucker.galaxytruckerreloaded.Server;
 
 import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
-import com.j256.ormlite.support.ConnectionSource;
 import lombok.AccessLevel;
 import lombok.NonNull;
 import lombok.RequiredArgsConstructor;
@@ -9,9 +8,6 @@ import lombok.RequiredArgsConstructor;
 @RequiredArgsConstructor(access = AccessLevel.PUBLIC)
 public class ServerServiceCommunicator {
 
-    /** Database connection source */
-    @NonNull
-    private ConnectionSource databaseConnectionSource;
 
     /** Take a request from the client side, pass it through the services
      * and return a response
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/UserService.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/UserService.java
index 7e7d70e12625d60d22265390bbc95214d1bf91fc..bfa05acd078cc161677fc64736b5a24f38e367aa 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/UserService.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Services/UserService.java
@@ -4,7 +4,6 @@ import com.galaxytrucker.galaxytruckerreloaded.Model.User;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateUserException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.UserNotFoundException;
 import com.galaxytrucker.galaxytruckerreloaded.Server.Persistence.UserDAO;
-import com.j256.ormlite.support.ConnectionSource;
 
 public class UserService {
 
@@ -53,15 +52,6 @@ public class UserService {
     public void removeUserByUsername(String username) throws UserNotFoundException {
     }
 
-    /**
-     * Constructor
-     *
-     * @param source - the database connections source
-     */
-    public UserService(ConnectionSource source) {
-
-    }
-
     /**
      * Save game
      *
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java
index 2443c7b911b791f6d4257bc21bf1c752600be112..4d91f5c23833197c81865562a46bddb020b053b6 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Test/Server/Persistence/CrewDAOTest.java
@@ -9,6 +9,7 @@ import org.junit.Assert;
 import org.junit.Test;
 
 import javax.persistence.EntityManager;
+import javax.xml.crypto.Data;
 import java.util.UUID;
 
 public class CrewDAOTest {
@@ -22,7 +23,7 @@ public class CrewDAOTest {
     /**
      * CrewDAO
      */
-    private CrewDAO crewDAO = new CrewDAO(entityManager);
+    private CrewDAO crewDAO = new CrewDAO();
 
 
     /**