diff --git a/briar-android/src/net/sf/briar/android/AndroidModule.java b/briar-android/src/net/sf/briar/android/AndroidModule.java
index e6beef53013f187b680ca2441dbc5fabe3c7abec..b13d5756f5b8bcef2781f25b774dc4078c4019b0 100644
--- a/briar-android/src/net/sf/briar/android/AndroidModule.java
+++ b/briar-android/src/net/sf/briar/android/AndroidModule.java
@@ -62,7 +62,7 @@ public class AndroidModule extends AbstractModule {
 				pluginExecutor, androidExecutor, appContext,
 				crypto.getSecureRandom());
 		DuplexPluginFactory tor = new TorPluginFactory(pluginExecutor,
-				appContext);
+				appContext, shutdownManager);
 		DuplexPluginFactory lan = new LanTcpPluginFactory(pluginExecutor);
 		DuplexPluginFactory wan = new WanTcpPluginFactory(pluginExecutor,
 				shutdownManager);
diff --git a/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java b/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java
index 109f52df4e7de8fea23eadccb4d13be22c10f4b3..49ad18e6ad2047706b42e9c171251df56517f6a1 100644
--- a/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java
+++ b/briar-core/src/net/sf/briar/plugins/tor/TorPlugin.java
@@ -33,6 +33,7 @@ import net.sf.briar.api.TransportConfig;
 import net.sf.briar.api.TransportId;
 import net.sf.briar.api.TransportProperties;
 import net.sf.briar.api.crypto.PseudoRandom;
+import net.sf.briar.api.lifecycle.ShutdownManager;
 import net.sf.briar.api.plugins.duplex.DuplexPlugin;
 import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
 import net.sf.briar.api.plugins.duplex.DuplexTransportConnection;
@@ -61,6 +62,7 @@ class TorPlugin implements DuplexPlugin, EventHandler {
 
 	private final Executor pluginExecutor;
 	private final Context appContext;
+	private final ShutdownManager shutdownManager;
 	private final DuplexPluginCallback callback;
 	private final long maxLatency, pollingInterval;
 	private final File torDirectory, torFile, geoIpFile, configFile, doneFile;
@@ -71,10 +73,11 @@ class TorPlugin implements DuplexPlugin, EventHandler {
 	private volatile ServerSocket socket = null;
 
 	TorPlugin(Executor pluginExecutor, Context appContext,
-			DuplexPluginCallback callback, long maxLatency,
-			long pollingInterval) {
+			ShutdownManager shutdownManager, DuplexPluginCallback callback,
+			long maxLatency, long pollingInterval) {
 		this.pluginExecutor = pluginExecutor;
 		this.appContext = appContext;
+		this.shutdownManager = shutdownManager;
 		this.callback = callback;
 		this.maxLatency = maxLatency;
 		this.pollingInterval = pollingInterval;
@@ -135,6 +138,13 @@ class TorPlugin implements DuplexPlugin, EventHandler {
 				if(LOG.isLoggable(WARNING)) LOG.log(WARNING, e1.toString(), e1);
 				return false;
 			}
+			// Create a shutdown hook to ensure the Tor process is destroyed
+			shutdownManager.addShutdownHook(new Runnable() {
+				public void run() {
+					if(LOG.isLoggable(INFO)) LOG.info("Killing Tor");
+					tor.destroy();
+				}
+			});
 			// Log the process's standard output until it detaches
 			if(LOG.isLoggable(INFO)) {
 				Scanner stdout = new Scanner(tor.getInputStream());
diff --git a/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java b/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java
index 616b0e65c81a11d5ef789cc6093ec9945372cf69..59ca7c45254d29174a8638ae5bce21ed65b94763 100644
--- a/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java
+++ b/briar-core/src/net/sf/briar/plugins/tor/TorPluginFactory.java
@@ -3,6 +3,7 @@ package net.sf.briar.plugins.tor;
 import java.util.concurrent.Executor;
 
 import net.sf.briar.api.TransportId;
+import net.sf.briar.api.lifecycle.ShutdownManager;
 import net.sf.briar.api.plugins.duplex.DuplexPlugin;
 import net.sf.briar.api.plugins.duplex.DuplexPluginCallback;
 import net.sf.briar.api.plugins.duplex.DuplexPluginFactory;
@@ -15,10 +16,13 @@ public class TorPluginFactory implements DuplexPluginFactory {
 
 	private final Executor pluginExecutor;
 	private final Context appContext;
+	private final ShutdownManager shutdownManager;
 
-	public TorPluginFactory(Executor pluginExecutor, Context appContext) {
+	public TorPluginFactory(Executor pluginExecutor, Context appContext,
+			ShutdownManager shutdownManager) {
 		this.pluginExecutor = pluginExecutor;
 		this.appContext = appContext;
+		this.shutdownManager = shutdownManager;
 	}
 
 	public TransportId getId() {
@@ -26,7 +30,7 @@ public class TorPluginFactory implements DuplexPluginFactory {
 	}
 
 	public DuplexPlugin createPlugin(DuplexPluginCallback callback) {
-		return new TorPlugin(pluginExecutor,appContext, callback, MAX_LATENCY,
-				POLLING_INTERVAL);
+		return new TorPlugin(pluginExecutor,appContext, shutdownManager,
+				callback, MAX_LATENCY, POLLING_INTERVAL);
 	}
 }