diff --git a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java
index 7ae21d14690dedf3bb0968090fc4cc380dd0787b..66e7d4b9c727ad22ef55c3e71e27906c6c7e5ef1 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/mailbox/protocol/MailboxProtocolIntegrationTest.java
@@ -106,7 +106,10 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 
 			}
 		});
+
 		ioExecutor.execute(mailboxProtocol);
+		mailboxProtocol.enableRequestHandling();
+
 		MailboxRequest req =
 				new MailboxRequestStore(new ContactId(123), "test".getBytes());
 		mailboxProtocol.writeRequest(req);
@@ -126,21 +129,7 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 
 
 	@Test
-	public void testRequestsAndHandling()
-			throws IOException, InterruptedException {
-		ioExecutor.execute(mailboxProtocol);
-		try {
-			errorResponse();
-			storeRequest();
-			syncRequest();
-			takeRequest();
-			endRequest();
-		} finally {
-			pipedOS.close();
-		}
-	}
-
-	private void errorResponse() throws InterruptedException, IOException {
+	public void errorResponse() throws InterruptedException, IOException {
 		mailboxProtocol.registerRequestHandler(new MailboxRequestHandler() {
 			@Override
 			public void handleRequest(MailboxRequest request)
@@ -157,28 +146,32 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 			public void protocolFinished() {
 			}
 		});
+
+
+		ioExecutor.execute(mailboxProtocol);
+		mailboxProtocol.enableRequestHandling();
+
 		// Test Error Response
 		MailboxRequestTake req =
-				new MailboxRequestTake(new ContactId(123), "Test".getBytes());
+				new MailboxRequestTake("Test".getBytes());
 		mailboxProtocol.writeRequest(req);
 
 		assertEquals(false, req.awaitAndGetResponse());
 		assertEquals("java.net.ProtocolException: Error", req.getError());
+		pipedOS.close();
 	}
 
-	private void takeRequest() throws IOException, InterruptedException {
-
+	@Test
+	public void takeRequest() throws IOException, InterruptedException {
 		// Generate and write TAKE request
 		MailboxRequestTake req =
-				new MailboxRequestTake(new ContactId(123), "Test".getBytes());
+				new MailboxRequestTake("Test".getBytes());
 
 		mailboxProtocol.registerRequestHandler(new MailboxRequestHandler() {
 			@Override
 			public void handleRequest(MailboxRequest request) {
 				assertEquals(req.getId(), request.getId());
 				assertEquals(TAKE, request.getType());
-				assertEquals(req.getContactId(),
-						((MailboxRequestTake) request).getContactId());
 				assertEquals("Test", new String(req.getEncryptedSyncStream()));
 			}
 
@@ -192,16 +185,21 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 			}
 		});
 
+		ioExecutor.execute(mailboxProtocol);
+		mailboxProtocol.enableRequestHandling();
+
 		mailboxProtocol.writeRequest(req);
 
 		assertEquals(true, req.awaitAndGetResponse());
+		pipedOS.close();
 	}
 
-	private void endRequest() throws IOException, InterruptedException {
+	@Test
+	public void endRequest() throws IOException, InterruptedException {
 		MailboxRequest req = new MailboxRequestEnd();
 		mailboxProtocol.registerRequestHandler(new MailboxRequestHandler() {
 			@Override
-			public void handleRequest(MailboxRequest request){
+			public void handleRequest(MailboxRequest request) {
 
 				assertEquals(req.getId(), request.getId());
 				assertEquals(END, request.getType());
@@ -217,11 +215,16 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 			}
 		});
 
+
+		ioExecutor.execute(mailboxProtocol);
+		mailboxProtocol.enableRequestHandling();
+
 		mailboxProtocol.writeRequest(req);
+		pipedOS.close();
 	}
 
-
-	private void storeRequest() throws IOException, InterruptedException {
+	@Test
+	public void storeRequestWithId() throws IOException, InterruptedException {
 		// Generate and write TAKE request
 		MailboxRequestStore req =
 				new MailboxRequestStore(new ContactId(123), "Test".getBytes());
@@ -232,6 +235,7 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 				MailboxRequestStore recvReq = (MailboxRequestStore) request;
 				assertEquals(req.getId(), recvReq.getId());
 				assertEquals(req.getType(), recvReq.getType());
+				assertEquals(true, recvReq.hasContactId());
 				assertEquals(req.getContactId(), recvReq.getContactId());
 				assertEquals("Test", new String(req.getEncryptedSyncStream()));
 			}
@@ -246,18 +250,59 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 			}
 		});
 
+		ioExecutor.execute(mailboxProtocol);
+		mailboxProtocol.enableRequestHandling();
+
 		mailboxProtocol.writeRequest(req);
 		assertEquals(true, req.awaitAndGetResponse());
+
+		pipedOS.close();
 	}
 
-	private void syncRequest() throws IOException, InterruptedException {
+	@Test
+	public void storeRequestWithoutId() throws IOException, InterruptedException {
+		// Generate and write TAKE request
+		MailboxRequestStore req =
+				new MailboxRequestStore("Test".getBytes());
+
+		mailboxProtocol.registerRequestHandler(new MailboxRequestHandler() {
+			@Override
+			public void handleRequest(MailboxRequest request) {
+				MailboxRequestStore recvReq = (MailboxRequestStore) request;
+				assertEquals(req.getId(), recvReq.getId());
+				assertEquals(req.getType(), recvReq.getType());
+				assertEquals(false, recvReq.hasContactId());
+				assertEquals("Test", new String(req.getEncryptedSyncStream()));
+			}
+
+			@Override
+			public MailboxMessage.TYPE getType() {
+				return STORE;
+			}
+
+			@Override
+			public void protocolFinished() {
+			}
+		});
+
+		ioExecutor.execute(mailboxProtocol);
+		mailboxProtocol.enableRequestHandling();
+
+		mailboxProtocol.writeRequest(req);
+		assertEquals(true, req.awaitAndGetResponse());
+
+		pipedOS.close();
+	}
+
+	@Test
+	public void syncRequest() throws IOException, InterruptedException {
 		MailboxRequestSync req =
 				new MailboxRequestSync("Test".getBytes(), false);
 
 		mailboxProtocol.registerRequestHandler(new MailboxRequestHandler() {
 			@Override
-			public void handleRequest(MailboxRequest request){
-				MailboxRequestSync recvReq = (MailboxRequestSync)request;
+			public void handleRequest(MailboxRequest request) {
+				MailboxRequestSync recvReq = (MailboxRequestSync) request;
 				assertEquals(req.getId(), recvReq.getId());
 				assertEquals(SYNC, recvReq.getType());
 				assertEquals("Test", new String(recvReq.getSyncStream()));
@@ -274,7 +319,13 @@ public class MailboxProtocolIntegrationTest extends BrambleTestCase {
 			public void protocolFinished() {
 			}
 		});
+
+		ioExecutor.execute(mailboxProtocol);
+		mailboxProtocol.enableRequestHandling();
+
 		mailboxProtocol.writeRequest(req);
+
+		pipedOS.close();
 	}