diff --git a/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala b/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala
index 723fcd7772e83403e5651495c562b0de33b633c3..7f5c3029dfbcf49a87a67035b38952081697c324 100644
--- a/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala
+++ b/src/main/scala/de/tobias/playpad/server/PlayPadServer.scala
@@ -1,16 +1,18 @@
 package de.tobias.playpad.server
 
 import java.nio.file.{Files, Paths}
-import java.sql.{Driver, DriverManager}
+import java.sql.DriverManager
+import java.util.UUID
 
 import com.j256.ormlite.dao.{Dao, DaoManager}
 import com.j256.ormlite.jdbc.JdbcConnectionSource
 import com.j256.ormlite.table.TableUtils
 import de.tobias.playpad.server.account.{Account, Session}
 import de.tobias.playpad.server.plugin.Plugin
+import de.tobias.playpad.server.project.{Design, Pad, Page, Project}
 import de.tobias.playpad.server.server.account._
 import de.tobias.playpad.server.server.plugin.{PluginGet, PluginList}
-import de.tobias.playpad.server.server.project.ProjectHandler
+import de.tobias.playpad.server.server.project.{ProjectGet, ProjectHandler}
 import de.tobias.playpad.server.settings.SettingsHandler
 import de.tobias.playpad.server.transformer.JsonTransformer
 import spark.Spark._
@@ -31,7 +33,7 @@ object PlayPadServer extends App {
 
 	private val settings = settingsLoader.load(settingsPath)
 
-	private val databaseUrl = "jdbc:mysql://" + settings.db_host + ":" + settings.db_port + "/" + settings.db_database + "?autoReconnect=true"
+	private val databaseUrl = "jdbc:mysql://" + settings.db_host + ":" + settings.db_port + "/" + settings.db_database + "?autoReconnect=true&wait_timeout=24"
 	var connectionSource = new JdbcConnectionSource(databaseUrl)
 	connectionSource.setUsername(settings.db_username)
 	connectionSource.setPassword(settings.db_password)
@@ -42,11 +44,11 @@ object PlayPadServer extends App {
 	val accountDao: Dao[Account, Int] = DaoManager.createDao(connectionSource, classOf[Account])
 	val sessionDao: Dao[Session, Int] = DaoManager.createDao(connectionSource, classOf[Session])
 
+	// Management Tables
 	TableUtils.createTableIfNotExists(connectionSource, classOf[Plugin])
 	TableUtils.createTableIfNotExists(connectionSource, classOf[Account])
 	TableUtils.createTableIfNotExists(connectionSource, classOf[Session])
 
-
 	// Setup Http Server
 	port(8090)
 
@@ -58,6 +60,9 @@ object PlayPadServer extends App {
 	// PlayWall Cloud
 	webSocket("/project", new ProjectHandler(sessionDao, databaseConnection))
 
+	// Project
+	get("/projects", new ProjectGet(databaseConnection, sessionDao), new JsonTransformer)
+
 	// Plugins
 	get("/plugins/:id", new PluginGet(pluginDao), new JsonTransformer)
 	get("/plugins", new PluginList(pluginDao), new JsonTransformer)
diff --git a/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala
new file mode 100644
index 0000000000000000000000000000000000000000..1825d0a9b76fcf22e834c01ad2ee08d248d5c59b
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/server/SqlHelper.scala
@@ -0,0 +1,47 @@
+package de.tobias.playpad.server.server
+
+import java.sql.{Connection, PreparedStatement}
+import java.util.UUID
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+object SqlHelper {
+
+	def insertOrUpdate[T](connection: Connection, table: String, idValue: Int, field: String, value: T): Unit = {
+		val preparedStatement = createQuery(connection, table, field, value)
+		preparedStatement.setInt(1, idValue)
+		preparedStatement.execute()
+		preparedStatement.close()
+	}
+
+	def insertOrUpdate[T](connection: Connection, table: String, idValue: UUID, field: String, value: T): Unit = {
+		val preparedStatement = createQuery(connection, table, field, value)
+		preparedStatement.setString(1, idValue.toString)
+		preparedStatement.execute()
+		preparedStatement.close()
+	}
+
+	private def createQuery[T](connection: Connection, table: String, field: String, value: T): PreparedStatement = {
+		val sql = "INSERT INTO " + table + " (id, " + field + ") VALUES(?, ?) " +
+			"ON DUPLICATE KEY UPDATE " + field + "=?"
+		val preparedStatement = connection.prepareStatement(sql)
+
+		value match {
+			case value: String =>
+				preparedStatement.setString(2, value)
+				preparedStatement.setString(3, value)
+			case value: Boolean =>
+				preparedStatement.setBoolean(2, value)
+				preparedStatement.setBoolean(3, value)
+			case value: Int =>
+				preparedStatement.setInt(2, value)
+				preparedStatement.setInt(3, value)
+			case value: Double =>
+				preparedStatement.setDouble(2, value)
+				preparedStatement.setDouble(3, value)
+		}
+
+		preparedStatement
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/server/project/ProjectGet.scala b/src/main/scala/de/tobias/playpad/server/server/project/ProjectGet.scala
new file mode 100644
index 0000000000000000000000000000000000000000..abf3dcf795007bf127ee5ee8a42261c8223f6a55
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/server/project/ProjectGet.scala
@@ -0,0 +1,39 @@
+package de.tobias.playpad.server.server.project
+
+import java.sql.Connection
+import java.util.UUID
+
+import com.j256.ormlite.dao.Dao
+import de.tobias.playpad.server.account.Session
+import de.tobias.playpad.server.project.loader.ProjectLoader
+import de.tobias.playpad.server.project.server.json.ProjectSaver
+import de.tobias.playpad.server.server.{Result, Status}
+import spark.{Request, Response, Route}
+
+/**
+  * Created by tobias on 17.02.17.
+  */
+class ProjectGet(connection: Connection, sessionDao: Dao[Session, Int]) extends Route {
+
+	override def handle(request: Request, response: Response): AnyRef = {
+		val sessionKey = request.queryParams("session")
+		val projectId = request.queryParams("project")
+
+		val sessions = sessionDao.queryForEq("key", sessionKey)
+		if (sessions.size() == 1) {
+			val projectLoader = new ProjectLoader()
+			val projects = projectLoader.load(connection, UUID.fromString(projectId))
+			val session = sessions.get(0)
+
+			if (projects.size == 1) {
+				val project = projects.head
+				if (project.accountId == session.getAccount.id) {
+					val projectSaver = new ProjectSaver()
+					return projectSaver.save(project)
+				}
+			}
+		}
+		new Result(Status.ERROR, "Session invalid")
+	}
+
+}
diff --git a/src/main/scala/de/tobias/playpad/server/server/project/ProjectHandler.scala b/src/main/scala/de/tobias/playpad/server/server/project/ProjectHandler.scala
index 8e61f0ecf68d53c767e0f660500bf3863b3c69e3..cb1b8370aaa51e0c2eb86c3a5cad0c4f8a20914d 100644
--- a/src/main/scala/de/tobias/playpad/server/server/project/ProjectHandler.scala
+++ b/src/main/scala/de/tobias/playpad/server/server/project/ProjectHandler.scala
@@ -1,12 +1,13 @@
 package de.tobias.playpad.server.server.project
 
 import java.sql.Connection
+import java.util.UUID
 
 import com.google.gson.{JsonObject, JsonParser}
 import com.j256.ormlite.dao.Dao
-import com.sun.xml.internal.bind.v2.model.core.ID
 import de.tobias.playpad.server.account
 import de.tobias.playpad.server.account.Account
+import de.tobias.playpad.server.server.SqlHelper
 import org.eclipse.jetty.websocket.api.Session
 import org.eclipse.jetty.websocket.api.annotations.{OnWebSocketClose, OnWebSocketConnect, OnWebSocketMessage, WebSocket}
 
@@ -61,33 +62,50 @@ import scala.collection.{Map, mutable}
 					val field = jsonObject.get("field").getAsString
 					val id = jsonObject.get("id").getAsString
 
-					val sql = "INSERT INTO " + className + " (id, " + field + ") VALUES(?, ?) " +
-						"ON DUPLICATE KEY UPDATE " + field + "=?"
-					val preparedStatement = connection.prepareStatement(sql)
-
-					preparedStatement.setString(1, id)
-
 					val valueType = Class.forName(jsonObject.get("type").getAsString)
+
 					if (valueType == classOf[String]) {
 						val value = jsonObject.get("value").getAsString
-						preparedStatement.setString(2, value)
-						preparedStatement.setString(3, value)
+
+						if (id.matches("[0-9]*")) {
+							val idInt = id.toInt
+							SqlHelper.insertOrUpdate(connection, className, idInt, field, value)
+						} else {
+							val uuid = UUID.fromString(id)
+							SqlHelper.insertOrUpdate(connection, className, uuid, field, value)
+						}
 					} else if (valueType == classOf[Boolean]) {
 						val value = jsonObject.get("value").getAsBoolean
-						preparedStatement.setBoolean(2, value)
-						preparedStatement.setBoolean(3, value)
+
+						if (id.matches("[0-9]*")) {
+							val idInt = id.toInt
+							SqlHelper.insertOrUpdate(connection, className, idInt, field, value)
+						} else {
+							val uuid = UUID.fromString(id)
+							SqlHelper.insertOrUpdate(connection, className, uuid, field, value)
+						}
 					} else if (valueType == classOf[Integer]){
 						val value = jsonObject.get("value").getAsInt
-						preparedStatement.setInt(2, value)
-						preparedStatement.setInt(3, value)
-					} else if (valueType == classOf[Double]){
+
+						if (id.matches("[0-9]*")) {
+							val idInt = id.toInt
+							SqlHelper.insertOrUpdate(connection, className, idInt, field, value)
+						} else {
+							val uuid = UUID.fromString(id)
+							SqlHelper.insertOrUpdate(connection, className, uuid, field, value)
+						}
+					} else if (valueType == classOf[Double]) {
 						val value = jsonObject.get("value").getAsDouble
-						preparedStatement.setDouble(2, value)
-						preparedStatement.setDouble(3, value)
+
+						if (id.matches("[0-9]*")) {
+							val idInt = id.toInt
+							SqlHelper.insertOrUpdate(connection, className, idInt, field, value)
+						} else {
+							val uuid = UUID.fromString(id)
+							SqlHelper.insertOrUpdate(connection, className, uuid, field, value)
+						}
 					}
 
-					preparedStatement.execute()
-					preparedStatement.close()
 				case _ =>
 			}