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 f6e247fdd8f1fd2275876237c2738f79308b51e1..543e525d9e59675dd746617db1994373217b8f42 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
@@ -6,6 +6,7 @@ import com.google.gson.{JsonObject, JsonParser}
 import com.j256.ormlite.dao.Dao
 import de.tobias.playpad.server.account
 import de.tobias.playpad.server.account.Account
+import de.tobias.playpad.server.server.project.sync.listener.page.{PageAddListener, PageRemoveListener, PageUpdateListener}
 import de.tobias.playpad.server.server.project.sync.listener.project.{ProjectAddListener, ProjectRemoveListener, ProjectUpdateListener}
 import org.eclipse.jetty.websocket.api.Session
 import org.eclipse.jetty.websocket.api.annotations.{OnWebSocketClose, OnWebSocketConnect, OnWebSocketMessage, WebSocket}
@@ -25,7 +26,11 @@ import scala.collection.{Map, mutable}
 	private val listeners = Map(
 		"pro-add" -> new ProjectAddListener(),
 		"pro-update" -> new ProjectUpdateListener(),
-		"pro-rm" -> new ProjectRemoveListener()
+		"pro-rm" -> new ProjectRemoveListener(),
+
+		"page-add" -> new PageAddListener(),
+		"page-update" -> new PageUpdateListener(),
+		"page-rm" -> new PageRemoveListener()
 	)
 
 	@OnWebSocketConnect def onConnect(serverSession: Session): Unit = {
diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageAddListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageAddListener.scala
new file mode 100644
index 0000000000000000000000000000000000000000..1ae87a9c26955754f0bce720b7377e6f41650a94
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageAddListener.scala
@@ -0,0 +1,26 @@
+package de.tobias.playpad.server.server.project.sync.listener.page
+
+import java.sql.Connection
+import java.util.UUID
+
+import com.google.gson.JsonObject
+import de.tobias.playpad.server.account.Session
+import de.tobias.playpad.server.project.utils.SqlDef
+import de.tobias.playpad.server.server.SqlHelper
+import de.tobias.playpad.server.server.project.sync.listener.Listener
+
+/**
+  * Created by tobias on 19.02.17.
+  */
+class PageAddListener extends Listener {
+	override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = {
+		val pageId = UUID.fromString(json.get("id").getAsString)
+		val projectId = UUID.fromString(json.get("project").getAsString)
+		val pageName = json.get("name").getAsString
+		val pagePosition = json.get("position").getAsInt
+
+		SqlHelper.insertOrUpdate(connection, SqlDef.PAGE, pageId, SqlDef.PAGE_PROJECT_REF, projectId)
+		SqlHelper.insertOrUpdate(connection, SqlDef.PAGE, pageId, SqlDef.PAGE_NAME, pageName)
+		SqlHelper.insertOrUpdate(connection, SqlDef.PAGE, pageId, SqlDef.PAGE_POSITION, pagePosition)
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageRemoveListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageRemoveListener.scala
new file mode 100644
index 0000000000000000000000000000000000000000..5b6c791ed5ec86ceff79334901b29a2b1eaa3633
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageRemoveListener.scala
@@ -0,0 +1,21 @@
+package de.tobias.playpad.server.server.project.sync.listener.page
+
+import java.sql.Connection
+import java.util.UUID
+
+import com.google.gson.JsonObject
+import de.tobias.playpad.server.account.Session
+import de.tobias.playpad.server.project.utils.SqlDef
+import de.tobias.playpad.server.server.SqlHelper
+import de.tobias.playpad.server.server.project.sync.listener.Listener
+
+/**
+  * Created by tobias on 19.02.17.
+  */
+class PageRemoveListener extends Listener {
+	override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = {
+		val projectId = UUID.fromString(json.get("id").getAsString)
+
+		SqlHelper.delete(connection, SqlDef.PAGE, projectId)
+	}
+}
diff --git a/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageUpdateListener.scala b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageUpdateListener.scala
new file mode 100644
index 0000000000000000000000000000000000000000..7b92ac4255b0316f581355bf2ed2a09d29e9e6bb
--- /dev/null
+++ b/src/main/scala/de/tobias/playpad/server/server/project/sync/listener/page/PageUpdateListener.scala
@@ -0,0 +1,28 @@
+package de.tobias.playpad.server.server.project.sync.listener.page
+
+import java.sql.Connection
+import java.util.UUID
+
+import com.google.gson.JsonObject
+import de.tobias.playpad.server.account.Session
+import de.tobias.playpad.server.project.utils.SqlDef
+import de.tobias.playpad.server.server.SqlHelper
+import de.tobias.playpad.server.server.project.sync.listener.Listener
+
+/**
+  * Created by tobias on 19.02.17.
+  */
+class PageUpdateListener extends Listener {
+	override def onChange(json: JsonObject, connection: Connection, session: Session): Unit = {
+		val pageId = UUID.fromString(json.get("id").getAsString)
+		val projectId = UUID.fromString(json.get("project").getAsString)
+		val field = json.get("field").getAsString
+
+		SqlHelper.insertOrUpdate(connection, SqlDef.PAGE, pageId, SqlDef.PAGE_PROJECT_REF, projectId)
+
+		field match {
+			case "name" => SqlHelper.insertOrUpdate(connection, SqlDef.PAGE, pageId, SqlDef.PAGE_NAME, json.get("value").getAsString)
+			case "position" => SqlHelper.insertOrUpdate(connection, SqlDef.PAGE, pageId, SqlDef.PAGE_POSITION, json.get("value").getAsInt)
+		}
+	}
+}