diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala
index 753974e691547d265900366c084804f139a38434..b60384d2358c54be07241b4762f518051af31359 100644
--- a/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/json/PadLoader.scala
@@ -3,8 +3,8 @@ package de.tobias.playpad.server.project.loader.json
 import java.util.UUID
 
 import com.google.gson.{JsonArray, JsonObject}
-import de.tobias.playpad.server.project.JsonDef._
-import de.tobias.playpad.server.project.Pad
+import de.tobias.playpad.server.project.utils.JsonDef._
+import de.tobias.playpad.server.project.{Pad, Page}
 
 import scala.collection.JavaConverters
 
@@ -12,7 +12,7 @@ import scala.collection.JavaConverters
   * Created by tobias on 17.02.17.
   */
 class PadLoader {
-	def load(jsonArray: JsonArray): List[Pad] = {
+	def load(jsonArray: JsonArray, page: Page): List[Pad] = {
 		val it = JavaConverters.asScalaIterator(jsonArray.iterator())
 		val pads = it.filter(_.isJsonObject).map(i => {
 			val json = i.asInstanceOf[JsonObject]
@@ -20,6 +20,7 @@ class PadLoader {
 			val pad = new Pad()
 			pad.id = UUID.fromString(json.get(PAD_ID).getAsString)
 			pad.name = json.get(PAD_NAME).getAsString
+			pad.page = page
 
 			pad
 		}).toList
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/json/PageLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/json/PageLoader.scala
index 2cd6532f44c4f4711cc2046c8f4e8170943d8fa3..de0a0d3a0e0eafc46e4d76c69f5e4766d0b02a47 100644
--- a/src/main/scala/de/tobias/playpad/server/project/loader/json/PageLoader.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/json/PageLoader.scala
@@ -3,8 +3,8 @@ package de.tobias.playpad.server.project.loader.json
 import java.util.UUID
 
 import com.google.gson.{JsonArray, JsonObject}
-import de.tobias.playpad.server.project.JsonDef._
-import de.tobias.playpad.server.project.Page
+import de.tobias.playpad.server.project.utils.JsonDef._
+import de.tobias.playpad.server.project.{Page, Project}
 
 import scala.collection.JavaConverters
 
@@ -12,8 +12,7 @@ import scala.collection.JavaConverters
   * Created by tobias on 17.02.17.
   */
 class PageLoader {
-
-	def load(jsonArray: JsonArray): List[Page] = {
+	def load(jsonArray: JsonArray, project: Project): List[Page] = {
 		val it = JavaConverters.asScalaIterator(jsonArray.iterator())
 		val pages = it.filter(_.isJsonObject).map(i => {
 			val json = i.asInstanceOf[JsonObject]
@@ -23,8 +22,9 @@ class PageLoader {
 			page.name = json.get(PAGE_NAME).getAsString
 
 			val padLoader = new PadLoader
-			page.pads = padLoader.load(json.get(PAGE_PADS).getAsJsonArray)
+			page.pads = padLoader.load(json.get(PAGE_PADS).getAsJsonArray, page)
 
+			page.project = project
 			page
 		}).toList
 		pages
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/json/ProjectLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/json/ProjectLoader.scala
index 9a9556e1c28db5cb76e800b4cd91852cf65257de..ce2831d1bd2615da6f5727aba31bd9c393550d75 100644
--- a/src/main/scala/de/tobias/playpad/server/project/loader/json/ProjectLoader.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/json/ProjectLoader.scala
@@ -3,21 +3,20 @@ package de.tobias.playpad.server.project.loader.json
 import java.util.UUID
 
 import com.google.gson.JsonObject
-import de.tobias.playpad.server.project.JsonDef._
 import de.tobias.playpad.server.project.Project
+import de.tobias.playpad.server.project.utils.JsonDef._
 
 /**
   * Created by tobias on 17.02.17.
   */
 class ProjectLoader {
-
 	def load(json: JsonObject): Project = {
 		val project = new Project()
 		project.id = UUID.fromString(json.get(PROJECT_ID).getAsString)
 		project.name = json.get(PROJECT_NAME).getAsString
 
 		val pageLoader = new PageLoader
-		project.pages = pageLoader.load(json.getAsJsonArray(PROJECT_PAGES))
+		project.pages = pageLoader.load(json.getAsJsonArray(PROJECT_PAGES), project)
 
 		project
 	}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala
index c35454f7208c31c1184dfe184ae511d2004ee805..aa232255de5c571de6a4d7854c294a1be0417db2 100644
--- a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PadLoader.scala
@@ -3,28 +3,29 @@ package de.tobias.playpad.server.project.loader.sql
 import java.sql.Connection
 import java.util.UUID
 
-import de.tobias.playpad.server.project.Pad
+import de.tobias.playpad.server.project.utils.SqlDef._
+import de.tobias.playpad.server.project.{Pad, Page}
 
 /**
   * Created by tobias on 17.02.17.
   */
 class PadLoader {
-
-	def load(connection: Connection, pageId: UUID): List[Pad] = {
-		val sql = "SELECT * FROM Pad WHERE page_id = ?"
+	def load(connection: Connection, page: Page): List[Pad] = {
+		val sql = s"SELECT * FROM $PAD WHERE $PAD_PAGE_REF = ?"
 		val preparedStatement = connection.prepareStatement(sql)
-		preparedStatement.setString(1, pageId.toString)
+		preparedStatement.setString(1, page.toString)
 		val result = preparedStatement.executeQuery()
 
 		var pads: List[Pad] = List()
 
 		while (result.next()) {
 			val pad = new Pad()
-			pad.id = UUID.fromString(result.getString("id"))
-			pad.name = result.getString("name")
-			pad.position = result.getInt("position")
-			pad.pageIndex = result.getInt("page")
+			pad.id = UUID.fromString(result.getString(PAD_ID))
+			pad.name = result.getString(PAD_NAME)
+			pad.position = result.getInt(PAD_POSITION)
+			pad.pageIndex = result.getInt(PAD_PAGE)
 
+			pad.page = page
 			pads = pad :: pads
 		}
 
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PageLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PageLoader.scala
index 6a55fd501c8297a75041e7cdb3ac8bb1c25357df..526be459d6c8a8e21f4a8eac0cb16ab87aebe956 100644
--- a/src/main/scala/de/tobias/playpad/server/project/loader/sql/PageLoader.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/PageLoader.scala
@@ -3,29 +3,30 @@ package de.tobias.playpad.server.project.loader.sql
 import java.sql.Connection
 import java.util.UUID
 
-import de.tobias.playpad.server.project.Page
+import de.tobias.playpad.server.project.utils.SqlDef._
+import de.tobias.playpad.server.project.{Page, Project}
 
 /**
   * Created by tobias on 17.02.17.
   */
 class PageLoader {
-
-	def load(connection: Connection, projectId: UUID): List[Page] = {
-		val sql = "SELECT * FROM Page WHERE project_id = ?"
+	def load(connection: Connection, project: Project): List[Page] = {
+		val sql = s"SELECT * FROM $PAGE WHERE $PAGE_PROJECT_REF = ?"
 		val preparedStatement = connection.prepareStatement(sql)
-		preparedStatement.setString(1, projectId.toString)
+		preparedStatement.setString(1, project.id.toString)
 		val result = preparedStatement.executeQuery()
 
 		var pages: List[Page] = List()
 
 		while (result.next()) {
 			val page = new Page()
-			page.id = UUID.fromString(result.getString("id"))
-			page.name = result.getString("name")
+			page.id = UUID.fromString(result.getString(PAGE_ID))
+			page.name = result.getString(PAGE_NAME)
 
 			val padLoader = new PadLoader()
-			page.pads = padLoader.load(connection, page.id)
+			page.pads = padLoader.load(connection, page)
 
+			page.project = project
 			pages = page :: pages
 		}
 
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala
index 3d648091d7c301f3ff842b50c1947bb2c15f67e5..dffb418a8acb32a80e912449f8c138a5758bcdf9 100644
--- a/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/sql/ProjectLoader.scala
@@ -4,14 +4,14 @@ import java.sql.Connection
 import java.util.UUID
 
 import de.tobias.playpad.server.project.Project
+import de.tobias.playpad.server.project.utils.SqlDef._
 
 /**
   * Created by tobias on 17.02.17.
   */
 class ProjectLoader {
-
 	def load(connection: Connection, id: UUID): List[Project] = {
-		val sql = "SELECT * FROM Project WHERE id = ?"
+		val sql = s"SELECT * FROM $PROJECT WHERE $PROJECT_ID = ?"
 		val preparedStatement = connection.prepareStatement(sql)
 		preparedStatement.setString(1, id.toString)
 		val result = preparedStatement.executeQuery()
@@ -20,12 +20,12 @@ class ProjectLoader {
 
 		while (result.next()) {
 			val project = new Project()
-			project.id = UUID.fromString(result.getString("id"))
-			project.name = result.getString("name")
-			project.accountId = result.getInt("account_id")
+			project.id = UUID.fromString(result.getString(PROJECT_ID))
+			project.name = result.getString(PROJECT_NAME)
+			project.accountId = result.getInt(PROJECT_ACCOUNT_ID)
 
 			val pageLoader = new PageLoader()
-			project.pages = pageLoader.load(connection, id)
+			project.pages = pageLoader.load(connection, project)
 
 			projects = project :: projects
 		}
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala
index ae16cde5d89a6deeff198e4f61b6a6df07c86b3f..71711c6cd2c9453f509875f34b761b4ec1f331fe 100644
--- a/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/json/PadSaver.scala
@@ -1,14 +1,13 @@
 package de.tobias.playpad.server.project.saver.json
 
 import com.google.gson.{JsonElement, JsonObject}
-import de.tobias.playpad.server.project.JsonDef._
 import de.tobias.playpad.server.project.Pad
+import de.tobias.playpad.server.project.utils.JsonDef._
 
 /**
   * Created by tobias on 17.02.17.
   */
 class PadSaver {
-
 	def save(pad: Pad): JsonElement = {
 		val jsonObject = new JsonObject()
 
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/json/PageSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/json/PageSaver.scala
index e59ef25584b501721b28deec6f436196ce1022d5..883b8b6503920c030e1e02d232d32d24dec3d2f8 100644
--- a/src/main/scala/de/tobias/playpad/server/project/saver/json/PageSaver.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/json/PageSaver.scala
@@ -1,14 +1,13 @@
 package de.tobias.playpad.server.project.saver.json
 
 import com.google.gson.{JsonArray, JsonElement, JsonObject}
-import de.tobias.playpad.server.project.JsonDef._
 import de.tobias.playpad.server.project.Page
+import de.tobias.playpad.server.project.utils.JsonDef._
 
 /**
   * Created by tobias on 17.02.17.
   */
 class PageSaver {
-
 	def save(page: Page): JsonElement = {
 		val jsonObject = new JsonObject()
 
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/json/ProjectSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/json/ProjectSaver.scala
index 942d89754d9dda2e0598bbd4fb82e8517d446cd2..28b2282cde37139f2e3c3097f28c8a1783b0825a 100644
--- a/src/main/scala/de/tobias/playpad/server/project/saver/json/ProjectSaver.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/json/ProjectSaver.scala
@@ -1,14 +1,13 @@
 package de.tobias.playpad.server.project.saver.json
 
 import com.google.gson.{JsonArray, JsonObject}
-import de.tobias.playpad.server.project.JsonDef._
 import de.tobias.playpad.server.project.Project
+import de.tobias.playpad.server.project.utils.JsonDef._
 
 /**
   * Created by tobias on 17.02.17.
   */
 class ProjectSaver {
-
 	def save(project: Project): JsonObject = {
 		val jsonObject = new JsonObject()
 
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/sql/PadSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PadSaver.scala
new file mode 100644
index 0000000000000000000000000000000000000000..52204c255b6103047abf8c6be74948a0d8685cbc
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PadSaver.scala
@@ -0,0 +1,19 @@
+package de.tobias.playpad.server.project.saver.sql
+
+import java.sql.Connection
+
+import de.tobias.playpad.server.project.Pad
+import de.tobias.playpad.server.project.utils.SqlDef._
+import de.tobias.playpad.server.server.SqlHelper
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PadSaver {
+	def save(connection: Connection, pad: Pad): Unit = {
+		SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_NAME, pad.name)
+		SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_POSITION, pad.position)
+		SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_PAGE, pad.pageIndex)
+		SqlHelper.insertOrUpdate(connection, PAD, pad.id, PAD_PAGE_REF, pad.page.id)
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/sql/PageSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PageSaver.scala
new file mode 100644
index 0000000000000000000000000000000000000000..6abdd60e4a6d6b49af4a52474971f2665e91d391
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/sql/PageSaver.scala
@@ -0,0 +1,21 @@
+package de.tobias.playpad.server.project.saver.sql
+
+import java.sql.Connection
+
+import de.tobias.playpad.server.project.Page
+import de.tobias.playpad.server.project.utils.SqlDef._
+import de.tobias.playpad.server.server.SqlHelper
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PageSaver {
+	def save(connection: Connection, page: Page): Unit = {
+		SqlHelper.insertOrUpdate(connection, PAGE, page.id, PAGE_NAME, page.name)
+		SqlHelper.insertOrUpdate(connection, PAGE, page.id, PAGE_POSITION, page.position)
+		SqlHelper.insertOrUpdate(connection, PAGE, page.id, PAGE_PROJECT_REF, page.project.id)
+
+		val padSaver = new PadSaver
+		page.pads.foreach(padSaver.save(connection, _))
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/saver/sql/ProjectSaver.scala b/src/main/scala/de/tobias/playpad/server/project/saver/sql/ProjectSaver.scala
new file mode 100644
index 0000000000000000000000000000000000000000..44ce81054e41f06cbd05df22747f5cf67d3938ea
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/saver/sql/ProjectSaver.scala
@@ -0,0 +1,20 @@
+package de.tobias.playpad.server.project.saver.sql
+
+import java.sql.Connection
+
+import de.tobias.playpad.server.project.Project
+import de.tobias.playpad.server.project.utils.SqlDef._
+import de.tobias.playpad.server.server.SqlHelper
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class ProjectSaver {
+	def save(connection: Connection, project: Project): Unit = {
+		SqlHelper.insertOrUpdate(connection, PROJECT, project.id, PROJECT_NAME, project.name)
+		SqlHelper.insertOrUpdate(connection, PROJECT, project.id, PROJECT_ACCOUNT_ID, project.accountId)
+
+		val pageSaver = new PageSaver
+		project.pages.foreach(pageSaver.save(connection, _))
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/JsonDef.scala b/src/main/scala/de/tobias/playpad/server/project/utils/JsonDef.scala
similarity index 87%
rename from src/main/scala/de/tobias/playpad/server/project/JsonDef.scala
rename to src/main/scala/de/tobias/playpad/server/project/utils/JsonDef.scala
index f95c5fccaec35b3cbac5901ddc0f86c271d2edcd..e5666f8e11da70b4df15f3f0e745426cdb012945 100644
--- a/src/main/scala/de/tobias/playpad/server/project/JsonDef.scala
+++ b/src/main/scala/de/tobias/playpad/server/project/utils/JsonDef.scala
@@ -1,4 +1,4 @@
-package de.tobias.playpad.server.project
+package de.tobias.playpad.server.project.utils
 
 /**
   * Created by tobias on 17.02.17.
diff --git a/src/main/scala/de/tobias/playpad/server/project/utils/SqlDef.scala b/src/main/scala/de/tobias/playpad/server/project/utils/SqlDef.scala
new file mode 100644
index 0000000000000000000000000000000000000000..63f2c4eac46470056f361ccb8e0be13b1e414db1
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/utils/SqlDef.scala
@@ -0,0 +1,26 @@
+package de.tobias.playpad.server.project.utils
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+object SqlDef {
+
+	val PROJECT = "Project"
+	val PROJECT_ID = "id"
+	val PROJECT_NAME = "name"
+	val PROJECT_ACCOUNT_ID = "account_id"
+
+	val PAGE = "Page"
+	val PAGE_ID = "id"
+	val PAGE_NAME = "name"
+	val PAGE_POSITION = "position"
+	val PAGE_PROJECT_REF = "project_id"
+
+	val PAD = "Pad"
+	val PAD_ID = "id"
+	val PAD_NAME = "name"
+	val PAD_POSITION = "position"
+	val PAD_PAGE = "page"
+	val PAD_PAGE_REF = "page_id"
+
+}