diff --git a/briar-api/src/org/briarproject/api/clients/ClientHelper.java b/briar-api/src/org/briarproject/api/clients/ClientHelper.java
index a3524d2767d17e188249ec3390b140c283e4021a..d4625af665fbec6876b330e780a6a9d3b1121cbd 100644
--- a/briar-api/src/org/briarproject/api/clients/ClientHelper.java
+++ b/briar-api/src/org/briarproject/api/clients/ClientHelper.java
@@ -72,7 +72,7 @@ public interface ClientHelper {
 	/**
 	 * Marks the given message as shared or unshared with other contacts.
 	 */
-	void setMessageShared(Transaction txn, Message m, boolean shared)
+	void setMessageShared(Transaction txn, MessageId m, boolean shared)
 			throws DbException;
 
 	byte[] toByteArray(BdfDictionary dictionary) throws FormatException;
diff --git a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
index 735f64a21fedb927bcc60b3d8cfb8d83339b8fe3..d3dbace30d300d794fa593ab6ecec34f0ff4d7cb 100644
--- a/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
+++ b/briar-api/src/org/briarproject/api/db/DatabaseComponent.java
@@ -437,7 +437,7 @@ public interface DatabaseComponent {
 	/**
 	 * Marks the given message as shared or unshared.
 	 */
-	void setMessageShared(Transaction txn, Message m, boolean shared)
+	void setMessageShared(Transaction txn, MessageId m, boolean shared)
 			throws DbException;
 
 	/**
diff --git a/briar-api/src/org/briarproject/api/event/MessageSharedEvent.java b/briar-api/src/org/briarproject/api/event/MessageSharedEvent.java
index d011e8c3ebe5394e2dccb13c22f423c827db725e..840c7cc42d6808497f98bea0cbde985e008ccbb5 100644
--- a/briar-api/src/org/briarproject/api/event/MessageSharedEvent.java
+++ b/briar-api/src/org/briarproject/api/event/MessageSharedEvent.java
@@ -1,17 +1,17 @@
 package org.briarproject.api.event;
 
-import org.briarproject.api.sync.Message;
+import org.briarproject.api.sync.MessageId;
 
 /** An event that is broadcast when a message is shared. */
 public class MessageSharedEvent extends Event {
 
-	private final Message message;
+	private final MessageId messageId;
 
-	public MessageSharedEvent(Message message) {
-		this.message = message;
+	public MessageSharedEvent(MessageId message) {
+		this.messageId = message;
 	}
 
-	public Message getMessage() {
-		return message;
+	public MessageId getMessageId() {
+		return messageId;
 	}
 }
diff --git a/briar-core/src/org/briarproject/clients/ClientHelperImpl.java b/briar-core/src/org/briarproject/clients/ClientHelperImpl.java
index 00778b6b6dab5391c14bf6eff58db8a49ca6f66c..5612e06b88f243ff30a19e743c5e4403827362a4 100644
--- a/briar-core/src/org/briarproject/clients/ClientHelperImpl.java
+++ b/briar-core/src/org/briarproject/clients/ClientHelperImpl.java
@@ -240,7 +240,7 @@ class ClientHelperImpl implements ClientHelper {
 	}
 
 	@Override
-	public void setMessageShared(Transaction txn, Message m, boolean shared)
+	public void setMessageShared(Transaction txn, MessageId m, boolean shared)
 			throws DbException {
 		db.setMessageShared(txn, m, shared);
 	}
diff --git a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
index 1039a69e07bfa5467f48ac9084c29e15907afb47..01a2d9a96df25e5a22800ba37b888a66d729bf26 100644
--- a/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
+++ b/briar-core/src/org/briarproject/db/DatabaseComponentImpl.java
@@ -199,7 +199,7 @@ class DatabaseComponentImpl<T> implements DatabaseComponent {
 			transaction.attach(new MessageAddedEvent(m, null));
 			transaction.attach(new MessageStateChangedEvent(m, c, true,
 					DELIVERED));
-			if (shared) transaction.attach(new MessageSharedEvent(m));
+			if (shared) transaction.attach(new MessageSharedEvent(m.getId()));
 		}
 		db.mergeMessageMetadata(txn, m.getId(), meta);
 	}
@@ -704,13 +704,13 @@ class DatabaseComponentImpl<T> implements DatabaseComponent {
 		transaction.attach(new ContactStatusChangedEvent(c, active));
 	}
 
-	public void setMessageShared(Transaction transaction, Message m,
+	public void setMessageShared(Transaction transaction, MessageId m,
 			boolean shared) throws DbException {
 		if (transaction.isReadOnly()) throw new IllegalArgumentException();
 		T txn = unbox(transaction);
-		if (!db.containsMessage(txn, m.getId()))
+		if (!db.containsMessage(txn, m))
 			throw new NoSuchMessageException();
-		db.setMessageShared(txn, m.getId(), shared);
+		db.setMessageShared(txn, m, shared);
 		if (shared) transaction.attach(new MessageSharedEvent(m));
 	}
 
diff --git a/briar-core/src/org/briarproject/forum/ForumManagerImpl.java b/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
index 84f28dbf995daf4099f25a8cbfba5f286859bde7..b33842fc3b65ab9b0598bcd8445ff3943b31e9b3 100644
--- a/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
+++ b/briar-core/src/org/briarproject/forum/ForumManagerImpl.java
@@ -78,7 +78,7 @@ class ForumManagerImpl extends BdfIncomingMessageHook implements ForumManager {
 	protected void incomingMessage(Transaction txn, Message m, BdfList body,
 			BdfDictionary meta) throws DbException, FormatException {
 
-		clientHelper.setMessageShared(txn, m, true);
+		clientHelper.setMessageShared(txn, m.getId(), true);
 
 		ForumPostHeader post = getForumPostHeader(txn, m.getId(), meta);
 		ForumPostReceivedEvent event =
diff --git a/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java b/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java
index 9171103303cd56591afb0ea78d1f3c4f4054d0a3..637be2dbf3f5504ee462556d36c3dadd3254c006 100644
--- a/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java
+++ b/briar-tests/src/org/briarproject/blogs/BlogManagerImplTest.java
@@ -192,7 +192,7 @@ public class BlogManagerImplTest extends BriarTestCase {
 		);
 
 		context.checking(new Expectations() {{
-			oneOf(clientHelper).setMessageShared(txn, message, true);
+			oneOf(clientHelper).setMessageShared(txn, messageId, true);
 			oneOf(identityManager)
 					.getAuthorStatus(txn, blog1.getAuthor().getId());
 			will(returnValue(VERIFIED));
diff --git a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
index 30f46c03280ba350a99468dac35dd576a6b75be7..123ca114c0cb89539a704087d043f89eca2fe527 100644
--- a/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
+++ b/briar-tests/src/org/briarproject/db/DatabaseComponentImplTest.java
@@ -751,7 +751,7 @@ public class DatabaseComponentImplTest extends BriarTestCase {
 
 		transaction = db.startTransaction(false);
 		try {
-			db.setMessageShared(transaction, message, true);
+			db.setMessageShared(transaction, message.getId(), true);
 			fail();
 		} catch (NoSuchMessageException expected) {
 			// Expected