diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordReader.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordReader.java
similarity index 93%
rename from bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordReader.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordReader.java
index f29169085979168d15e99968b5f756f1f9eea378..374a712087d3f1fcbd4a4dd84669b3e567fb02aa 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordReader.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordReader.java
@@ -5,7 +5,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import java.io.IOException;
 
 @NotNullByDefault
-public interface RecordReader {
+public interface SyncRecordReader {
 
 	boolean eof() throws IOException;
 
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordReaderFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordReaderFactory.java
similarity index 62%
rename from bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordReaderFactory.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordReaderFactory.java
index a1488491949bd0af8753c087bc121549d6c9da07..1f66bdbadcfb2ebfe2d7376461740096485bfa64 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordReaderFactory.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordReaderFactory.java
@@ -5,7 +5,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import java.io.InputStream;
 
 @NotNullByDefault
-public interface RecordReaderFactory {
+public interface SyncRecordReaderFactory {
 
-	RecordReader createRecordReader(InputStream in);
+	SyncRecordReader createRecordReader(InputStream in);
 }
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordWriter.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriter.java
similarity index 91%
rename from bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordWriter.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriter.java
index 2c6abfa789710539f30fd3b611a46c2382dd3aeb..7a091544a9e38ccec5dd13e846d35497a55e43f9 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordWriter.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriter.java
@@ -5,7 +5,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import java.io.IOException;
 
 @NotNullByDefault
-public interface RecordWriter {
+public interface SyncRecordWriter {
 
 	void writeAck(Ack a) throws IOException;
 
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordWriterFactory.java b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriterFactory.java
similarity index 61%
rename from bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordWriterFactory.java
rename to bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriterFactory.java
index de8606d42b8e4e5b07353cc45c7a9e92f4593f19..32c7c0c36c7a8f9b7b83631d7a9f98d5d16f509d 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/sync/RecordWriterFactory.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/sync/SyncRecordWriterFactory.java
@@ -5,7 +5,7 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import java.io.OutputStream;
 
 @NotNullByDefault
-public interface RecordWriterFactory {
+public interface SyncRecordWriterFactory {
 
-	RecordWriter createRecordWriter(OutputStream out);
+	SyncRecordWriter createRecordWriter(OutputStream out);
 }
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
index 80f699a1f9e6ebdb134ae0835541018992c6c406..8831ae4719c7ccc3da6a1758b852178662fb52cb 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/DuplexOutgoingSession.java
@@ -14,8 +14,8 @@ import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.Ack;
 import org.briarproject.bramble.api.sync.Offer;
-import org.briarproject.bramble.api.sync.RecordWriter;
 import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.SyncRecordWriter;
 import org.briarproject.bramble.api.sync.SyncSession;
 import org.briarproject.bramble.api.sync.event.GroupVisibilityUpdatedEvent;
 import org.briarproject.bramble.api.sync.event.MessageRequestedEvent;
@@ -67,7 +67,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
 	private final Clock clock;
 	private final ContactId contactId;
 	private final int maxLatency, maxIdleTime;
-	private final RecordWriter recordWriter;
+	private final SyncRecordWriter recordWriter;
 	private final BlockingQueue<ThrowingRunnable<IOException>> writerTasks;
 
 	private final AtomicBoolean generateAckQueued = new AtomicBoolean(false);
@@ -81,7 +81,7 @@ class DuplexOutgoingSession implements SyncSession, EventListener {
 
 	DuplexOutgoingSession(DatabaseComponent db, Executor dbExecutor,
 			EventBus eventBus, Clock clock, ContactId contactId, int maxLatency,
-			int maxIdleTime, RecordWriter recordWriter) {
+			int maxIdleTime, SyncRecordWriter recordWriter) {
 		this.db = db;
 		this.dbExecutor = dbExecutor;
 		this.eventBus = eventBus;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java
index 32eb58df4854d87c080671e913926e7dd3a2e925..2605764b258524f870e09333292538e284bba0c2 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/IncomingSession.java
@@ -16,8 +16,8 @@ import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.Ack;
 import org.briarproject.bramble.api.sync.Message;
 import org.briarproject.bramble.api.sync.Offer;
-import org.briarproject.bramble.api.sync.RecordReader;
 import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.SyncRecordReader;
 import org.briarproject.bramble.api.sync.SyncSession;
 
 import java.io.IOException;
@@ -43,13 +43,13 @@ class IncomingSession implements SyncSession, EventListener {
 	private final Executor dbExecutor;
 	private final EventBus eventBus;
 	private final ContactId contactId;
-	private final RecordReader recordReader;
+	private final SyncRecordReader recordReader;
 
 	private volatile boolean interrupted = false;
 
 	IncomingSession(DatabaseComponent db, Executor dbExecutor,
 			EventBus eventBus, ContactId contactId,
-			RecordReader recordReader) {
+			SyncRecordReader recordReader) {
 		this.db = db;
 		this.dbExecutor = dbExecutor;
 		this.eventBus = eventBus;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordWriterFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordWriterFactoryImpl.java
deleted file mode 100644
index 1bcbde17f7688b3569c5734d926a9e671254d5ee..0000000000000000000000000000000000000000
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordWriterFactoryImpl.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package org.briarproject.bramble.sync;
-
-import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
-import org.briarproject.bramble.api.sync.RecordWriter;
-import org.briarproject.bramble.api.sync.RecordWriterFactory;
-
-import java.io.OutputStream;
-
-@NotNullByDefault
-class RecordWriterFactoryImpl implements RecordWriterFactory {
-
-	@Override
-	public RecordWriter createRecordWriter(OutputStream out) {
-		return new RecordWriterImpl(out);
-	}
-}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
index b1f8198f86dcb6b0d771527876de0ce9261ab057..86f8a833be9defeadebd2d2cbb05a8a2e52fcee2 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SimplexOutgoingSession.java
@@ -13,7 +13,7 @@ import org.briarproject.bramble.api.lifecycle.IoExecutor;
 import org.briarproject.bramble.api.lifecycle.event.LifecycleEvent;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.Ack;
-import org.briarproject.bramble.api.sync.RecordWriter;
+import org.briarproject.bramble.api.sync.SyncRecordWriter;
 import org.briarproject.bramble.api.sync.SyncSession;
 
 import java.io.IOException;
@@ -51,7 +51,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
 	private final EventBus eventBus;
 	private final ContactId contactId;
 	private final int maxLatency;
-	private final RecordWriter recordWriter;
+	private final SyncRecordWriter recordWriter;
 	private final AtomicInteger outstandingQueries;
 	private final BlockingQueue<ThrowingRunnable<IOException>> writerTasks;
 
@@ -59,7 +59,7 @@ class SimplexOutgoingSession implements SyncSession, EventListener {
 
 	SimplexOutgoingSession(DatabaseComponent db, Executor dbExecutor,
 			EventBus eventBus, ContactId contactId,
-			int maxLatency, RecordWriter recordWriter) {
+			int maxLatency, SyncRecordWriter recordWriter) {
 		this.db = db;
 		this.dbExecutor = dbExecutor;
 		this.eventBus = eventBus;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
index ca6ec897af315954beb53279a1a7c8df794808a3..042103fbec0e0341197d4e66b5d881ab7c695dcb 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncModule.java
@@ -9,8 +9,8 @@ import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.lifecycle.LifecycleManager;
 import org.briarproject.bramble.api.sync.GroupFactory;
 import org.briarproject.bramble.api.sync.MessageFactory;
-import org.briarproject.bramble.api.sync.RecordReaderFactory;
-import org.briarproject.bramble.api.sync.RecordWriterFactory;
+import org.briarproject.bramble.api.sync.SyncRecordReaderFactory;
+import org.briarproject.bramble.api.sync.SyncRecordWriterFactory;
 import org.briarproject.bramble.api.sync.SyncSessionFactory;
 import org.briarproject.bramble.api.sync.ValidationManager;
 import org.briarproject.bramble.api.system.Clock;
@@ -52,22 +52,22 @@ public class SyncModule {
 	}
 
 	@Provides
-	RecordReaderFactory provideRecordReaderFactory(
-			RecordReaderFactoryImpl recordReaderFactory) {
+	SyncRecordReaderFactory provideRecordReaderFactory(
+			SyncRecordReaderFactoryImpl recordReaderFactory) {
 		return recordReaderFactory;
 	}
 
 	@Provides
-	RecordWriterFactory provideRecordWriterFactory() {
-		return new RecordWriterFactoryImpl();
+	SyncRecordWriterFactory provideRecordWriterFactory() {
+		return new SyncRecordWriterFactoryImpl();
 	}
 
 	@Provides
 	@Singleton
 	SyncSessionFactory provideSyncSessionFactory(DatabaseComponent db,
 			@DatabaseExecutor Executor dbExecutor, EventBus eventBus,
-			Clock clock, RecordReaderFactory recordReaderFactory,
-			RecordWriterFactory recordWriterFactory) {
+			Clock clock, SyncRecordReaderFactory recordReaderFactory,
+			SyncRecordWriterFactory recordWriterFactory) {
 		return new SyncSessionFactoryImpl(db, dbExecutor, eventBus, clock,
 				recordReaderFactory, recordWriterFactory);
 	}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordReaderFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordReaderFactoryImpl.java
similarity index 52%
rename from bramble-core/src/main/java/org/briarproject/bramble/sync/RecordReaderFactoryImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordReaderFactoryImpl.java
index fb43f9459c5625b36f367989cdfe1f4a6d9df11b..2c816d6fd7802e5ec5b1f512264e10a29ebb7266 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordReaderFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordReaderFactoryImpl.java
@@ -2,8 +2,8 @@ package org.briarproject.bramble.sync;
 
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
 import org.briarproject.bramble.api.sync.MessageFactory;
-import org.briarproject.bramble.api.sync.RecordReader;
-import org.briarproject.bramble.api.sync.RecordReaderFactory;
+import org.briarproject.bramble.api.sync.SyncRecordReader;
+import org.briarproject.bramble.api.sync.SyncRecordReaderFactory;
 
 import java.io.InputStream;
 
@@ -12,17 +12,17 @@ import javax.inject.Inject;
 
 @Immutable
 @NotNullByDefault
-class RecordReaderFactoryImpl implements RecordReaderFactory {
+class SyncRecordReaderFactoryImpl implements SyncRecordReaderFactory {
 
 	private final MessageFactory messageFactory;
 
 	@Inject
-	RecordReaderFactoryImpl(MessageFactory messageFactory) {
+	SyncRecordReaderFactoryImpl(MessageFactory messageFactory) {
 		this.messageFactory = messageFactory;
 	}
 
 	@Override
-	public RecordReader createRecordReader(InputStream in) {
-		return new RecordReaderImpl(messageFactory, in);
+	public SyncRecordReader createRecordReader(InputStream in) {
+		return new SyncRecordReaderImpl(messageFactory, in);
 	}
 }
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordReaderImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordReaderImpl.java
similarity index 96%
rename from bramble-core/src/main/java/org/briarproject/bramble/sync/RecordReaderImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordReaderImpl.java
index a9663dc0c232b7f9459f0ceefa0ed8f7b8795f0a..fec79b214cd3a70dc982150dc98e76d43ca96b2e 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordReaderImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordReaderImpl.java
@@ -9,8 +9,8 @@ import org.briarproject.bramble.api.sync.Message;
 import org.briarproject.bramble.api.sync.MessageFactory;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.bramble.api.sync.Offer;
-import org.briarproject.bramble.api.sync.RecordReader;
 import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.SyncRecordReader;
 import org.briarproject.bramble.util.ByteUtils;
 
 import java.io.IOException;
@@ -31,7 +31,7 @@ import static org.briarproject.bramble.api.sync.SyncConstants.RECORD_HEADER_LENG
 
 @NotThreadSafe
 @NotNullByDefault
-class RecordReaderImpl implements RecordReader {
+class SyncRecordReaderImpl implements SyncRecordReader {
 
 	private enum State {BUFFER_EMPTY, BUFFER_FULL, EOF}
 
@@ -42,7 +42,7 @@ class RecordReaderImpl implements RecordReader {
 	private State state = State.BUFFER_EMPTY;
 	private int payloadLength = 0;
 
-	RecordReaderImpl(MessageFactory messageFactory, InputStream in) {
+	SyncRecordReaderImpl(MessageFactory messageFactory, InputStream in) {
 		this.messageFactory = messageFactory;
 		this.in = in;
 		header = new byte[RECORD_HEADER_LENGTH];
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterFactoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..b715edd08a65f278c241d7388cb3e58b556e8b16
--- /dev/null
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterFactoryImpl.java
@@ -0,0 +1,16 @@
+package org.briarproject.bramble.sync;
+
+import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
+import org.briarproject.bramble.api.sync.SyncRecordWriter;
+import org.briarproject.bramble.api.sync.SyncRecordWriterFactory;
+
+import java.io.OutputStream;
+
+@NotNullByDefault
+class SyncRecordWriterFactoryImpl implements SyncRecordWriterFactory {
+
+	@Override
+	public SyncRecordWriter createRecordWriter(OutputStream out) {
+		return new SyncRecordWriterImpl(out);
+	}
+}
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordWriterImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterImpl.java
similarity index 93%
rename from bramble-core/src/main/java/org/briarproject/bramble/sync/RecordWriterImpl.java
rename to bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterImpl.java
index f7bf9f5fd8e7e557f8d844eb37ea1b4a638816c6..6c41945c6a1b059e4bbd2e204f11431efda227d9 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/RecordWriterImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncRecordWriterImpl.java
@@ -5,8 +5,8 @@ import org.briarproject.bramble.api.sync.Ack;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.bramble.api.sync.Offer;
 import org.briarproject.bramble.api.sync.RecordTypes;
-import org.briarproject.bramble.api.sync.RecordWriter;
 import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.SyncRecordWriter;
 import org.briarproject.bramble.util.ByteUtils;
 
 import java.io.ByteArrayOutputStream;
@@ -19,18 +19,18 @@ import static org.briarproject.bramble.api.sync.RecordTypes.ACK;
 import static org.briarproject.bramble.api.sync.RecordTypes.OFFER;
 import static org.briarproject.bramble.api.sync.RecordTypes.REQUEST;
 import static org.briarproject.bramble.api.sync.SyncConstants.MAX_RECORD_PAYLOAD_LENGTH;
-import static org.briarproject.bramble.api.sync.SyncConstants.RECORD_HEADER_LENGTH;
 import static org.briarproject.bramble.api.sync.SyncConstants.PROTOCOL_VERSION;
+import static org.briarproject.bramble.api.sync.SyncConstants.RECORD_HEADER_LENGTH;
 
 @NotThreadSafe
 @NotNullByDefault
-class RecordWriterImpl implements RecordWriter {
+class SyncRecordWriterImpl implements SyncRecordWriter {
 
 	private final OutputStream out;
 	private final byte[] header;
 	private final ByteArrayOutputStream payload;
 
-	RecordWriterImpl(OutputStream out) {
+	SyncRecordWriterImpl(OutputStream out) {
 		this.out = out;
 		header = new byte[RECORD_HEADER_LENGTH];
 		header[0] = PROTOCOL_VERSION;
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
index 277a21dcde1ec78aa0db2cbc8a71a950f31bdb96..8459f6eaf975143dde4d7a3e1d34504e75b2a093 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/sync/SyncSessionFactoryImpl.java
@@ -5,10 +5,10 @@ import org.briarproject.bramble.api.db.DatabaseComponent;
 import org.briarproject.bramble.api.db.DatabaseExecutor;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
-import org.briarproject.bramble.api.sync.RecordReader;
-import org.briarproject.bramble.api.sync.RecordReaderFactory;
-import org.briarproject.bramble.api.sync.RecordWriter;
-import org.briarproject.bramble.api.sync.RecordWriterFactory;
+import org.briarproject.bramble.api.sync.SyncRecordReader;
+import org.briarproject.bramble.api.sync.SyncRecordReaderFactory;
+import org.briarproject.bramble.api.sync.SyncRecordWriter;
+import org.briarproject.bramble.api.sync.SyncRecordWriterFactory;
 import org.briarproject.bramble.api.sync.SyncSession;
 import org.briarproject.bramble.api.sync.SyncSessionFactory;
 import org.briarproject.bramble.api.system.Clock;
@@ -28,14 +28,14 @@ class SyncSessionFactoryImpl implements SyncSessionFactory {
 	private final Executor dbExecutor;
 	private final EventBus eventBus;
 	private final Clock clock;
-	private final RecordReaderFactory recordReaderFactory;
-	private final RecordWriterFactory recordWriterFactory;
+	private final SyncRecordReaderFactory recordReaderFactory;
+	private final SyncRecordWriterFactory recordWriterFactory;
 
 	@Inject
 	SyncSessionFactoryImpl(DatabaseComponent db,
 			@DatabaseExecutor Executor dbExecutor, EventBus eventBus,
-			Clock clock, RecordReaderFactory recordReaderFactory,
-			RecordWriterFactory recordWriterFactory) {
+			Clock clock, SyncRecordReaderFactory recordReaderFactory,
+			SyncRecordWriterFactory recordWriterFactory) {
 		this.db = db;
 		this.dbExecutor = dbExecutor;
 		this.eventBus = eventBus;
@@ -46,14 +46,16 @@ class SyncSessionFactoryImpl implements SyncSessionFactory {
 
 	@Override
 	public SyncSession createIncomingSession(ContactId c, InputStream in) {
-		RecordReader recordReader = recordReaderFactory.createRecordReader(in);
+		SyncRecordReader recordReader =
+				recordReaderFactory.createRecordReader(in);
 		return new IncomingSession(db, dbExecutor, eventBus, c, recordReader);
 	}
 
 	@Override
 	public SyncSession createSimplexOutgoingSession(ContactId c,
 			int maxLatency, OutputStream out) {
-		RecordWriter recordWriter = recordWriterFactory.createRecordWriter(out);
+		SyncRecordWriter recordWriter =
+				recordWriterFactory.createRecordWriter(out);
 		return new SimplexOutgoingSession(db, dbExecutor, eventBus, c,
 				maxLatency, recordWriter);
 	}
@@ -61,7 +63,8 @@ class SyncSessionFactoryImpl implements SyncSessionFactory {
 	@Override
 	public SyncSession createDuplexOutgoingSession(ContactId c, int maxLatency,
 			int maxIdleTime, OutputStream out) {
-		RecordWriter recordWriter = recordWriterFactory.createRecordWriter(out);
+		SyncRecordWriter recordWriter =
+				recordWriterFactory.createRecordWriter(out);
 		return new DuplexOutgoingSession(db, dbExecutor, eventBus, clock, c,
 				maxLatency, maxIdleTime, recordWriter);
 	}
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
index 92f030052fd6e37578e32318ff1e02dea6669bfe..3e001dae86a05af999b35eea36325b32b2286148 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SimplexOutgoingSessionTest.java
@@ -6,7 +6,7 @@ import org.briarproject.bramble.api.db.Transaction;
 import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.sync.Ack;
 import org.briarproject.bramble.api.sync.MessageId;
-import org.briarproject.bramble.api.sync.RecordWriter;
+import org.briarproject.bramble.api.sync.SyncRecordWriter;
 import org.briarproject.bramble.test.BrambleTestCase;
 import org.briarproject.bramble.test.ImmediateExecutor;
 import org.briarproject.bramble.test.TestUtils;
@@ -29,14 +29,14 @@ public class SimplexOutgoingSessionTest extends BrambleTestCase {
 	private final ContactId contactId;
 	private final MessageId messageId;
 	private final int maxLatency;
-	private final RecordWriter recordWriter;
+	private final SyncRecordWriter recordWriter;
 
 	public SimplexOutgoingSessionTest() {
 		context = new Mockery();
 		db = context.mock(DatabaseComponent.class);
 		dbExecutor = new ImmediateExecutor();
 		eventBus = context.mock(EventBus.class);
-		recordWriter = context.mock(RecordWriter.class);
+		recordWriter = context.mock(SyncRecordWriter.class);
 		contactId = new ContactId(234);
 		messageId = new MessageId(TestUtils.getRandomId());
 		maxLatency = Integer.MAX_VALUE;
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
index 1ceedbb20e3102ca52db0812ca866546acd44bce..00fa90f434f2718e73fd8c4e73a3d1612a5c31bd 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncIntegrationTest.java
@@ -12,11 +12,11 @@ import org.briarproject.bramble.api.sync.Message;
 import org.briarproject.bramble.api.sync.MessageFactory;
 import org.briarproject.bramble.api.sync.MessageId;
 import org.briarproject.bramble.api.sync.Offer;
-import org.briarproject.bramble.api.sync.RecordReader;
-import org.briarproject.bramble.api.sync.RecordReaderFactory;
-import org.briarproject.bramble.api.sync.RecordWriter;
-import org.briarproject.bramble.api.sync.RecordWriterFactory;
 import org.briarproject.bramble.api.sync.Request;
+import org.briarproject.bramble.api.sync.SyncRecordReader;
+import org.briarproject.bramble.api.sync.SyncRecordReaderFactory;
+import org.briarproject.bramble.api.sync.SyncRecordWriter;
+import org.briarproject.bramble.api.sync.SyncRecordWriterFactory;
 import org.briarproject.bramble.api.transport.StreamContext;
 import org.briarproject.bramble.api.transport.StreamReaderFactory;
 import org.briarproject.bramble.api.transport.StreamWriterFactory;
@@ -54,9 +54,9 @@ public class SyncIntegrationTest extends BrambleTestCase {
 	@Inject
 	StreamWriterFactory streamWriterFactory;
 	@Inject
-	RecordReaderFactory recordReaderFactory;
+	SyncRecordReaderFactory recordReaderFactory;
 	@Inject
-	RecordWriterFactory recordWriterFactory;
+	SyncRecordWriterFactory recordWriterFactory;
 	@Inject
 	TransportCrypto transportCrypto;
 
@@ -104,7 +104,7 @@ public class SyncIntegrationTest extends BrambleTestCase {
 				headerKey, streamNumber);
 		OutputStream streamWriter = streamWriterFactory.createStreamWriter(out,
 				ctx);
-		RecordWriter recordWriter = recordWriterFactory.createRecordWriter(
+		SyncRecordWriter recordWriter = recordWriterFactory.createRecordWriter(
 				streamWriter);
 
 		recordWriter.writeAck(new Ack(messageIds));
@@ -134,7 +134,7 @@ public class SyncIntegrationTest extends BrambleTestCase {
 				headerKey, streamNumber);
 		InputStream streamReader = streamReaderFactory.createStreamReader(in,
 				ctx);
-		RecordReader recordReader = recordReaderFactory.createRecordReader(
+		SyncRecordReader recordReader = recordReaderFactory.createRecordReader(
 				streamReader);
 
 		// Read the ack
diff --git a/bramble-core/src/test/java/org/briarproject/bramble/sync/RecordReaderImplTest.java b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncRecordReaderImplTest.java
similarity index 83%
rename from bramble-core/src/test/java/org/briarproject/bramble/sync/RecordReaderImplTest.java
rename to bramble-core/src/test/java/org/briarproject/bramble/sync/SyncRecordReaderImplTest.java
index 7b927cf59b3aad4211f1c8e00cdcfd746f253ba6..4b46a12988018f4fc0658b3a07bfa58f808c340a 100644
--- a/bramble-core/src/test/java/org/briarproject/bramble/sync/RecordReaderImplTest.java
+++ b/bramble-core/src/test/java/org/briarproject/bramble/sync/SyncRecordReaderImplTest.java
@@ -23,7 +23,7 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 
-public class RecordReaderImplTest extends BrambleMockTestCase {
+public class SyncRecordReaderImplTest extends BrambleMockTestCase {
 
 	private final MessageFactory messageFactory =
 			context.mock(MessageFactory.class);
@@ -32,7 +32,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testFormatExceptionIfAckIsTooLarge() throws Exception {
 		byte[] b = createAck(true);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readAck();
 	}
 
@@ -40,7 +41,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testNoFormatExceptionIfAckIsMaximumSize() throws Exception {
 		byte[] b = createAck(false);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readAck();
 	}
 
@@ -48,7 +50,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testFormatExceptionIfAckIsEmpty() throws Exception {
 		byte[] b = createEmptyAck();
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readAck();
 	}
 
@@ -56,7 +59,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testFormatExceptionIfOfferIsTooLarge() throws Exception {
 		byte[] b = createOffer(true);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readOffer();
 	}
 
@@ -64,7 +68,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testNoFormatExceptionIfOfferIsMaximumSize() throws Exception {
 		byte[] b = createOffer(false);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readOffer();
 	}
 
@@ -72,7 +77,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testFormatExceptionIfOfferIsEmpty() throws Exception {
 		byte[] b = createEmptyOffer();
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readOffer();
 	}
 
@@ -80,7 +86,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testFormatExceptionIfRequestIsTooLarge() throws Exception {
 		byte[] b = createRequest(true);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readRequest();
 	}
 
@@ -88,7 +95,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testNoFormatExceptionIfRequestIsMaximumSize() throws Exception {
 		byte[] b = createRequest(false);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readRequest();
 	}
 
@@ -96,14 +104,16 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testFormatExceptionIfRequestIsEmpty() throws Exception {
 		byte[] b = createEmptyRequest();
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.readRequest();
 	}
 
 	@Test
 	public void testEofReturnsTrueWhenAtEndOfStream() throws Exception {
 		ByteArrayInputStream in = new ByteArrayInputStream(new byte[0]);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		assertTrue(reader.eof());
 	}
 
@@ -111,7 +121,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 	public void testEofReturnsFalseWhenNotAtEndOfStream() throws Exception {
 		byte[] b = createAck(false);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		assertFalse(reader.eof());
 	}
 
@@ -121,7 +132,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 		b[0] = PROTOCOL_VERSION;
 		b[1] = ACK;
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.eof();
 	}
 
@@ -133,7 +145,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 		b[1] = ACK;
 		ByteUtils.writeUint16(payloadLength, b, 2);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.eof();
 	}
 
@@ -143,7 +156,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 		byte version = (byte) (PROTOCOL_VERSION + 1);
 		byte[] b = createRecord(version, ACK, new byte[0]);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.eof();
 	}
 
@@ -152,7 +166,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 		byte[] payload = new byte[MAX_RECORD_PAYLOAD_LENGTH + 1];
 		byte[] b = createRecord(PROTOCOL_VERSION, ACK, payload);
 		ByteArrayInputStream in = new ByteArrayInputStream(b);
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		reader.eof();
 	}
 
@@ -168,7 +183,8 @@ public class RecordReaderImplTest extends BrambleMockTestCase {
 		input.write(skip2);
 		input.write(ack);
 		ByteArrayInputStream in = new ByteArrayInputStream(input.toByteArray());
-		RecordReaderImpl reader = new RecordReaderImpl(messageFactory, in);
+		SyncRecordReaderImpl
+				reader = new SyncRecordReaderImpl(messageFactory, in);
 		assertTrue(reader.hasAck());
 		Ack a = reader.readAck();
 		assertEquals(MAX_MESSAGE_IDS, a.getMessageIds().size());