diff --git a/src/main/resources/protocol.txt b/src/main/resources/protocol.txt
new file mode 100644
index 0000000000000000000000000000000000000000..6bdea08cf9b123ac72fdb2443dfaf32226020ccf
--- /dev/null
+++ b/src/main/resources/protocol.txt
@@ -0,0 +1,23 @@
+===================================
+Project Add:
+===================================
+{
+	id
+	name
+}
+
+===================================
+Project Update:
+===================================
+{
+	id
+	field (name)
+	value
+}
+
+===================================
+Project Remove:
+===================================
+{
+	id
+}
\ No newline at end of file
diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala
index 24563e075c2770c711d2d8d4d915707e9bda4657..f6e247fdd8f1fd2275876237c2738f79308b51e1 100644
--- a/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala
+++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/ProjectSyncHandler.scala
@@ -17,6 +17,8 @@ import scala.collection.{Map, mutable}
   */
 @WebSocket class ProjectSyncHandler(sessionDao: Dao[account.Session, Int], connection: Connection) {
 
+	val SESSION_KEY_HEADER = "key"
+
 	// TODO mutable.HashSet --> Set
 	private var sessions: Map[Account, mutable.HashSet[Session]] = new mutable.HashMap[Account, mutable.HashSet[Session]]()
 
@@ -27,33 +29,33 @@ import scala.collection.{Map, mutable}
 	)
 
 	@OnWebSocketConnect def onConnect(serverSession: Session): Unit = {
-		val key = serverSession.getUpgradeRequest.getHeader("key")
+		val key = serverSession.getUpgradeRequest.getHeader(SESSION_KEY_HEADER)
 		if (key == null) {
 			serverSession.close(500, "Invalid Key")
 		}
 
-		val sessions = sessionDao.queryForEq("key", key)
-		if (sessions.size() == 1) {
-			val session = sessions.get(0)
-			if (!this.sessions.contains(session.getAccount)) {
-				this.sessions += (session.getAccount -> new mutable.HashSet[Session]())
-			}
-			this.sessions(session.getAccount) += serverSession
-		} else {
-			serverSession.close(500, "Invalid Key")
+		val session = account.Session.getSession(key, sessionDao)
+		session match {
+			case Some(s) =>
+				if (!this.sessions.contains(s.getAccount)) {
+					this.sessions += (s.getAccount -> new mutable.HashSet[Session]())
+				}
+				this.sessions(s.getAccount) += serverSession
+			case None => serverSession.close(500, "Invalid Key")
 		}
 	}
 
 	@OnWebSocketClose def onClose(serverSession: Session, status: Int, reason: String): Unit = {
-		val key = serverSession.getUpgradeRequest.getHeader("key")
+		val key = serverSession.getUpgradeRequest.getHeader(SESSION_KEY_HEADER)
 		if (key == null) {
 			serverSession.close(500, "Invalid Key")
 		}
 
-		val sessions = sessionDao.queryForEq("key", key)
-		if (sessions.size() == 1) {
-			val session = sessions.get(0)
-			this.sessions(session.getAccount) -= serverSession
+		val session = account.Session.getSession(key, sessionDao)
+		session match {
+			case Some(s) =>
+				this.sessions(s.getAccount) -= serverSession
+			case None => serverSession.close(500, "Invalid Key")
 		}
 	}
 
@@ -62,7 +64,7 @@ import scala.collection.{Map, mutable}
 		// Store in Database
 		try {
 			// Push to clients
-			val key = serverSession.getUpgradeRequest.getHeader("key")
+			val key = serverSession.getUpgradeRequest.getHeader(SESSION_KEY_HEADER)
 			if (key != null) {
 
 				val parser = new JsonParser()
@@ -80,12 +82,13 @@ import scala.collection.{Map, mutable}
 				serverSession.close(500, "Invalid Key")
 			}
 
-			val sessions = sessionDao.queryForEq("key", key)
-			if (sessions.size() == 1) {
-				val session = sessions.get(0)
-				this.sessions(session.getAccount)
-					.filter(s => s != serverSession)
-					.foreach(s => s.getRemote.sendStringByFuture(text))
+			val session = account.Session.getSession(key, sessionDao)
+			session match {
+				case Some(s) =>
+					this.sessions(s.getAccount)
+						.filter(s => s != serverSession)
+						.foreach(s => s.getRemote.sendStringByFuture(text))
+				case None => serverSession.close(500, "Invalid Key")
 			}
 		} catch {
 			case e: Exception => e.printStackTrace()