diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/DuplicateRequestObjectException.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/DuplicateRequestObjectException.java
new file mode 100644
index 0000000000000000000000000000000000000000..15b31679632ae10ef6fa0854d631d66ecc39546b
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/DuplicateRequestObjectException.java
@@ -0,0 +1,4 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
+
+public class DuplicateRequestObjectException extends Exception {
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/DuplicateTileException.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/DuplicateTileException.java
new file mode 100644
index 0000000000000000000000000000000000000000..c56d0d3c29c0bb12c7440e1d02e1a1fce27c3df2
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/DuplicateTileException.java
@@ -0,0 +1,4 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
+
+public class DuplicateTileException extends Exception {
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/RequestObjectNotFoundException.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/RequestObjectNotFoundException.java
new file mode 100644
index 0000000000000000000000000000000000000000..3b99757c5573caad686c0bd8ad33c0b40cdc1d4e
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/RequestObjectNotFoundException.java
@@ -0,0 +1,4 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
+
+public class RequestObjectNotFoundException extends Exception {
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/TileNotFoundException.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/TileNotFoundException.java
new file mode 100644
index 0000000000000000000000000000000000000000..3e34b905a407c59d349a9b5a36bf2fb30917f1f4
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Exception/TileNotFoundException.java
@@ -0,0 +1,4 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server.Exception;
+
+public class TileNotFoundException extends Exception {
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/RequestObjectDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/RequestObjectDAO.java
new file mode 100644
index 0000000000000000000000000000000000000000..8f4a62c41baa439b5b4950ba64afd2f160658519
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/RequestObjectDAO.java
@@ -0,0 +1,41 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
+
+import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateRequestObjectException;
+import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.RequestObjectNotFoundException;
+import com.galaxytrucker.galaxytruckerreloaded.Server.RequestObject;
+
+/** Used for retracing game steps */
+public class RequestObjectDAO extends ObjectDAO<RequestObject> {
+
+    /** Add a new request object to the database
+     * @param o - the request object to add
+     * @throws DuplicateRequestObjectException if the request object already exists in the database */
+    @Override
+    public void persist(RequestObject o) throws DuplicateRequestObjectException {
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(o);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicateRequestObjectException();
+        }
+    }
+
+    /** Remove an existing request object from the database
+     * @param o - the request object to remove
+     * @throws RequestObjectNotFoundException if the request object cannot be found in the database */
+    @Override
+    public void remove(RequestObject o) throws RequestObjectNotFoundException {
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(o);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new RequestObjectNotFoundException();
+        }
+    }
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/TileDAO.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/TileDAO.java
new file mode 100644
index 0000000000000000000000000000000000000000..452bcdcc6f12ff4da8847acef927af2eba68b783
--- /dev/null
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/Persistence/TileDAO.java
@@ -0,0 +1,56 @@
+package com.galaxytrucker.galaxytruckerreloaded.Server.Persistence;
+
+import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Tile;
+import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.DuplicateTileException;
+import com.galaxytrucker.galaxytruckerreloaded.Server.Exception.TileNotFoundException;
+
+/** Handles tile objects in the database */
+public class TileDAO extends ObjectDAO<Tile> {
+
+    /** Add a new tile to the database
+     * @param t - the tile to add
+     * @throws DuplicateTileException if the tile already exists in the database */
+    @Override
+    public void persist(Tile t) throws DuplicateTileException {
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.persist(t);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new DuplicateTileException();
+        }
+    }
+
+    /** Update an existing tile in the database
+     * @param t - the tile to update
+     * @throws TileNotFoundException if the tile cannot be found in the database */
+    public void update(Tile t) throws TileNotFoundException {
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.merge(t);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new TileNotFoundException();
+        }
+    }
+
+    /** Remove a tile from the database
+     * @param t - the tile to remove
+     * @throws TileNotFoundException if the tile cannot be found in the database */
+    @Override
+    public void remove(Tile t) throws TileNotFoundException {
+        try {
+            entityManager.getTransaction().begin();
+            entityManager.remove(t);
+            entityManager.getTransaction().commit();
+        }
+        catch (Exception e){
+            e.printStackTrace();
+            throw new TileNotFoundException();
+        }
+    }
+}
diff --git a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java
index 5d900d63f65287c81d5ae28478d47148e9feda38..61bddc79bc9c5f961e528abe70ee223cebac21ec 100644
--- a/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java
+++ b/core/src/com/galaxytrucker/galaxytruckerreloaded/Server/RequestObject.java
@@ -6,15 +6,26 @@ import com.galaxytrucker.galaxytruckerreloaded.Model.Map.Trader;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Ship;
 import com.galaxytrucker.galaxytruckerreloaded.Model.ShipLayout.Room;
 import com.galaxytrucker.galaxytruckerreloaded.Model.Weapons.Weapon;
-import lombok.Getter;
-import lombok.Setter;
+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;
 
 /** Request sent to the server */
 @Getter
 @Setter
-public class RequestObject {
+@RequiredArgsConstructor(access = AccessLevel.PUBLIC)
+@NoArgsConstructor(access = AccessLevel.PUBLIC)
+@Entity
+public class RequestObject implements Serializable {
+
+    /** ID */
+    @Id
+    private int id;
 
     /** Type of Request */
     private RequestType requestType;
@@ -23,23 +34,31 @@ public class RequestObject {
     private String username;
 
     /** Ship */
+    @OneToOne
     private Ship ship;
 
     /** Trader */
+    @OneToOne
     private Trader trader;
 
     /** Planet */
+    @OneToOne
     private Planet planet;
 
     /** Crew */
+    @OneToOne
     private Crew crew;
 
     /** List of crew */
+    @OneToMany
     private List<Crew> moreCrew;
 
     /** Room */
+    @OneToOne
     private Room room;
+
     /** Weapon */
+    @OneToOne
     private Weapon weapon;
 
     /** Heal amount */
@@ -47,8 +66,7 @@ public class RequestObject {
 
     /** Damage amount */
     private int damageAmount;
+
     /** int - eg fuel, rockets, hp for trader */
     private int intAmount;
-
-
 }