diff --git a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
index 4a473dcfa23496a02985f5344c516feca9ce6e62..83e707f1724a7bdd19b9fc7d09e068a0936b03ee 100644
--- a/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
+++ b/briar-android/src/org/briarproject/android/invitation/AddContactActivity.java
@@ -13,6 +13,8 @@ import org.briarproject.R;
 import org.briarproject.android.BriarActivity;
 import org.briarproject.api.AuthorId;
 import org.briarproject.api.LocalAuthor;
+import org.briarproject.api.TransportConfig;
+import org.briarproject.api.TransportId;
 import org.briarproject.api.android.ReferenceManager;
 import org.briarproject.api.crypto.CryptoComponent;
 import org.briarproject.api.db.DatabaseComponent;
@@ -22,6 +24,7 @@ import org.briarproject.api.invitation.InvitationState;
 import org.briarproject.api.invitation.InvitationTask;
 import org.briarproject.api.invitation.InvitationTaskFactory;
 
+import android.bluetooth.BluetoothAdapter;
 import android.content.Intent;
 import android.os.Bundle;
 import android.widget.Toast;
@@ -48,9 +51,11 @@ implements InvitationListener {
 	private boolean localCompared = false, remoteCompared = false;
 	private boolean localMatched = false, remoteMatched = false;
 	private String contactName = null;
+	private boolean bluetoothWasEnabled = false;
 
 	// Fields that are accessed from background threads must be volatile
 	@Inject private volatile DatabaseComponent db;
+	private volatile boolean enableBluetooth = true;
 
 	@Override
 	public void onCreate(Bundle state) {
@@ -129,6 +134,8 @@ implements InvitationListener {
 				}
 			}
 		}
+		BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+		if(adapter != null) bluetoothWasEnabled = adapter.isEnabled();
 	}
 
 	private void showToastAndFinish() {
@@ -142,6 +149,25 @@ implements InvitationListener {
 	public void onResume() {
 		super.onResume();
 		view.populate();
+		loadBluetoothSetting();
+	}
+
+	private void loadBluetoothSetting() {
+		runOnDbThread(new Runnable() {
+			public void run() {
+				try {
+					long now = System.currentTimeMillis();
+					TransportConfig c = db.getConfig(new TransportId("bt"));
+					long duration = System.currentTimeMillis() - now;
+					if(LOG.isLoggable(INFO))
+						LOG.info("Loading setting took " + duration + " ms");
+					enableBluetooth = c.getBoolean("enable", true);
+				} catch(DbException e) {
+					if(LOG.isLoggable(WARNING))
+						LOG.log(WARNING, e.toString(), e);
+				}
+			}
+		});
 	}
 
 	@Override
@@ -162,6 +188,10 @@ implements InvitationListener {
 	public void onDestroy() {
 		super.onDestroy();
 		if(task != null) task.removeListener(this);
+		if(!bluetoothWasEnabled && !enableBluetooth) {
+			BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+			if(adapter != null) adapter.disable();
+		}
 	}
 
 	@Override
@@ -248,7 +278,7 @@ implements InvitationListener {
 		remoteInvitationCode = code;
 		setView(new ConnectionView(this));
 		task = invitationTaskFactory.createTask(localAuthorId,
-				localInvitationCode, code);
+				localInvitationCode, code, enableBluetooth);
 		taskHandle = referenceManager.putReference(task, InvitationTask.class);
 		task.addListener(AddContactActivity.this);
 		// Add a second listener so we can remove the first in onDestroy(),
diff --git a/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java b/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java
index 33fd35b6473f22489901aaa750235baaadfba297..43445480178a06455a8fe7dedf12a914dfdda492 100644
--- a/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java
+++ b/briar-api/src/org/briarproject/api/invitation/InvitationTaskFactory.java
@@ -7,5 +7,5 @@ public interface InvitationTaskFactory {
 
 	/** Creates a task using the given pseudonym and invitation codes. */
 	InvitationTask createTask(AuthorId localAuthorId, int localCode,
-			int remoteCode);
+			int remoteCode, boolean reuseConnection);
 }
diff --git a/briar-core/src/org/briarproject/invitation/AliceConnector.java b/briar-core/src/org/briarproject/invitation/AliceConnector.java
index b28c957f371337bf9cbd5bea154314d6be9d7aab..496d5a877ef9fc9939eea829dcb61dfe15342e0a 100644
--- a/briar-core/src/org/briarproject/invitation/AliceConnector.java
+++ b/briar-core/src/org/briarproject/invitation/AliceConnector.java
@@ -46,14 +46,14 @@ class AliceConnector extends Connector {
 			ConnectionWriterFactory connectionWriterFactory,
 			AuthorFactory authorFactory, GroupFactory groupFactory,
 			KeyManager keyManager, ConnectionDispatcher connectionDispatcher,
-			Clock clock, ConnectorGroup group, DuplexPlugin plugin,
-			LocalAuthor localAuthor,
+			Clock clock, boolean reuseConnection, ConnectorGroup group,
+			DuplexPlugin plugin, LocalAuthor localAuthor,
 			Map<TransportId, TransportProperties> localProps,
 			PseudoRandom random) {
 		super(crypto, db, readerFactory, writerFactory, connectionReaderFactory,
 				connectionWriterFactory, authorFactory, groupFactory,
-				keyManager, connectionDispatcher, clock, group, plugin,
-				localAuthor, localProps, random);
+				keyManager, connectionDispatcher, clock, reuseConnection, group,
+				plugin, localAuthor, localProps, random);
 	}
 
 	@Override
@@ -181,6 +181,7 @@ class AliceConnector extends Connector {
 			LOG.info(pluginName + " pseudonym exchange succeeded");
 		group.pseudonymExchangeSucceeded(remoteAuthor);
 		// Reuse the connection as an outgoing BTP connection
-		reuseConnection(conn, true);
+		if(reuseConnection) reuseConnection(conn, true);
+		else tryToClose(conn, false);
 	}
 }
\ No newline at end of file
diff --git a/briar-core/src/org/briarproject/invitation/BobConnector.java b/briar-core/src/org/briarproject/invitation/BobConnector.java
index 44372d5894730005c81e1fd9ecab96de37414c02..55ccebcf13e251b80b7ab4be10ed48e65d11b512 100644
--- a/briar-core/src/org/briarproject/invitation/BobConnector.java
+++ b/briar-core/src/org/briarproject/invitation/BobConnector.java
@@ -46,14 +46,14 @@ class BobConnector extends Connector {
 			ConnectionWriterFactory connectionWriterFactory,
 			AuthorFactory authorFactory, GroupFactory groupFactory,
 			KeyManager keyManager, ConnectionDispatcher connectionDispatcher,
-			Clock clock, ConnectorGroup group, DuplexPlugin plugin,
-			LocalAuthor localAuthor,
+			Clock clock, boolean reuseConnection, ConnectorGroup group,
+			DuplexPlugin plugin, LocalAuthor localAuthor,
 			Map<TransportId, TransportProperties> localProps,
 			PseudoRandom random) {
 		super(crypto, db, readerFactory, writerFactory, connectionReaderFactory,
 				connectionWriterFactory, authorFactory, groupFactory,
-				keyManager, connectionDispatcher, clock, group, plugin,
-				localAuthor, localProps, random);
+				keyManager, connectionDispatcher, clock, reuseConnection, group,
+				plugin, localAuthor, localProps, random);
 	}
 
 	@Override
@@ -181,6 +181,7 @@ class BobConnector extends Connector {
 			LOG.info(pluginName + " pseudonym exchange succeeded");
 		group.pseudonymExchangeSucceeded(remoteAuthor);
 		// Reuse the connection as an incoming BTP connection
-		reuseConnection(conn, false);
+		if(reuseConnection) reuseConnection(conn, false);
+		else tryToClose(conn, false);
 	}
 }
diff --git a/briar-core/src/org/briarproject/invitation/Connector.java b/briar-core/src/org/briarproject/invitation/Connector.java
index a8952c2987beeec614fbe2da007360c3bf81dfb8..f10aa2687c712ec80d947d1eaacd05958612efc8 100644
--- a/briar-core/src/org/briarproject/invitation/Connector.java
+++ b/briar-core/src/org/briarproject/invitation/Connector.java
@@ -71,6 +71,7 @@ abstract class Connector extends Thread {
 	protected final KeyManager keyManager;
 	protected final ConnectionDispatcher connectionDispatcher;
 	protected final Clock clock;
+	protected final boolean reuseConnection;
 	protected final ConnectorGroup group;
 	protected final DuplexPlugin plugin;
 	protected final LocalAuthor localAuthor;
@@ -90,8 +91,8 @@ abstract class Connector extends Thread {
 			ConnectionWriterFactory connectionWriterFactory,
 			AuthorFactory authorFactory, GroupFactory groupFactory,
 			KeyManager keyManager, ConnectionDispatcher connectionDispatcher,
-			Clock clock, ConnectorGroup group, DuplexPlugin plugin,
-			LocalAuthor localAuthor,
+			Clock clock, boolean reuseConnection, ConnectorGroup group,
+			DuplexPlugin plugin, LocalAuthor localAuthor,
 			Map<TransportId, TransportProperties> localProps,
 			PseudoRandom random) {
 		super("Connector");
@@ -106,6 +107,7 @@ abstract class Connector extends Thread {
 		this.keyManager = keyManager;
 		this.connectionDispatcher = connectionDispatcher;
 		this.clock = clock;
+		this.reuseConnection = reuseConnection;
 		this.group = group;
 		this.plugin = plugin;
 		this.localAuthor = localAuthor;
diff --git a/briar-core/src/org/briarproject/invitation/ConnectorGroup.java b/briar-core/src/org/briarproject/invitation/ConnectorGroup.java
index c049830beed9ecb670bd31816d91b76c2e48c15e..862a411b3c5695fea5dc443ae5a819649c577908 100644
--- a/briar-core/src/org/briarproject/invitation/ConnectorGroup.java
+++ b/briar-core/src/org/briarproject/invitation/ConnectorGroup.java
@@ -56,6 +56,7 @@ class ConnectorGroup extends Thread implements InvitationTask {
 	private final PluginManager pluginManager;
 	private final AuthorId localAuthorId;
 	private final int localInvitationCode, remoteInvitationCode;
+	private final boolean reuseConnection;
 	private final Collection<InvitationListener> listeners;
 	private final AtomicBoolean connected;
 	private final CountDownLatch localConfirmationLatch;
@@ -79,7 +80,8 @@ class ConnectorGroup extends Thread implements InvitationTask {
 			AuthorFactory authorFactory, GroupFactory groupFactory,
 			KeyManager keyManager, ConnectionDispatcher connectionDispatcher,
 			Clock clock, PluginManager pluginManager, AuthorId localAuthorId,
-			int localInvitationCode, int remoteInvitationCode) {
+			int localInvitationCode, int remoteInvitationCode,
+			boolean reuseConnection) {
 		super("ConnectorGroup");
 		this.crypto = crypto;
 		this.db = db;
@@ -96,6 +98,7 @@ class ConnectorGroup extends Thread implements InvitationTask {
 		this.localAuthorId = localAuthorId;
 		this.localInvitationCode = localInvitationCode;
 		this.remoteInvitationCode = remoteInvitationCode;
+		this.reuseConnection = reuseConnection;
 		listeners = new CopyOnWriteArrayList<InvitationListener>();
 		connected = new AtomicBoolean(false);
 		localConfirmationLatch = new CountDownLatch(1);
@@ -174,8 +177,8 @@ class ConnectorGroup extends Thread implements InvitationTask {
 				remoteInvitationCode);
 		return new AliceConnector(crypto, db, readerFactory, writerFactory,
 				connectionReaderFactory, connectionWriterFactory, authorFactory,
-				groupFactory, keyManager, connectionDispatcher, clock, this,
-				plugin, localAuthor, localProps, random);
+				groupFactory, keyManager, connectionDispatcher, clock,
+				reuseConnection, this, plugin, localAuthor, localProps, random);
 	}
 
 	private Connector createBobConnector(DuplexPlugin plugin,
@@ -185,8 +188,8 @@ class ConnectorGroup extends Thread implements InvitationTask {
 				localInvitationCode);
 		return new BobConnector(crypto, db, readerFactory, writerFactory,
 				connectionReaderFactory, connectionWriterFactory, authorFactory,
-				groupFactory, keyManager, connectionDispatcher, clock, this,
-				plugin, localAuthor, localProps, random);
+				groupFactory, keyManager, connectionDispatcher, clock,
+				reuseConnection, this, plugin, localAuthor, localProps, random);
 	}
 
 	public void localConfirmationSucceeded() {
diff --git a/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java b/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
index a9bf4c8949feea71a6603c973101dcbd3f33bfb6..c0b048720491e36c8cf7ee24369cbc916b90a5ae 100644
--- a/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
+++ b/briar-core/src/org/briarproject/invitation/InvitationTaskFactoryImpl.java
@@ -56,10 +56,11 @@ class InvitationTaskFactoryImpl implements InvitationTaskFactory {
 	}
 
 	public InvitationTask createTask(AuthorId localAuthorId, int localCode,
-			int remoteCode) {
+			int remoteCode, boolean reuseConnection) {
 		return new ConnectorGroup(crypto, db, readerFactory, writerFactory,
 				connectionReaderFactory, connectionWriterFactory,
 				authorFactory, groupFactory, keyManager, connectionDispatcher,
-				clock, pluginManager, localAuthorId, localCode, remoteCode);
+				clock, pluginManager, localAuthorId, localCode, remoteCode,
+				reuseConnection);
 	}
 }