diff --git a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
index a03c23dbb547c845f3ea9b26b19dffdc29e6a9a8..78c3cd707006a1b9f2afb1d5eba4f689892e09f6 100644
--- a/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
+++ b/briar-core/src/org/briarproject/plugins/PluginManagerImpl.java
@@ -142,10 +142,12 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 		}
 	}
 
+	@Override
 	public Plugin getPlugin(TransportId t) {
 		return plugins.get(t);
 	}
 
+	@Override
 	public Collection<DuplexPlugin> getInvitationPlugins() {
 		List<DuplexPlugin> supported = new ArrayList<DuplexPlugin>();
 		for (DuplexPlugin d : duplexPlugins)
@@ -153,6 +155,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 		return Collections.unmodifiableList(supported);
 	}
 
+	@Override
 	public Collection<DuplexPlugin> getKeyAgreementPlugins() {
 		List<DuplexPlugin> supported = new ArrayList<DuplexPlugin>();
 		for (DuplexPlugin d : duplexPlugins)
@@ -194,6 +197,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 
 	private void connectToContact(final ContactId c, final SimplexPlugin p) {
 		ioExecutor.execute(new Runnable() {
+			@Override
 			public void run() {
 				TransportId t = p.getId();
 				if (!connectionRegistry.isConnected(c, t)) {
@@ -207,6 +211,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 
 	private void connectToContact(final ContactId c, final DuplexPlugin p) {
 		ioExecutor.execute(new Runnable() {
+			@Override
 			public void run() {
 				TransportId t = p.getId();
 				if (!connectionRegistry.isConnected(c, t)) {
@@ -229,6 +234,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			this.latch = latch;
 		}
 
+		@Override
 		public void run() {
 			try {
 				TransportId id = factory.getId();
@@ -248,7 +254,6 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 					if (started) {
 						plugins.put(id, plugin);
 						simplexPlugins.add(plugin);
-						if (plugin.shouldPoll()) poller.addPlugin(plugin);
 						if (LOG.isLoggable(INFO)) {
 							String name = plugin.getClass().getSimpleName();
 							LOG.info("Starting " + name + " took " +
@@ -281,6 +286,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			this.latch = latch;
 		}
 
+		@Override
 		public void run() {
 			try {
 				TransportId id = factory.getId();
@@ -300,7 +306,6 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 					if (started) {
 						plugins.put(id, plugin);
 						duplexPlugins.add(plugin);
-						if (plugin.shouldPoll()) poller.addPlugin(plugin);
 						if (LOG.isLoggable(INFO)) {
 							String name = plugin.getClass().getSimpleName();
 							LOG.info("Starting " + name + " took " +
@@ -332,6 +337,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			this.latch = latch;
 		}
 
+		@Override
 		public void run() {
 			try {
 				long start = System.currentTimeMillis();
@@ -357,6 +363,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			this.id = id;
 		}
 
+		@Override
 		public Settings getSettings() {
 			try {
 				return settingsManager.getSettings(id.getString());
@@ -366,6 +373,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			}
 		}
 
+		@Override
 		public TransportProperties getLocalProperties() {
 			try {
 				TransportProperties p =
@@ -377,6 +385,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			}
 		}
 
+		@Override
 		public Map<ContactId, TransportProperties> getRemoteProperties() {
 			try {
 				return transportPropertyManager.getRemoteProperties(id);
@@ -386,6 +395,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			}
 		}
 
+		@Override
 		public void mergeSettings(Settings s) {
 			try {
 				settingsManager.mergeSettings(s, id.getString());
@@ -394,6 +404,7 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			}
 		}
 
+		@Override
 		public void mergeLocalProperties(TransportProperties p) {
 			try {
 				transportPropertyManager.mergeLocalProperties(id, p);
@@ -402,24 +413,29 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			}
 		}
 
+		@Override
 		public int showChoice(String[] options, String... message) {
 			return uiCallback.showChoice(options, message);
 		}
 
+		@Override
 		public boolean showConfirmationMessage(String... message) {
 			return uiCallback.showConfirmationMessage(message);
 		}
 
+		@Override
 		public void showMessage(String... message) {
 			uiCallback.showMessage(message);
 		}
 
+		@Override
 		public void transportEnabled() {
 			eventBus.broadcast(new TransportEnabledEvent(id));
 			Plugin p = plugins.get(id);
 			if (p != null) poller.pollNow(p);
 		}
 
+		@Override
 		public void transportDisabled() {
 			eventBus.broadcast(new TransportDisabledEvent(id));
 		}
@@ -432,10 +448,12 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			super(id);
 		}
 
+		@Override
 		public void readerCreated(TransportConnectionReader r) {
 			connectionManager.manageIncomingConnection(id, r);
 		}
 
+		@Override
 		public void writerCreated(ContactId c, TransportConnectionWriter w) {
 			connectionManager.manageOutgoingConnection(c, id, w);
 		}
@@ -448,10 +466,12 @@ class PluginManagerImpl implements PluginManager, Service, EventListener {
 			super(id);
 		}
 
+		@Override
 		public void incomingConnectionCreated(DuplexTransportConnection d) {
 			connectionManager.manageIncomingConnection(id, d);
 		}
 
+		@Override
 		public void outgoingConnectionCreated(ContactId c,
 				DuplexTransportConnection d) {
 			connectionManager.manageOutgoingConnection(c, id, d);
diff --git a/briar-core/src/org/briarproject/plugins/Poller.java b/briar-core/src/org/briarproject/plugins/Poller.java
index 22de0148949ee7003dfec2ef87546579f603af48..2cacf1561b0bb8a513fd3f91140eeeb9c1367170 100644
--- a/briar-core/src/org/briarproject/plugins/Poller.java
+++ b/briar-core/src/org/briarproject/plugins/Poller.java
@@ -4,9 +4,6 @@ import org.briarproject.api.plugins.Plugin;
 
 interface Poller {
 
-	/** Adds the given plugin to the collection of plugins to be polled. */
-	void addPlugin(Plugin p);
-
 	/** Tells the poller to poll the given plugin immediately. */
 	void pollNow(Plugin p);
 
diff --git a/briar-core/src/org/briarproject/plugins/PollerImpl.java b/briar-core/src/org/briarproject/plugins/PollerImpl.java
index 938997a7646d573188bd8716871c5196e10347b1..db8e1b0b8d8c85587e0696692e2890372e6c147a 100644
--- a/briar-core/src/org/briarproject/plugins/PollerImpl.java
+++ b/briar-core/src/org/briarproject/plugins/PollerImpl.java
@@ -39,25 +39,17 @@ class PollerImpl implements Poller {
 		tasks = new ConcurrentHashMap<TransportId, PollTask>();
 	}
 
+	@Override
 	public void stop() {
 		timer.cancel();
 	}
 
-	public void addPlugin(Plugin p) {
-		// Randomise first polling interval
-		if (p.shouldPoll())
-			schedule(p, randomise(p.getPollingInterval()), false);
-	}
-
+	@Override
 	public void pollNow(Plugin p) {
 		// Randomise next polling interval
 		if (p.shouldPoll()) schedule(p, 0, true);
 	}
 
-	private int randomise(int interval) {
-		return (int) (interval * random.nextDouble());
-	}
-
 	private void schedule(Plugin p, int interval, boolean randomiseNext) {
 		// Replace any previously scheduled task for this plugin
 		PollTask task = new PollTask(p, randomiseNext);
@@ -68,6 +60,7 @@ class PollerImpl implements Poller {
 
 	private void poll(final Plugin p) {
 		ioExecutor.execute(new Runnable() {
+			@Override
 			public void run() {
 				if (LOG.isLoggable(INFO))
 					LOG.info("Polling " + p.getClass().getSimpleName());
@@ -90,7 +83,8 @@ class PollerImpl implements Poller {
 		public void run() {
 			tasks.remove(plugin.getId());
 			int interval = plugin.getPollingInterval();
-			if (randomiseNext) interval = randomise(interval);
+			if (randomiseNext)
+				interval = (int) (interval * random.nextDouble());
 			schedule(plugin, interval, false);
 			poll(plugin);
 		}
diff --git a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
index 6627225c3ddf3417e92b3a2316d4d52baab1e6f9..cd2400c7780c73d92a0fc36f7bf7ce45d9973c0f 100644
--- a/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
+++ b/briar-tests/src/org/briarproject/plugins/PluginManagerImplTest.java
@@ -84,9 +84,6 @@ public class PluginManagerImplTest extends BriarTestCase {
 			will(returnValue(simplexPlugin)); // Created
 			oneOf(simplexPlugin).start();
 			will(returnValue(true)); // Started
-			oneOf(simplexPlugin).shouldPoll();
-			will(returnValue(true));
-			oneOf(poller).addPlugin(simplexPlugin);
 			// Second simplex plugin
 			oneOf(simplexFailFactory).getId();
 			will(returnValue(simplexFailId));
@@ -105,8 +102,6 @@ public class PluginManagerImplTest extends BriarTestCase {
 			will(returnValue(duplexPlugin)); // Created
 			oneOf(duplexPlugin).start();
 			will(returnValue(true)); // Started
-			oneOf(duplexPlugin).shouldPoll();
-			will(returnValue(false));
 			// Second duplex plugin
 			oneOf(duplexFailFactory).getId();
 			will(returnValue(duplexFailId));
@@ -193,9 +188,6 @@ public class PluginManagerImplTest extends BriarTestCase {
 			will(returnValue(simplexPlugin)); // Created
 			oneOf(simplexPlugin).start();
 			will(returnValue(true)); // Started
-			oneOf(simplexPlugin).shouldPoll();
-			will(returnValue(true)); // Should poll
-			oneOf(poller).addPlugin(simplexPlugin);
 			// Second simplex plugin
 			oneOf(simplexFactory1).getId();
 			will(returnValue(simplexId1));
@@ -204,8 +196,6 @@ public class PluginManagerImplTest extends BriarTestCase {
 			will(returnValue(simplexPlugin1)); // Created
 			oneOf(simplexPlugin1).start();
 			will(returnValue(true)); // Started
-			oneOf(simplexPlugin1).shouldPoll();
-			will(returnValue(false)); // Should not poll
 			// First duplex plugin
 			oneOf(pluginConfig).getDuplexFactories();
 			will(returnValue(Arrays.asList(duplexFactory, duplexFactory1)));
@@ -216,9 +206,6 @@ public class PluginManagerImplTest extends BriarTestCase {
 			will(returnValue(duplexPlugin)); // Created
 			oneOf(duplexPlugin).start();
 			will(returnValue(true)); // Started
-			oneOf(duplexPlugin).shouldPoll();
-			will(returnValue(true)); // Should poll
-			oneOf(poller).addPlugin(duplexPlugin);
 			// Second duplex plugin
 			oneOf(duplexFactory1).getId();
 			will(returnValue(duplexId1));
@@ -227,8 +214,6 @@ public class PluginManagerImplTest extends BriarTestCase {
 			will(returnValue(duplexPlugin1)); // Created
 			oneOf(duplexPlugin1).start();
 			will(returnValue(true)); // Started
-			oneOf(duplexPlugin1).shouldPoll();
-			will(returnValue(false)); // Should not poll
 			// Start listening for events
 			oneOf(eventBus).addListener(with(any(EventListener.class)));
 			// eventOccurred()