diff --git a/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java b/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java
index a9e21a6b0f9364938fad3bc829a0b918f877e824..cf9d4eff3bedfa283a34be88afdc26725cb778bc 100644
--- a/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/ForumManagerTest.java
@@ -209,6 +209,18 @@ public class ForumManagerTest {
 		deliveryWaiter.await(TIMEOUT, 1);
 		assertEquals(1, forumManager1.getPostHeaders(g).size());
 
+		// add another forum post
+		time = clock.currentTimeMillis();
+		ForumPost post2 = createForumPost(g, null, "b", time);
+		forumManager1.addLocalPost(post2);
+		assertEquals(1, forumManager0.getPostHeaders(g).size());
+		assertEquals(2, forumManager1.getPostHeaders(g).size());
+
+		// send post to 0
+		sync1To0();
+		deliveryWaiter.await(TIMEOUT, 1);
+		assertEquals(2, forumManager1.getPostHeaders(g).size());
+
 		stopLifecycles();
 	}
 
diff --git a/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java b/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java
index 522ca424ee2d26af423b0a5743f348d5e98380ec..86ae6ed6001e15cf719fefae04e505a532697648 100644
--- a/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java
+++ b/briar-android-tests/src/test/java/org/briarproject/ForumSharingIntegrationTest.java
@@ -9,6 +9,10 @@ import org.briarproject.api.clients.SessionId;
 import org.briarproject.api.contact.Contact;
 import org.briarproject.api.contact.ContactId;
 import org.briarproject.api.contact.ContactManager;
+import org.briarproject.api.crypto.CryptoComponent;
+import org.briarproject.api.crypto.KeyPair;
+import org.briarproject.api.crypto.KeyParser;
+import org.briarproject.api.crypto.PrivateKey;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.data.BdfList;
 import org.briarproject.api.db.DatabaseComponent;
@@ -23,6 +27,9 @@ import org.briarproject.api.event.MessageStateChangedEvent;
 import org.briarproject.api.forum.Forum;
 import org.briarproject.api.forum.ForumInvitationMessage;
 import org.briarproject.api.forum.ForumManager;
+import org.briarproject.api.forum.ForumPost;
+import org.briarproject.api.forum.ForumPostFactory;
+import org.briarproject.api.forum.ForumPostHeader;
 import org.briarproject.api.forum.ForumSharingManager;
 import org.briarproject.api.identity.AuthorFactory;
 import org.briarproject.api.identity.IdentityManager;
@@ -62,7 +69,6 @@ import javax.inject.Inject;
 
 import static org.briarproject.TestPluginsModule.MAX_LATENCY;
 import static org.briarproject.api.forum.ForumConstants.FORUM_SALT_LENGTH;
-import static org.briarproject.api.identity.AuthorConstants.MAX_PUBLIC_KEY_LENGTH;
 import static org.briarproject.api.sharing.SharingConstants.SHARE_MSG_TYPE_INVITATION;
 import static org.briarproject.api.sync.ValidationManager.State.DELIVERED;
 import static org.briarproject.api.sync.ValidationManager.State.INVALID;
@@ -87,6 +93,10 @@ public class ForumSharingIntegrationTest extends BriarTestCase {
 	Clock clock;
 	@Inject
 	AuthorFactory authorFactory;
+	@Inject
+	ForumPostFactory forumPostFactory;
+	@Inject
+	CryptoComponent cryptoComponent;
 
 	// objects accessed from background threads need to be volatile
 	private volatile ForumSharingManager forumSharingManager0;
@@ -731,6 +741,119 @@ public class ForumSharingIntegrationTest extends BriarTestCase {
 		}
 	}
 
+	@Test
+	public void testSyncAfterReSharing() throws Exception {
+		startLifecycles();
+		try {
+			// initialize and let invitee accept all requests
+			defaultInit(true);
+
+			// send invitation
+			forumSharingManager0
+					.sendInvitation(forum0.getId(), contactId1, "Hi!");
+
+			// sync first request message
+			syncToInvitee();
+			eventWaiter.await(TIMEOUT, 1);
+
+			// sync response back
+			syncToSharer();
+			eventWaiter.await(TIMEOUT, 1);
+
+			// sharer posts into the forum
+			long time = clock.currentTimeMillis();
+			byte[] body = TestUtils.getRandomBytes(42);
+			KeyParser keyParser = cryptoComponent.getSignatureKeyParser();
+			PrivateKey key = keyParser.parsePrivateKey(author0.getPrivateKey());
+			ForumPost p = forumPostFactory
+					.createPseudonymousPost(forum0.getId(), time, null, author0,
+							"text/plain", body, key);
+			forumManager0.addLocalPost(p);
+
+			// sync forum post
+			syncToInvitee();
+
+			// make sure forum post arrived
+			Collection<ForumPostHeader> headers =
+					forumManager1.getPostHeaders(forum0.getId());
+			assertEquals(1, headers.size());
+			ForumPostHeader header = headers.iterator().next();
+			assertEquals(p.getMessage().getId(), header.getId());
+			assertEquals(author0, header.getAuthor());
+
+			// now invitee creates a post
+			time = clock.currentTimeMillis();
+			body = TestUtils.getRandomBytes(42);
+			key = keyParser.parsePrivateKey(author1.getPrivateKey());
+			p = forumPostFactory
+					.createPseudonymousPost(forum0.getId(), time, null, author1,
+							"text/plain", body, key);
+			forumManager1.addLocalPost(p);
+
+			// sync forum post
+			syncToSharer();
+
+			// make sure forum post arrived
+			headers = forumManager1.getPostHeaders(forum0.getId());
+			assertEquals(2, headers.size());
+			boolean found = false;
+			for (ForumPostHeader h : headers) {
+				if (p.getMessage().getId().equals(h.getId())) {
+					found = true;
+					assertEquals(author1, h.getAuthor());
+				}
+			}
+			assertTrue(found);
+
+			// contacts remove each other
+			contactManager0.removeContact(contactId1);
+			contactManager1.removeContact(contactId0);
+			contactManager1.removeContact(contactId2);
+			contactManager2.removeContact(contactId21);
+
+			// contacts add each other back
+			addDefaultContacts();
+
+			// send invitation again
+			forumSharingManager0
+					.sendInvitation(forum0.getId(), contactId1, "Hi!");
+
+			// sync first request message
+			syncToInvitee();
+			eventWaiter.await(TIMEOUT, 1);
+
+			// sync response back
+			syncToSharer();
+			eventWaiter.await(TIMEOUT, 1);
+
+			// now invitee creates a post
+			time = clock.currentTimeMillis();
+			body = TestUtils.getRandomBytes(42);
+			key = keyParser.parsePrivateKey(author1.getPrivateKey());
+			p = forumPostFactory
+					.createPseudonymousPost(forum0.getId(), time, null, author1,
+							"text/plain", body, key);
+			forumManager1.addLocalPost(p);
+
+			// sync forum post
+			syncToSharer();
+
+			// make sure forum post arrived
+			headers = forumManager1.getPostHeaders(forum0.getId());
+			assertEquals(3, headers.size());
+			found = false;
+			for (ForumPostHeader h : headers) {
+				if (p.getMessage().getId().equals(h.getId())) {
+					found = true;
+					assertEquals(author1, h.getAuthor());
+				}
+			}
+			assertTrue(found);
+		} finally {
+			stopLifecycles();
+		}
+	}
+
 
 	@After
 	public void tearDown() throws InterruptedException {
@@ -753,6 +876,10 @@ public class ForumSharingIntegrationTest extends BriarTestCase {
 					LOG.info("TEST: Sharer received message in group " +
 							event.getMessage().getGroupId().hashCode());
 					msgWaiter.resume();
+				} else if (s == DELIVERED && !event.isLocal() &&
+						c.equals(forumManager0.getClientId())) {
+					LOG.info("TEST: Sharer received forum post");
+					msgWaiter.resume();
 				}
 			} else if (e instanceof ForumInvitationResponseReceivedEvent) {
 				ForumInvitationResponseReceivedEvent event =
@@ -807,6 +934,10 @@ public class ForumSharingIntegrationTest extends BriarTestCase {
 					LOG.info("TEST: Invitee received message in group " +
 							event.getMessage().getGroupId().hashCode());
 					msgWaiter.resume();
+				} else if (s == DELIVERED && !event.isLocal() &&
+						c.equals(forumManager0.getClientId())) {
+					LOG.info("TEST: Invitee received forum post");
+					msgWaiter.resume();
 				}
 			} else if (e instanceof ForumInvitationReceivedEvent) {
 				ForumInvitationReceivedEvent event =
@@ -866,17 +997,22 @@ public class ForumSharingIntegrationTest extends BriarTestCase {
 	}
 
 	private void addDefaultIdentities() throws DbException {
+		KeyPair keyPair = cryptoComponent.generateSignatureKeyPair();
 		author0 = authorFactory.createLocalAuthor(SHARER,
-				TestUtils.getRandomBytes(MAX_PUBLIC_KEY_LENGTH),
-				TestUtils.getRandomBytes(123));
+				keyPair.getPublic().getEncoded(),
+				keyPair.getPrivate().getEncoded());
 		identityManager0.addLocalAuthor(author0);
+
+		keyPair = cryptoComponent.generateSignatureKeyPair();
 		author1 = authorFactory.createLocalAuthor(INVITEE,
-				TestUtils.getRandomBytes(MAX_PUBLIC_KEY_LENGTH),
-				TestUtils.getRandomBytes(123));
+				keyPair.getPublic().getEncoded(),
+				keyPair.getPrivate().getEncoded());
 		identityManager1.addLocalAuthor(author1);
+
+		keyPair = cryptoComponent.generateSignatureKeyPair();
 		author2 = authorFactory.createLocalAuthor(SHARER2,
-				TestUtils.getRandomBytes(MAX_PUBLIC_KEY_LENGTH),
-				TestUtils.getRandomBytes(123));
+				keyPair.getPublic().getEncoded(),
+				keyPair.getPrivate().getEncoded());
 		identityManager2.addLocalAuthor(author2);
 	}