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 bf31990da063274d39503fd3de62bb403a8c8d31..ced27eae5239a093459b2cb1c7503e12ad54134c 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
@@ -1,28 +1,27 @@
 package org.briarproject.bramble.mailbox;
 
 import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.sync.SyncSession;
 import org.briarproject.bramble.api.sync.SyncSessionFactory;
 import org.briarproject.bramble.api.transport.KeyManager;
 import org.briarproject.bramble.api.transport.StreamReaderFactory;
 import org.briarproject.bramble.api.transport.StreamWriterFactory;
 import org.briarproject.bramble.mailbox.protocol.MailboxProtocol;
-import org.briarproject.bramble.mailbox.protocol.MailboxRequestStore;
-import org.briarproject.bramble.mailbox.protocol.MailboxRequestSync;
 import org.briarproject.bramble.mailbox.protocol.MailboxRequestTake;
 
 import java.io.IOException;
 import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.bramble.util.LogUtils.logException;
+import static java.util.logging.Level.INFO;
 
-class MailboxOwnerSession extends MailboxSession {
+class MailboxOwnerSession extends AbstractMailboxSession {
 
 	private static final Logger LOG =
 			Logger.getLogger(MailboxOwnerSession.class.getName());
 	private final Executor ioExecutor;
 	private final MailboxProtocol mailboxProtocol;
+	private SyncSession syncSession;
 
 	public MailboxOwnerSession(ContactId contactId, Executor ioExecutor,
 			KeyManager keyManager,
@@ -43,23 +42,19 @@ class MailboxOwnerSession extends MailboxSession {
 	@Override
 	public void run() {
 		ioExecutor.execute(() -> readRequests());
-		runDuplexOutgoingSession();
-	}
-
-	@Override
-	public void handleSync(MailboxRequestSync req) {
+		syncSession = createDuplexOutgoingSession();
 		try {
-			handleSyncStream(req.getSyncStream());
+			syncSession.run();
 		} catch (IOException e) {
-			logException(LOG, WARNING, e);
+			if (LOG.isLoggable(INFO))
+				LOG.info(e.toString());
 		}
 	}
 
 	@Override
-	public void handleStore(MailboxRequestStore mailboxRequestStore) {
-	}
-
-	@Override
-	public void handleTake(MailboxRequestTake mailboxRequestTake) {
+	public void handleTake(MailboxRequestTake mailboxRequestTake)
+			throws MailboxSessionHandleException {
+		throw new MailboxSessionHandleException(
+				"MailboxOwnerSession does not support the TAKE request");
 	}
 }