diff --git a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
index 94346424f0e306d8e733e8f9f53e861b9d1a6bd8..0fcf4a87e61bcafa900ee59931d29f93396e41ab 100644
--- a/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
+++ b/briar-android/src/org/briarproject/plugins/tor/TorPlugin.java
@@ -27,6 +27,7 @@ import org.briarproject.api.event.SettingsUpdatedEvent;
 import org.briarproject.api.keyagreement.KeyAgreementListener;
 import org.briarproject.api.keyagreement.TransportDescriptor;
 import org.briarproject.api.plugins.Backoff;
+import org.briarproject.api.plugins.TorConstants;
 import org.briarproject.api.plugins.duplex.DuplexPlugin;
 import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
 import org.briarproject.api.plugins.duplex.DuplexTransportConnection;
@@ -72,18 +73,17 @@ import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static net.freehaven.tor.control.TorControlCommands.HS_ADDRESS;
 import static net.freehaven.tor.control.TorControlCommands.HS_PRIVKEY;
+import static org.briarproject.api.plugins.TorConstants.CONTROL_PORT;
+import static org.briarproject.api.plugins.TorConstants.SOCKS_PORT;
 import static org.briarproject.util.PrivacyUtils.scrubOnion;
 
 class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 
-	static final TransportId ID = new TransportId("tor");
-
 	private static final String PROP_ONION = "onion";
 	private static final String[] EVENTS = {
 			"CIRC", "ORCONN", "HS_DESC", "NOTICE", "WARN", "ERR"
 	};
 	private static final String OWNER = "__OwningControllerProcess";
-	private static final int SOCKS_PORT = 59050, CONTROL_PORT = 59051;
 	private static final int COOKIE_TIMEOUT = 3000; // Milliseconds
 	private static final Pattern ONION = Pattern.compile("[a-z2-7]{16}");
 	private static final Logger LOG =
@@ -140,7 +140,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 
 	@Override
 	public TransportId getId() {
-		return ID;
+		return TorConstants.ID;
 	}
 
 	@Override
diff --git a/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java b/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java
index 9cfabc3cb5a42e1833948920b752ce18107cccf0..ae1b9e856a6cbac77de5b85ecb4860d21db00ca6 100644
--- a/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java
+++ b/briar-android/src/org/briarproject/plugins/tor/TorPluginFactory.java
@@ -8,6 +8,7 @@ import org.briarproject.api.TransportId;
 import org.briarproject.api.event.EventBus;
 import org.briarproject.api.plugins.Backoff;
 import org.briarproject.api.plugins.BackoffFactory;
+import org.briarproject.api.plugins.TorConstants;
 import org.briarproject.api.plugins.duplex.DuplexPlugin;
 import org.briarproject.api.plugins.duplex.DuplexPluginCallback;
 import org.briarproject.api.plugins.duplex.DuplexPluginFactory;
@@ -48,7 +49,7 @@ public class TorPluginFactory implements DuplexPluginFactory {
 
 	@Override
 	public TransportId getId() {
-		return TorPlugin.ID;
+		return TorConstants.ID;
 	}
 
 	@Override
diff --git a/briar-api/src/org/briarproject/api/plugins/TorConstants.java b/briar-api/src/org/briarproject/api/plugins/TorConstants.java
new file mode 100644
index 0000000000000000000000000000000000000000..3eec84e08c7b71d53ea51ff831daaca4202757b1
--- /dev/null
+++ b/briar-api/src/org/briarproject/api/plugins/TorConstants.java
@@ -0,0 +1,12 @@
+package org.briarproject.api.plugins;
+
+import org.briarproject.api.TransportId;
+
+public interface TorConstants {
+
+	TransportId ID = new TransportId("tor");
+
+	int SOCKS_PORT   = 59050;
+	int CONTROL_PORT = 59051;
+
+}
diff --git a/briar-core/src/org/briarproject/feed/FeedManagerImpl.java b/briar-core/src/org/briarproject/feed/FeedManagerImpl.java
index 344165b32f23ee4e0d1237f85fc34c84e1410362..496c28403dae49e02578fe1fcb56c4657d7f85fe 100644
--- a/briar-core/src/org/briarproject/feed/FeedManagerImpl.java
+++ b/briar-core/src/org/briarproject/feed/FeedManagerImpl.java
@@ -8,6 +8,7 @@ import com.rometools.rome.io.SyndFeedInput;
 import com.rometools.rome.io.XmlReader;
 
 import org.briarproject.api.FormatException;
+import org.briarproject.api.TransportId;
 import org.briarproject.api.blogs.Blog;
 import org.briarproject.api.blogs.BlogManager;
 import org.briarproject.api.blogs.BlogPost;
@@ -21,14 +22,16 @@ import org.briarproject.api.data.BdfList;
 import org.briarproject.api.db.DatabaseComponent;
 import org.briarproject.api.db.DbException;
 import org.briarproject.api.db.Transaction;
+import org.briarproject.api.event.Event;
+import org.briarproject.api.event.EventListener;
+import org.briarproject.api.event.TransportEnabledEvent;
 import org.briarproject.api.feed.Feed;
 import org.briarproject.api.feed.FeedManager;
 import org.briarproject.api.identity.AuthorId;
 import org.briarproject.api.identity.IdentityManager;
 import org.briarproject.api.identity.LocalAuthor;
 import org.briarproject.api.lifecycle.IoExecutor;
-import org.briarproject.api.lifecycle.Service;
-import org.briarproject.api.lifecycle.ServiceException;
+import org.briarproject.api.plugins.TorConstants;
 import org.briarproject.api.sync.ClientId;
 import org.briarproject.api.sync.Group;
 import org.briarproject.api.sync.GroupId;
@@ -39,6 +42,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.net.InetSocketAddress;
 import java.net.Proxy;
+import java.net.SocketAddress;
 import java.security.GeneralSecurityException;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -47,6 +51,7 @@ import java.util.Date;
 import java.util.List;
 import java.util.concurrent.Executor;
 import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.atomic.AtomicBoolean;
 import java.util.logging.Logger;
 
 import javax.inject.Inject;
@@ -62,8 +67,9 @@ import static org.briarproject.api.feed.FeedConstants.FETCH_DELAY_INITIAL;
 import static org.briarproject.api.feed.FeedConstants.FETCH_INTERVAL;
 import static org.briarproject.api.feed.FeedConstants.FETCH_UNIT;
 import static org.briarproject.api.feed.FeedConstants.KEY_FEEDS;
+import static org.briarproject.api.plugins.TorConstants.SOCKS_PORT;
 
-class FeedManagerImpl implements FeedManager, Service, Client {
+class FeedManagerImpl implements FeedManager, Client, EventListener {
 
 	private static final Logger LOG =
 			Logger.getLogger(FeedManagerImpl.class.getName());
@@ -78,8 +84,9 @@ class FeedManagerImpl implements FeedManager, Service, Client {
 	private final DatabaseComponent db;
 	private final PrivateGroupFactory privateGroupFactory;
 	private final ClientHelper clientHelper;
-	private IdentityManager identityManager;
+	private final IdentityManager identityManager;
 	private final BlogManager blogManager;
+	private final AtomicBoolean fetcherStarted = new AtomicBoolean(false);
 
 	@Inject
 	@SuppressWarnings("WeakerAccess")
@@ -109,8 +116,20 @@ class FeedManagerImpl implements FeedManager, Service, Client {
 	}
 
 	@Override
-	public void startService() throws ServiceException {
+	public void eventOccurred(Event e) {
+		if (e instanceof TransportEnabledEvent) {
+			TransportId t = ((TransportEnabledEvent) e).getTransportId();
+			if (t.equals(TorConstants.ID)) {
+				startFeedExecutor();
+			}
+		}
+	}
+
+	private void startFeedExecutor() {
+		if (fetcherStarted.getAndSet(true)) return;
+		LOG.info("Tor started, scheduling RSS feed fetcher");
 		Runnable fetcher = new Runnable() {
+			@Override
 			public void run() {
 				ioExecutor.execute(new Runnable() {
 					@Override
@@ -124,11 +143,6 @@ class FeedManagerImpl implements FeedManager, Service, Client {
 				FETCH_INTERVAL, FETCH_UNIT);
 	}
 
-	@Override
-	public void stopService() throws ServiceException {
-		// feedExecutor will be stopped by LifecycleManager
-	}
-
 	@Override
 	public void createLocalState(Transaction txn) throws DbException {
 		Group g = getLocalGroup();
@@ -341,11 +355,9 @@ class FeedManagerImpl implements FeedManager, Service, Client {
 
 	private InputStream getFeedInputStream(String url) throws IOException {
 		// Set proxy
-		// TODO verify and use local Tor proxy address/port
-		String proxyHost = "localhost";
-		int proxyPort = 59050;
-		Proxy proxy = new Proxy(Proxy.Type.SOCKS,
-				new InetSocketAddress(proxyHost, proxyPort));
+		SocketAddress socketAddress =
+				new InetSocketAddress("127.0.0.1", SOCKS_PORT);
+		Proxy proxy = new Proxy(Proxy.Type.SOCKS, socketAddress);
 
 		// Build HTTP Client
 		OkHttpClient client = new OkHttpClient.Builder()
diff --git a/briar-core/src/org/briarproject/feed/FeedModule.java b/briar-core/src/org/briarproject/feed/FeedModule.java
index aad3bab22fb0b2d43d67c50663905a1b8c68beb8..2845370a4b17a8e08b3af691c0848fa9ae348c4f 100644
--- a/briar-core/src/org/briarproject/feed/FeedModule.java
+++ b/briar-core/src/org/briarproject/feed/FeedModule.java
@@ -1,5 +1,6 @@
 package org.briarproject.feed;
 
+import org.briarproject.api.event.EventBus;
 import org.briarproject.api.feed.FeedManager;
 import org.briarproject.api.lifecycle.LifecycleManager;
 
@@ -20,10 +21,10 @@ public class FeedModule {
 	@Provides
 	@Singleton
 	FeedManager provideFeedManager(FeedManagerImpl feedManager,
-			LifecycleManager lifecycleManager) {
+			LifecycleManager lifecycleManager, EventBus eventBus) {
 
 		lifecycleManager.registerClient(feedManager);
-		lifecycleManager.registerService(feedManager);
+		eventBus.addListener(feedManager);
 		return feedManager;
 	}