diff --git a/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java b/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java
index c2ad06076d8f2119315f414baf9d223b3a82a57a..c5aed9f534c0a826c8cf5131b8cf940e1a33d111 100644
--- a/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java
+++ b/briar-core/src/main/java/org/briarproject/briar/mailbox/IntroduceeProtocolEngine.java
@@ -33,6 +33,7 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static java.util.logging.Level.WARNING;
+import static org.briarproject.bramble.api.contact.ContactType.CONTACT_MAILBOX;
 import static org.briarproject.bramble.util.LogUtils.logException;
 import static org.briarproject.briar.mailbox.IntroduceeState.AWAIT_AUTH;
 import static org.briarproject.briar.mailbox.IntroduceeState.LOCAL_ACCEPTED;
@@ -207,9 +208,8 @@ class IntroduceeProtocolEngine
 			long timestamp = Math.min(s.getLocal().acceptTimestamp,
 					s.getRemote().acceptTimestamp);
 			if (timestamp == -1) throw new AssertionError();
-			contactManager
-					.addContact(txn, s.getRemote().author, localAuthor.getId(),
-							false, true);
+			db.addContact(txn, s.getRemote().author, localAuthor.getId(), false,
+					true, CONTACT_MAILBOX);
 			// Only add transport properties and keys when the contact was added
 			// This will be changed once we have a way to reset state for peers
 			// that were contacts already at some point in the past.
diff --git a/briar-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java b/briar-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java
index 4192afbe87cbaea64d606a0f3ca09f17651a44ae..b85ca3a82fecb7a01c082ed0a4a50773b13e51f3 100644
--- a/briar-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java
+++ b/briar-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java
@@ -41,6 +41,7 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static org.briarproject.bramble.api.contact.ContactManager.ContactHook;
+import static org.briarproject.bramble.api.contact.ContactType.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.contact.ContactType.values;
@@ -316,9 +317,7 @@ class MailboxIntroductionManagerImpl extends BdfIncomingMessageHook
 	public void addingContact(Transaction txn, Contact c) throws DbException {
 		switch (c.getType()) {
 			case PRIVATE_MAILBOX:
-				break;
 			case MAILBOX_OWNER:
-				break;
 			case CONTACT:
 				contactAdded(txn, c);
 				break;
@@ -344,6 +343,7 @@ class MailboxIntroductionManagerImpl extends BdfIncomingMessageHook
 		} catch (FormatException e) {
 			throw new AssertionError(e);
 		}
+		if (c.getType() != CONTACT) return;
 		Collection<Contact> pm = db.getContactsByType(txn, PRIVATE_MAILBOX);
 		if (pm.isEmpty()) return;
 		Collection<MailboxInfo> mailboxes = db.getContactMailboxes(txn);
diff --git a/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java b/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java
index f7f58897e77ee5be149fb55de4ac4e5744a1486f..6244a2b847abad3ff5408c384c2f0593fc806d03 100644
--- a/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java
+++ b/mailbox-core/src/main/java/org/briarproject/briar/mailbox/MailboxIntroductionManagerImpl.java
@@ -40,6 +40,7 @@ import javax.annotation.Nullable;
 import javax.inject.Inject;
 
 import static org.briarproject.bramble.api.contact.ContactManager.ContactHook;
+import static org.briarproject.bramble.api.contact.ContactType.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.contact.ContactType.values;
@@ -315,9 +316,7 @@ class MailboxIntroductionManagerImpl extends BdfIncomingMessageHook
 	public void addingContact(Transaction txn, Contact c) throws DbException {
 		switch (c.getType()) {
 			case PRIVATE_MAILBOX:
-				break;
 			case MAILBOX_OWNER:
-				break;
 			case CONTACT:
 				contactAdded(txn, c);
 				break;
@@ -343,23 +342,6 @@ class MailboxIntroductionManagerImpl extends BdfIncomingMessageHook
 		} catch (FormatException e) {
 			throw new AssertionError(e);
 		}
-		Collection<Contact> pm = db.getContactsByType(txn, PRIVATE_MAILBOX);
-		if (pm.isEmpty()) return;
-		Collection<MailboxInfo> mailboxes = db.getContactMailboxes(txn);
-		for (MailboxInfo mailboxInfo : mailboxes) {
-			if (mailboxInfo.getContactId().equals(c.getId())) return;
-		}
-		ioExecutor.execute(
-				() -> {
-					try {
-						makeIntroduction((PrivateMailbox) pm.iterator().next(),
-								c,
-								clock.currentTimeMillis());
-					} catch (DbException e) {
-						LOG.warning(
-								"Mailbox introduction failed: " + e.toString());
-					}
-				});
 	}
 
 	@Override