diff --git a/components/net/sf/briar/protocol/BundleReaderImpl.java b/components/net/sf/briar/protocol/BundleReaderImpl.java
index 6461071db1ae3ce985f2573fd3e532c7c6407138..9fb756f4ea31720e7dfa6db9e1bd76dc67632781 100644
--- a/components/net/sf/briar/protocol/BundleReaderImpl.java
+++ b/components/net/sf/briar/protocol/BundleReaderImpl.java
@@ -27,6 +27,8 @@ import net.sf.briar.api.serial.Raw;
 import net.sf.briar.api.serial.Reader;
 import net.sf.briar.api.serial.ReaderFactory;
 
+import com.google.inject.Inject;
+
 /** A bundle that deserialises its contents on demand using a reader. */
 class BundleReaderImpl implements BundleReader {
 
@@ -42,6 +44,7 @@ class BundleReaderImpl implements BundleReader {
 	private final BatchFactory batchFactory;
 	private State state = State.START;
 
+	@Inject
 	BundleReaderImpl(InputStream in, ReaderFactory readerFactory,
 			PublicKey publicKey, Signature signature,
 			MessageDigest messageDigest, MessageParser messageParser,
diff --git a/components/net/sf/briar/protocol/ProtocolModule.java b/components/net/sf/briar/protocol/ProtocolModule.java
index 501ad51654e22e03357b11c6f3015cde3a1f34e8..08e3c1b8ebe21fc4eba98ce1db5a26cf4414c582 100644
--- a/components/net/sf/briar/protocol/ProtocolModule.java
+++ b/components/net/sf/briar/protocol/ProtocolModule.java
@@ -1,6 +1,9 @@
 package net.sf.briar.protocol;
 
-import net.sf.briar.api.protocol.Message;
+import net.sf.briar.api.protocol.BundleReader;
+import net.sf.briar.api.protocol.BundleWriter;
+import net.sf.briar.api.protocol.MessageEncoder;
+import net.sf.briar.api.protocol.MessageParser;
 
 import com.google.inject.AbstractModule;
 
@@ -8,6 +11,11 @@ public class ProtocolModule extends AbstractModule {
 
 	@Override
 	protected void configure() {
-		bind(Message.class).to(MessageImpl.class);
+		bind(BatchFactory.class).to(BatchFactoryImpl.class);
+		bind(BundleReader.class).to(BundleReaderImpl.class);
+		bind(BundleWriter.class).to(BundleWriterImpl.class);
+		bind(HeaderFactory.class).to(HeaderFactoryImpl.class);
+		bind(MessageEncoder.class).to(MessageEncoderImpl.class);
+		bind(MessageParser.class).to(MessageParserImpl.class);
 	}
 }
diff --git a/components/net/sf/briar/serial/SerialModule.java b/components/net/sf/briar/serial/SerialModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..48fb7b1a222049664611f69600ac44caad2fbd98
--- /dev/null
+++ b/components/net/sf/briar/serial/SerialModule.java
@@ -0,0 +1,15 @@
+package net.sf.briar.serial;
+
+import net.sf.briar.api.serial.ReaderFactory;
+import net.sf.briar.api.serial.WriterFactory;
+
+import com.google.inject.AbstractModule;
+
+public class SerialModule extends AbstractModule {
+
+	@Override
+	protected void configure() {
+		bind(ReaderFactory.class).to(ReaderFactoryImpl.class);
+		bind(WriterFactory.class).to(WriterFactoryImpl.class);
+	}
+}