diff --git a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java
index 7ddb31a3661c175cd50cc277542aeb1959103854..933a686ffb18b87c488519202f464f25d3b1e25f 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/mailbox/PrivateMailboxSession.java
@@ -23,6 +23,7 @@ import java.io.InputStream;
 import java.net.ProtocolException;
 import java.util.concurrent.Executor;
 import java.util.logging.Logger;
+import java.util.stream.Stream;
 
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
@@ -113,25 +114,10 @@ public class PrivateMailboxSession extends AbstractMailboxSession {
 			MailboxRequestTake takeRequest = (MailboxRequestTake) request;
 			InputStream in = new ByteArrayInputStream(
 					takeRequest.getEncryptedSyncStream());
-			byte[] tag = new byte[TAG_LENGTH];
-			StreamContext ctx;
 
 			try {
-				// read tag from input stream
-				int offset = 0;
-				while (offset < tag.length) {
-					int read = in.read(tag, offset, tag.length - offset);
-					if (read == -1) throw new EOFException();
-					offset += read;
-				}
-
-				ctx =
-						keyManager.getStreamContext(MailboxConstants.ID, tag);
-
-				if (ctx == null) {
-					throw new ProtocolException(
-							"Received stream with unrecognisable tag");
-				}
+
+				StreamContext ctx = readTag(in);
 
 				InputStream reader =
 						streamReaderFactory.createStreamReader(in, ctx);