diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java
index 8aeb2a7c1e8fc0f02bc414d8dccb1fc1b8f3b08a..8101f4c0c9e257719415d5516ce158c169123215 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxOwnerSession.java
@@ -7,16 +7,25 @@ import org.briarproject.bramble.api.transport.StreamReaderFactory;
 import org.briarproject.bramble.api.transport.StreamWriterFactory;
 import org.briarproject.bramble.mailbox.protocol.MailboxMessage;
 import org.briarproject.bramble.mailbox.protocol.MailboxProtocol;
+import org.briarproject.bramble.mailbox.protocol.MailboxRequest;
+import org.briarproject.bramble.mailbox.protocol.MailboxRequestHandler;
+import org.briarproject.bramble.mailbox.protocol.MailboxRequestStore;
 
+import java.net.ProtocolException;
 import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
 import static java.util.logging.Level.INFO;
+import static org.briarproject.bramble.mailbox.protocol.MailboxMessage.TYPE.STORE;
 
-class MailboxOwnerSession extends AbstractMailboxSession {
+/**
+ * This session represents a connection from the mailbox owner to their own mailbox
+ */
+public class MailboxOwnerSession extends AbstractMailboxSession {
 
 	private static final Logger LOG =
 			Logger.getLogger(MailboxOwnerSession.class.getName());
+	private final MailboxStorage mailboxStorage;
 
 	public MailboxOwnerSession(ContactId contactId, Executor ioExecutor,
 			KeyManager keyManager,
@@ -24,25 +33,53 @@ class MailboxOwnerSession extends AbstractMailboxSession {
 			StreamWriterFactory streamWriterFactory,
 			StreamReaderFactory streamReaderFactory,
 			MailboxProtocol mailboxProtocol, int transportMaxLatency,
-			int transportMaxIdleTime) {
+			int transportMaxIdleTime, MailboxStorage mailboxStorage) {
 
 		super(ioExecutor, keyManager, syncSessionFactory, streamWriterFactory,
 				streamReaderFactory, mailboxProtocol, transportMaxLatency,
 				transportMaxIdleTime, contactId);
+		this.mailboxStorage = mailboxStorage;
+
+
+		enableSYNCHandling();
+		mailboxProtocol.registerRequestHandler(new STOREHandler());
+		mailboxProtocol.enableRequestHandling();
 
-		registerSupportedRequest(MailboxMessage.TYPE.SYNC);
-		registerSupportedRequest(MailboxMessage.TYPE.TAKE);
 	}
 
 	@Override
 	public void run() {
 		try {
-			waitForHandlersToFinish();
+			awaitSYNCHandlerFinished();
 		} catch (InterruptedException e) {
 			if (LOG.isLoggable(INFO))
 				LOG.info(e.toString());
 		}
 	}
 
+	private class STOREHandler implements MailboxRequestHandler {
+		@Override
+		public void handleRequest(MailboxRequest request)
+				throws ProtocolException {
+			MailboxRequestStore storeReq = (MailboxRequestStore) request;
+
+			if (!storeReq.hasContactId())
+				throw new ProtocolException(
+						"Contact Id must be set for owner to mailbox STORE requests");
+
+			mailboxStorage
+					.storeStream(storeReq.getContactId(),
+							storeReq.getEncryptedSyncStream());
+		}
 
+		@Override
+		public MailboxMessage.TYPE getType() {
+			return STORE;
+		}
+
+		@Override
+		public void protocolFinished() {
+			mailboxStorage.close();
+		}
+	}
 }