diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java b/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java
index a4643820766e61ac95c137cf1ae2d181e883e572..5404a106f4749db200966f8b5f12fad90e17453c 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemPlugin.java
@@ -42,18 +42,21 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
 	private final SerialPortList serialPortList;
 	private final DuplexPluginCallback callback;
 	private final long pollingInterval;
+	private final boolean shuffle; // Used to disable shuffling for testing
 
 	private volatile boolean running = false;
 	private volatile Modem modem = null;
 
 	ModemPlugin(@PluginExecutor Executor pluginExecutor,
 			ModemFactory modemFactory, SerialPortList serialPortList,
-			DuplexPluginCallback callback, long pollingInterval) {
+			DuplexPluginCallback callback, long pollingInterval,
+			boolean shuffle) {
 		this.pluginExecutor = pluginExecutor;
 		this.modemFactory = modemFactory;
 		this.serialPortList = serialPortList;
 		this.callback = callback;
 		this.pollingInterval = pollingInterval;
+		this.shuffle = shuffle;
 	}
 
 	public TransportId getId() {
@@ -138,7 +141,7 @@ class ModemPlugin implements DuplexPlugin, Modem.Callback {
 		Map<ContactId, TransportProperties> remote =
 				callback.getRemoteProperties();
 		List<ContactId> contacts = new ArrayList<ContactId>(remote.keySet());
-		Collections.shuffle(contacts);
+		if(shuffle) Collections.shuffle(contacts);
 		Iterator<ContactId> it = contacts.iterator();
 		while(it.hasNext() && running) {
 			ContactId c = it.next();
diff --git a/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java b/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
index 3afdde1d2a24e81693817846e5eb3adeb1fb6b83..7b845fd801031bd34d0518dd328081b9e80a2ab9 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/ModemPluginFactory.java
@@ -34,6 +34,6 @@ public class ModemPluginFactory implements DuplexPluginFactory {
 		String enabled = callback.getConfig().get("enabled");
 		if(StringUtils.isNullOrEmpty(enabled)) return null;
 		return new ModemPlugin(pluginExecutor, modemFactory, serialPortList,
-				callback, POLLING_INTERVAL);
+				callback, POLLING_INTERVAL, true);
 	}
 }
diff --git a/briar-tests/src/net/sf/briar/plugins/modem/ModemPluginTest.java b/briar-tests/src/net/sf/briar/plugins/modem/ModemPluginTest.java
index 26bf721c3a2c6cb4930db998aec9733aeae5ab1c..3de474d35cbe8fafa66773492f706a38ba1437a4 100644
--- a/briar-tests/src/net/sf/briar/plugins/modem/ModemPluginTest.java
+++ b/briar-tests/src/net/sf/briar/plugins/modem/ModemPluginTest.java
@@ -37,7 +37,7 @@ public class ModemPluginTest extends BriarTestCase {
 		final SerialPortList serialPortList =
 				context.mock(SerialPortList.class);
 		final ModemPlugin plugin = new ModemPlugin(null, modemFactory,
-				serialPortList, null, 0L);
+				serialPortList, null, 0L, true);
 		final Modem modem = context.mock(Modem.class);
 		context.checking(new Expectations() {{
 			oneOf(serialPortList).getPortNames();
@@ -71,7 +71,7 @@ public class ModemPluginTest extends BriarTestCase {
 		final DuplexPluginCallback callback =
 				context.mock(DuplexPluginCallback.class);
 		final ModemPlugin plugin = new ModemPlugin(null, modemFactory,
-				serialPortList, callback, 0L);
+				serialPortList, callback, 0L, true);
 		final Modem modem = context.mock(Modem.class);
 		final TransportProperties local = new TransportProperties();
 		local.put("iso3166", ISO_1336);
@@ -112,7 +112,7 @@ public class ModemPluginTest extends BriarTestCase {
 		final DuplexPluginCallback callback =
 				context.mock(DuplexPluginCallback.class);
 		final ModemPlugin plugin = new ModemPlugin(null, modemFactory,
-				serialPortList, callback, 0L);
+				serialPortList, callback, 0L, true);
 		final Modem modem = context.mock(Modem.class);
 		final TransportProperties local = new TransportProperties();
 		local.put("iso3166", ISO_1336);
@@ -153,7 +153,7 @@ public class ModemPluginTest extends BriarTestCase {
 		final DuplexPluginCallback callback =
 				context.mock(DuplexPluginCallback.class);
 		final ModemPlugin plugin = new ModemPlugin(null, modemFactory,
-				serialPortList, callback, 0L);
+				serialPortList, callback, 0L, true);
 		final Modem modem = context.mock(Modem.class);
 		final TransportProperties local = new TransportProperties();
 		local.put("iso3166", ISO_1336);
@@ -202,8 +202,9 @@ public class ModemPluginTest extends BriarTestCase {
 				context.mock(SerialPortList.class);
 		final DuplexPluginCallback callback =
 				context.mock(DuplexPluginCallback.class);
+		// Disable shuffling for this test, it confuses jMock
 		final ModemPlugin plugin = new ModemPlugin(pluginExecutor, modemFactory,
-				serialPortList, callback, 0L);
+				serialPortList, callback, 0L, false);
 		final Modem modem = context.mock(Modem.class);
 		final TransportProperties local = new TransportProperties();
 		local.put("iso3166", ISO_1336);