diff --git a/briar-api/src/org/briarproject/api/crypto/CryptoComponent.java b/briar-api/src/org/briarproject/api/crypto/CryptoComponent.java
index 0f448daef8b84cfcc5a458404dba73e651a76168..6add0417b71c42bedff400b6c9cf4a84a30f1990 100644
--- a/briar-api/src/org/briarproject/api/crypto/CryptoComponent.java
+++ b/briar-api/src/org/briarproject/api/crypto/CryptoComponent.java
@@ -77,9 +77,6 @@ public interface CryptoComponent {
 	 */
 	SecretKey deriveFrameKey(byte[] secret, long streamNumber, boolean alice);
 
-	/** Returns a cipher for encrypting and authenticating frames. */
-	AuthenticatedCipher getFrameCipher();
-
 	/** Encodes the pseudo-random tag that is used to recognise a stream. */
 	void encodeTag(byte[] tag, SecretKey tagKey, long streamNumber);
 
diff --git a/briar-api/src/org/briarproject/api/crypto/AuthenticatedCipher.java b/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java
similarity index 65%
rename from briar-api/src/org/briarproject/api/crypto/AuthenticatedCipher.java
rename to briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java
index 8256b31febcf73f4311bc0c5e01bffaf1c7a2738..3225b65e49d04b9dfa7179748719fb37ed013f4c 100644
--- a/briar-api/src/org/briarproject/api/crypto/AuthenticatedCipher.java
+++ b/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java
@@ -1,11 +1,14 @@
-package org.briarproject.api.crypto;
+package org.briarproject.crypto;
 
 import java.security.GeneralSecurityException;
 
-public interface AuthenticatedCipher {
+import org.briarproject.api.crypto.SecretKey;
+
+interface AuthenticatedCipher {
 
 	/**
-	 * Initializes this cipher with a key and an initialisation vector (IV).
+	 * Initializes this cipher for encryption or decryption with a key and an
+	 * initialisation vector (IV).
 	 */
 	void init(boolean encrypt, SecretKey key, byte[] iv)
 			throws GeneralSecurityException;
@@ -16,7 +19,4 @@ public interface AuthenticatedCipher {
 
 	/** Returns the length of the message authentication code (MAC) in bytes. */
 	int getMacBytes();
-
-	/** Returns the block size of the cipher in bytes. */
-	int getBlockBytes();
 }
diff --git a/briar-core/src/org/briarproject/crypto/AuthenticatedCipherImpl.java b/briar-core/src/org/briarproject/crypto/AuthenticatedCipherImpl.java
index d840313846210a7b3085f273fe47851f00202857..671a73e85530eee7cb786b452596a189cae9c486 100644
--- a/briar-core/src/org/briarproject/crypto/AuthenticatedCipherImpl.java
+++ b/briar-core/src/org/briarproject/crypto/AuthenticatedCipherImpl.java
@@ -1,8 +1,9 @@
 package org.briarproject.crypto;
 
+import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
+
 import java.security.GeneralSecurityException;
 
-import org.briarproject.api.crypto.AuthenticatedCipher;
 import org.briarproject.api.crypto.SecretKey;
 import org.spongycastle.crypto.DataLengthException;
 import org.spongycastle.crypto.InvalidCipherTextException;
@@ -15,8 +16,6 @@ import org.spongycastle.crypto.params.KeyParameter;
 
 class AuthenticatedCipherImpl implements AuthenticatedCipher {
 
-	private static final int MAC_BYTES = 16;
-
 	private final AEADBlockCipher cipher;
 
 	AuthenticatedCipherImpl() {
@@ -44,7 +43,7 @@ class AuthenticatedCipherImpl implements AuthenticatedCipher {
 			throws GeneralSecurityException {
 		KeyParameter k = new KeyParameter(key.getBytes());
 		// Authenticate the IV by passing it as additional authenticated data
-		AEADParameters params = new AEADParameters(k, MAC_BYTES * 8, iv, iv);
+		AEADParameters params = new AEADParameters(k, MAC_LENGTH * 8, iv, iv);
 		try {
 			cipher.init(encrypt, params);
 		} catch(IllegalArgumentException e) {
@@ -53,10 +52,6 @@ class AuthenticatedCipherImpl implements AuthenticatedCipher {
 	}
 
 	public int getMacBytes() {
-		return MAC_BYTES;
-	}
-
-	public int getBlockBytes() {
-		return cipher.getUnderlyingCipher().getBlockSize();
+		return MAC_LENGTH;
 	}
 }
diff --git a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java b/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
index 5474bcbec856f3dac9ae532024ee0d974de60f50..34a36f0fdc32aba1586229b70470afdb9bbdd555 100644
--- a/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
+++ b/briar-core/src/org/briarproject/crypto/CryptoComponentImpl.java
@@ -17,7 +17,6 @@ import java.util.logging.Logger;
 
 import javax.inject.Inject;
 
-import org.briarproject.api.crypto.AuthenticatedCipher;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.crypto.KeyPair;
 import org.briarproject.api.crypto.KeyParser;
@@ -290,14 +289,6 @@ class CryptoComponentImpl implements CryptoComponent {
 		return new SecretKey(counterModeKdf(secret, label, context));
 	}
 
-	public AuthenticatedCipher getFrameCipher() {
-		return getAuthenticatedCipher();
-	}
-
-	private AuthenticatedCipher getAuthenticatedCipher() {
-		return new AuthenticatedCipherImpl();
-	}
-
 	public void encodeTag(byte[] tag, SecretKey tagKey, long streamNumber) {
 		if(tag.length < TAG_LENGTH) throw new IllegalArgumentException();
 		if(streamNumber < 0 || streamNumber > MAX_32_BIT_UNSIGNED)
@@ -312,7 +303,7 @@ class CryptoComponentImpl implements CryptoComponent {
 	}
 
 	public byte[] encryptWithPassword(byte[] input, String password) {
-		AuthenticatedCipher cipher = getAuthenticatedCipher();
+		AuthenticatedCipher cipher = new AuthenticatedCipherImpl();
 		int macBytes = cipher.getMacBytes();
 		// Generate a random salt
 		byte[] salt = new byte[PBKDF_SALT_BYTES];
@@ -342,7 +333,7 @@ class CryptoComponentImpl implements CryptoComponent {
 	}
 
 	public byte[] decryptWithPassword(byte[] input, String password) {
-		AuthenticatedCipher cipher = getAuthenticatedCipher();
+		AuthenticatedCipher cipher = new AuthenticatedCipherImpl();
 		int macBytes = cipher.getMacBytes();
 		// The input contains the salt, iterations, IV, ciphertext and MAC
 		if(input.length < PBKDF_SALT_BYTES + 4 + STORAGE_IV_BYTES + macBytes)
diff --git a/briar-core/src/org/briarproject/crypto/StreamDecrypterFactoryImpl.java b/briar-core/src/org/briarproject/crypto/StreamDecrypterFactoryImpl.java
index bed0503c244ace043a359662c0a3155225920a99..23ea5e245ccd6925d73414ac4644c0eee339310c 100644
--- a/briar-core/src/org/briarproject/crypto/StreamDecrypterFactoryImpl.java
+++ b/briar-core/src/org/briarproject/crypto/StreamDecrypterFactoryImpl.java
@@ -27,7 +27,8 @@ class StreamDecrypterFactoryImpl implements StreamDecrypterFactory {
 		boolean alice = !ctx.getAlice();
 		SecretKey frameKey = crypto.deriveFrameKey(secret, streamNumber, alice);
 		// Create the decrypter
-		return new StreamDecrypterImpl(in, crypto.getFrameCipher(), frameKey);
+		AuthenticatedCipher cipher = new AuthenticatedCipherImpl();
+		return new StreamDecrypterImpl(in, cipher, frameKey);
 	}
 
 	public StreamDecrypter createInvitationStreamDecrypter(InputStream in,
@@ -35,6 +36,7 @@ class StreamDecrypterFactoryImpl implements StreamDecrypterFactory {
 		// Derive the frame key
 		SecretKey frameKey = crypto.deriveFrameKey(secret, 0, alice);
 		// Create the decrypter
-		return new StreamDecrypterImpl(in, crypto.getFrameCipher(), frameKey);
+		AuthenticatedCipher cipher = new AuthenticatedCipherImpl();
+		return new StreamDecrypterImpl(in, cipher, frameKey);
 	}
 }
diff --git a/briar-core/src/org/briarproject/crypto/StreamDecrypterImpl.java b/briar-core/src/org/briarproject/crypto/StreamDecrypterImpl.java
index e950fff2f6ed42978722f30e3e90841310d13175..3e3e24055238ebf1606c733e04c1da60a7cb9cfd 100644
--- a/briar-core/src/org/briarproject/crypto/StreamDecrypterImpl.java
+++ b/briar-core/src/org/briarproject/crypto/StreamDecrypterImpl.java
@@ -12,7 +12,6 @@ import java.io.InputStream;
 import java.security.GeneralSecurityException;
 
 import org.briarproject.api.FormatException;
-import org.briarproject.api.crypto.AuthenticatedCipher;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.crypto.StreamDecrypter;
 
diff --git a/briar-core/src/org/briarproject/crypto/StreamEncrypterFactoryImpl.java b/briar-core/src/org/briarproject/crypto/StreamEncrypterFactoryImpl.java
index ec8286e06100b00598b726925e6a4eb0eb096cc7..ae0429e05e952b8f60699767291f9e837e2e2841 100644
--- a/briar-core/src/org/briarproject/crypto/StreamEncrypterFactoryImpl.java
+++ b/briar-core/src/org/briarproject/crypto/StreamEncrypterFactoryImpl.java
@@ -33,8 +33,8 @@ class StreamEncrypterFactoryImpl implements StreamEncrypterFactory {
 		// Derive the frame key
 		SecretKey frameKey = crypto.deriveFrameKey(secret, streamNumber, alice);
 		// Create the encrypter
-		return new StreamEncrypterImpl(out, crypto.getFrameCipher(), frameKey,
-				tag);
+		AuthenticatedCipher cipher = new AuthenticatedCipherImpl();
+		return new StreamEncrypterImpl(out, cipher, frameKey, tag);
 	}
 
 	public StreamEncrypter createInvitationStreamEncrypter(OutputStream out,
@@ -42,7 +42,7 @@ class StreamEncrypterFactoryImpl implements StreamEncrypterFactory {
 		// Derive the frame key
 		SecretKey frameKey = crypto.deriveFrameKey(secret, 0, alice);
 		// Create the encrypter
-		return new StreamEncrypterImpl(out, crypto.getFrameCipher(), frameKey,
-				null);
+		AuthenticatedCipher cipher = new AuthenticatedCipherImpl();
+		return new StreamEncrypterImpl(out, cipher, frameKey, null);
 	}
 }
diff --git a/briar-core/src/org/briarproject/crypto/StreamEncrypterImpl.java b/briar-core/src/org/briarproject/crypto/StreamEncrypterImpl.java
index ce06b09c410207bb38957647c979d73dee3cdbbd..118648a2b78f5c39eb40b2296430bc7d06dc4102 100644
--- a/briar-core/src/org/briarproject/crypto/StreamEncrypterImpl.java
+++ b/briar-core/src/org/briarproject/crypto/StreamEncrypterImpl.java
@@ -11,7 +11,6 @@ import java.io.IOException;
 import java.io.OutputStream;
 import java.security.GeneralSecurityException;
 
-import org.briarproject.api.crypto.AuthenticatedCipher;
 import org.briarproject.api.crypto.SecretKey;
 import org.briarproject.api.crypto.StreamEncrypter;
 
diff --git a/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java b/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java
index a874314165b0e3b6de8b38c93c443136e0d928a0..922d1fa17c22655d20c97535f939bb8453a3e4f3 100644
--- a/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java
+++ b/briar-tests/src/org/briarproject/crypto/StreamEncrypterImplTest.java
@@ -9,7 +9,6 @@ import java.io.ByteArrayOutputStream;
 import java.util.Random;
 
 import org.briarproject.BriarTestCase;
-import org.briarproject.api.crypto.AuthenticatedCipher;
 import org.briarproject.api.crypto.SecretKey;
 import org.junit.Test;
 
diff --git a/briar-tests/src/org/briarproject/crypto/TestAuthenticatedCipher.java b/briar-tests/src/org/briarproject/crypto/TestAuthenticatedCipher.java
index 018db0b6c24c95018fe907d3a854af4341c8944a..38613181775a3d7bdd291a6fe702bede1a62cc67 100644
--- a/briar-tests/src/org/briarproject/crypto/TestAuthenticatedCipher.java
+++ b/briar-tests/src/org/briarproject/crypto/TestAuthenticatedCipher.java
@@ -4,13 +4,10 @@ import static org.briarproject.api.transport.TransportConstants.MAC_LENGTH;
 
 import java.security.GeneralSecurityException;
 
-import org.briarproject.api.crypto.AuthenticatedCipher;
 import org.briarproject.api.crypto.SecretKey;
 
 class TestAuthenticatedCipher implements AuthenticatedCipher {
 
-	private static final int BLOCK_BYTES = 16;
-
 	private boolean encrypt = false;
 
 	public void init(boolean encrypt, SecretKey key, byte[] iv)
@@ -38,8 +35,4 @@ class TestAuthenticatedCipher implements AuthenticatedCipher {
 	public int getMacBytes() {
 		return MAC_LENGTH;
 	}
-
-	public int getBlockBytes() {
-		return BLOCK_BYTES;
-	}
 }