From c5282c5b17bb31a32e9db38c76a0775fe50d02cb Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Wed, 16 Dec 2015 13:46:08 +0000
Subject: [PATCH] Moved some API classes into packages.

---
 .../AndroidNotificationManagerImpl.java       |  2 +-
 .../briarproject/android/BriarService.java    |  2 +-
 .../android/DashboardActivity.java            |  2 +-
 .../briarproject/android/SetupActivity.java   | 73 +++++++++----------
 .../android/contact/ContactListActivity.java  |  6 +-
 .../android/contact/ContactListItem.java      |  2 +-
 .../android/contact/ConversationActivity.java |  6 +-
 .../contact/ReadPrivateMessageActivity.java   |  4 +-
 .../android/contact/SelectContactsDialog.java | 20 ++---
 .../contact/WritePrivateMessageActivity.java  |  4 +-
 .../forum/AvailableForumsActivity.java        |  4 +-
 .../android/forum/AvailableForumsAdapter.java |  2 +-
 .../android/forum/AvailableForumsItem.java    |  2 +-
 .../android/forum/ForumActivity.java          |  2 +-
 .../android/forum/ForumAdapter.java           |  2 +-
 .../android/forum/ForumContacts.java          |  2 +-
 .../android/forum/ReadForumPostActivity.java  |  2 +-
 .../android/forum/ShareForumActivity.java     |  4 +-
 .../android/forum/WriteForumPostActivity.java |  4 +-
 .../identity/CreateIdentityActivity.java      | 62 ++++++++--------
 .../android/identity/LocalAuthorItem.java     |  2 +-
 .../invitation/AddContactActivity.java        |  4 +-
 .../invitation/ChooseIdentityView.java        | 36 ++++-----
 .../briarproject/android/util/AuthorView.java | 10 +--
 .../plugins/droidtooth/DroidtoothPlugin.java  | 66 ++++++++---------
 .../briarproject/plugins/tor/TorPlugin.java   |  2 +-
 .../android/AndroidNotificationManager.java   |  2 +-
 .../api/{ => contact}/Contact.java            |  5 +-
 .../api/{ => contact}/ContactId.java          |  2 +-
 .../api/contact/ContactManager.java           |  6 +-
 .../api/db/DatabaseComponent.java             | 10 +--
 .../api/event/ContactAddedEvent.java          |  2 +-
 .../api/event/ContactConnectedEvent.java      |  2 +-
 .../api/event/ContactDisconnectedEvent.java   |  2 +-
 .../api/event/ContactRemovedEvent.java        |  2 +-
 .../api/event/LocalAuthorAddedEvent.java      |  2 +-
 .../api/event/LocalAuthorRemovedEvent.java    |  2 +-
 .../event/LocalSubscriptionsUpdatedEvent.java |  4 +-
 .../api/event/MessageAddedEvent.java          |  2 +-
 .../api/event/MessageRequestedEvent.java      |  2 +-
 .../api/event/MessageToAckEvent.java          |  2 +-
 .../api/event/MessageToRequestEvent.java      |  2 +-
 .../api/event/MessagesAckedEvent.java         |  2 +-
 .../api/event/MessagesSentEvent.java          |  2 +-
 .../RemoteSubscriptionsUpdatedEvent.java      |  2 +-
 .../event/RemoteTransportsUpdatedEvent.java   |  2 +-
 .../briarproject/api/forum/ForumManager.java  |  4 +-
 .../api/{ => identity}/Author.java            |  8 +-
 .../api/{ => identity}/AuthorConstants.java   |  2 +-
 .../api/{ => identity}/AuthorFactory.java     |  2 +-
 .../api/{ => identity}/AuthorId.java          |  4 +-
 .../api/identity/IdentityManager.java         |  2 -
 .../api/{ => identity}/LocalAuthor.java       |  2 +-
 .../api/invitation/InvitationTaskFactory.java |  2 +-
 .../api/messaging/MessagingManager.java       |  2 +-
 .../api/plugins/ConnectionManager.java        |  2 +-
 .../api/plugins/ConnectionRegistry.java       |  6 +-
 .../org/briarproject/api/plugins/Plugin.java  |  6 +-
 .../api/plugins/PluginCallback.java           |  6 +-
 .../api/plugins/duplex/DuplexPlugin.java      |  2 +-
 .../plugins/duplex/DuplexPluginCallback.java  |  2 +-
 .../api/plugins/simplex/SimplexPlugin.java    |  2 +-
 .../simplex/SimplexPluginCallback.java        |  2 +-
 .../org/briarproject/api/sync/Message.java    |  4 +-
 .../briarproject/api/sync/MessageFactory.java |  2 +-
 .../briarproject/api/sync/MessageHeader.java  |  2 +-
 .../api/sync/MessagingSessionFactory.java     |  2 +-
 .../api/sync/UnverifiedMessage.java           |  4 +-
 .../api/transport/KeyManager.java             |  2 +-
 .../api/transport/StreamContext.java          |  2 +-
 .../src/org/briarproject/db/Database.java     | 10 +--
 .../db/DatabaseComponentImpl.java             | 10 +--
 .../src/org/briarproject/db/JdbcDatabase.java | 16 ++--
 .../invitation/AliceConnector.java            |  6 +-
 .../briarproject/invitation/BobConnector.java |  6 +-
 .../briarproject/invitation/Connector.java    | 14 ++--
 .../invitation/ConnectorGroup.java            |  8 +-
 .../invitation/InvitationTaskFactoryImpl.java |  4 +-
 .../plugins/ConnectionManagerImpl.java        |  2 +-
 .../plugins/ConnectionRegistryImpl.java       | 21 +++---
 .../plugins/PluginManagerImpl.java            |  2 +-
 .../briarproject/plugins/file/FilePlugin.java |  2 +-
 .../briarproject/plugins/tcp/TcpPlugin.java   | 19 +++--
 .../briarproject/sync/AuthorFactoryImpl.java  |  8 +-
 .../org/briarproject/sync/AuthorReader.java   |  8 +-
 .../sync/DuplexOutgoingSession.java           |  2 +-
 .../briarproject/sync/IncomingSession.java    |  2 +-
 .../briarproject/sync/MessageFactoryImpl.java |  8 +-
 .../org/briarproject/sync/MessageImpl.java    |  2 +-
 .../org/briarproject/sync/MessageReader.java  |  4 +-
 .../sync/MessageVerifierImpl.java             |  2 +-
 .../briarproject/sync/MessagingModule.java    |  6 +-
 .../sync/MessagingSessionFactoryImpl.java     |  2 +-
 .../sync/SimplexOutgoingSession.java          |  2 +-
 .../transport/KeyManagerImpl.java             |  2 +-
 .../transport/TransportKeyManager.java        |  2 +-
 .../plugins/bluetooth/BluetoothPlugin.java    | 28 +++----
 .../plugins/file/RemovableDrivePlugin.java    |  2 +-
 .../plugins/modem/ModemPlugin.java            | 30 ++++----
 .../briarproject/ProtocolIntegrationTest.java |  6 +-
 .../src/org/briarproject/TestMessage.java     | 25 ++-----
 .../db/DatabaseComponentImplTest.java         | 19 +++--
 .../org/briarproject/db/H2DatabaseTest.java   | 45 ++++++------
 .../plugins/ConnectionRegistryImplTest.java   | 15 ++--
 .../plugins/DuplexClientTest.java             |  3 +-
 .../plugins/DuplexServerTest.java             |  3 +-
 .../org/briarproject/plugins/DuplexTest.java  |  2 +-
 .../bluetooth/BluetoothClientTest.java        |  2 +-
 .../file/RemovableDrivePluginTest.java        |  2 +-
 .../plugins/modem/ModemPluginTest.java        |  2 +-
 .../plugins/tcp/LanTcpClientTest.java         |  2 +-
 .../plugins/tcp/LanTcpPluginTest.java         |  2 +-
 .../org/briarproject/sync/ConstantsTest.java  | 10 +--
 .../sync/SimplexMessagingIntegrationTest.java | 10 +--
 .../sync/SimplexOutgoingSessionTest.java      |  2 +-
 115 files changed, 408 insertions(+), 430 deletions(-)
 rename briar-api/src/org/briarproject/api/{ => contact}/Contact.java (82%)
 rename briar-api/src/org/briarproject/api/{ => contact}/ContactId.java (92%)
 rename briar-api/src/org/briarproject/api/{ => identity}/Author.java (86%)
 rename briar-api/src/org/briarproject/api/{ => identity}/AuthorConstants.java (96%)
 rename briar-api/src/org/briarproject/api/{ => identity}/AuthorFactory.java (81%)
 rename briar-api/src/org/briarproject/api/{ => identity}/AuthorId.java (81%)
 rename briar-api/src/org/briarproject/api/{ => identity}/LocalAuthor.java (93%)

diff --git a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
index 2fbc137192..ff2c852edf 100644
--- a/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/org/briarproject/android/AndroidNotificationManagerImpl.java
@@ -13,9 +13,9 @@ import org.briarproject.android.contact.ContactListActivity;
 import org.briarproject.android.contact.ConversationActivity;
 import org.briarproject.android.forum.ForumActivity;
 import org.briarproject.android.forum.ForumListActivity;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.Settings;
 import org.briarproject.api.android.AndroidNotificationManager;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DatabaseExecutor;
 import org.briarproject.api.db.DbException;
diff --git a/briar-android/src/org/briarproject/android/BriarService.java b/briar-android/src/org/briarproject/android/BriarService.java
index 35db05931a..d93e7bcd37 100644
--- a/briar-android/src/org/briarproject/android/BriarService.java
+++ b/briar-android/src/org/briarproject/android/BriarService.java
@@ -10,9 +10,9 @@ import android.os.IBinder;
 import android.support.v4.app.NotificationCompat;
 
 import org.briarproject.R;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.android.AndroidExecutor;
 import org.briarproject.api.android.AndroidNotificationManager;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DatabaseConfig;
 import org.briarproject.api.db.DatabaseExecutor;
diff --git a/briar-android/src/org/briarproject/android/DashboardActivity.java b/briar-android/src/org/briarproject/android/DashboardActivity.java
index 6e08cd2170..94312d788d 100644
--- a/briar-android/src/org/briarproject/android/DashboardActivity.java
+++ b/briar-android/src/org/briarproject/android/DashboardActivity.java
@@ -21,7 +21,6 @@ import org.briarproject.R;
 import org.briarproject.android.contact.ContactListActivity;
 import org.briarproject.android.forum.ForumListActivity;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.android.ReferenceManager;
 import org.briarproject.api.db.DatabaseComponent;
@@ -31,6 +30,7 @@ import org.briarproject.api.event.EventBus;
 import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.TransportDisabledEvent;
 import org.briarproject.api.event.TransportEnabledEvent;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.plugins.Plugin;
 import org.briarproject.api.plugins.PluginManager;
 
diff --git a/briar-android/src/org/briarproject/android/SetupActivity.java b/briar-android/src/org/briarproject/android/SetupActivity.java
index 46778711ae..b22e771bab 100644
--- a/briar-android/src/org/briarproject/android/SetupActivity.java
+++ b/briar-android/src/org/briarproject/android/SetupActivity.java
@@ -1,5 +1,40 @@
 package org.briarproject.android;
 
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.content.SharedPreferences.Editor;
+import android.os.Bundle;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ProgressBar;
+import android.widget.ScrollView;
+import android.widget.TextView;
+import android.widget.TextView.OnEditorActionListener;
+
+import org.briarproject.R;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.android.util.StrengthMeter;
+import org.briarproject.api.android.ReferenceManager;
+import org.briarproject.api.crypto.CryptoComponent;
+import org.briarproject.api.crypto.CryptoExecutor;
+import org.briarproject.api.crypto.KeyPair;
+import org.briarproject.api.crypto.PasswordStrengthEstimator;
+import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.api.db.DatabaseConfig;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.LocalAuthor;
+import org.briarproject.util.StringUtils;
+
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
 import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
 import static android.text.InputType.TYPE_CLASS_TEXT;
 import static android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
@@ -16,44 +51,8 @@ import static java.util.logging.Level.INFO;
 import static org.briarproject.android.TestingConstants.PREVENT_SCREENSHOTS;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
-import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 import static org.briarproject.api.crypto.PasswordStrengthEstimator.WEAK;
-
-import java.util.concurrent.Executor;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import org.briarproject.R;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.android.util.StrengthMeter;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.LocalAuthor;
-import org.briarproject.api.android.ReferenceManager;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.crypto.PasswordStrengthEstimator;
-import org.briarproject.api.crypto.SecretKey;
-import org.briarproject.api.db.DatabaseConfig;
-import org.briarproject.util.StringUtils;
-
-import roboguice.activity.RoboActivity;
-import android.content.Intent;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.Editor;
-import android.os.Bundle;
-import android.view.KeyEvent;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.ScrollView;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
+import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
 
 public class SetupActivity extends BaseActivity implements OnClickListener,
 OnEditorActionListener {
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
index e167eb20ba..d80b00cbfd 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListActivity.java
@@ -23,9 +23,8 @@ import org.briarproject.android.BriarActivity;
 import org.briarproject.android.invitation.AddContactActivity;
 import org.briarproject.android.util.HorizontalBorder;
 import org.briarproject.android.util.ListLoadingProgressBar;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
+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.db.NoSuchContactException;
@@ -37,6 +36,7 @@ import org.briarproject.api.event.Event;
 import org.briarproject.api.event.EventBus;
 import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.MessageAddedEvent;
+import org.briarproject.api.identity.AuthorId;
 import org.briarproject.api.plugins.ConnectionRegistry;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.MessageHeader;
diff --git a/briar-android/src/org/briarproject/android/contact/ContactListItem.java b/briar-android/src/org/briarproject/android/contact/ContactListItem.java
index 0e2cca813d..4772f4b9af 100644
--- a/briar-android/src/org/briarproject/android/contact/ContactListItem.java
+++ b/briar-android/src/org/briarproject/android/contact/ContactListItem.java
@@ -1,6 +1,6 @@
 package org.briarproject.android.contact;
 
-import org.briarproject.api.Contact;
+import org.briarproject.api.contact.Contact;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.MessageHeader;
 
diff --git a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
index 9f62cd5006..7bbec7095f 100644
--- a/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ConversationActivity.java
@@ -19,10 +19,9 @@ import android.widget.TextView;
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.android.AndroidNotificationManager;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.CryptoExecutor;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
@@ -38,6 +37,7 @@ import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.MessageAddedEvent;
 import org.briarproject.api.event.MessagesAckedEvent;
 import org.briarproject.api.event.MessagesSentEvent;
+import org.briarproject.api.identity.AuthorId;
 import org.briarproject.api.plugins.ConnectionRegistry;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
diff --git a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java b/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
index c95324b793..7b8df89d44 100644
--- a/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/ReadPrivateMessageActivity.java
@@ -17,10 +17,10 @@ import org.briarproject.android.util.AuthorView;
 import org.briarproject.android.util.ElasticHorizontalSpace;
 import org.briarproject.android.util.HorizontalBorder;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.AuthorId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.db.NoSuchMessageException;
+import org.briarproject.api.identity.AuthorId;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.MessageId;
 import org.briarproject.util.StringUtils;
@@ -38,7 +38,7 @@ import static java.util.logging.Level.WARNING;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
 import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP_1;
 import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP_1;
-import static org.briarproject.api.Author.Status.VERIFIED;
+import static org.briarproject.api.identity.Author.Status.VERIFIED;
 
 public class ReadPrivateMessageActivity extends BriarActivity
 implements OnClickListener {
diff --git a/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java b/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java
index 0cbec574a6..d31070f29d 100644
--- a/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java
+++ b/briar-android/src/org/briarproject/android/contact/SelectContactsDialog.java
@@ -1,21 +1,21 @@
 package org.briarproject.android.contact;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import org.briarproject.R;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
-
 import android.app.AlertDialog;
 import android.app.Dialog;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnMultiChoiceClickListener;
 
+import org.briarproject.R;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
 public class SelectContactsDialog implements OnMultiChoiceClickListener {
 
 	private Listener listener = null;
diff --git a/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java b/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
index 481f72fe69..03cf96e9b1 100644
--- a/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
+++ b/briar-android/src/org/briarproject/android/contact/WritePrivateMessageActivity.java
@@ -16,13 +16,13 @@ import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
 import org.briarproject.android.util.CommonLayoutParams;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.crypto.CryptoExecutor;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.db.NoSuchContactException;
 import org.briarproject.api.db.NoSuchSubscriptionException;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.Message;
diff --git a/briar-android/src/org/briarproject/android/forum/AvailableForumsActivity.java b/briar-android/src/org/briarproject/android/forum/AvailableForumsActivity.java
index 8c3e1c8bf6..30df4b035c 100644
--- a/briar-android/src/org/briarproject/android/forum/AvailableForumsActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/AvailableForumsActivity.java
@@ -10,8 +10,8 @@ import android.widget.Toast;
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
 import org.briarproject.android.util.ListLoadingProgressBar;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
+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.db.NoSuchSubscriptionException;
diff --git a/briar-android/src/org/briarproject/android/forum/AvailableForumsAdapter.java b/briar-android/src/org/briarproject/android/forum/AvailableForumsAdapter.java
index f2e34cad11..918cfe15de 100644
--- a/briar-android/src/org/briarproject/android/forum/AvailableForumsAdapter.java
+++ b/briar-android/src/org/briarproject/android/forum/AvailableForumsAdapter.java
@@ -9,7 +9,7 @@ import android.widget.TextView;
 
 import org.briarproject.R;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.Contact;
+import org.briarproject.api.contact.Contact;
 import org.briarproject.util.StringUtils;
 
 import java.util.ArrayList;
diff --git a/briar-android/src/org/briarproject/android/forum/AvailableForumsItem.java b/briar-android/src/org/briarproject/android/forum/AvailableForumsItem.java
index c5e62e75ce..f9b9c3a64d 100644
--- a/briar-android/src/org/briarproject/android/forum/AvailableForumsItem.java
+++ b/briar-android/src/org/briarproject/android/forum/AvailableForumsItem.java
@@ -1,6 +1,6 @@
 package org.briarproject.android.forum;
 
-import org.briarproject.api.Contact;
+import org.briarproject.api.contact.Contact;
 import org.briarproject.api.sync.Group;
 
 import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/forum/ForumActivity.java b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
index 26410d25dc..aa2d71504d 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumActivity.java
@@ -17,7 +17,6 @@ import org.briarproject.android.BriarActivity;
 import org.briarproject.android.util.ElasticHorizontalSpace;
 import org.briarproject.android.util.HorizontalBorder;
 import org.briarproject.android.util.ListLoadingProgressBar;
-import org.briarproject.api.Author;
 import org.briarproject.api.android.AndroidNotificationManager;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
@@ -28,6 +27,7 @@ import org.briarproject.api.event.EventBus;
 import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.MessageAddedEvent;
 import org.briarproject.api.event.SubscriptionRemovedEvent;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.MessageHeader;
diff --git a/briar-android/src/org/briarproject/android/forum/ForumAdapter.java b/briar-android/src/org/briarproject/android/forum/ForumAdapter.java
index 8660f43814..506796f0b6 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumAdapter.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumAdapter.java
@@ -13,7 +13,7 @@ import android.widget.TextView;
 import org.briarproject.R;
 import org.briarproject.android.util.AuthorView;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.Author;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.MessageHeader;
 import org.briarproject.util.StringUtils;
 
diff --git a/briar-android/src/org/briarproject/android/forum/ForumContacts.java b/briar-android/src/org/briarproject/android/forum/ForumContacts.java
index f75c439455..aa3b0c75c4 100644
--- a/briar-android/src/org/briarproject/android/forum/ForumContacts.java
+++ b/briar-android/src/org/briarproject/android/forum/ForumContacts.java
@@ -1,6 +1,6 @@
 package org.briarproject.android.forum;
 
-import org.briarproject.api.Contact;
+import org.briarproject.api.contact.Contact;
 import org.briarproject.api.sync.Group;
 
 import java.util.Collection;
diff --git a/briar-android/src/org/briarproject/android/forum/ReadForumPostActivity.java b/briar-android/src/org/briarproject/android/forum/ReadForumPostActivity.java
index dba39cca75..e41a8b9709 100644
--- a/briar-android/src/org/briarproject/android/forum/ReadForumPostActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ReadForumPostActivity.java
@@ -17,10 +17,10 @@ import org.briarproject.android.util.AuthorView;
 import org.briarproject.android.util.ElasticHorizontalSpace;
 import org.briarproject.android.util.HorizontalBorder;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.Author;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.db.NoSuchMessageException;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.MessageId;
 import org.briarproject.util.StringUtils;
diff --git a/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
index a3f771edc8..ae7115a38c 100644
--- a/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/ShareForumActivity.java
@@ -15,8 +15,8 @@ import org.briarproject.android.BriarActivity;
 import org.briarproject.android.contact.SelectContactsDialog;
 import org.briarproject.android.invitation.AddContactActivity;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
+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.sync.GroupId;
diff --git a/briar-android/src/org/briarproject/android/forum/WriteForumPostActivity.java b/briar-android/src/org/briarproject/android/forum/WriteForumPostActivity.java
index 4b8297a817..2ce9497586 100644
--- a/briar-android/src/org/briarproject/android/forum/WriteForumPostActivity.java
+++ b/briar-android/src/org/briarproject/android/forum/WriteForumPostActivity.java
@@ -23,14 +23,14 @@ import org.briarproject.android.identity.LocalAuthorItemComparator;
 import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
 import org.briarproject.android.util.CommonLayoutParams;
 import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.CryptoExecutor;
 import org.briarproject.api.crypto.KeyParser;
 import org.briarproject.api.crypto.PrivateKey;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.Message;
diff --git a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
index 458b194d98..fcbc439cff 100644
--- a/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
+++ b/briar-android/src/org/briarproject/android/identity/CreateIdentityActivity.java
@@ -1,36 +1,5 @@
 package org.briarproject.android.identity;
 
-import static android.text.InputType.TYPE_CLASS_TEXT;
-import static android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
-import static android.view.Gravity.CENTER;
-import static android.view.Gravity.CENTER_HORIZONTAL;
-import static android.view.View.GONE;
-import static android.view.View.VISIBLE;
-import static android.widget.LinearLayout.VERTICAL;
-import static android.widget.Toast.LENGTH_LONG;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
-import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
-
-import java.util.concurrent.Executor;
-import java.util.logging.Logger;
-
-import javax.inject.Inject;
-
-import org.briarproject.R;
-import org.briarproject.android.BriarActivity;
-import org.briarproject.android.util.LayoutUtils;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.LocalAuthor;
-import org.briarproject.api.crypto.CryptoComponent;
-import org.briarproject.api.crypto.CryptoExecutor;
-import org.briarproject.api.crypto.KeyPair;
-import org.briarproject.api.db.DatabaseComponent;
-import org.briarproject.api.db.DbException;
-import org.briarproject.util.StringUtils;
-
 import android.content.Intent;
 import android.os.Bundle;
 import android.view.KeyEvent;
@@ -44,6 +13,37 @@ import android.widget.TextView;
 import android.widget.TextView.OnEditorActionListener;
 import android.widget.Toast;
 
+import org.briarproject.R;
+import org.briarproject.android.BriarActivity;
+import org.briarproject.android.util.LayoutUtils;
+import org.briarproject.api.crypto.CryptoComponent;
+import org.briarproject.api.crypto.CryptoExecutor;
+import org.briarproject.api.crypto.KeyPair;
+import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.LocalAuthor;
+import org.briarproject.util.StringUtils;
+
+import java.util.concurrent.Executor;
+import java.util.logging.Logger;
+
+import javax.inject.Inject;
+
+import static android.text.InputType.TYPE_CLASS_TEXT;
+import static android.text.InputType.TYPE_TEXT_FLAG_CAP_WORDS;
+import static android.view.Gravity.CENTER;
+import static android.view.Gravity.CENTER_HORIZONTAL;
+import static android.view.View.GONE;
+import static android.view.View.VISIBLE;
+import static android.widget.LinearLayout.VERTICAL;
+import static android.widget.Toast.LENGTH_LONG;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static org.briarproject.android.util.CommonLayoutParams.MATCH_MATCH;
+import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
+import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+
 public class CreateIdentityActivity extends BriarActivity
 implements OnEditorActionListener, OnClickListener {
 
diff --git a/briar-android/src/org/briarproject/android/identity/LocalAuthorItem.java b/briar-android/src/org/briarproject/android/identity/LocalAuthorItem.java
index abb44221b0..a005144f5e 100644
--- a/briar-android/src/org/briarproject/android/identity/LocalAuthorItem.java
+++ b/briar-android/src/org/briarproject/android/identity/LocalAuthorItem.java
@@ -1,6 +1,6 @@
 package org.briarproject.android.identity;
 
-import org.briarproject.api.LocalAuthor;
+import org.briarproject.api.identity.LocalAuthor;
 
 public class LocalAuthorItem {
 
diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
index 03c9418863..89111f2acf 100644
--- a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
+++ b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
@@ -7,14 +7,14 @@ import android.widget.Toast;
 
 import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.android.ReferenceManager;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.invitation.InvitationListener;
 import org.briarproject.api.invitation.InvitationState;
 import org.briarproject.api.invitation.InvitationTask;
diff --git a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
index f609eb93f2..95fcca9057 100644
--- a/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
+++ b/briar-android/src/org/briarproject/android/invitation/ChooseIdentityView.java
@@ -1,24 +1,5 @@
 package org.briarproject.android.invitation;
 
-import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;
-import static android.bluetooth.BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION;
-import static android.view.Gravity.CENTER;
-import static org.briarproject.android.identity.LocalAuthorItem.NEW;
-import static org.briarproject.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
-import static org.briarproject.android.invitation.AddContactActivity.REQUEST_CREATE_IDENTITY;
-import static org.briarproject.android.util.CommonLayoutParams.MATCH_WRAP;
-import static org.briarproject.android.util.CommonLayoutParams.WRAP_WRAP;
-
-import java.util.Collection;
-
-import org.briarproject.R;
-import org.briarproject.android.identity.CreateIdentityActivity;
-import org.briarproject.android.identity.LocalAuthorItem;
-import org.briarproject.android.identity.LocalAuthorItemComparator;
-import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.LocalAuthor;
-
 import android.content.Context;
 import android.content.Intent;
 import android.view.LayoutInflater;
@@ -27,10 +8,25 @@ import android.view.View.OnClickListener;
 import android.widget.AdapterView;
 import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.Button;
-import android.widget.LinearLayout;
 import android.widget.Spinner;
 import android.widget.TextView;
 
+import org.briarproject.R;
+import org.briarproject.android.identity.CreateIdentityActivity;
+import org.briarproject.android.identity.LocalAuthorItem;
+import org.briarproject.android.identity.LocalAuthorItemComparator;
+import org.briarproject.android.identity.LocalAuthorSpinnerAdapter;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
+
+import java.util.Collection;
+
+import static android.bluetooth.BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE;
+import static android.bluetooth.BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION;
+import static org.briarproject.android.identity.LocalAuthorItem.NEW;
+import static org.briarproject.android.invitation.AddContactActivity.REQUEST_BLUETOOTH;
+import static org.briarproject.android.invitation.AddContactActivity.REQUEST_CREATE_IDENTITY;
+
 class ChooseIdentityView extends AddContactView
 implements OnItemSelectedListener, OnClickListener {
 
diff --git a/briar-android/src/org/briarproject/android/util/AuthorView.java b/briar-android/src/org/briarproject/android/util/AuthorView.java
index b73c7c85cb..152a801b91 100644
--- a/briar-android/src/org/briarproject/android/util/AuthorView.java
+++ b/briar-android/src/org/briarproject/android/util/AuthorView.java
@@ -1,15 +1,15 @@
 package org.briarproject.android.util;
 
-import static android.text.TextUtils.TruncateAt.END;
-
-import org.briarproject.R;
-import org.briarproject.api.Author;
-
 import android.content.Context;
 import android.widget.ImageView;
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import org.briarproject.R;
+import org.briarproject.api.identity.Author;
+
+import static android.text.TextUtils.TruncateAt.END;
+
 public class AuthorView extends RelativeLayout {
 
 	public AuthorView(Context ctx) {
diff --git a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java
index 06dfd1dc9c..635f7d4298 100644
--- a/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java
+++ b/briar-android/src/org/briarproject/plugins/droidtooth/DroidtoothPlugin.java
@@ -1,18 +1,25 @@
 package org.briarproject.plugins.droidtooth;
 
-import static android.bluetooth.BluetoothAdapter.ACTION_SCAN_MODE_CHANGED;
-import static android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED;
-import static android.bluetooth.BluetoothAdapter.EXTRA_SCAN_MODE;
-import static android.bluetooth.BluetoothAdapter.EXTRA_STATE;
-import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE;
-import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
-import static android.bluetooth.BluetoothAdapter.SCAN_MODE_NONE;
-import static android.bluetooth.BluetoothAdapter.STATE_OFF;
-import static android.bluetooth.BluetoothAdapter.STATE_ON;
-import static android.bluetooth.BluetoothDevice.EXTRA_DEVICE;
-import static java.util.concurrent.TimeUnit.MILLISECONDS;
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
+import android.bluetooth.BluetoothAdapter;
+import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothServerSocket;
+import android.bluetooth.BluetoothSocket;
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+
+import org.briarproject.api.TransportId;
+import org.briarproject.api.TransportProperties;
+import org.briarproject.api.android.AndroidExecutor;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.crypto.PseudoRandom;
+import org.briarproject.api.plugins.duplex.DuplexPlugin;
+import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
+import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
+import org.briarproject.api.system.Clock;
+import org.briarproject.util.LatchedReference;
+import org.briarproject.util.StringUtils;
 
 import java.io.IOException;
 import java.security.SecureRandom;
@@ -29,26 +36,19 @@ import java.util.concurrent.ExecutionException;
 import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 
-import org.briarproject.api.ContactId;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.TransportProperties;
-import org.briarproject.api.android.AndroidExecutor;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.system.Clock;
-import org.briarproject.util.LatchedReference;
-import org.briarproject.util.StringUtils;
-
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.BluetoothDevice;
-import android.bluetooth.BluetoothServerSocket;
-import android.bluetooth.BluetoothSocket;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
+import static android.bluetooth.BluetoothAdapter.ACTION_SCAN_MODE_CHANGED;
+import static android.bluetooth.BluetoothAdapter.ACTION_STATE_CHANGED;
+import static android.bluetooth.BluetoothAdapter.EXTRA_SCAN_MODE;
+import static android.bluetooth.BluetoothAdapter.EXTRA_STATE;
+import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE;
+import static android.bluetooth.BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE;
+import static android.bluetooth.BluetoothAdapter.SCAN_MODE_NONE;
+import static android.bluetooth.BluetoothAdapter.STATE_OFF;
+import static android.bluetooth.BluetoothAdapter.STATE_ON;
+import static android.bluetooth.BluetoothDevice.EXTRA_DEVICE;
+import static java.util.concurrent.TimeUnit.MILLISECONDS;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
 
 class DroidtoothPlugin implements DuplexPlugin {
 
diff --git a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
index ebd954dfa5..ebcf4c779e 100644
--- a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
+++ b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
@@ -11,10 +11,10 @@ import android.os.FileObserver;
 import net.freehaven.tor.control.EventHandler;
 import net.freehaven.tor.control.TorControlConnection;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.PseudoRandom;
 import org.briarproject.api.event.Event;
 import org.briarproject.api.event.EventListener;
diff --git a/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java b/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
index 9c39fd75da..67e6e2a582 100644
--- a/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
+++ b/briar-api/src/org/briarproject/api/android/AndroidNotificationManager.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.android;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.lifecycle.Service;
 import org.briarproject.api.sync.GroupId;
 
diff --git a/briar-api/src/org/briarproject/api/Contact.java b/briar-api/src/org/briarproject/api/contact/Contact.java
similarity index 82%
rename from briar-api/src/org/briarproject/api/Contact.java
rename to briar-api/src/org/briarproject/api/contact/Contact.java
index fa03b83681..5c65c57d21 100644
--- a/briar-api/src/org/briarproject/api/Contact.java
+++ b/briar-api/src/org/briarproject/api/contact/Contact.java
@@ -1,4 +1,7 @@
-package org.briarproject.api;
+package org.briarproject.api.contact;
+
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
 
 public class Contact {
 
diff --git a/briar-api/src/org/briarproject/api/ContactId.java b/briar-api/src/org/briarproject/api/contact/ContactId.java
similarity index 92%
rename from briar-api/src/org/briarproject/api/ContactId.java
rename to briar-api/src/org/briarproject/api/contact/ContactId.java
index 7a60116027..1805818d7c 100644
--- a/briar-api/src/org/briarproject/api/ContactId.java
+++ b/briar-api/src/org/briarproject/api/contact/ContactId.java
@@ -1,4 +1,4 @@
-package org.briarproject.api;
+package org.briarproject.api.contact;
 
 /**
  * Type-safe wrapper for an integer that uniquely identifies a contact within
diff --git a/briar-api/src/org/briarproject/api/contact/ContactManager.java b/briar-api/src/org/briarproject/api/contact/ContactManager.java
index 50a4a76a3d..f323c07371 100644
--- a/briar-api/src/org/briarproject/api/contact/ContactManager.java
+++ b/briar-api/src/org/briarproject/api/contact/ContactManager.java
@@ -1,10 +1,8 @@
 package org.briarproject.api.contact;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
 
 import java.util.Collection;
 
diff --git a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
index ea30eb6ebb..13d28f9d8e 100644
--- a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
+++ b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
@@ -1,14 +1,14 @@
 package org.briarproject.api.db;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.Settings;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.sync.Ack;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
diff --git a/briar-api/src/org/briarproject/api/event/ContactAddedEvent.java b/briar-api/src/org/briarproject/api/event/ContactAddedEvent.java
index 6728c79050..b8d29bf27c 100644
--- a/briar-api/src/org/briarproject/api/event/ContactAddedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/ContactAddedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /** An event that is broadcast when a contact is added. */
 public class ContactAddedEvent extends Event {
diff --git a/briar-api/src/org/briarproject/api/event/ContactConnectedEvent.java b/briar-api/src/org/briarproject/api/event/ContactConnectedEvent.java
index 42c8bf7b82..0f0f90bac9 100644
--- a/briar-api/src/org/briarproject/api/event/ContactConnectedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/ContactConnectedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /**
  * An event that is broadcast when a contact connects that was not previously
diff --git a/briar-api/src/org/briarproject/api/event/ContactDisconnectedEvent.java b/briar-api/src/org/briarproject/api/event/ContactDisconnectedEvent.java
index a0f858dfd1..2cef4d167b 100644
--- a/briar-api/src/org/briarproject/api/event/ContactDisconnectedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/ContactDisconnectedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /**
  * An event that is broadcast when a contact disconnects and is no longer
diff --git a/briar-api/src/org/briarproject/api/event/ContactRemovedEvent.java b/briar-api/src/org/briarproject/api/event/ContactRemovedEvent.java
index 6b080340ea..f76c9a7eca 100644
--- a/briar-api/src/org/briarproject/api/event/ContactRemovedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/ContactRemovedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /** An event that is broadcast when a contact is removed. */
 public class ContactRemovedEvent extends Event {
diff --git a/briar-api/src/org/briarproject/api/event/LocalAuthorAddedEvent.java b/briar-api/src/org/briarproject/api/event/LocalAuthorAddedEvent.java
index 81c4145ebf..5f0aeb3cd4 100644
--- a/briar-api/src/org/briarproject/api/event/LocalAuthorAddedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/LocalAuthorAddedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.AuthorId;
+import org.briarproject.api.identity.AuthorId;
 
 /** An event that is broadcast when a local pseudonym is added. */
 public class LocalAuthorAddedEvent extends Event {
diff --git a/briar-api/src/org/briarproject/api/event/LocalAuthorRemovedEvent.java b/briar-api/src/org/briarproject/api/event/LocalAuthorRemovedEvent.java
index 9671792474..5e69ccf7a2 100644
--- a/briar-api/src/org/briarproject/api/event/LocalAuthorRemovedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/LocalAuthorRemovedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.AuthorId;
+import org.briarproject.api.identity.AuthorId;
 
 /** An event that is broadcast when a local pseudonym is removed. */
 public class LocalAuthorRemovedEvent extends Event {
diff --git a/briar-api/src/org/briarproject/api/event/LocalSubscriptionsUpdatedEvent.java b/briar-api/src/org/briarproject/api/event/LocalSubscriptionsUpdatedEvent.java
index 2617a06ce5..ce7a2d9094 100644
--- a/briar-api/src/org/briarproject/api/event/LocalSubscriptionsUpdatedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/LocalSubscriptionsUpdatedEvent.java
@@ -1,8 +1,8 @@
 package org.briarproject.api.event;
 
-import java.util.Collection;
+import org.briarproject.api.contact.ContactId;
 
-import org.briarproject.api.ContactId;
+import java.util.Collection;
 
 /**
  * An event that is broadcast when the set of subscriptions visible to one or
diff --git a/briar-api/src/org/briarproject/api/event/MessageAddedEvent.java b/briar-api/src/org/briarproject/api/event/MessageAddedEvent.java
index 8c6664d1c4..73f4175fb4 100644
--- a/briar-api/src/org/briarproject/api/event/MessageAddedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/MessageAddedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.sync.Group;
 
 /** An event that is broadcast when a message is added to the database. */
diff --git a/briar-api/src/org/briarproject/api/event/MessageRequestedEvent.java b/briar-api/src/org/briarproject/api/event/MessageRequestedEvent.java
index a3c023f2d5..f2dd84be0b 100644
--- a/briar-api/src/org/briarproject/api/event/MessageRequestedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/MessageRequestedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /** An event that is broadcast when a message is requested by a contact. */
 public class MessageRequestedEvent extends Event {
diff --git a/briar-api/src/org/briarproject/api/event/MessageToAckEvent.java b/briar-api/src/org/briarproject/api/event/MessageToAckEvent.java
index f59eabab8c..8afaed4e74 100644
--- a/briar-api/src/org/briarproject/api/event/MessageToAckEvent.java
+++ b/briar-api/src/org/briarproject/api/event/MessageToAckEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /**
  * An event that is broadcast when a message is received from or offered by a
diff --git a/briar-api/src/org/briarproject/api/event/MessageToRequestEvent.java b/briar-api/src/org/briarproject/api/event/MessageToRequestEvent.java
index 11a6b69953..812fb0ad37 100644
--- a/briar-api/src/org/briarproject/api/event/MessageToRequestEvent.java
+++ b/briar-api/src/org/briarproject/api/event/MessageToRequestEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /**
  * An event that is broadcast when a message is offered by a contact and needs
diff --git a/briar-api/src/org/briarproject/api/event/MessagesAckedEvent.java b/briar-api/src/org/briarproject/api/event/MessagesAckedEvent.java
index ab99b37b00..fc6a7fca30 100644
--- a/briar-api/src/org/briarproject/api/event/MessagesAckedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/MessagesAckedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.sync.MessageId;
 
 import java.util.Collection;
diff --git a/briar-api/src/org/briarproject/api/event/MessagesSentEvent.java b/briar-api/src/org/briarproject/api/event/MessagesSentEvent.java
index 0c9f700e6f..51bcbda4fb 100644
--- a/briar-api/src/org/briarproject/api/event/MessagesSentEvent.java
+++ b/briar-api/src/org/briarproject/api/event/MessagesSentEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.sync.MessageId;
 
 import java.util.Collection;
diff --git a/briar-api/src/org/briarproject/api/event/RemoteSubscriptionsUpdatedEvent.java b/briar-api/src/org/briarproject/api/event/RemoteSubscriptionsUpdatedEvent.java
index a56c8cb9ab..cd7a17ec34 100644
--- a/briar-api/src/org/briarproject/api/event/RemoteSubscriptionsUpdatedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/RemoteSubscriptionsUpdatedEvent.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 
 /**  An event that is broadcast when a contact's subscriptions are updated. */
 public class RemoteSubscriptionsUpdatedEvent extends Event {
diff --git a/briar-api/src/org/briarproject/api/event/RemoteTransportsUpdatedEvent.java b/briar-api/src/org/briarproject/api/event/RemoteTransportsUpdatedEvent.java
index 7e0d834ed2..52d36961bf 100644
--- a/briar-api/src/org/briarproject/api/event/RemoteTransportsUpdatedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/RemoteTransportsUpdatedEvent.java
@@ -1,7 +1,7 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 
 /**
  * An event that is broadcast when a contact's remote transport properties
diff --git a/briar-api/src/org/briarproject/api/forum/ForumManager.java b/briar-api/src/org/briarproject/api/forum/ForumManager.java
index 3a380bfc88..eec231dd99 100644
--- a/briar-api/src/org/briarproject/api/forum/ForumManager.java
+++ b/briar-api/src/org/briarproject/api/forum/ForumManager.java
@@ -1,7 +1,7 @@
 package org.briarproject.api.forum;
 
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
diff --git a/briar-api/src/org/briarproject/api/Author.java b/briar-api/src/org/briarproject/api/identity/Author.java
similarity index 86%
rename from briar-api/src/org/briarproject/api/Author.java
rename to briar-api/src/org/briarproject/api/identity/Author.java
index c4f3c050bf..9aa543b3ac 100644
--- a/briar-api/src/org/briarproject/api/Author.java
+++ b/briar-api/src/org/briarproject/api/identity/Author.java
@@ -1,13 +1,11 @@
-package org.briarproject.api;
-
-import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+package org.briarproject.api.identity;
 
 import java.io.UnsupportedEncodingException;
 
 /** A pseudonym for a user. */
 public class Author {
 
-	public enum Status { ANONYMOUS, UNKNOWN, UNVERIFIED, VERIFIED };
+	public enum Status { ANONYMOUS, UNKNOWN, UNVERIFIED, VERIFIED }
 
 	private final AuthorId id;
 	private final String name;
@@ -20,7 +18,7 @@ public class Author {
 		} catch (UnsupportedEncodingException e) {
 			throw new RuntimeException(e);
 		}
-		if (length == 0 || length > MAX_AUTHOR_NAME_LENGTH)
+		if (length == 0 || length > AuthorConstants.MAX_AUTHOR_NAME_LENGTH)
 			throw new IllegalArgumentException();
 		this.id = id;
 		this.name = name;
diff --git a/briar-api/src/org/briarproject/api/AuthorConstants.java b/briar-api/src/org/briarproject/api/identity/AuthorConstants.java
similarity index 96%
rename from briar-api/src/org/briarproject/api/AuthorConstants.java
rename to briar-api/src/org/briarproject/api/identity/AuthorConstants.java
index 1b2123d957..58fd9c4a84 100644
--- a/briar-api/src/org/briarproject/api/AuthorConstants.java
+++ b/briar-api/src/org/briarproject/api/identity/AuthorConstants.java
@@ -1,4 +1,4 @@
-package org.briarproject.api;
+package org.briarproject.api.identity;
 
 public interface AuthorConstants {
 
diff --git a/briar-api/src/org/briarproject/api/AuthorFactory.java b/briar-api/src/org/briarproject/api/identity/AuthorFactory.java
similarity index 81%
rename from briar-api/src/org/briarproject/api/AuthorFactory.java
rename to briar-api/src/org/briarproject/api/identity/AuthorFactory.java
index f70ef2135e..2c474b7cd7 100644
--- a/briar-api/src/org/briarproject/api/AuthorFactory.java
+++ b/briar-api/src/org/briarproject/api/identity/AuthorFactory.java
@@ -1,4 +1,4 @@
-package org.briarproject.api;
+package org.briarproject.api.identity;
 
 public interface AuthorFactory {
 
diff --git a/briar-api/src/org/briarproject/api/AuthorId.java b/briar-api/src/org/briarproject/api/identity/AuthorId.java
similarity index 81%
rename from briar-api/src/org/briarproject/api/AuthorId.java
rename to briar-api/src/org/briarproject/api/identity/AuthorId.java
index 0ee86a33a6..b0fd7d10dd 100644
--- a/briar-api/src/org/briarproject/api/AuthorId.java
+++ b/briar-api/src/org/briarproject/api/identity/AuthorId.java
@@ -1,4 +1,6 @@
-package org.briarproject.api;
+package org.briarproject.api.identity;
+
+import org.briarproject.api.UniqueId;
 
 import java.util.Arrays;
 
diff --git a/briar-api/src/org/briarproject/api/identity/IdentityManager.java b/briar-api/src/org/briarproject/api/identity/IdentityManager.java
index a657a08518..207fea87d5 100644
--- a/briar-api/src/org/briarproject/api/identity/IdentityManager.java
+++ b/briar-api/src/org/briarproject/api/identity/IdentityManager.java
@@ -1,7 +1,5 @@
 package org.briarproject.api.identity;
 
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.db.DbException;
 
 import java.util.Collection;
diff --git a/briar-api/src/org/briarproject/api/LocalAuthor.java b/briar-api/src/org/briarproject/api/identity/LocalAuthor.java
similarity index 93%
rename from briar-api/src/org/briarproject/api/LocalAuthor.java
rename to briar-api/src/org/briarproject/api/identity/LocalAuthor.java
index 68520b6752..9f5626d77b 100644
--- a/briar-api/src/org/briarproject/api/LocalAuthor.java
+++ b/briar-api/src/org/briarproject/api/identity/LocalAuthor.java
@@ -1,4 +1,4 @@
-package org.briarproject.api;
+package org.briarproject.api.identity;
 
 /** A pseudonym for the local user. */
 public class LocalAuthor extends Author {
diff --git a/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java b/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java
index 4344548017..85b4f882d2 100644
--- a/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java
+++ b/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.invitation;
 
-import org.briarproject.api.AuthorId;
+import org.briarproject.api.identity.AuthorId;
 
 /** Creates tasks for exchanging invitations with remote peers. */
 public interface InvitationTaskFactory {
diff --git a/briar-api/src/org/briarproject/api/messaging/MessagingManager.java b/briar-api/src/org/briarproject/api/messaging/MessagingManager.java
index 4662157624..a306d6d753 100644
--- a/briar-api/src/org/briarproject/api/messaging/MessagingManager.java
+++ b/briar-api/src/org/briarproject/api/messaging/MessagingManager.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.messaging;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
diff --git a/briar-api/src/org/briarproject/api/plugins/ConnectionManager.java b/briar-api/src/org/briarproject/api/plugins/ConnectionManager.java
index 644a3c8132..da7940187a 100644
--- a/briar-api/src/org/briarproject/api/plugins/ConnectionManager.java
+++ b/briar-api/src/org/briarproject/api/plugins/ConnectionManager.java
@@ -1,7 +1,7 @@
 package org.briarproject.api.plugins;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
 
 public interface ConnectionManager {
diff --git a/briar-api/src/org/briarproject/api/plugins/ConnectionRegistry.java b/briar-api/src/org/briarproject/api/plugins/ConnectionRegistry.java
index c1a1046c80..6de3d00c5b 100644
--- a/briar-api/src/org/briarproject/api/plugins/ConnectionRegistry.java
+++ b/briar-api/src/org/briarproject/api/plugins/ConnectionRegistry.java
@@ -1,9 +1,9 @@
 package org.briarproject.api.plugins;
 
-import java.util.Collection;
-
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
+
+import java.util.Collection;
 
 /**
  * Keeps track of which contacts are currently connected by which transports.
diff --git a/briar-api/src/org/briarproject/api/plugins/Plugin.java b/briar-api/src/org/briarproject/api/plugins/Plugin.java
index cc0338a4a3..393fa27ea1 100644
--- a/briar-api/src/org/briarproject/api/plugins/Plugin.java
+++ b/briar-api/src/org/briarproject/api/plugins/Plugin.java
@@ -1,11 +1,11 @@
 package org.briarproject.api.plugins;
 
+import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
+
 import java.io.IOException;
 import java.util.Collection;
 
-import org.briarproject.api.ContactId;
-import org.briarproject.api.TransportId;
-
 public interface Plugin {
 
 	/** Returns the plugin's transport identifier. */
diff --git a/briar-api/src/org/briarproject/api/plugins/PluginCallback.java b/briar-api/src/org/briarproject/api/plugins/PluginCallback.java
index 34361a2cab..78d870a151 100644
--- a/briar-api/src/org/briarproject/api/plugins/PluginCallback.java
+++ b/briar-api/src/org/briarproject/api/plugins/PluginCallback.java
@@ -1,10 +1,10 @@
 package org.briarproject.api.plugins;
 
-import java.util.Map;
-
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
+
+import java.util.Map;
 
 /**
  * An interface through which a transport plugin interacts with the rest of
diff --git a/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPlugin.java b/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPlugin.java
index 8712d7b792..b64f4a1498 100644
--- a/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPlugin.java
+++ b/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPlugin.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.plugins.duplex;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.PseudoRandom;
 import org.briarproject.api.plugins.Plugin;
 
diff --git a/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPluginCallback.java b/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPluginCallback.java
index 494f746a17..eb88626b88 100644
--- a/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPluginCallback.java
+++ b/briar-api/src/org/briarproject/api/plugins/duplex/DuplexPluginCallback.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.plugins.duplex;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.PluginCallback;
 
 /**
diff --git a/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPlugin.java b/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPlugin.java
index 9e4a1defd8..36e2ed4383 100644
--- a/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPlugin.java
+++ b/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPlugin.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.plugins.simplex;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.Plugin;
 import org.briarproject.api.plugins.TransportConnectionReader;
 import org.briarproject.api.plugins.TransportConnectionWriter;
diff --git a/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPluginCallback.java b/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPluginCallback.java
index 1f597c70d2..51f15da58b 100644
--- a/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPluginCallback.java
+++ b/briar-api/src/org/briarproject/api/plugins/simplex/SimplexPluginCallback.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.plugins.simplex;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.PluginCallback;
 import org.briarproject.api.plugins.TransportConnectionReader;
 import org.briarproject.api.plugins.TransportConnectionWriter;
diff --git a/briar-api/src/org/briarproject/api/sync/Message.java b/briar-api/src/org/briarproject/api/sync/Message.java
index a8245f13fe..14c16d371d 100644
--- a/briar-api/src/org/briarproject/api/sync/Message.java
+++ b/briar-api/src/org/briarproject/api/sync/Message.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.sync;
 
-import org.briarproject.api.Author;
+import org.briarproject.api.identity.Author;
 
 public interface Message {
 
@@ -20,7 +20,7 @@ public interface Message {
 	Group getGroup();
 
 	/**
-	 * Returns the message's {@link org.briarproject.api.Author Author}, or null
+	 * Returns the message's {@link Author Author}, or null
 	 * if this is an anonymous message.
 	 */
 	Author getAuthor();
diff --git a/briar-api/src/org/briarproject/api/sync/MessageFactory.java b/briar-api/src/org/briarproject/api/sync/MessageFactory.java
index 17a1404d1b..b54070d78c 100644
--- a/briar-api/src/org/briarproject/api/sync/MessageFactory.java
+++ b/briar-api/src/org/briarproject/api/sync/MessageFactory.java
@@ -1,7 +1,7 @@
 package org.briarproject.api.sync;
 
-import org.briarproject.api.Author;
 import org.briarproject.api.crypto.PrivateKey;
+import org.briarproject.api.identity.Author;
 
 import java.io.IOException;
 import java.security.GeneralSecurityException;
diff --git a/briar-api/src/org/briarproject/api/sync/MessageHeader.java b/briar-api/src/org/briarproject/api/sync/MessageHeader.java
index 583adca781..701fbf5474 100644
--- a/briar-api/src/org/briarproject/api/sync/MessageHeader.java
+++ b/briar-api/src/org/briarproject/api/sync/MessageHeader.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.sync;
 
-import org.briarproject.api.Author;
+import org.briarproject.api.identity.Author;
 
 public class MessageHeader {
 
diff --git a/briar-api/src/org/briarproject/api/sync/MessagingSessionFactory.java b/briar-api/src/org/briarproject/api/sync/MessagingSessionFactory.java
index 0cae83d890..a54695dfe0 100644
--- a/briar-api/src/org/briarproject/api/sync/MessagingSessionFactory.java
+++ b/briar-api/src/org/briarproject/api/sync/MessagingSessionFactory.java
@@ -1,7 +1,7 @@
 package org.briarproject.api.sync;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 
 import java.io.InputStream;
 import java.io.OutputStream;
diff --git a/briar-api/src/org/briarproject/api/sync/UnverifiedMessage.java b/briar-api/src/org/briarproject/api/sync/UnverifiedMessage.java
index f5ab02e913..523cc1e305 100644
--- a/briar-api/src/org/briarproject/api/sync/UnverifiedMessage.java
+++ b/briar-api/src/org/briarproject/api/sync/UnverifiedMessage.java
@@ -1,6 +1,6 @@
 package org.briarproject.api.sync;
 
-import org.briarproject.api.Author;
+import org.briarproject.api.identity.Author;
 
 /** A {@link Message} that has not yet had its signatures (if any) verified. */
 public class UnverifiedMessage {
@@ -45,7 +45,7 @@ public class UnverifiedMessage {
 	}
 
 	/**
-	 * Returns the message's {@link org.briarproject.api.Author Author}, or null
+	 * Returns the message's {@link Author Author}, or null
 	 * if this is an anonymous message.
 	 */
 	public Author getAuthor() {
diff --git a/briar-api/src/org/briarproject/api/transport/KeyManager.java b/briar-api/src/org/briarproject/api/transport/KeyManager.java
index 7b08b1c0e2..4602584c17 100644
--- a/briar-api/src/org/briarproject/api/transport/KeyManager.java
+++ b/briar-api/src/org/briarproject/api/transport/KeyManager.java
@@ -1,7 +1,7 @@
 package org.briarproject.api.transport;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.lifecycle.Service;
 
diff --git a/briar-api/src/org/briarproject/api/transport/StreamContext.java b/briar-api/src/org/briarproject/api/transport/StreamContext.java
index 5c46b9f8c1..d9dbe9cd15 100644
--- a/briar-api/src/org/briarproject/api/transport/StreamContext.java
+++ b/briar-api/src/org/briarproject/api/transport/StreamContext.java
@@ -1,7 +1,7 @@
 package org.briarproject.api.transport;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.SecretKey;
 
 public class StreamContext {
diff --git a/briar-core/src/org/briarproject/db/Database.java b/briar-core/src/org/briarproject/db/Database.java
index b8a57ccb3f..a34c92814c 100644
--- a/briar-core/src/org/briarproject/db/Database.java
+++ b/briar-core/src/org/briarproject/db/Database.java
@@ -1,15 +1,15 @@
 package org.briarproject.db;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.Settings;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.Message;
diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
index 5af5e56eca..87f8aa49b4 100644
--- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
+++ b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
@@ -1,14 +1,11 @@
 package org.briarproject.db;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.Settings;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.ContactExistsException;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
@@ -38,6 +35,9 @@ import org.briarproject.api.event.SubscriptionAddedEvent;
 import org.briarproject.api.event.SubscriptionRemovedEvent;
 import org.briarproject.api.event.TransportAddedEvent;
 import org.briarproject.api.event.TransportRemovedEvent;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.lifecycle.ShutdownManager;
 import org.briarproject.api.sync.Ack;
 import org.briarproject.api.sync.Group;
diff --git a/briar-core/src/org/briarproject/db/JdbcDatabase.java b/briar-core/src/org/briarproject/db/JdbcDatabase.java
index 89491704cd..d9a9a2f47a 100644
--- a/briar-core/src/org/briarproject/db/JdbcDatabase.java
+++ b/briar-core/src/org/briarproject/db/JdbcDatabase.java
@@ -1,17 +1,17 @@
 package org.briarproject.db;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.Settings;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.db.DbClosedException;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.Message;
@@ -52,9 +52,9 @@ import java.util.logging.Logger;
 import static java.sql.Types.BINARY;
 import static java.sql.Types.VARCHAR;
 import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.Author.Status.ANONYMOUS;
-import static org.briarproject.api.Author.Status.UNKNOWN;
-import static org.briarproject.api.Author.Status.VERIFIED;
+import static org.briarproject.api.identity.Author.Status.ANONYMOUS;
+import static org.briarproject.api.identity.Author.Status.UNKNOWN;
+import static org.briarproject.api.identity.Author.Status.VERIFIED;
 import static org.briarproject.api.sync.MessagingConstants.MAX_SUBSCRIPTIONS;
 import static org.briarproject.db.ExponentialBackoff.calculateExpiry;
 
diff --git a/briar-core/src/org/briarproject/invitation/AliceConnector.java b/briar-core/src/org/briarproject/invitation/AliceConnector.java
index 460feac240..963aa10ff7 100644
--- a/briar-core/src/org/briarproject/invitation/AliceConnector.java
+++ b/briar-core/src/org/briarproject/invitation/AliceConnector.java
@@ -1,8 +1,5 @@
 package org.briarproject.invitation;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
 import org.briarproject.api.crypto.CryptoComponent;
@@ -14,6 +11,9 @@ import org.briarproject.api.data.Writer;
 import org.briarproject.api.data.WriterFactory;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.plugins.ConnectionManager;
 import org.briarproject.api.plugins.duplex.DuplexPlugin;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
diff --git a/briar-core/src/org/briarproject/invitation/BobConnector.java b/briar-core/src/org/briarproject/invitation/BobConnector.java
index 20c60061a0..826659fddf 100644
--- a/briar-core/src/org/briarproject/invitation/BobConnector.java
+++ b/briar-core/src/org/briarproject/invitation/BobConnector.java
@@ -1,8 +1,5 @@
 package org.briarproject.invitation;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
 import org.briarproject.api.crypto.CryptoComponent;
@@ -14,6 +11,9 @@ import org.briarproject.api.data.Writer;
 import org.briarproject.api.data.WriterFactory;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.plugins.ConnectionManager;
 import org.briarproject.api.plugins.duplex.DuplexPlugin;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
diff --git a/briar-core/src/org/briarproject/invitation/Connector.java b/briar-core/src/org/briarproject/invitation/Connector.java
index 4734160629..ed654fbd1e 100644
--- a/briar-core/src/org/briarproject/invitation/Connector.java
+++ b/briar-core/src/org/briarproject/invitation/Connector.java
@@ -1,12 +1,9 @@
 package org.briarproject.invitation;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.FormatException;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.KeyPair;
 import org.briarproject.api.crypto.KeyParser;
@@ -20,6 +17,9 @@ import org.briarproject.api.data.Writer;
 import org.briarproject.api.data.WriterFactory;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.plugins.ConnectionManager;
 import org.briarproject.api.plugins.duplex.DuplexPlugin;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
@@ -43,12 +43,12 @@ import java.util.logging.Logger;
 
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
-import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
-import static org.briarproject.api.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT;
 import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTY_LENGTH;
 import static org.briarproject.api.TransportPropertyConstants.MAX_TRANSPORT_ID_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.api.invitation.InvitationConstants.CONNECTION_TIMEOUT;
 import static org.briarproject.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
 
diff --git a/briar-core/src/org/briarproject/invitation/ConnectorGroup.java b/briar-core/src/org/briarproject/invitation/ConnectorGroup.java
index 11c9855224..564b86fa82 100644
--- a/briar-core/src/org/briarproject/invitation/ConnectorGroup.java
+++ b/briar-core/src/org/briarproject/invitation/ConnectorGroup.java
@@ -1,9 +1,5 @@
 package org.briarproject.invitation;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
 import org.briarproject.api.crypto.CryptoComponent;
@@ -12,6 +8,10 @@ import org.briarproject.api.data.ReaderFactory;
 import org.briarproject.api.data.WriterFactory;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.invitation.InvitationListener;
 import org.briarproject.api.invitation.InvitationState;
 import org.briarproject.api.invitation.InvitationTask;
diff --git a/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java b/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
index 7438deccd7..25cb8b8069 100644
--- a/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
+++ b/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
@@ -1,11 +1,11 @@
 package org.briarproject.invitation;
 
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.AuthorId;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.data.ReaderFactory;
 import org.briarproject.api.data.WriterFactory;
 import org.briarproject.api.db.DatabaseComponent;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.AuthorId;
 import org.briarproject.api.invitation.InvitationTask;
 import org.briarproject.api.invitation.InvitationTaskFactory;
 import org.briarproject.api.plugins.ConnectionManager;
diff --git a/briar-core/src/org/briarproject/plugins/ConnectionManagerImpl.java b/briar-core/src/org/briarproject/plugins/ConnectionManagerImpl.java
index 20c7fb49de..f3a31c83bc 100644
--- a/briar-core/src/org/briarproject/plugins/ConnectionManagerImpl.java
+++ b/briar-core/src/org/briarproject/plugins/ConnectionManagerImpl.java
@@ -1,7 +1,7 @@
 package org.briarproject.plugins;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.lifecycle.IoExecutor;
 import org.briarproject.api.plugins.ConnectionManager;
diff --git a/briar-core/src/org/briarproject/plugins/ConnectionRegistryImpl.java b/briar-core/src/org/briarproject/plugins/ConnectionRegistryImpl.java
index 66e6eb3db5..245a37dbb4 100644
--- a/briar-core/src/org/briarproject/plugins/ConnectionRegistryImpl.java
+++ b/briar-core/src/org/briarproject/plugins/ConnectionRegistryImpl.java
@@ -1,6 +1,13 @@
 package org.briarproject.plugins;
 
-import static java.util.logging.Level.INFO;
+import com.google.inject.Inject;
+
+import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.event.ContactConnectedEvent;
+import org.briarproject.api.event.ContactDisconnectedEvent;
+import org.briarproject.api.event.EventBus;
+import org.briarproject.api.plugins.ConnectionRegistry;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -12,14 +19,7 @@ import java.util.concurrent.locks.Lock;
 import java.util.concurrent.locks.ReentrantLock;
 import java.util.logging.Logger;
 
-import org.briarproject.api.ContactId;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.event.ContactConnectedEvent;
-import org.briarproject.api.event.ContactDisconnectedEvent;
-import org.briarproject.api.event.EventBus;
-import org.briarproject.api.plugins.ConnectionRegistry;
-
-import com.google.inject.Inject;
+import static java.util.logging.Level.INFO;
 
 class ConnectionRegistryImpl implements ConnectionRegistry {
 
@@ -109,7 +109,8 @@ class ConnectionRegistryImpl implements ConnectionRegistry {
 			Map<ContactId, Integer> m = connections.get(t);
 			if (m == null) return Collections.emptyList();
 			List<ContactId> ids = new ArrayList<ContactId>(m.keySet());
-			if (LOG.isLoggable(INFO)) LOG.info(ids.size() + " contacts connected");
+			if (LOG.isLoggable(INFO))
+				LOG.info(ids.size() + " contacts connected");
 			return Collections.unmodifiableList(ids);
 		} finally {
 			lock.unlock();
diff --git a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
index 4742d82513..e96254b04a 100644
--- a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
+++ b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
@@ -1,9 +1,9 @@
 package org.briarproject.plugins;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.event.EventBus;
diff --git a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java b/briar-core/src/org/briarproject/plugins/file/FilePlugin.java
index 3b11ebee51..3394995cfd 100644
--- a/briar-core/src/org/briarproject/plugins/file/FilePlugin.java
+++ b/briar-core/src/org/briarproject/plugins/file/FilePlugin.java
@@ -1,6 +1,6 @@
 package org.briarproject.plugins.file;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.TransportConnectionReader;
 import org.briarproject.api.plugins.TransportConnectionWriter;
 import org.briarproject.api.plugins.simplex.SimplexPlugin;
diff --git a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java b/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
index 48f731464f..3388de5f13 100644
--- a/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
+++ b/briar-core/src/org/briarproject/plugins/tcp/TcpPlugin.java
@@ -1,7 +1,12 @@
 package org.briarproject.plugins.tcp;
 
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
+import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.crypto.PseudoRandom;
+import org.briarproject.api.plugins.duplex.DuplexPlugin;
+import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
+import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
+import org.briarproject.util.StringUtils;
 
 import java.io.IOException;
 import java.net.InetAddress;
@@ -20,13 +25,8 @@ import java.util.concurrent.Executor;
 import java.util.logging.Logger;
 import java.util.regex.Pattern;
 
-import org.briarproject.api.ContactId;
-import org.briarproject.api.TransportProperties;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.util.StringUtils;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
 
 abstract class TcpPlugin implements DuplexPlugin {
 
@@ -91,7 +91,6 @@ abstract class TcpPlugin implements DuplexPlugin {
 						if (LOG.isLoggable(INFO))
 							LOG.info("Failed to bind " + addr);
 						tryToClose(ss);
-						continue;
 					}
 				}
 				if (ss == null || !ss.isBound()) {
diff --git a/briar-core/src/org/briarproject/sync/AuthorFactoryImpl.java b/briar-core/src/org/briarproject/sync/AuthorFactoryImpl.java
index c0cf59deb7..9f318112e3 100644
--- a/briar-core/src/org/briarproject/sync/AuthorFactoryImpl.java
+++ b/briar-core/src/org/briarproject/sync/AuthorFactoryImpl.java
@@ -1,13 +1,13 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.MessageDigest;
 import org.briarproject.api.data.Writer;
 import org.briarproject.api.data.WriterFactory;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.system.Clock;
 
 import java.io.ByteArrayOutputStream;
diff --git a/briar-core/src/org/briarproject/sync/AuthorReader.java b/briar-core/src/org/briarproject/sync/AuthorReader.java
index 22aa7a5f12..eb15f83317 100644
--- a/briar-core/src/org/briarproject/sync/AuthorReader.java
+++ b/briar-core/src/org/briarproject/sync/AuthorReader.java
@@ -1,17 +1,17 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.MessageDigest;
 import org.briarproject.api.data.ObjectReader;
 import org.briarproject.api.data.Reader;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
 
 import java.io.IOException;
 
-import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
-import static org.briarproject.api.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 
 class AuthorReader implements ObjectReader<Author> {
 
diff --git a/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java b/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java
index 2153a0ea83..0a8751b2b7 100644
--- a/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java
+++ b/briar-core/src/org/briarproject/sync/DuplexOutgoingSession.java
@@ -1,7 +1,7 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.event.ContactRemovedEvent;
diff --git a/briar-core/src/org/briarproject/sync/IncomingSession.java b/briar-core/src/org/briarproject/sync/IncomingSession.java
index 44d36bc701..907ffaf195 100644
--- a/briar-core/src/org/briarproject/sync/IncomingSession.java
+++ b/briar-core/src/org/briarproject/sync/IncomingSession.java
@@ -1,8 +1,8 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.event.ContactRemovedEvent;
diff --git a/briar-core/src/org/briarproject/sync/MessageFactoryImpl.java b/briar-core/src/org/briarproject/sync/MessageFactoryImpl.java
index 9b7e4c4b7a..209b71362a 100644
--- a/briar-core/src/org/briarproject/sync/MessageFactoryImpl.java
+++ b/briar-core/src/org/briarproject/sync/MessageFactoryImpl.java
@@ -1,6 +1,5 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.Author;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.MessageDigest;
 import org.briarproject.api.crypto.PrivateKey;
@@ -8,6 +7,7 @@ import org.briarproject.api.crypto.Signature;
 import org.briarproject.api.data.Consumer;
 import org.briarproject.api.data.Writer;
 import org.briarproject.api.data.WriterFactory;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.Message;
 import org.briarproject.api.sync.MessageFactory;
@@ -21,7 +21,7 @@ import java.security.SecureRandom;
 
 import javax.inject.Inject;
 
-import static org.briarproject.api.AuthorConstants.MAX_SIGNATURE_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_BODY_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_CONTENT_TYPE_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_PAYLOAD_LENGTH;
@@ -78,7 +78,7 @@ class MessageFactoryImpl implements MessageFactory {
 		Consumer signingConsumer = null;
 		if (privateKey != null) {
 			signature.initSign(privateKey);
-			signingConsumer = new org.briarproject.sync.SigningConsumer(signature);
+			signingConsumer = new SigningConsumer(signature);
 			w.addConsumer(signingConsumer);
 		}
 		// Write the message
@@ -109,7 +109,7 @@ class MessageFactoryImpl implements MessageFactory {
 		// Hash the message, including the signature, to get the message ID
 		w.removeConsumer(digestingConsumer);
 		MessageId id = new MessageId(messageDigest.digest());
-		return new org.briarproject.sync.MessageImpl(id, parent, group, author, contentType,
+		return new MessageImpl(id, parent, group, author, contentType,
 				timestamp, out.toByteArray(), bodyStart, body.length);
 	}
 
diff --git a/briar-core/src/org/briarproject/sync/MessageImpl.java b/briar-core/src/org/briarproject/sync/MessageImpl.java
index 761d2e9b6e..dc2f7af170 100644
--- a/briar-core/src/org/briarproject/sync/MessageImpl.java
+++ b/briar-core/src/org/briarproject/sync/MessageImpl.java
@@ -1,6 +1,6 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.Author;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.Message;
 import org.briarproject.api.sync.MessageId;
diff --git a/briar-core/src/org/briarproject/sync/MessageReader.java b/briar-core/src/org/briarproject/sync/MessageReader.java
index fc549af831..f96c964f0b 100644
--- a/briar-core/src/org/briarproject/sync/MessageReader.java
+++ b/briar-core/src/org/briarproject/sync/MessageReader.java
@@ -1,17 +1,17 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.Author;
 import org.briarproject.api.FormatException;
 import org.briarproject.api.UniqueId;
 import org.briarproject.api.data.ObjectReader;
 import org.briarproject.api.data.Reader;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.MessageId;
 import org.briarproject.api.sync.UnverifiedMessage;
 
 import java.io.IOException;
 
-import static org.briarproject.api.AuthorConstants.MAX_SIGNATURE_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_BODY_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_CONTENT_TYPE_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_PAYLOAD_LENGTH;
diff --git a/briar-core/src/org/briarproject/sync/MessageVerifierImpl.java b/briar-core/src/org/briarproject/sync/MessageVerifierImpl.java
index 9c38f3b7b2..13fc03abb5 100644
--- a/briar-core/src/org/briarproject/sync/MessageVerifierImpl.java
+++ b/briar-core/src/org/briarproject/sync/MessageVerifierImpl.java
@@ -1,11 +1,11 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.Author;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.KeyParser;
 import org.briarproject.api.crypto.MessageDigest;
 import org.briarproject.api.crypto.PublicKey;
 import org.briarproject.api.crypto.Signature;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.Message;
 import org.briarproject.api.sync.MessageId;
 import org.briarproject.api.sync.MessageVerifier;
diff --git a/briar-core/src/org/briarproject/sync/MessagingModule.java b/briar-core/src/org/briarproject/sync/MessagingModule.java
index 205ca47177..d73de1a7c5 100644
--- a/briar-core/src/org/briarproject/sync/MessagingModule.java
+++ b/briar-core/src/org/briarproject/sync/MessagingModule.java
@@ -3,10 +3,10 @@ package org.briarproject.sync;
 import com.google.inject.AbstractModule;
 import com.google.inject.Provides;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.data.ObjectReader;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupFactory;
 import org.briarproject.api.sync.MessageFactory;
@@ -47,7 +47,7 @@ public class MessagingModule extends AbstractModule {
 	ObjectReader<UnverifiedMessage> getMessageReader(
 			ObjectReader<Group> groupReader,
 			ObjectReader<Author> authorReader) {
-		return new org.briarproject.sync.MessageReader(groupReader, authorReader);
+		return new MessageReader(groupReader, authorReader);
 	}
 
 	@Provides
diff --git a/briar-core/src/org/briarproject/sync/MessagingSessionFactoryImpl.java b/briar-core/src/org/briarproject/sync/MessagingSessionFactoryImpl.java
index 13c14244c0..ef3317dc87 100644
--- a/briar-core/src/org/briarproject/sync/MessagingSessionFactoryImpl.java
+++ b/briar-core/src/org/briarproject/sync/MessagingSessionFactoryImpl.java
@@ -1,7 +1,7 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.CryptoExecutor;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DatabaseExecutor;
diff --git a/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java b/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java
index cfa7c6899c..ace1d016cf 100644
--- a/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java
+++ b/briar-core/src/org/briarproject/sync/SimplexOutgoingSession.java
@@ -1,7 +1,7 @@
 package org.briarproject.sync;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.event.ContactRemovedEvent;
diff --git a/briar-core/src/org/briarproject/transport/KeyManagerImpl.java b/briar-core/src/org/briarproject/transport/KeyManagerImpl.java
index 64dbe14e3f..c25008141c 100644
--- a/briar-core/src/org/briarproject/transport/KeyManagerImpl.java
+++ b/briar-core/src/org/briarproject/transport/KeyManagerImpl.java
@@ -1,7 +1,7 @@
 package org.briarproject.transport;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DatabaseExecutor;
diff --git a/briar-core/src/org/briarproject/transport/TransportKeyManager.java b/briar-core/src/org/briarproject/transport/TransportKeyManager.java
index 7818c356ef..19e49a89cc 100644
--- a/briar-core/src/org/briarproject/transport/TransportKeyManager.java
+++ b/briar-core/src/org/briarproject/transport/TransportKeyManager.java
@@ -1,8 +1,8 @@
 package org.briarproject.transport;
 
 import org.briarproject.api.Bytes;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
diff --git a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
index 792db1398d..1796d9a6a7 100644
--- a/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
+++ b/briar-desktop/src/org/briarproject/plugins/bluetooth/BluetoothPlugin.java
@@ -1,8 +1,16 @@
 package org.briarproject.plugins.bluetooth;
 
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-import static javax.bluetooth.DiscoveryAgent.GIAC;
+import org.briarproject.api.TransportId;
+import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
+import org.briarproject.api.crypto.PseudoRandom;
+import org.briarproject.api.plugins.duplex.DuplexPlugin;
+import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
+import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
+import org.briarproject.api.system.Clock;
+import org.briarproject.util.LatchedReference;
+import org.briarproject.util.OsUtils;
+import org.briarproject.util.StringUtils;
 
 import java.io.IOException;
 import java.security.SecureRandom;
@@ -21,17 +29,9 @@ import javax.microedition.io.Connector;
 import javax.microedition.io.StreamConnection;
 import javax.microedition.io.StreamConnectionNotifier;
 
-import org.briarproject.api.ContactId;
-import org.briarproject.api.TransportId;
-import org.briarproject.api.TransportProperties;
-import org.briarproject.api.crypto.PseudoRandom;
-import org.briarproject.api.plugins.duplex.DuplexPlugin;
-import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
-import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
-import org.briarproject.api.system.Clock;
-import org.briarproject.util.LatchedReference;
-import org.briarproject.util.OsUtils;
-import org.briarproject.util.StringUtils;
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+import static javax.bluetooth.DiscoveryAgent.GIAC;
 
 class BluetoothPlugin implements DuplexPlugin {
 
diff --git a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
index 1042ad77b6..116143225f 100644
--- a/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
+++ b/briar-desktop/src/org/briarproject/plugins/file/RemovableDrivePlugin.java
@@ -1,7 +1,7 @@
 package org.briarproject.plugins.file;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
 
 import java.io.File;
diff --git a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java b/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
index 48f8b34871..fdfeb52c30 100644
--- a/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
+++ b/briar-desktop/src/org/briarproject/plugins/modem/ModemPlugin.java
@@ -1,19 +1,8 @@
 package org.briarproject.plugins.modem;
 
-import static java.util.logging.Level.INFO;
-import static java.util.logging.Level.WARNING;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.util.Collection;
-import java.util.concurrent.CountDownLatch;
-import java.util.concurrent.atomic.AtomicBoolean;
-import java.util.logging.Logger;
-
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.PseudoRandom;
 import org.briarproject.api.plugins.TransportConnectionReader;
 import org.briarproject.api.plugins.TransportConnectionWriter;
@@ -22,6 +11,17 @@ import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
 import org.briarproject.util.StringUtils;
 
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.Collection;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.logging.Logger;
+
+import static java.util.logging.Level.INFO;
+import static java.util.logging.Level.WARNING;
+
 class ModemPlugin implements DuplexPlugin, Modem.Callback {
 
 	static final TransportId ID = new TransportId("modem");
@@ -195,7 +195,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
 		private class Reader implements TransportConnectionReader {
 
 			public long getMaxLatency() {
-				return maxLatency;
+				return ModemPlugin.this.getMaxLatency();
 			}
 
 			public InputStream getInputStream() throws IOException {
@@ -211,11 +211,11 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
 		private class Writer implements TransportConnectionWriter {
 
 			public int getMaxLatency() {
-				return getMaxLatency();
+				return ModemPlugin.this.getMaxLatency();
 			}
 
 			public int getMaxIdleTime() {
-				return getMaxIdleTime();
+				return ModemPlugin.this.getMaxIdleTime();
 			}
 
 			public long getCapacity() {
diff --git a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
index e449d1e480..d942de487f 100644
--- a/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/ProtocolIntegrationTest.java
@@ -3,14 +3,14 @@ package org.briarproject;
 import com.google.inject.Guice;
 import com.google.inject.Injector;
 
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.KeyPair;
 import org.briarproject.api.crypto.SecretKey;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
 import org.briarproject.api.sync.Ack;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupFactory;
diff --git a/briar-tests/src/org/briarproject/TestMessage.java b/briar-tests/src/org/briarproject/TestMessage.java
index bea7d78e83..a8ffc3cb3a 100644
--- a/briar-tests/src/org/briarproject/TestMessage.java
+++ b/briar-tests/src/org/briarproject/TestMessage.java
@@ -1,39 +1,34 @@
 package org.briarproject;
 
-import org.briarproject.api.Author;
+import org.briarproject.api.identity.Author;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.Message;
 import org.briarproject.api.sync.MessageId;
 
-import java.io.ByteArrayInputStream;
-import java.io.InputStream;
-
 public class TestMessage implements Message {
 
 	private final MessageId id, parent;
 	private final Group group;
 	private final Author author;
-	private final String contentType, subject;
+	private final String contentType;
 	private final long timestamp;
 	private final byte[] raw;
 	private final int bodyStart, bodyLength;
 
 	public TestMessage(MessageId id, MessageId parent, Group group,
-			Author author, String contentType, String subject, long timestamp,
-			byte[] raw) {
-		this(id, parent, group, author, contentType, subject, timestamp, raw, 0,
+			Author author, String contentType, long timestamp, byte[] raw) {
+		this(id, parent, group, author, contentType, timestamp, raw, 0,
 				raw.length);
 	}
 
 	public TestMessage(MessageId id, MessageId parent, Group group,
-			Author author, String contentType, String subject, long timestamp,
-			byte[] raw, int bodyStart, int bodyLength) {
+			Author author, String contentType, long timestamp, byte[] raw,
+			int bodyStart, int bodyLength) {
 		this.id = id;
 		this.parent = parent;
 		this.group = group;
 		this.author = author;
 		this.contentType = contentType;
-		this.subject = subject;
 		this.timestamp = timestamp;
 		this.raw = raw;
 		this.bodyStart = bodyStart;
@@ -60,10 +55,6 @@ public class TestMessage implements Message {
 		return contentType;
 	}
 
-	public String getSubject() {
-		return subject;
-	}
-
 	public long getTimestamp() {
 		return timestamp;
 	}
@@ -80,10 +71,6 @@ public class TestMessage implements Message {
 		return bodyLength;
 	}
 
-	public InputStream getSerialisedStream() {
-		return new ByteArrayInputStream(raw);
-	}
-
 	@Override
 	public int hashCode() {
 		return id.hashCode();
diff --git a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
index 5f1b36ed27..98115c6c76 100644
--- a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
+++ b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
@@ -3,14 +3,11 @@ package org.briarproject.db;
 import org.briarproject.BriarTestCase;
 import org.briarproject.TestMessage;
 import org.briarproject.TestUtils;
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.Contact;
-import org.briarproject.api.ContactId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.Contact;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.NoSuchContactException;
@@ -32,6 +29,9 @@ import org.briarproject.api.event.MessagesAckedEvent;
 import org.briarproject.api.event.MessagesSentEvent;
 import org.briarproject.api.event.SubscriptionAddedEvent;
 import org.briarproject.api.event.SubscriptionRemovedEvent;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.lifecycle.ShutdownManager;
 import org.briarproject.api.sync.Ack;
 import org.briarproject.api.sync.Group;
@@ -55,7 +55,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
-import static org.briarproject.api.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.GROUP_SALT_LENGTH;
 import static org.briarproject.db.DatabaseConstants.MAX_OFFERED_MESSAGES;
 import static org.junit.Assert.assertEquals;
@@ -74,7 +74,7 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 	protected final AuthorId localAuthorId;
 	protected final LocalAuthor localAuthor;
 	protected final MessageId messageId, messageId1;
-	protected final String contentType, subject;
+	protected final String contentType;
 	protected final long timestamp;
 	protected final int size;
 	protected final byte[] raw;
@@ -96,14 +96,13 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 		messageId = new MessageId(TestUtils.getRandomId());
 		messageId1 = new MessageId(TestUtils.getRandomId());
 		contentType = "text/plain";
-		subject = "Foo";
 		timestamp = System.currentTimeMillis();
 		size = 1234;
 		raw = new byte[size];
 		message = new TestMessage(messageId, null, group, author, contentType,
-				subject, timestamp, raw);
+				timestamp, raw);
 		message1 = new TestMessage(messageId1, messageId, group, null,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		transportId = new TransportId("id");
 		transportProperties = new TransportProperties(Collections.singletonMap(
 				"bar", "baz"));
diff --git a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
index 2a42f5ea5f..41efa0ec6d 100644
--- a/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
+++ b/briar-tests/src/org/briarproject/db/H2DatabaseTest.java
@@ -4,15 +4,15 @@ import org.briarproject.BriarTestCase;
 import org.briarproject.TestDatabaseConfig;
 import org.briarproject.TestMessage;
 import org.briarproject.TestUtils;
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.ContactId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.db.DbException;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
 import org.briarproject.api.sync.Message;
@@ -41,7 +41,7 @@ import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.atomic.AtomicBoolean;
 
 import static java.util.concurrent.TimeUnit.SECONDS;
-import static org.briarproject.api.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.api.sync.MessageHeader.State.STORED;
 import static org.briarproject.api.sync.MessagingConstants.GROUP_SALT_LENGTH;
 import static org.junit.Assert.assertArrayEquals;
@@ -65,7 +65,7 @@ public class H2DatabaseTest extends BriarTestCase {
 	private final AuthorId localAuthorId;
 	private final LocalAuthor localAuthor;
 	private final MessageId messageId;
-	private final String contentType, subject;
+	private final String contentType;
 	private final long timestamp;
 	private final int size;
 	private final byte[] raw;
@@ -83,13 +83,12 @@ public class H2DatabaseTest extends BriarTestCase {
 				new byte[MAX_PUBLIC_KEY_LENGTH], new byte[100], 1234);
 		messageId = new MessageId(TestUtils.getRandomId());
 		contentType = "text/plain";
-		subject = "Foo";
 		timestamp = System.currentTimeMillis();
 		size = 1234;
 		raw = new byte[size];
 		random.nextBytes(raw);
 		message = new TestMessage(messageId, null, group, author, contentType,
-				subject, timestamp, raw);
+				timestamp, raw);
 		transportId = new TransportId("id");
 		contactId = new ContactId(1);
 	}
@@ -311,7 +310,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		// Add some messages to ack
 		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
 		Message message1 = new TestMessage(messageId1, null, group, author,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, message, true);
 		db.addStatus(txn, contactId, messageId, false, true);
 		db.raiseAckFlag(txn, contactId, messageId);
@@ -408,7 +407,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		byte[] largeBody = new byte[ONE_MEGABYTE];
 		for (int i = 0; i < largeBody.length; i++) largeBody[i] = (byte) i;
 		Message message = new TestMessage(messageId, null, group, author,
-				contentType, subject, timestamp, largeBody);
+				contentType, timestamp, largeBody);
 		Database<Connection> db = open(false);
 
 		// Sanity check: there should be enough space on disk for this test
@@ -730,7 +729,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		// A message with no parent should return null
 		MessageId childId = new MessageId(TestUtils.getRandomId());
 		Message child = new TestMessage(childId, null, group, null, contentType,
-				subject, timestamp, raw);
+				timestamp, raw);
 		db.addMessage(txn, child, true);
 		assertTrue(db.containsMessage(txn, childId));
 		assertNull(db.getParent(txn, childId));
@@ -751,7 +750,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		MessageId childId = new MessageId(TestUtils.getRandomId());
 		MessageId parentId = new MessageId(TestUtils.getRandomId());
 		Message child = new TestMessage(childId, parentId, group, null,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, child, true);
 		assertTrue(db.containsMessage(txn, childId));
 		assertFalse(db.containsMessage(txn, parentId));
@@ -777,9 +776,9 @@ public class H2DatabaseTest extends BriarTestCase {
 		MessageId childId = new MessageId(TestUtils.getRandomId());
 		MessageId parentId = new MessageId(TestUtils.getRandomId());
 		Message child = new TestMessage(childId, parentId, group, null,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		Message parent = new TestMessage(parentId, null, group1, null,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, child, true);
 		db.addMessage(txn, parent, true);
 		assertTrue(db.containsMessage(txn, childId));
@@ -802,9 +801,9 @@ public class H2DatabaseTest extends BriarTestCase {
 		MessageId childId = new MessageId(TestUtils.getRandomId());
 		MessageId parentId = new MessageId(TestUtils.getRandomId());
 		Message child = new TestMessage(childId, parentId, group, null,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		Message parent = new TestMessage(parentId, null, group, null,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, child, true);
 		db.addMessage(txn, parent, true);
 		assertTrue(db.containsMessage(txn, childId));
@@ -828,10 +827,10 @@ public class H2DatabaseTest extends BriarTestCase {
 		// Store a couple of messages
 		int bodyLength = raw.length - 20;
 		Message message = new TestMessage(messageId, null, group, null,
-				contentType, subject, timestamp, raw, 5, bodyLength);
+				contentType, timestamp, raw, 5, bodyLength);
 		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
 		Message message1 = new TestMessage(messageId1, null, group, null,
-				contentType, subject, timestamp, raw, 10, bodyLength);
+				contentType, timestamp, raw, 10, bodyLength);
 		db.addMessage(txn, message, true);
 		db.addMessage(txn, message1, true);
 
@@ -871,7 +870,7 @@ public class H2DatabaseTest extends BriarTestCase {
 		MessageId parentId = new MessageId(TestUtils.getRandomId());
 		long timestamp1 = System.currentTimeMillis();
 		Message message1 = new TestMessage(messageId1, parentId, group, author,
-				contentType, subject, timestamp1, raw);
+				contentType, timestamp1, raw);
 		db.addMessage(txn, message1, true);
 		// Mark one of the messages read
 		db.setReadFlag(txn, messageId, true);
@@ -930,12 +929,12 @@ public class H2DatabaseTest extends BriarTestCase {
 				new byte[MAX_PUBLIC_KEY_LENGTH]);
 		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
 		Message message1 = new TestMessage(messageId1, null, group, author1,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, message1, true);
 		// Store an anonymous message - status ANONYMOUS
 		MessageId messageId2 = new MessageId(TestUtils.getRandomId());
 		Message message2 = new TestMessage(messageId2, null, group, null,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, message2, true);
 
 		// Retrieve the message headers (order is undefined)
@@ -1008,13 +1007,13 @@ public class H2DatabaseTest extends BriarTestCase {
 		db.addMessage(txn, message, true);
 		MessageId messageId1 = new MessageId(TestUtils.getRandomId());
 		Message message1 = new TestMessage(messageId1, null, group, author,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, message1, true);
 
 		// Store one message in the second group
 		MessageId messageId2 = new MessageId(TestUtils.getRandomId());
 		Message message2 = new TestMessage(messageId2, null, group1, author,
-				contentType, subject, timestamp, raw);
+				contentType, timestamp, raw);
 		db.addMessage(txn, message2, true);
 
 		// Mark one of the messages in the first group read
diff --git a/briar-tests/src/org/briarproject/plugins/ConnectionRegistryImplTest.java b/briar-tests/src/org/briarproject/plugins/ConnectionRegistryImplTest.java
index a31d912401..8ea235249b 100644
--- a/briar-tests/src/org/briarproject/plugins/ConnectionRegistryImplTest.java
+++ b/briar-tests/src/org/briarproject/plugins/ConnectionRegistryImplTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.plugins;
 
 import org.briarproject.BriarTestCase;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.event.ContactConnectedEvent;
 import org.briarproject.api.event.ContactDisconnectedEvent;
 import org.briarproject.api.event.EventBus;
@@ -11,7 +11,6 @@ import org.jmock.Expectations;
 import org.jmock.Mockery;
 import org.junit.Test;
 
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -52,19 +51,19 @@ public class ConnectionRegistryImplTest extends BriarTestCase {
 		// Check that a registered connection shows up - this should
 		// broadcast a ContactConnectedEvent
 		c.registerConnection(contactId, transportId);
-		assertEquals(Arrays.asList(contactId),
+		assertEquals(Collections.singletonList(contactId),
 				c.getConnectedContacts(transportId));
 		assertEquals(Collections.emptyList(),
 				c.getConnectedContacts(transportId1));
 		// Register an identical connection - lookup should be unaffected
 		c.registerConnection(contactId, transportId);
-		assertEquals(Arrays.asList(contactId),
+		assertEquals(Collections.singletonList(contactId),
 				c.getConnectedContacts(transportId));
 		assertEquals(Collections.emptyList(),
 				c.getConnectedContacts(transportId1));
 		// Unregister one of the connections - lookup should be unaffected
 		c.unregisterConnection(contactId, transportId);
-		assertEquals(Arrays.asList(contactId),
+		assertEquals(Collections.singletonList(contactId),
 				c.getConnectedContacts(transportId));
 		assertEquals(Collections.emptyList(),
 				c.getConnectedContacts(transportId1));
@@ -79,7 +78,9 @@ public class ConnectionRegistryImplTest extends BriarTestCase {
 		try {
 			c.unregisterConnection(contactId, transportId);
 			fail();
-		} catch (IllegalArgumentException expected) {}
+		} catch (IllegalArgumentException expected) {
+			// Expected
+		}
 		// Register both contacts with one transport, one contact with both -
 		// this should broadcast two ContactConnectedEvents
 		c.registerConnection(contactId, transportId);
@@ -89,7 +90,7 @@ public class ConnectionRegistryImplTest extends BriarTestCase {
 		assertEquals(2, connected.size());
 		assertTrue(connected.contains(contactId));
 		assertTrue(connected.contains(contactId1));
-		assertEquals(Arrays.asList(contactId1),
+		assertEquals(Collections.singletonList(contactId1),
 				c.getConnectedContacts(transportId1));
 		context.assertIsSatisfied();
 	}
diff --git a/briar-tests/src/org/briarproject/plugins/DuplexClientTest.java b/briar-tests/src/org/briarproject/plugins/DuplexClientTest.java
index a32cf9683b..640632b4de 100644
--- a/briar-tests/src/org/briarproject/plugins/DuplexClientTest.java
+++ b/briar-tests/src/org/briarproject/plugins/DuplexClientTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.plugins;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.PseudoRandom;
 import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
@@ -45,7 +45,6 @@ public abstract class DuplexClientTest extends DuplexTest {
 			d = plugin.createInvitationConnection(r, CONNECTION_TIMEOUT);
 			if (d == null) {
 				System.out.println("Connection failed");
-				return;
 			} else {
 				System.out.println("Connection created");
 				sendChallengeReceiveResponse(d);
diff --git a/briar-tests/src/org/briarproject/plugins/DuplexServerTest.java b/briar-tests/src/org/briarproject/plugins/DuplexServerTest.java
index daf3c47407..134bf36b69 100644
--- a/briar-tests/src/org/briarproject/plugins/DuplexServerTest.java
+++ b/briar-tests/src/org/briarproject/plugins/DuplexServerTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.plugins;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
 
@@ -42,7 +42,6 @@ public abstract class DuplexServerTest extends DuplexTest {
 					getPseudoRandom(123), CONNECTION_TIMEOUT);
 			if (d == null) {
 				System.out.println("Connection failed");
-				return;
 			} else {
 				System.out.println("Connection created");
 				receiveChallengeSendResponse(d);
diff --git a/briar-tests/src/org/briarproject/plugins/DuplexTest.java b/briar-tests/src/org/briarproject/plugins/DuplexTest.java
index 5d54e12c1f..d20418a3f5 100644
--- a/briar-tests/src/org/briarproject/plugins/DuplexTest.java
+++ b/briar-tests/src/org/briarproject/plugins/DuplexTest.java
@@ -1,6 +1,6 @@
 package org.briarproject.plugins;
 
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.PseudoRandom;
 import org.briarproject.api.plugins.TransportConnectionReader;
 import org.briarproject.api.plugins.TransportConnectionWriter;
diff --git a/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java b/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java
index fdf768548e..02e0a343ef 100644
--- a/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java
+++ b/briar-tests/src/org/briarproject/plugins/bluetooth/BluetoothClientTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.plugins.bluetooth;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.plugins.DuplexClientTest;
 import org.briarproject.system.SystemClock;
 
diff --git a/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java b/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java
index 58cce58ac6..6a28037028 100644
--- a/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java
+++ b/briar-tests/src/org/briarproject/plugins/file/RemovableDrivePluginTest.java
@@ -2,7 +2,7 @@ package org.briarproject.plugins.file;
 
 import org.briarproject.BriarTestCase;
 import org.briarproject.TestUtils;
-import org.briarproject.api.ContactId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.TransportConnectionWriter;
 import org.briarproject.api.plugins.simplex.SimplexPluginCallback;
 import org.briarproject.plugins.ImmediateExecutor;
diff --git a/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java b/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java
index f186355b52..10f885130f 100644
--- a/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java
+++ b/briar-tests/src/org/briarproject/plugins/modem/ModemPluginTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.plugins.modem;
 
 import org.briarproject.BriarTestCase;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
 import org.jmock.Expectations;
 import org.jmock.Mockery;
diff --git a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java
index ac6bfb305a..4975d78c10 100644
--- a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java
+++ b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpClientTest.java
@@ -1,8 +1,8 @@
 package org.briarproject.plugins.tcp;
 
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.plugins.DuplexClientTest;
 
 import java.util.Collections;
diff --git a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java
index 575b8f136e..96f730d3c7 100644
--- a/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java
+++ b/briar-tests/src/org/briarproject/plugins/tcp/LanTcpPluginTest.java
@@ -1,9 +1,9 @@
 package org.briarproject.plugins.tcp;
 
 import org.briarproject.BriarTestCase;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportConfig;
 import org.briarproject.api.TransportProperties;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.plugins.duplex.DuplexPlugin;
 import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
diff --git a/briar-tests/src/org/briarproject/sync/ConstantsTest.java b/briar-tests/src/org/briarproject/sync/ConstantsTest.java
index 6a935970e8..c823206a49 100644
--- a/briar-tests/src/org/briarproject/sync/ConstantsTest.java
+++ b/briar-tests/src/org/briarproject/sync/ConstantsTest.java
@@ -8,8 +8,6 @@ import org.briarproject.TestDatabaseModule;
 import org.briarproject.TestLifecycleModule;
 import org.briarproject.TestSystemModule;
 import org.briarproject.TestUtils;
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorFactory;
 import org.briarproject.api.TransportId;
 import org.briarproject.api.TransportProperties;
 import org.briarproject.api.UniqueId;
@@ -17,6 +15,8 @@ import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.KeyPair;
 import org.briarproject.api.crypto.PrivateKey;
 import org.briarproject.api.crypto.Signature;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorFactory;
 import org.briarproject.api.sync.Ack;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupFactory;
@@ -40,12 +40,12 @@ import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Random;
 
-import static org.briarproject.api.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
-import static org.briarproject.api.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
-import static org.briarproject.api.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTIES_PER_TRANSPORT;
 import static org.briarproject.api.TransportPropertyConstants.MAX_PROPERTY_LENGTH;
 import static org.briarproject.api.TransportPropertyConstants.MAX_TRANSPORT_ID_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_AUTHOR_NAME_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_SIGNATURE_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_BODY_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_CONTENT_TYPE_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.MAX_GROUP_NAME_LENGTH;
diff --git a/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java b/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java
index 9c0308b7b6..04db6db752 100644
--- a/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java
+++ b/briar-tests/src/org/briarproject/sync/SimplexMessagingIntegrationTest.java
@@ -8,11 +8,8 @@ import org.briarproject.TestDatabaseModule;
 import org.briarproject.TestLifecycleModule;
 import org.briarproject.TestSystemModule;
 import org.briarproject.TestUtils;
-import org.briarproject.api.Author;
-import org.briarproject.api.AuthorId;
-import org.briarproject.api.ContactId;
-import org.briarproject.api.LocalAuthor;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.db.DatabaseComponent;
@@ -20,6 +17,9 @@ import org.briarproject.api.event.Event;
 import org.briarproject.api.event.EventBus;
 import org.briarproject.api.event.EventListener;
 import org.briarproject.api.event.MessageAddedEvent;
+import org.briarproject.api.identity.Author;
+import org.briarproject.api.identity.AuthorId;
+import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupFactory;
 import org.briarproject.api.sync.Message;
@@ -52,7 +52,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.Collections;
 
-import static org.briarproject.api.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
+import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.api.sync.MessagingConstants.GROUP_SALT_LENGTH;
 import static org.briarproject.api.transport.TransportConstants.MAX_CLOCK_DIFFERENCE;
 import static org.briarproject.api.transport.TransportConstants.TAG_LENGTH;
diff --git a/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java b/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java
index 714e024302..1848bad7fc 100644
--- a/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java
+++ b/briar-tests/src/org/briarproject/sync/SimplexOutgoingSessionTest.java
@@ -2,8 +2,8 @@ package org.briarproject.sync;
 
 import org.briarproject.BriarTestCase;
 import org.briarproject.TestUtils;
-import org.briarproject.api.ContactId;
 import org.briarproject.api.TransportId;
+import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.event.EventBus;
 import org.briarproject.api.sync.Ack;
-- 
GitLab