diff --git a/api/net/sf/briar/api/transport/batch/BatchTransportCallback.java b/api/net/sf/briar/api/plugins/BatchTransportCallback.java
similarity index 72%
rename from api/net/sf/briar/api/transport/batch/BatchTransportCallback.java
rename to api/net/sf/briar/api/plugins/BatchTransportCallback.java
index 7f335c6068daad41a6d834a1c4dea0217cc24bff..5c65d16cf3c0fcc4308d5c1b7aec4e6e0c8fe0c1 100644
--- a/api/net/sf/briar/api/transport/batch/BatchTransportCallback.java
+++ b/api/net/sf/briar/api/plugins/BatchTransportCallback.java
@@ -1,6 +1,8 @@
-package net.sf.briar.api.transport.batch;
+package net.sf.briar.api.plugins;
 
 import net.sf.briar.api.ContactId;
+import net.sf.briar.api.transport.BatchTransportReader;
+import net.sf.briar.api.transport.BatchTransportWriter;
 import net.sf.briar.api.transport.TransportCallback;
 
 /**
diff --git a/api/net/sf/briar/api/transport/batch/BatchTransportPlugin.java b/api/net/sf/briar/api/plugins/BatchTransportPlugin.java
similarity index 83%
rename from api/net/sf/briar/api/transport/batch/BatchTransportPlugin.java
rename to api/net/sf/briar/api/plugins/BatchTransportPlugin.java
index 5f670367ee0b498c615c9c6d9be0c5364aa5820c..51348c9633b10367f028ab787fbe01f60e867184 100644
--- a/api/net/sf/briar/api/transport/batch/BatchTransportPlugin.java
+++ b/api/net/sf/briar/api/plugins/BatchTransportPlugin.java
@@ -1,7 +1,8 @@
-package net.sf.briar.api.transport.batch;
+package net.sf.briar.api.plugins;
 
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.TransportPlugin;
+import net.sf.briar.api.transport.BatchTransportReader;
+import net.sf.briar.api.transport.BatchTransportWriter;
 
 /**
  * An interface for transport plugins that do not support bidirectional,
diff --git a/api/net/sf/briar/api/transport/stream/StreamTransportCallback.java b/api/net/sf/briar/api/plugins/StreamTransportCallback.java
similarity index 81%
rename from api/net/sf/briar/api/transport/stream/StreamTransportCallback.java
rename to api/net/sf/briar/api/plugins/StreamTransportCallback.java
index 2e41f18f1300a38046c6ce5f4026af9f2154236a..eb468ee4513e5b51b631bb92aa4bc986532a70cb 100644
--- a/api/net/sf/briar/api/transport/stream/StreamTransportCallback.java
+++ b/api/net/sf/briar/api/plugins/StreamTransportCallback.java
@@ -1,6 +1,7 @@
-package net.sf.briar.api.transport.stream;
+package net.sf.briar.api.plugins;
 
 import net.sf.briar.api.ContactId;
+import net.sf.briar.api.transport.StreamTransportConnection;
 import net.sf.briar.api.transport.TransportCallback;
 
 /**
diff --git a/api/net/sf/briar/api/transport/stream/StreamTransportPlugin.java b/api/net/sf/briar/api/plugins/StreamTransportPlugin.java
similarity index 83%
rename from api/net/sf/briar/api/transport/stream/StreamTransportPlugin.java
rename to api/net/sf/briar/api/plugins/StreamTransportPlugin.java
index cfe79f1237912d86c5d194d4be84113b5620d95a..5b1a6a7c8c9f9f48d3a23dd336eb898642accb7a 100644
--- a/api/net/sf/briar/api/transport/stream/StreamTransportPlugin.java
+++ b/api/net/sf/briar/api/plugins/StreamTransportPlugin.java
@@ -1,7 +1,7 @@
-package net.sf.briar.api.transport.stream;
+package net.sf.briar.api.plugins;
 
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.TransportPlugin;
+import net.sf.briar.api.transport.StreamTransportConnection;
 
 /**
  * An interface for transport plugins that support bidirectional, reliable,
diff --git a/api/net/sf/briar/api/transport/TransportPlugin.java b/api/net/sf/briar/api/plugins/TransportPlugin.java
similarity index 97%
rename from api/net/sf/briar/api/transport/TransportPlugin.java
rename to api/net/sf/briar/api/plugins/TransportPlugin.java
index 3f3985fe34c5cccf87ed2dbf33b2618521ad32e9..ebc9be2cd2a8850c15823ab16e5c605a86c6d66a 100644
--- a/api/net/sf/briar/api/transport/TransportPlugin.java
+++ b/api/net/sf/briar/api/plugins/TransportPlugin.java
@@ -1,4 +1,4 @@
-package net.sf.briar.api.transport;
+package net.sf.briar.api.plugins;
 
 import java.io.IOException;
 import java.util.Map;
diff --git a/api/net/sf/briar/api/transport/batch/BatchTransportReader.java b/api/net/sf/briar/api/transport/BatchTransportReader.java
similarity index 93%
rename from api/net/sf/briar/api/transport/batch/BatchTransportReader.java
rename to api/net/sf/briar/api/transport/BatchTransportReader.java
index e0e05dc50172661eb0790a1b3c80c77caf9a2cbb..f47d096e5608473b30ceafce4eba64f60dc70b45 100644
--- a/api/net/sf/briar/api/transport/batch/BatchTransportReader.java
+++ b/api/net/sf/briar/api/transport/BatchTransportReader.java
@@ -1,4 +1,4 @@
-package net.sf.briar.api.transport.batch;
+package net.sf.briar.api.transport;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/api/net/sf/briar/api/transport/batch/BatchTransportWriter.java b/api/net/sf/briar/api/transport/BatchTransportWriter.java
similarity index 93%
rename from api/net/sf/briar/api/transport/batch/BatchTransportWriter.java
rename to api/net/sf/briar/api/transport/BatchTransportWriter.java
index 510d66a524cd5116d8cac910b7947e96ec4653ad..344efa3107b181f1e2cc9e423aca326364d9ae7f 100644
--- a/api/net/sf/briar/api/transport/batch/BatchTransportWriter.java
+++ b/api/net/sf/briar/api/transport/BatchTransportWriter.java
@@ -1,4 +1,4 @@
-package net.sf.briar.api.transport.batch;
+package net.sf.briar.api.transport;
 
 import java.io.IOException;
 import java.io.OutputStream;
diff --git a/api/net/sf/briar/api/transport/stream/StreamTransportConnection.java b/api/net/sf/briar/api/transport/StreamTransportConnection.java
similarity index 94%
rename from api/net/sf/briar/api/transport/stream/StreamTransportConnection.java
rename to api/net/sf/briar/api/transport/StreamTransportConnection.java
index 71ffa8da8750dbafe79f9e731ad1d9e413dad885..5e65b76e1930a3cc29278cfa90d17121a277ab5b 100644
--- a/api/net/sf/briar/api/transport/stream/StreamTransportConnection.java
+++ b/api/net/sf/briar/api/transport/StreamTransportConnection.java
@@ -1,4 +1,4 @@
-package net.sf.briar.api.transport.stream;
+package net.sf.briar.api.transport;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/components/net/sf/briar/plugins/AbstractPlugin.java b/components/net/sf/briar/plugins/AbstractPlugin.java
index a694beb69899676231af979daf3ed0b4c84db9f0..1408e57d2ab61af30782a14bbceac31502c27264 100644
--- a/components/net/sf/briar/plugins/AbstractPlugin.java
+++ b/components/net/sf/briar/plugins/AbstractPlugin.java
@@ -8,7 +8,7 @@ import java.util.Map.Entry;
 import java.util.concurrent.Executor;
 
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.TransportPlugin;
+import net.sf.briar.api.plugins.TransportPlugin;
 
 public abstract class AbstractPlugin implements TransportPlugin {
 
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
index 2088ed99f0f27a1f0436ed1eb0b25284d6791fa5..25ce8321d97ba90d4f54159b79c32bb2a3d8f94e 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothPlugin.java
@@ -21,9 +21,9 @@ import javax.microedition.io.StreamConnectionNotifier;
 
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.TransportId;
-import net.sf.briar.api.transport.stream.StreamTransportCallback;
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
-import net.sf.briar.api.transport.stream.StreamTransportPlugin;
+import net.sf.briar.api.plugins.StreamTransportCallback;
+import net.sf.briar.api.plugins.StreamTransportPlugin;
+import net.sf.briar.api.transport.StreamTransportConnection;
 import net.sf.briar.plugins.AbstractPlugin;
 import net.sf.briar.util.OsUtils;
 import net.sf.briar.util.StringUtils;
diff --git a/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java b/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
index dc2f666dcf1f3a16d7460f61fe464ded30780d4f..87c8542455e0009334be283b7a71c1f5370f6192 100644
--- a/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
+++ b/components/net/sf/briar/plugins/bluetooth/BluetoothTransportConnection.java
@@ -6,7 +6,7 @@ import java.io.OutputStream;
 
 import javax.microedition.io.StreamConnection;
 
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
+import net.sf.briar.api.transport.StreamTransportConnection;
 
 class BluetoothTransportConnection implements StreamTransportConnection {
 
diff --git a/components/net/sf/briar/plugins/file/FilePlugin.java b/components/net/sf/briar/plugins/file/FilePlugin.java
index 3e35a606588512a9de7ea9c3579dbb1eefdde17b..c6ddef1f35587cfe2438d65889be1262ca7a2a8f 100644
--- a/components/net/sf/briar/plugins/file/FilePlugin.java
+++ b/components/net/sf/briar/plugins/file/FilePlugin.java
@@ -10,11 +10,11 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import net.sf.briar.api.ContactId;
+import net.sf.briar.api.plugins.BatchTransportCallback;
+import net.sf.briar.api.plugins.BatchTransportPlugin;
+import net.sf.briar.api.transport.BatchTransportReader;
+import net.sf.briar.api.transport.BatchTransportWriter;
 import net.sf.briar.api.transport.TransportConstants;
-import net.sf.briar.api.transport.batch.BatchTransportCallback;
-import net.sf.briar.api.transport.batch.BatchTransportPlugin;
-import net.sf.briar.api.transport.batch.BatchTransportReader;
-import net.sf.briar.api.transport.batch.BatchTransportWriter;
 import net.sf.briar.plugins.AbstractPlugin;
 
 import org.apache.commons.io.FileSystemUtils;
diff --git a/components/net/sf/briar/plugins/file/FileTransportReader.java b/components/net/sf/briar/plugins/file/FileTransportReader.java
index a5fafef358c0146f50221cc2c4b8d6a99db2ec9d..7ab0758392f6bed09faf17039d07634a1b58e5e4 100644
--- a/components/net/sf/briar/plugins/file/FileTransportReader.java
+++ b/components/net/sf/briar/plugins/file/FileTransportReader.java
@@ -4,7 +4,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 
-import net.sf.briar.api.transport.batch.BatchTransportReader;
+import net.sf.briar.api.transport.BatchTransportReader;
 
 class FileTransportReader implements BatchTransportReader {
 
diff --git a/components/net/sf/briar/plugins/file/FileTransportWriter.java b/components/net/sf/briar/plugins/file/FileTransportWriter.java
index 19bf88a1ce5b937823338b39081a23f8d1614ba3..ff5a90d5a20e5d9f95c48cd674552f9d752c3638 100644
--- a/components/net/sf/briar/plugins/file/FileTransportWriter.java
+++ b/components/net/sf/briar/plugins/file/FileTransportWriter.java
@@ -4,7 +4,7 @@ import java.io.File;
 import java.io.IOException;
 import java.io.OutputStream;
 
-import net.sf.briar.api.transport.batch.BatchTransportWriter;
+import net.sf.briar.api.transport.BatchTransportWriter;
 
 class FileTransportWriter implements BatchTransportWriter {
 
diff --git a/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java b/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
index 9abec747082f9d8ca86ef9094ddbda6ddee82c1e..70e9078302d2f82366c02857351b46e6306f4efd 100644
--- a/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
+++ b/components/net/sf/briar/plugins/file/RemovableDrivePlugin.java
@@ -10,7 +10,7 @@ import java.util.logging.Logger;
 
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.TransportId;
-import net.sf.briar.api.transport.batch.BatchTransportCallback;
+import net.sf.briar.api.plugins.BatchTransportCallback;
 
 class RemovableDrivePlugin extends FilePlugin
 implements RemovableDriveMonitor.Callback {
diff --git a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
index ac0c3691ac028db9e7e39f06eaa4f0d5165a6311..f94317195acf756ac2d713ff657c1bbbbdc60b3a 100644
--- a/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SimpleSocketPlugin.java
@@ -11,7 +11,7 @@ import java.util.concurrent.Executor;
 
 import net.sf.briar.api.ContactId;
 import net.sf.briar.api.TransportId;
-import net.sf.briar.api.transport.stream.StreamTransportCallback;
+import net.sf.briar.api.plugins.StreamTransportCallback;
 
 class SimpleSocketPlugin extends SocketPlugin {
 
diff --git a/components/net/sf/briar/plugins/socket/SocketPlugin.java b/components/net/sf/briar/plugins/socket/SocketPlugin.java
index bbb6524248a841254d465bf575952e5adb87faa9..a333bf3bb21d4e463db77c1d687910b58ae5c9e6 100644
--- a/components/net/sf/briar/plugins/socket/SocketPlugin.java
+++ b/components/net/sf/briar/plugins/socket/SocketPlugin.java
@@ -10,9 +10,9 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.stream.StreamTransportCallback;
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
-import net.sf.briar.api.transport.stream.StreamTransportPlugin;
+import net.sf.briar.api.plugins.StreamTransportCallback;
+import net.sf.briar.api.plugins.StreamTransportPlugin;
+import net.sf.briar.api.transport.StreamTransportConnection;
 import net.sf.briar.plugins.AbstractPlugin;
 
 abstract class SocketPlugin extends AbstractPlugin
diff --git a/components/net/sf/briar/plugins/socket/SocketTransportConnection.java b/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
index bfc68198f4078453b8d4ebcd8473d48afabbc866..f5b1782979a776f73c264beee7a87a8f3ed4310e 100644
--- a/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
+++ b/components/net/sf/briar/plugins/socket/SocketTransportConnection.java
@@ -5,7 +5,7 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.Socket;
 
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
+import net.sf.briar.api.transport.StreamTransportConnection;
 
 class SocketTransportConnection implements StreamTransportConnection {
 
diff --git a/test/net/sf/briar/plugins/StubStreamCallback.java b/test/net/sf/briar/plugins/StubStreamCallback.java
index d39b32cd45d0da9946cfd8136f0fbd7b48154038..765ac73fc666ae4d3f20c83eca9c068515d295cf 100644
--- a/test/net/sf/briar/plugins/StubStreamCallback.java
+++ b/test/net/sf/briar/plugins/StubStreamCallback.java
@@ -3,8 +3,8 @@ package net.sf.briar.plugins;
 import java.util.Map;
 
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.stream.StreamTransportCallback;
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
+import net.sf.briar.api.plugins.StreamTransportCallback;
+import net.sf.briar.api.transport.StreamTransportConnection;
 
 public class StubStreamCallback implements StreamTransportCallback {
 
diff --git a/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java b/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java
index 2fc2bfab491267e652f934039757760eb4819c57..7840aa34f6e15da47c1933a53e8893617cdbbb16 100644
--- a/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java
+++ b/test/net/sf/briar/plugins/bluetooth/BluetoothClientTest.java
@@ -8,8 +8,8 @@ import java.util.Scanner;
 import java.util.TreeMap;
 
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.stream.StreamTransportCallback;
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
+import net.sf.briar.api.plugins.StreamTransportCallback;
+import net.sf.briar.api.transport.StreamTransportConnection;
 import net.sf.briar.plugins.ImmediateExecutor;
 
 // This is not a JUnit test - it has to be run manually while the server test
diff --git a/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java b/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java
index 0ab8e5ecb92a8820a8ec78131dbd271f24eeef47..17bf3d94a2d7c724de2d73b3d7da7738759a0cc8 100644
--- a/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java
+++ b/test/net/sf/briar/plugins/bluetooth/BluetoothServerTest.java
@@ -8,8 +8,8 @@ import java.util.Scanner;
 import java.util.TreeMap;
 
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.stream.StreamTransportCallback;
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
+import net.sf.briar.api.plugins.StreamTransportCallback;
+import net.sf.briar.api.transport.StreamTransportConnection;
 import net.sf.briar.plugins.ImmediateExecutor;
 
 //This is not a JUnit test - it has to be run manually while the server test
diff --git a/test/net/sf/briar/plugins/file/RemovableDrivePluginTest.java b/test/net/sf/briar/plugins/file/RemovableDrivePluginTest.java
index 08b2b19e7c9b4d7b45fa5311aee65c1d020b84d1..691c924123061a1426292af4c22db8e227b44d0b 100644
--- a/test/net/sf/briar/plugins/file/RemovableDrivePluginTest.java
+++ b/test/net/sf/briar/plugins/file/RemovableDrivePluginTest.java
@@ -14,9 +14,9 @@ import java.util.concurrent.Executor;
 import junit.framework.TestCase;
 import net.sf.briar.TestUtils;
 import net.sf.briar.api.ContactId;
+import net.sf.briar.api.plugins.BatchTransportCallback;
+import net.sf.briar.api.transport.BatchTransportWriter;
 import net.sf.briar.api.transport.TransportConstants;
-import net.sf.briar.api.transport.batch.BatchTransportCallback;
-import net.sf.briar.api.transport.batch.BatchTransportWriter;
 import net.sf.briar.plugins.ImmediateExecutor;
 import net.sf.briar.plugins.file.RemovableDriveMonitor.Callback;
 
diff --git a/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java b/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java
index 14ddaf666fb943d879cb72474bb88079d12202ad..702d4ea5545b6bfa01b61a8abeffcf122d19d178 100644
--- a/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java
+++ b/test/net/sf/briar/plugins/socket/SimpleSocketPluginTest.java
@@ -13,7 +13,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 
 import junit.framework.TestCase;
 import net.sf.briar.api.ContactId;
-import net.sf.briar.api.transport.stream.StreamTransportConnection;
+import net.sf.briar.api.transport.StreamTransportConnection;
 import net.sf.briar.plugins.ImmediateExecutor;
 import net.sf.briar.plugins.StubStreamCallback;