diff --git a/api/net/sf/briar/api/serial/Writer.java b/api/net/sf/briar/api/serial/Writer.java
index ba4f3d25564971f87fa21c917016356b81c2b213..b3b7942b329f449a02522bf3a02f6edf1adfedcd 100644
--- a/api/net/sf/briar/api/serial/Writer.java
+++ b/api/net/sf/briar/api/serial/Writer.java
@@ -6,8 +6,8 @@ import java.util.Map;
 
 public interface Writer {
 
+	// FIXME: Remove this method
 	long getBytesWritten();
-	void close() throws IOException;
 
 	void writeBoolean(boolean b) throws IOException;
 
diff --git a/components/net/sf/briar/protocol/BundleWriterImpl.java b/components/net/sf/briar/protocol/BundleWriterImpl.java
index f8fb1a66aaa4a6be89fa589e355be6a119b761d7..10886002bcec89abf917bfe801eb02f0bc983f02 100644
--- a/components/net/sf/briar/protocol/BundleWriterImpl.java
+++ b/components/net/sf/briar/protocol/BundleWriterImpl.java
@@ -84,7 +84,8 @@ class BundleWriterImpl implements BundleWriter {
 		}
 		if(state != State.MORE_BATCHES) throw new IllegalStateException();
 		writer.writeListEnd();
-		writer.close();
+		out.flush();
+		out.close();
 		state = State.END;
 	}
 }
diff --git a/components/net/sf/briar/protocol/MessageEncoderImpl.java b/components/net/sf/briar/protocol/MessageEncoderImpl.java
index 2ab66d017d74bedf929a228d7e20f342846b8975..11a99d6f39cf545d4f895f6c2260ed3b274a7414 100644
--- a/components/net/sf/briar/protocol/MessageEncoderImpl.java
+++ b/components/net/sf/briar/protocol/MessageEncoderImpl.java
@@ -52,7 +52,6 @@ class MessageEncoderImpl implements MessageEncoder {
 		// Write the signature
 		w.writeRaw(sig);
 		byte[] raw = out.toByteArray();
-		w.close();
 		// The message ID is the hash of the entire message
 		messageDigest.reset();
 		messageDigest.update(raw);
@@ -62,7 +61,6 @@ class MessageEncoderImpl implements MessageEncoder {
 		w = writerFactory.createWriter(out);
 		w.writeString(nick);
 		w.writeRaw(keyPair.getPublic().getEncoded());
-		w.close();
 		messageDigest.reset();
 		messageDigest.update(out.toByteArray());
 		AuthorId authorId = new AuthorId(messageDigest.digest());
diff --git a/components/net/sf/briar/serial/WriterImpl.java b/components/net/sf/briar/serial/WriterImpl.java
index bb27a56aaaede2c4f948ada5a32b41b892835fd0..b14c7fed51392a72be50cb285924646a453b1f62 100644
--- a/components/net/sf/briar/serial/WriterImpl.java
+++ b/components/net/sf/briar/serial/WriterImpl.java
@@ -25,11 +25,6 @@ class WriterImpl implements Writer {
 		return bytesWritten;
 	}
 
-	public void close() throws IOException {
-		out.flush();
-		out.close();
-	}
-
 	public void writeBoolean(boolean b) throws IOException {
 		if(b) out.write(Tag.TRUE);
 		else out.write(Tag.FALSE);
diff --git a/test/net/sf/briar/protocol/BatchReaderTest.java b/test/net/sf/briar/protocol/BatchReaderTest.java
index 6eaa425be7698385c3e823b7b0c24b5833cc234e..b82d9d253ca7175c7a7048cf8d79742383b7cfd1 100644
--- a/test/net/sf/briar/protocol/BatchReaderTest.java
+++ b/test/net/sf/briar/protocol/BatchReaderTest.java
@@ -152,7 +152,6 @@ public class BatchReaderTest extends TestCase {
 		w.writeUserDefinedTag(Tags.MESSAGE);
 		w.writeRaw(new byte[size - 10]);
 		w.writeListEnd();
-		w.close();
 		byte[] b = out.toByteArray();
 		assertEquals(size, b.length);
 		return b;
@@ -164,7 +163,6 @@ public class BatchReaderTest extends TestCase {
 		w.writeUserDefinedTag(Tags.BATCH);
 		w.writeListStart();
 		w.writeListEnd();
-		w.close();
 		return out.toByteArray();
 	}
 
diff --git a/test/net/sf/briar/protocol/BundleReaderImplTest.java b/test/net/sf/briar/protocol/BundleReaderImplTest.java
index d7fd003765c68ece750281a56a991872765c3fc9..794adc310c44c94883b7fe14d8c44eab6ec1ee44 100644
--- a/test/net/sf/briar/protocol/BundleReaderImplTest.java
+++ b/test/net/sf/briar/protocol/BundleReaderImplTest.java
@@ -72,7 +72,6 @@ public class BundleReaderImplTest extends TestCase {
 		w.writeUserDefinedTag(Tags.BATCH);
 		w.writeList(Collections.emptyList());
 		w.writeListEnd();
-		w.close();
 		byte[] headless = out.toByteArray();
 		// Try to read a header from the headless bundle
 		ByteArrayInputStream in = new ByteArrayInputStream(headless);
@@ -96,7 +95,6 @@ public class BundleReaderImplTest extends TestCase {
 		w.writeList(Collections.emptyList()); // Subs
 		w.writeMap(Collections.emptyMap()); // Transports
 		w.writeInt64(System.currentTimeMillis()); // Timestamp
-		w.close();
 		byte[] headerOnly = out.toByteArray();
 		// Try to read a header from the header-only bundle
 		ByteArrayInputStream in = new ByteArrayInputStream(headerOnly);
@@ -122,7 +120,6 @@ public class BundleReaderImplTest extends TestCase {
 		w.writeInt64(System.currentTimeMillis()); // Timestamp
 		w.writeListStart();
 		w.writeListEnd();
-		w.close();
 		byte[] batchless = out.toByteArray();
 		// It should be possible to read the header and null
 		ByteArrayInputStream in = new ByteArrayInputStream(batchless);
@@ -210,7 +207,6 @@ public class BundleReaderImplTest extends TestCase {
 		w.writeUserDefinedTag(Tags.BATCH);
 		w.writeList(Collections.emptyList()); // Messages
 		w.writeListEnd();
-		w.close();
 		return out.toByteArray();
 	}
 
diff --git a/test/net/sf/briar/protocol/HeaderReaderTest.java b/test/net/sf/briar/protocol/HeaderReaderTest.java
index af2648e9bfb69da85da1c9cca680fcf478c62e97..e934c59ba918f3c0120abef43b5ae0b86aed4d18 100644
--- a/test/net/sf/briar/protocol/HeaderReaderTest.java
+++ b/test/net/sf/briar/protocol/HeaderReaderTest.java
@@ -133,7 +133,6 @@ public class HeaderReaderTest extends TestCase {
 		w.writeMapEnd();
 		// Timestamp
 		w.writeInt64(System.currentTimeMillis());
-		w.close();
 		assertEquals(size, out.size());
 		return out.toByteArray();
 	}
@@ -153,7 +152,6 @@ public class HeaderReaderTest extends TestCase {
 		w.writeMapEnd();
 		// Timestamp
 		w.writeInt64(System.currentTimeMillis());
-		w.close();
 		return out.toByteArray();
 	}
 }