diff --git a/briar-android/res/values/roboguice.xml b/briar-android/res/values/roboguice.xml
index 92220cc84333ce1abcdf3a28cdc01ec1cfcaeded..7f33cf6d5cbccb03cc89a9b36e70c2c06d6a34c5 100644
--- a/briar-android/res/values/roboguice.xml
+++ b/briar-android/res/values/roboguice.xml
@@ -2,14 +2,18 @@
 <resources>
 	<string-array name="roboguice_modules">
 		<item>org.briarproject.android.AndroidModule</item>
+		<item>org.briarproject.contact.ContactModule</item>
 		<item>org.briarproject.crypto.CryptoModule</item>
 		<item>org.briarproject.data.DataModule</item>
 		<item>org.briarproject.db.DatabaseModule</item>
 		<item>org.briarproject.event.EventModule</item>
+		<item>org.briarproject.forum.ForumModule</item>
+		<item>org.briarproject.identity.IdentityModule</item>
 		<item>org.briarproject.invitation.InvitationModule</item>
 		<item>org.briarproject.lifecycle.LifecycleModule</item>
-		<item>org.briarproject.sync.MessagingModule</item>
+		<item>org.briarproject.messaging.MessagingModule</item>
 		<item>org.briarproject.plugins.AndroidPluginsModule</item>
+		<item>org.briarproject.sync.SyncModule</item>
 		<item>org.briarproject.system.AndroidSystemModule</item>
 		<item>org.briarproject.transport.TransportModule</item>
 	</string-array>
diff --git a/briar-core/src/org/briarproject/contact/ContactManagerImpl.java b/briar-core/src/org/briarproject/contact/ContactManagerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..3a1648f16cc3d875e198cb81178b50e9911e8960
--- /dev/null
+++ b/briar-core/src/org/briarproject/contact/ContactManagerImpl.java
@@ -0,0 +1,44 @@
+package org.briarproject.contact;
+
+import com.google.inject.Inject;
+
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.contact.ContactManager;
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+
+import java.util.Collection;
+
+class ContactManagerImpl implements ContactManager {
+
+	private final DatabaseComponent db;
+
+	@Inject
+	ContactManagerImpl(DatabaseComponent db) {
+		this.db = db;
+	}
+
+	@Override
+	public ContactId addContact(Author remote, AuthorId local)
+			throws DbException {
+		return db.addContact(remote, local);
+	}
+
+	@Override
+	public Contact getContact(ContactId c) throws DbException {
+		return db.getContact(c);
+	}
+
+	@Override
+	public Collection<Contact> getContacts() throws DbException {
+		return db.getContacts();
+	}
+
+	@Override
+	public void removeContact(ContactId c) throws DbException {
+		db.removeContact(c);
+	}
+}
diff --git a/briar-core/src/org/briarproject/contact/ContactModule.java b/briar-core/src/org/briarproject/contact/ContactModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..6bd786aa3b63715bef22dea8948ab4787a32aeeb
--- /dev/null
+++ b/briar-core/src/org/briarproject/contact/ContactModule.java
@@ -0,0 +1,13 @@
+package org.briarproject.contact;
+
+import com.google.inject.AbstractModule;
+
+import org.briarproject.api.contact.ContactManager;
+
+public class ContactModule extends AbstractModule {
+
+	@Override
+	protected void configure() {
+		bind(ContactManager.class).to(ContactManagerImpl.class);
+	}
+}
diff --git a/briar-core/src/org/briarproject/forum/ForumManagerImpl.java b/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..06c902c98a13d49935dec12bcd7658faf2946f36
--- /dev/null
+++ b/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
@@ -0,0 +1,93 @@
+package org.briarproject.forum;
+
+import com.google.inject.Inject;
+
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+import org.briarproject.api.forum.ForumManager;
+import org.briarproject.api.sync.Group;
+import org.briarproject.api.sync.GroupId;
+import org.briarproject.api.sync.Message;
+import org.briarproject.api.sync.MessageHeader;
+import org.briarproject.api.sync.MessageId;
+
+import java.util.Collection;
+
+class ForumManagerImpl implements ForumManager {
+
+	private final DatabaseComponent db;
+
+	@Inject
+	ForumManagerImpl(DatabaseComponent db) {
+		this.db = db;
+	}
+
+	@Override
+	public boolean addGroup(Group g) throws DbException {
+		return db.addGroup(g);
+	}
+
+	@Override
+	public void addLocalMessage(Message m) throws DbException {
+		db.addLocalMessage(m);
+	}
+
+	@Override
+	public Collection<Group> getAvailableGroups() throws DbException {
+		return db.getAvailableGroups();
+	}
+
+	@Override
+	public Group getGroup(GroupId g) throws DbException {
+		return db.getGroup(g);
+	}
+
+	@Override
+	public Collection<Group> getGroups() throws DbException {
+		return db.getGroups();
+	}
+
+	@Override
+	public byte[] getMessageBody(MessageId m) throws DbException {
+		return db.getMessageBody(m);
+	}
+
+	@Override
+	public Collection<MessageHeader> getMessageHeaders(GroupId g)
+			throws DbException {
+		return db.getMessageHeaders(g);
+	}
+
+	@Override
+	public Collection<Contact> getSubscribers(GroupId g) throws DbException {
+		return db.getSubscribers(g);
+	}
+
+	@Override
+	public Collection<ContactId> getVisibility(GroupId g) throws DbException {
+		return db.getVisibility(g);
+	}
+
+	@Override
+	public void removeGroup(Group g) throws DbException {
+		db.removeGroup(g);
+	}
+
+	@Override
+	public void setReadFlag(MessageId m, boolean read) throws DbException {
+		db.setReadFlag(m, read);
+	}
+
+	@Override
+	public void setVisibility(GroupId g, Collection<ContactId> visible)
+			throws DbException {
+		db.setVisibility(g, visible);
+	}
+
+	@Override
+	public void setVisibleToAll(GroupId g, boolean all) throws DbException {
+		db.setVisibleToAll(g, all);
+	}
+}
diff --git a/briar-core/src/org/briarproject/forum/ForumModule.java b/briar-core/src/org/briarproject/forum/ForumModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..0015457c1b1ee5320d813b80ea08c43cc4d7b940
--- /dev/null
+++ b/briar-core/src/org/briarproject/forum/ForumModule.java
@@ -0,0 +1,13 @@
+package org.briarproject.forum;
+
+import com.google.inject.AbstractModule;
+
+import org.briarproject.api.forum.ForumManager;
+
+public class ForumModule extends AbstractModule {
+
+	@Override
+	protected void configure() {
+		bind(ForumManager.class).to(ForumManagerImpl.class);
+	}
+}
diff --git a/briar-core/src/org/briarproject/identity/IdentityManagerImpl.java b/briar-core/src/org/briarproject/identity/IdentityManagerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..89e4f324d31ee6c35106e14c13553d413bd815e9
--- /dev/null
+++ b/briar-core/src/org/briarproject/identity/IdentityManagerImpl.java
@@ -0,0 +1,41 @@
+package org.briarproject.identity;
+
+import com.google.inject.Inject;
+
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.IdentityManager;
+import org.briarproject.api.identity.LocalAuthor;
+
+import java.util.Collection;
+
+class IdentityManagerImpl implements IdentityManager {
+
+	private final DatabaseComponent db;
+
+	@Inject
+	IdentityManagerImpl(DatabaseComponent db) {
+		this.db = db;
+	}
+
+	@Override
+	public void addLocalAuthor(LocalAuthor a) throws DbException {
+		db.addLocalAuthor(a);
+	}
+
+	@Override
+	public LocalAuthor getLocalAuthor(AuthorId a) throws DbException {
+		return db.getLocalAuthor(a);
+	}
+
+	@Override
+	public Collection<LocalAuthor> getLocalAuthors() throws DbException {
+		return db.getLocalAuthors();
+	}
+
+	@Override
+	public void removeLocalAuthor(AuthorId a) throws DbException {
+		db.removeLocalAuthor(a);
+	}
+}
diff --git a/briar-core/src/org/briarproject/identity/IdentityModule.java b/briar-core/src/org/briarproject/identity/IdentityModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..98134d1992aa5edabaa208719053648dca3fc83b
--- /dev/null
+++ b/briar-core/src/org/briarproject/identity/IdentityModule.java
@@ -0,0 +1,13 @@
+package org.briarproject.identity;
+
+import com.google.inject.AbstractModule;
+
+import org.briarproject.api.identity.IdentityManager;
+
+public class IdentityModule extends AbstractModule {
+
+	@Override
+	protected void configure() {
+		bind(IdentityManager.class).to(IdentityManagerImpl.class);
+	}
+}
diff --git a/briar-core/src/org/briarproject/messaging/MessagingManagerImpl.java b/briar-core/src/org/briarproject/messaging/MessagingManagerImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..b3929a1ed79085d3c226a00c3e83e16e47633ff8
--- /dev/null
+++ b/briar-core/src/org/briarproject/messaging/MessagingManagerImpl.java
@@ -0,0 +1,66 @@
+package org.briarproject.messaging;
+
+import com.google.inject.Inject;
+
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+import org.briarproject.api.messaging.MessagingManager;
+import org.briarproject.api.sync.Group;
+import org.briarproject.api.sync.GroupId;
+import org.briarproject.api.sync.Message;
+import org.briarproject.api.sync.MessageHeader;
+import org.briarproject.api.sync.MessageId;
+
+import java.util.Collection;
+
+class MessagingManagerImpl implements MessagingManager {
+
+	private final DatabaseComponent db;
+
+	@Inject
+	MessagingManagerImpl(DatabaseComponent db) {
+		this.db = db;
+	}
+
+	@Override
+	public boolean addGroup(Group g) throws DbException {
+		return db.addGroup(g);
+	}
+
+	@Override
+	public void addLocalMessage(Message m) throws DbException {
+		db.addLocalMessage(m);
+	}
+
+	@Override
+	public Group getGroup(GroupId g) throws DbException {
+		return db.getGroup(g);
+	}
+
+	@Override
+	public GroupId getInboxGroupId(ContactId c) throws DbException {
+		return db.getInboxGroupId(c);
+	}
+
+	@Override
+	public Collection<MessageHeader> getInboxMessageHeaders(ContactId c)
+			throws DbException {
+		return db.getInboxMessageHeaders(c);
+	}
+
+	@Override
+	public byte[] getMessageBody(MessageId m) throws DbException {
+		return db.getMessageBody(m);
+	}
+
+	@Override
+	public void setInboxGroup(ContactId c, Group g) throws DbException {
+		db.setInboxGroup(c, g);
+	}
+
+	@Override
+	public void setReadFlag(MessageId m, boolean read) throws DbException {
+		db.setReadFlag(m, read);
+	}
+}
diff --git a/briar-core/src/org/briarproject/messaging/MessagingModule.java b/briar-core/src/org/briarproject/messaging/MessagingModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..762e9c76dc5037ecf82caad660554fd2062b913b
--- /dev/null
+++ b/briar-core/src/org/briarproject/messaging/MessagingModule.java
@@ -0,0 +1,13 @@
+package org.briarproject.messaging;
+
+import com.google.inject.AbstractModule;
+
+import org.briarproject.api.messaging.MessagingManager;
+
+public class MessagingModule extends AbstractModule {
+
+	@Override
+	protected void configure() {
+		bind(MessagingManager.class).to(MessagingManagerImpl.class);
+	}
+}
diff --git a/briar-core/src/org/briarproject/sync/MessagingModule.java b/briar-core/src/org/briarproject/sync/SyncModule.java
similarity index 97%
rename from briar-core/src/org/briarproject/sync/MessagingModule.java
rename to briar-core/src/org/briarproject/sync/SyncModule.java
index d73de1a7c5943be8c1de0033cea5d457ce8fb7f5..1caef5bf1ff92c78c0cfaf8bb2ba0b281f9ad853 100644
--- a/briar-core/src/org/briarproject/sync/MessagingModule.java
+++ b/briar-core/src/org/briarproject/sync/SyncModule.java
@@ -19,7 +19,7 @@ import org.briarproject.api.sync.UnverifiedMessage;
 
 import javax.inject.Singleton;
 
-public class MessagingModule extends AbstractModule {
+public class SyncModule extends AbstractModule {
 
 	@Override
 	protected void configure() {
diff --git a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
index d942de487f027352a100676f0242e6d1a19b77c0..807b04c185444162b03a2d81189e346cd2079695 100644
--- a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
@@ -34,7 +34,7 @@ import org.briarproject.crypto.CryptoModule;
 import org.briarproject.data.DataModule;
 import org.briarproject.db.DatabaseModule;
 import org.briarproject.event.EventModule;
-import org.briarproject.sync.MessagingModule;
+import org.briarproject.sync.SyncModule;
 import org.briarproject.transport.TransportModule;
 import org.junit.Test;
 
@@ -72,7 +72,7 @@ public class ProtocolIntegrationTest extends BriarTestCase {
 		Injector i = Guice.createInjector(new TestDatabaseModule(),
 				new TestLifecycleModule(), new TestSystemModule(),
 				new CryptoModule(), new DatabaseModule(), new EventModule(),
-				new MessagingModule(), new DataModule(),
+				new SyncModule(), new DataModule(),
 				new TransportModule());
 		streamReaderFactory = i.getInstance(StreamReaderFactory.class);
 		streamWriterFactory = i.getInstance(StreamWriterFactory.class);
diff --git a/briar-tests/src/org/briarproject/sync/ConstantsTest.java b/briar-tests/src/org/briarproject/sync/ConstantsTest.java
index c823206a4901ea1e75aa29d09729217ada628b08..00149a8a012d92d23f63ec10acf89923567b90f2 100644
--- a/briar-tests/src/org/briarproject/sync/ConstantsTest.java
+++ b/briar-tests/src/org/briarproject/sync/ConstantsTest.java
@@ -65,7 +65,7 @@ public class ConstantsTest extends BriarTestCase {
 		Injector i = Guice.createInjector(new TestDatabaseModule(),
 				new TestLifecycleModule(), new TestSystemModule(),
 				new CryptoModule(), new DatabaseModule(), new EventModule(),
-				new org.briarproject.sync.MessagingModule(), new DataModule());
+				new SyncModule(), new DataModule());
 		crypto = i.getInstance(CryptoComponent.class);
 		groupFactory = i.getInstance(GroupFactory.class);
 		authorFactory = i.getInstance(AuthorFactory.class);
diff --git a/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java b/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java
index 04db6db752ce5b9aa1e51fbd24dafce344cb857e..7cb2ed9b351a2f0be7db32c5cddc6457cb7ecf0c 100644
--- a/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java
@@ -87,7 +87,7 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
 		return Guice.createInjector(new TestDatabaseModule(dir),
 				new TestLifecycleModule(), new TestSystemModule(),
 				new CryptoModule(), new DatabaseModule(), new EventModule(),
-				new org.briarproject.sync.MessagingModule(), new DataModule(),
+				new SyncModule(), new DataModule(),
 				new TransportModule());
 	}