diff --git a/src/main/scala/de/tobias/playpad/server/project/Pad.scala b/src/main/scala/de/tobias/playpad/server/project/Pad.scala
new file mode 100644
index 0000000000000000000000000000000000000000..d0a03da4021b42aecb8d3e24aec39b52b518a1d7
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/Pad.scala
@@ -0,0 +1,18 @@
+package de.tobias.playpad.server.project
+
+import java.util.UUID
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class Pad() {
+
+	var id: UUID = UUID.randomUUID()
+	var name: String = _
+
+	var position: Int = _
+	var pageIndex: Int = _
+
+	var design: Design = _
+	var page: Page = _
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/Page.scala b/src/main/scala/de/tobias/playpad/server/project/Page.scala
new file mode 100644
index 0000000000000000000000000000000000000000..079602a8117901c7528478573f60bb477e621172
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/Page.scala
@@ -0,0 +1,17 @@
+package de.tobias.playpad.server.project
+
+import java.util.UUID
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class Page {
+
+	var id: UUID = UUID.randomUUID()
+	var name: String = _
+
+	var position: Int = _
+
+	var pads: List[Pad] = List()
+	var project: Project = _ // FOREIGN KEY
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/Project.scala b/src/main/scala/de/tobias/playpad/server/project/Project.scala
new file mode 100644
index 0000000000000000000000000000000000000000..5a2054389b0a0ccf89e46631ce359ff9d857eb0c
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/Project.scala
@@ -0,0 +1,17 @@
+package de.tobias.playpad.server.project
+
+import java.util.UUID
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class Project {
+
+	var id: UUID = UUID.randomUUID()
+	var name: String = _
+
+	var accountId: Int = _ // Account that own this project
+
+	var pages: List[Page] = _
+
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/PadLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/PadLoader.scala
new file mode 100644
index 0000000000000000000000000000000000000000..54be4951cc7fb80ab53d6e9b26e0c1b5b6c53cbc
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/PadLoader.scala
@@ -0,0 +1,36 @@
+package de.tobias.playpad.server.project.loader
+
+import java.sql.Connection
+import java.util.UUID
+
+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 = ?"
+		val preparedStatement = connection.prepareStatement(sql)
+		preparedStatement.setString(1, pageId.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")
+
+			pads = pad :: pads
+		}
+
+		result.close()
+		preparedStatement.close()
+
+		pads
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/PageLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/PageLoader.scala
new file mode 100644
index 0000000000000000000000000000000000000000..ad39d6c42ff42867e8f402b38687ce0ea798becc
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/PageLoader.scala
@@ -0,0 +1,37 @@
+package de.tobias.playpad.server.project.loader
+
+import java.sql.Connection
+import java.util.UUID
+
+import de.tobias.playpad.server.project.Page
+
+/**
+  * 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 = ?"
+		val preparedStatement = connection.prepareStatement(sql)
+		preparedStatement.setString(1, projectId.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")
+
+			val padLoader = new PadLoader()
+			page.pads = padLoader.load(connection, page.id)
+
+			pages = page :: pages
+		}
+
+		result.close()
+		preparedStatement.close()
+
+		pages
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/loader/ProjectLoader.scala b/src/main/scala/de/tobias/playpad/server/project/loader/ProjectLoader.scala
new file mode 100644
index 0000000000000000000000000000000000000000..549f469d747c08869d860b16dc26aad42ce5ef35
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/loader/ProjectLoader.scala
@@ -0,0 +1,40 @@
+package de.tobias.playpad.server.project.loader
+
+import java.sql.Connection
+import java.util.UUID
+
+import de.tobias.playpad.server.project.Project
+
+import scala.collection.mutable.ListBuffer
+
+/**
+  * 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 preparedStatement = connection.prepareStatement(sql)
+		preparedStatement.setString(1, id.toString)
+		val result = preparedStatement.executeQuery()
+
+		var projects: List[Project] = List()
+
+		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")
+
+			val pageLoader = new PageLoader()
+			project.pages = pageLoader.load(connection, id)
+
+			projects = project :: projects
+		}
+
+		result.close()
+		preparedStatement.close()
+
+		projects
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/server/json/PadSaver.scala b/src/main/scala/de/tobias/playpad/server/project/server/json/PadSaver.scala
new file mode 100644
index 0000000000000000000000000000000000000000..eb94451f4036cf8a28bc454143a1863c48a63e97
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/server/json/PadSaver.scala
@@ -0,0 +1,21 @@
+package de.tobias.playpad.server.project.server.json
+
+import com.google.gson.{JsonElement, JsonObject}
+import de.tobias.playpad.server.project.Pad
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PadSaver {
+
+	def save(pad: Pad): JsonElement = {
+		val jsonObject = new JsonObject()
+
+		jsonObject.addProperty("id", pad.id.toString)
+		jsonObject.addProperty("name", pad.name)
+		jsonObject.addProperty("position", pad.position)
+		jsonObject.addProperty("page", pad.pageIndex)
+
+		jsonObject
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/server/json/PageSaver.scala b/src/main/scala/de/tobias/playpad/server/project/server/json/PageSaver.scala
new file mode 100644
index 0000000000000000000000000000000000000000..b97cc422788a7217053153b51827a9f58e89806c
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/server/json/PageSaver.scala
@@ -0,0 +1,24 @@
+package de.tobias.playpad.server.project.server.json
+
+import com.google.gson.{JsonArray, JsonElement, JsonObject}
+import de.tobias.playpad.server.project.Page
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class PageSaver {
+
+	def save(page: Page): JsonElement = {
+		val jsonObject = new JsonObject()
+
+		val padSaver = new PadSaver()
+		val padArray = new JsonArray()
+		page.pads.foreach(pad => padArray.add(padSaver.save(pad)))
+
+		jsonObject.addProperty("name", page.name)
+		jsonObject.addProperty("position", page.position)
+		jsonObject.add("pads", padArray)
+
+		jsonObject
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/project/server/json/ProjectSaver.scala b/src/main/scala/de/tobias/playpad/server/project/server/json/ProjectSaver.scala
new file mode 100644
index 0000000000000000000000000000000000000000..18e88a5b293da174978b145213a50c5c5275bd36
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/project/server/json/ProjectSaver.scala
@@ -0,0 +1,23 @@
+package de.tobias.playpad.server.project.server.json
+
+import com.google.gson.{JsonArray, JsonObject}
+import de.tobias.playpad.server.project.Project
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class ProjectSaver {
+
+	def save(project: Project): JsonObject = {
+		val jsonObject = new JsonObject()
+
+		val pageSaver = new PageSaver()
+		val pageArray = new JsonArray
+		project.pages.foreach(page => pageArray.add(pageSaver.save(page)))
+
+		jsonObject.addProperty("name", project.name)
+		jsonObject.add("pages", pageArray)
+
+		jsonObject
+	}
+}