diff --git a/briar-api/src/org/briarproject/api/contact/ContactManager.java b/briar-api/src/org/briarproject/api/contact/ContactManager.java
index ba1d2c663025ed26a8dd04b0448616c5c6985d1c..183378060f0a74d6d3731ff8e842067eb87b01ea 100644
--- a/briar-api/src/org/briarproject/api/contact/ContactManager.java
+++ b/briar-api/src/org/briarproject/api/contact/ContactManager.java
@@ -16,12 +16,21 @@ public interface ContactManager {
 	/** Registers a hook to be called whenever a contact is removed. */
 	void registerRemoveContactHook(RemoveContactHook hook);
 
+	/**
+	 * Stores a contact within the given transaction associated with the given
+	 * local and remote pseudonyms, and returns an ID for the contact.
+	 */
+	ContactId addContact(Transaction txn, Author remote, AuthorId local,
+			SecretKey master, long timestamp, boolean alice, boolean active)
+			throws DbException;
+
 	/**
 	 * Stores a contact associated with the given local and remote pseudonyms,
 	 * and returns an ID for the contact.
 	 */
-	ContactId addContact(Author remote, AuthorId local, SecretKey master,
-			long timestamp, boolean alice, boolean active) throws DbException;
+	ContactId addContact(Author remote, AuthorId local,
+			SecretKey master, long timestamp, boolean alice, boolean active)
+			throws DbException;
 
 	/** Returns the contact with the given ID. */
 	Contact getContact(ContactId c) throws DbException;
diff --git a/briar-core/src/org/briarproject/contact/ContactManagerImpl.java b/briar-core/src/org/briarproject/contact/ContactManagerImpl.java
index 7ff709b70c9062f79d9cb29c72979a405daadae0..e04878d43f4bb6d70ba2bfcca0f63aa781f99c67 100644
--- a/briar-core/src/org/briarproject/contact/ContactManagerImpl.java
+++ b/briar-core/src/org/briarproject/contact/ContactManagerImpl.java
@@ -46,6 +46,18 @@ class ContactManagerImpl implements ContactManager, RemoveIdentityHook {
 		removeHooks.add(hook);
 	}
 
+	@Override
+	public ContactId addContact(Transaction txn, Author remote, AuthorId local,
+			SecretKey master,long timestamp, boolean alice, boolean active)
+			throws DbException {
+		ContactId c = db.addContact(txn, remote, local, active);
+		keyManager.addContact(txn, c, master, timestamp, alice);
+		Contact contact = db.getContact(txn, c);
+		for (AddContactHook hook : addHooks)
+			hook.addingContact(txn, contact);
+		return c;
+	}
+
 	@Override
 	public ContactId addContact(Author remote, AuthorId local, SecretKey master,
 			long timestamp, boolean alice, boolean active)
@@ -53,11 +65,8 @@ class ContactManagerImpl implements ContactManager, RemoveIdentityHook {
 		ContactId c;
 		Transaction txn = db.startTransaction(false);
 		try {
-			c = db.addContact(txn, remote, local, active);
-			keyManager.addContact(txn, c, master, timestamp, alice);
-			Contact contact = db.getContact(txn, c);
-			for (AddContactHook hook : addHooks)
-				hook.addingContact(txn, contact);
+			c = addContact(txn, remote, local, master, timestamp, alice,
+					active);
 			txn.setComplete();
 		} finally {
 			db.endTransaction(txn);