diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java
index 14480c3f6eb44bff3c9e08053ccbc33a4d1acd12..2a1bf7807b76460f53f88a8e95e503a9f94761a9 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/mailbox/MailboxManager.java
@@ -7,8 +7,6 @@ import org.briarproject.bramble.api.plugin.TransportId;
 import org.briarproject.bramble.api.plugin.duplex.DuplexTransportConnection;
 import org.briarproject.bramble.api.transport.StreamContext;
 
-import javax.annotation.Nullable;
-
 public interface MailboxManager {
 	/**
 	 * Connection to a contact's mailbox
@@ -23,24 +21,16 @@ public interface MailboxManager {
 	void handleOutgoingPrivateMailboxConnection(ContactId contactId,
 			DuplexTransportConnection connection, TransportId transportId);
 
-	/**
-	 * Connection from Owner to mailbox
-	 */
-	void handleIncomingMailboxOwnerConnection(StreamContext ctx,
-			TransportId transportId, TransportConnectionReader reader,
-			TransportConnectionWriter writer);
-
-	/**
-	 * Connection from contact (of owner) to mailbox
-	 */
-	void handleInomingOwnerContactConnection(StreamContext ctx,
-			TransportId transportId, TransportConnectionReader reader,
-			TransportConnectionWriter writer);
-
 	/**
 	 * Contacts without private mailbox which have been introduced
 	 * to private mailbox
 	 */
 	void handleContactWithoutMailbox(MailboxInfo mailboxInfo);
+
+	/**
+	 * Handle incoming connections from owner or contacts
+	 */
+	void handleIncomingConnection(StreamContext ctx, TransportId transportId,
+			TransportConnectionReader reader, TransportConnectionWriter writer);
 }
 
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreEagerSingletons.java b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreEagerSingletons.java
index f5723ddf732b6c66b945158e742e819dd652c902..f73c9ce57603fc2702e8cf7893d91f7348ddd4a9 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreEagerSingletons.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreEagerSingletons.java
@@ -6,6 +6,7 @@ import org.briarproject.bramble.db.DatabaseExecutorModule;
 import org.briarproject.bramble.identity.IdentityModule;
 import org.briarproject.bramble.lifecycle.LifecycleModule;
 import org.briarproject.bramble.mailbox.MailboxModule;
+import org.briarproject.bramble.mailbox.introduction.MailboxIntroductionModule;
 import org.briarproject.bramble.plugin.PluginModule;
 import org.briarproject.bramble.properties.PropertiesModule;
 import org.briarproject.bramble.reporting.ReportingModule;
@@ -40,4 +41,6 @@ public interface BrambleCoreEagerSingletons {
 
 	void inject(VersioningModule.EagerSingletons init);
 
+	void inject(MailboxIntroductionModule.EagerSingletons init);
+
 }
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
index 3419aea43272a8ccdfb75e99be83788f97336dc9..62ceff1a6dae922273b2e82451f267d66e4e608d 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/BrambleCoreModule.java
@@ -12,6 +12,7 @@ import org.briarproject.bramble.identity.IdentityModule;
 import org.briarproject.bramble.keyagreement.KeyAgreementModule;
 import org.briarproject.bramble.lifecycle.LifecycleModule;
 import org.briarproject.bramble.mailbox.MailboxModule;
+import org.briarproject.bramble.mailbox.introduction.MailboxIntroductionModule;
 import org.briarproject.bramble.plugin.PluginModule;
 import org.briarproject.bramble.properties.PropertiesModule;
 import org.briarproject.bramble.record.RecordModule;
@@ -39,6 +40,7 @@ import dagger.Module;
 		KeyAgreementModule.class,
 		LifecycleModule.class,
 		MailboxModule.class,
+		MailboxIntroductionModule.class,
 		PluginModule.class,
 		PropertiesModule.class,
 		RecordModule.class,
@@ -59,6 +61,7 @@ public class BrambleCoreModule {
 		c.inject(new DatabaseExecutorModule.EagerSingletons());
 		c.inject(new IdentityModule.EagerSingletons());
 		c.inject(new LifecycleModule.EagerSingletons());
+		c.inject(new MailboxIntroductionModule.EagerSingletons());
 		c.inject(new PluginModule.EagerSingletons());
 		c.inject(new PropertiesModule.EagerSingletons());
 		c.inject(new ReportingModule.EagerSingletons());
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java
index f5b3da2f693d19ec2f8d1ec470c92812d9193fa1..99081c919ab82dc8e1194b1810e5d354685fcb97 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/MailboxManagerImpl.java
@@ -6,7 +6,9 @@ import org.briarproject.bramble.api.data.BdfReader;
 import org.briarproject.bramble.api.data.BdfReaderFactory;
 import org.briarproject.bramble.api.data.BdfWriter;
 import org.briarproject.bramble.api.data.BdfWriterFactory;
+import org.briarproject.bramble.api.db.DatabaseComponent;
 import org.briarproject.bramble.api.db.DbException;
+import org.briarproject.bramble.api.db.Transaction;
 import org.briarproject.bramble.api.lifecycle.IoExecutor;
 import org.briarproject.bramble.api.mailbox.MailboxInfo;
 import org.briarproject.bramble.api.mailbox.MailboxManager;
@@ -36,7 +38,10 @@ import java.util.logging.Logger;
 import javax.inject.Inject;
 
 import static java.util.logging.Level.WARNING;
-import static org.briarproject.bramble.api.contact.ContactType.*;
+import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX;
+import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_CONTACT;
+import static org.briarproject.bramble.api.contact.ContactType.MAILBOX_OWNER;
+import static org.briarproject.bramble.api.contact.ContactType.PRIVATE_MAILBOX;
 import static org.briarproject.bramble.api.transport.TransportConstants.TAG_LENGTH;
 import static org.briarproject.bramble.util.LogUtils.logException;
 
@@ -44,6 +49,7 @@ public class MailboxManagerImpl implements MailboxManager {
 	private static final Logger LOG =
 			Logger.getLogger(MailboxManagerImpl.class.getName());
 	private Executor ioExecutor;
+	private final DatabaseComponent db;
 	private MailboxSessionFactory mailboxSessionFactory;
 	private ConnectionRegistry connectionRegistry;
 	private StreamWriterFactory streamWriterFactory;
@@ -57,6 +63,7 @@ public class MailboxManagerImpl implements MailboxManager {
 
 	@Inject
 	public MailboxManagerImpl(@IoExecutor Executor ioExecutor,
+			DatabaseComponent db,
 			KeyManager keyManager, MailboxSessionFactory mailboxSessionFactory,
 			ConnectionRegistry connectionRegistry,
 			StreamWriterFactory streamWriterFactory,
@@ -64,6 +71,7 @@ public class MailboxManagerImpl implements MailboxManager {
 			BdfReaderFactory bdfReaderFactory,
 			BdfWriterFactory bdfWriterFactory) {
 		this.ioExecutor = ioExecutor;
+		this.db = db;
 		this.keyManager = keyManager;
 		this.mailboxSessionFactory = mailboxSessionFactory;
 		this.connectionRegistry = connectionRegistry;
@@ -90,8 +98,7 @@ public class MailboxManagerImpl implements MailboxManager {
 						PRIVATE_MAILBOX, contactId));
 	}
 
-	@Override
-	public void handleIncomingMailboxOwnerConnection(StreamContext ctx,
+	private void handleIncomingMailboxOwnerConnection(StreamContext ctx,
 			TransportId transportId, TransportConnectionReader reader,
 			TransportConnectionWriter writer) {
 
@@ -100,8 +107,7 @@ public class MailboxManagerImpl implements MailboxManager {
 						MAILBOX_OWNER));
 	}
 
-	@Override
-	public void handleInomingOwnerContactConnection(StreamContext ctx,
+	private void handleIncomingOwnerContactConnection(StreamContext ctx,
 			TransportId transportId, TransportConnectionReader reader,
 			TransportConnectionWriter writer) {
 		ioExecutor.execute(
@@ -121,6 +127,40 @@ public class MailboxManagerImpl implements MailboxManager {
 						.handleContactWithoutPrivateMailbox(mailboxInfo));
 	}
 
+	@Override
+	public void handleIncomingConnection(StreamContext ctx,
+			TransportId transportId, TransportConnectionReader reader,
+			TransportConnectionWriter writer) {
+		Transaction txn = null;
+		try {
+			txn = db.startTransaction(true);
+			ContactType type = db.getContactType(txn, ctx.getContactId());
+			switch (type) {
+				case MAILBOX_OWNER:
+					handleIncomingMailboxOwnerConnection(ctx,
+							transportId, reader, writer);
+					return;
+				case MAILBOX_CONTACT:
+					handleIncomingOwnerContactConnection(ctx,
+							transportId, reader, writer);
+					return;
+			}
+			db.commitTransaction(txn);
+		} catch (DbException e) {
+			logException(LOG, WARNING, e);
+			try {
+				reader.dispose(true, true);
+			} catch (IOException ioException) {
+				logException(LOG, WARNING, ioException);
+			}
+			return;
+		} finally {
+			if (txn != null)
+				db.endTransaction(txn);
+		}
+
+	}
+
 	private class ManageMailboxConnection implements Runnable {
 		private boolean incoming;
 
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/MailboxMessageEncoderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/MailboxMessageEncoderImpl.java
index 66e8b51800c8466354a3ebbbe8407fb518e2da68..a7ea53da4726b8ff6df96be606545b05e63b36e0 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/MailboxMessageEncoderImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/MailboxMessageEncoderImpl.java
@@ -118,7 +118,7 @@ class MailboxMessageEncoderImpl implements MailboxMessageEncoder {
 			Map<TransportId, TransportProperties> transportProperties,
 			byte[] mac, byte[] signature, long messageCounter) {
 		BdfList body = BdfList.of(MAILBOX_AUTH.getValue(), sessionId,
-				previousMessageId, contactId,
+				previousMessageId, contactId.getInt(),
 				clientHelper.toDictionary(transportProperties), mac, signature,
 				messageCounter);
 		return createMessage(contactGroupId, timestamp, body);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/OwnerProtocolEngine.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/OwnerProtocolEngine.java
index 3888b7510e55f77c6b3f6c2fc6bcb87ad939f806..92ea004e571db790effc143aed3bc616f5ebc53f 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/OwnerProtocolEngine.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/introduction/OwnerProtocolEngine.java
@@ -130,6 +130,7 @@ class OwnerProtocolEngine extends AbstractProtocolEngine<OwnerSession> {
 						identityManager.getLocalAuthor().getId());
 		db.setMailboxForContact(txn, c.getId(), null, m.getContactId());
 		txn.attach(new MailboxIntroductionSucceededEvent(c));
+		LOG.info("MI succ");
 		return new OwnerSession(s.getSessionId(), ADDED,
 				s.getRequestTimestamp(),
 				new Introducee(s.getMailbox(), m.getMessageId(),
@@ -184,6 +185,7 @@ class OwnerProtocolEngine extends AbstractProtocolEngine<OwnerSession> {
 
 	private OwnerSession onLocalRequest(Transaction txn, OwnerSession s,
 			long timestamp) throws DbException {
+		LOG.info("LOCAL REQUEST");
 		// Send REQUEST messages
 		long maxIntroduceeTimestamp =
 				Math.max(getLocalTimestamp(s, s.getMailbox()),
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java
index 91847693c728c55af9c58b6387f2f67855848cc2..bfd3d59124452490c7e9afe8b25c75b0c8754154 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/ConnectionManagerImpl.java
@@ -1,10 +1,9 @@
 package org.briarproject.bramble.plugin;
 
+import org.briarproject.bramble.api.BrambleConfig;
 import org.briarproject.bramble.api.contact.ContactId;
-import org.briarproject.bramble.api.contact.ContactType;
 import org.briarproject.bramble.api.db.DatabaseComponent;
 import org.briarproject.bramble.api.db.DbException;
-import org.briarproject.bramble.api.db.Transaction;
 import org.briarproject.bramble.api.lifecycle.IoExecutor;
 import org.briarproject.bramble.api.mailbox.MailboxManager;
 import org.briarproject.bramble.api.plugin.ConnectionManager;
@@ -42,6 +41,7 @@ class ConnectionManagerImpl implements ConnectionManager {
 	private final KeyManager keyManager;
 	private final MailboxManager mailboxManager;
 	private final DatabaseComponent db;
+	private final BrambleConfig brambleConfig;
 	private final StreamReaderFactory streamReaderFactory;
 	private final StreamWriterFactory streamWriterFactory;
 	private final SyncSessionFactory syncSessionFactory;
@@ -52,6 +52,7 @@ class ConnectionManagerImpl implements ConnectionManager {
 			KeyManager keyManager,
 			MailboxManager mailboxManager,
 			DatabaseComponent db,
+			BrambleConfig brambleConfig,
 			StreamReaderFactory streamReaderFactory,
 			StreamWriterFactory streamWriterFactory,
 			SyncSessionFactory syncSessionFactory,
@@ -60,6 +61,7 @@ class ConnectionManagerImpl implements ConnectionManager {
 		this.keyManager = keyManager;
 		this.mailboxManager = mailboxManager;
 		this.db = db;
+		this.brambleConfig = brambleConfig;
 		this.streamReaderFactory = streamReaderFactory;
 		this.streamWriterFactory = streamWriterFactory;
 		this.syncSessionFactory = syncSessionFactory;
@@ -267,31 +269,13 @@ class ConnectionManagerImpl implements ConnectionManager {
 				disposeReader(false, false);
 				return;
 			}
-			contactId = ctx.getContactId();
-			Transaction txn = null;
-			try {
-				txn = db.startTransaction(true);
-				ContactType type = db.getContactType(txn, contactId);
-				switch (type) {
-					case MAILBOX_OWNER:
-						mailboxManager.handleIncomingMailboxOwnerConnection(ctx,
-								transportId, reader, writer);
-						return;
-					case MAILBOX_CONTACT:
-						mailboxManager.handleInomingOwnerContactConnection(ctx,
-								transportId, reader, writer);
-						return;
-				}
-				db.commitTransaction(txn);
-			} catch (DbException e) {
-				logException(LOG, WARNING, e);
-				disposeReader(true, true);
+			if (brambleConfig.isMailbox()) {
+				mailboxManager
+						.handleIncomingConnection(ctx, transportId, reader,
+								writer);
 				return;
-			}finally {
-				if (txn != null)
-					db.endTransaction(txn);
 			}
-
+			contactId = ctx.getContactId();
 			connectionRegistry.registerConnection(contactId, transportId, true);
 			// Start the outgoing session on another thread
 			ioExecutor.execute(this::runOutgoingSession);
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
index 8b140969c714b4d85c2b1333f3cfa1440493f14c..38422eb9af88a467d5ff6f3749d1f2da873b40ce 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/Poller.java
@@ -111,10 +111,12 @@ class Poller implements EventListener {
 	}
 
 	private void connectToContact(ContactId c) {
+		/*
 		for (SimplexPlugin s : pluginManager.getSimplexPlugins())
 			if (s.shouldPoll()) connectToContact(c, s);
 		for (DuplexPlugin d : pluginManager.getDuplexPlugins())
 			if (d.shouldPoll()) connectToContact(c, d);
+			*/
 	}
 
 	private void connectToContact(ContactId c, TransportId t) {
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/mailbox/MailboxPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/mailbox/MailboxPlugin.java
new file mode 100644
index 0000000000000000000000000000000000000000..81d2bfa76f5a6f39de0e0256343b06ac6f7630d7
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/mailbox/MailboxPlugin.java
@@ -0,0 +1,99 @@
+package org.briarproject.bramble.plugin.mailbox;
+
+import org.briarproject.bramble.api.contact.ContactId;
+import org.briarproject.bramble.api.mailbox.MailboxConstants;
+import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
+import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportConnectionReader;
+import org.briarproject.bramble.api.plugin.TransportConnectionWriter;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
+import org.briarproject.bramble.api.properties.TransportProperties;
+
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Logger;
+
+import javax.annotation.Nullable;
+
+@MethodsNotNullByDefault
+@ParametersNotNullByDefault
+class MailboxPlugin implements SimplexPlugin {
+
+	private static final Logger LOG =
+			Logger.getLogger(MailboxPlugin.class.getName());
+
+	private final SimplexPluginCallback callback;
+	protected final int maxLatency;
+	protected final int maxIdleTime;
+	protected final AtomicBoolean used = new AtomicBoolean(false);
+
+	protected volatile boolean running = false;
+
+	MailboxPlugin(SimplexPluginCallback callback, int maxLatency,
+			int maxIdleTime) {
+		this.callback = callback;
+		this.maxLatency = maxLatency;
+		this.maxIdleTime = maxIdleTime;
+		callback.transportEnabled();
+	}
+
+	@Override
+	public TransportId getId() {
+		return MailboxConstants.ID;
+	}
+
+	@Override
+	public int getMaxLatency() {
+		return maxLatency;
+	}
+
+	@Override
+	public int getMaxIdleTime() {
+		return maxIdleTime;
+	}
+
+	@Override
+	public void start() {
+		if (used.getAndSet(true)) throw new IllegalStateException();
+		running = true;
+	}
+
+	@Override
+	public void stop() {
+		running = false;
+	}
+
+	@Override
+	public boolean isRunning() {
+		return running;
+	}
+
+	@Override
+	public boolean shouldPoll() {
+		return false;
+	}
+
+	@Override
+	public int getPollingInterval() {
+		throw new UnsupportedOperationException();
+	}
+
+	@Override
+	public void poll(Map<ContactId, TransportProperties> contacts) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Nullable
+	@Override
+	public TransportConnectionReader createReader(TransportProperties p) {
+		throw new UnsupportedOperationException();
+	}
+
+	@Nullable
+	@Override
+	public TransportConnectionWriter createWriter(TransportProperties p) {
+		throw new UnsupportedOperationException();
+	}
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/mailbox/MailboxPluginFactory.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/mailbox/MailboxPluginFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..7e825e1c4aeae16ccf5d45ea5d9c97a7c3c3f54c
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/mailbox/MailboxPluginFactory.java
@@ -0,0 +1,42 @@
+package org.briarproject.bramble.plugin.mailbox;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.plugin.TransportId;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPlugin;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginCallback;
+import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory;
+
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.Immutable;
+
+import static org.briarproject.bramble.api.mailbox.MailboxConstants.ID;
+
+
+@Immutable
+@NotNullByDefault
+public class MailboxPluginFactory implements SimplexPluginFactory {
+
+	private static final int MAX_LATENCY = 604800 * 1000; // 1 week
+	private static final int MAX_IDLE_TIME = 30 * 1000; // 30 seconds
+	private static final int MIN_POLLING_INTERVAL = 60 * 1000; // 1 minute
+	private static final int MAX_POLLING_INTERVAL = 10 * 60 * 1000; // 10 mins
+
+	public MailboxPluginFactory() {
+	}
+
+	@Override
+	public TransportId getId() {
+		return ID;
+	}
+
+	@Override
+	public int getMaxLatency() {
+		return MAX_LATENCY;
+	}
+
+	@Nullable
+	@Override
+	public SimplexPlugin createPlugin(SimplexPluginCallback callback) {
+		return new MailboxPlugin(callback, MAX_LATENCY, MAX_IDLE_TIME);
+	}
+}
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/introduction/MailboxIntroductionIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/introduction/MailboxIntroductionIntegrationTest.java
index 39b59655b615823d2b9214f161372ce0a828b0a9..ec1323bef2238c6d64f84d19a8b22711300d17f1 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/introduction/MailboxIntroductionIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/introduction/MailboxIntroductionIntegrationTest.java
@@ -110,10 +110,18 @@ public class MailboxIntroductionIntegrationTest extends
 	@Test
 	public void testIntroductionSession() throws Exception {
 		addListeners(true, true, true);
-
+		sync0To1(1, true);
+		sync1To0(1, true);
 		sync0ToMailbox(1, true);
 		syncMailboxTo0(1, true);
-		sync1To0(1, true);
+		sync0To1(1, true);
+/*
+		sync0ToMailbox(1, true);
+		sync0ToMailbox(1, true);
+		syncMailboxTo0(1, true);
+		sync0To1(1, true);
+		sync1To0(1,true);
+		*/
 /*
 		// sync first REQUEST message
 		sync0ToMailbox(1, true);
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
index 24d6932aadcf606d402ec84f1787e905bbfff194..4af33e87319a58d06240695f13c79e522a61982f 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AppModule.java
@@ -5,6 +5,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.os.StrictMode;
 
+import org.briarproject.bramble.api.BrambleConfig;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PublicKey;
 import org.briarproject.bramble.api.db.DatabaseConfig;
@@ -25,6 +26,7 @@ import org.briarproject.bramble.api.system.LocationUtils;
 import org.briarproject.bramble.api.system.ResourceProvider;
 import org.briarproject.bramble.api.system.Scheduler;
 import org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPluginFactory;
+import org.briarproject.bramble.plugin.mailbox.MailboxPluginFactory;
 import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory;
 import org.briarproject.bramble.plugin.tor.AndroidTorPluginFactory;
 import org.briarproject.bramble.plugin.tor.CircumventionProvider;
@@ -39,6 +41,7 @@ import org.briarproject.briar.api.android.ScreenFilterMonitor;
 import java.io.File;
 import java.security.GeneralSecurityException;
 import java.security.SecureRandom;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ScheduledExecutorService;
@@ -52,7 +55,6 @@ import dagger.Provides;
 
 import static android.content.Context.MODE_PRIVATE;
 import static java.util.Arrays.asList;
-import static java.util.Collections.emptyList;
 import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS;
 import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX;
 
@@ -82,6 +84,12 @@ public class AppModule {
 		return application;
 	}
 
+	@Provides
+	@Singleton
+	BrambleConfig provideBrambleConfig() {
+		return () -> false;
+	}
+
 	@Provides
 	@Singleton
 	DatabaseConfig provideDatabaseConfig(Application app) {
@@ -124,7 +132,7 @@ public class AppModule {
 
 			@Override
 			public Collection<SimplexPluginFactory> getSimplexFactories() {
-				return emptyList();
+				return Arrays.asList(new MailboxPluginFactory());
 			}
 
 			@Override
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.java b/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.java
index b2a61364afc4de0a0f3096a75016bb5440c37f7c..b7930207a9d29aa458a7b1711f9048cf0d3bbe3a 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.java
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.java
@@ -5,6 +5,7 @@ import android.content.Context;
 import android.content.SharedPreferences;
 import android.os.StrictMode;
 
+import org.briarproject.bramble.api.BrambleConfig;
 import org.briarproject.bramble.api.crypto.CryptoComponent;
 import org.briarproject.bramble.api.crypto.PublicKey;
 import org.briarproject.bramble.api.db.DatabaseConfig;
@@ -24,6 +25,7 @@ import org.briarproject.bramble.api.system.LocationUtils;
 import org.briarproject.bramble.api.system.ResourceProvider;
 import org.briarproject.bramble.api.system.Scheduler;
 import org.briarproject.bramble.plugin.bluetooth.AndroidBluetoothPluginFactory;
+import org.briarproject.bramble.plugin.mailbox.MailboxPluginFactory;
 import org.briarproject.bramble.plugin.tcp.AndroidLanTcpPluginFactory;
 import org.briarproject.bramble.plugin.tor.AndroidTorPluginFactory;
 import org.briarproject.bramble.plugin.tor.CircumventionProvider;
@@ -38,6 +40,7 @@ import org.briarproject.mailbox.api.android.ScreenFilterMonitor;
 import java.io.File;
 import java.security.GeneralSecurityException;
 import java.security.SecureRandom;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ScheduledExecutorService;
@@ -51,7 +54,6 @@ import dagger.Provides;
 
 import static android.content.Context.MODE_PRIVATE;
 import static java.util.Arrays.asList;
-import static java.util.Collections.emptyList;
 import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_ONION_ADDRESS;
 import static org.briarproject.bramble.api.reporting.ReportingConstants.DEV_PUBLIC_KEY_HEX;
 
@@ -79,6 +81,12 @@ public class AppModule {
 		return application;
 	}
 
+	@Provides
+	@Singleton
+	BrambleConfig provideBrambleConfig() {
+		return () -> true;
+	}
+
 	@Provides
 	@Singleton
 	DatabaseConfig provideDatabaseConfig(Application app) {
@@ -121,7 +129,7 @@ public class AppModule {
 
 			@Override
 			public Collection<SimplexPluginFactory> getSimplexFactories() {
-				return emptyList();
+				return Arrays.asList(new MailboxPluginFactory());
 			}
 
 			@Override