diff --git a/briar-android/res/values/strings.xml b/briar-android/res/values/strings.xml
index bdcf261047ef4d5f6e1fbf25bbda4965a69f7a2d..fe43fd7c254ebda72225d15a2c9f0c46dbbb2fd3 100644
--- a/briar-android/res/values/strings.xml
+++ b/briar-android/res/values/strings.xml
@@ -103,7 +103,9 @@
     <string name="bluetooth_setting_enabled">Whenever contacts are nearby</string>
     <string name="bluetooth_setting_disabled">Only when adding contacts</string>
     <string name="tor_wifi_setting_title">TOR</string>
-    <string name="tor_wifi_setting"> Use Tor over WiFi Only</string>
+    <string name="tor_wifi_setting">Connect via Tor</string>
+    <string name="tor_wifi_setting_enabled">Only when using Wi-Fi</string>
+    <string name="tor_wifi_setting_disabled">When using Wi-Fi or mobile data</string>
     <string name="notification_settings_title">NOTIFICATIONS</string>
     <string name="notify_private_messages_setting">Show alerts for private messages</string>
     <string name="notify_forum_posts_setting">Show alerts for forum posts</string>
diff --git a/briar-android/src/org/briarproject/android/SettingsActivity.java b/briar-android/src/org/briarproject/android/SettingsActivity.java
index 0fd88f46ddf040a0e1ded7c72767eb93e2974610..e2f2d233a07d6d92e4cfdd056f803eed15391b00 100644
--- a/briar-android/src/org/briarproject/android/SettingsActivity.java
+++ b/briar-android/src/org/briarproject/android/SettingsActivity.java
@@ -67,7 +67,7 @@ OnClickListener {
 	private TextView enableBluetooth = null, enableBluetoothHint = null;
 	private CheckBox notifyPrivateMessages = null, notifyForumPosts = null;
 	private CheckBox notifyVibration = null;
-	private CheckBox torOverWifi = null;
+	private TextView torOverWifi = null, torOverWifiHint = null;
 	private TextView notifySound = null, notifySoundHint = null;
 	private ListLoadingProgressBar progress = null;
 	private ImageButton testingButton = null;
@@ -76,7 +76,7 @@ OnClickListener {
 	@Inject private volatile DatabaseComponent db;
 	@Inject private volatile EventBus eventBus;
 	private volatile Settings settings;
-	private volatile boolean bluetoothSetting = true;
+	private volatile boolean bluetoothSetting = true, torSetting = false;
 
 	@Override
 	public void onCreate(Bundle state) {
@@ -129,12 +129,18 @@ OnClickListener {
 		underline.setBackgroundColor(titleUnderline);
 		settings.addView(underline);
 
-		torOverWifi = new CheckBox(this);
+		torOverWifi = new TextView(this);
+		torOverWifi.setPadding(pad, pad, pad, 0);
 		torOverWifi.setTextSize(18);
 		torOverWifi.setText(R.string.tor_wifi_setting);
 		torOverWifi.setOnClickListener(this);
 		settings.addView(torOverWifi);
 
+		torOverWifiHint = new TextView(this);
+		torOverWifiHint.setPadding(pad, 0, pad, pad);
+		torOverWifiHint.setOnClickListener(this);
+		settings.addView(torOverWifiHint);
+
 		TextView notificationsTitle = new TextView(this);
 		notificationsTitle.setPadding(pad, 0, pad, 0);
 		notificationsTitle.setTypeface(DEFAULT_BOLD);
@@ -236,6 +242,7 @@ OnClickListener {
 					if (LOG.isLoggable(INFO))
 						LOG.info("Loading settings took " + duration + " ms");
 					bluetoothSetting = c.getBoolean("enable", false);
+					torSetting = settings.getBoolean("torOverWifi", false);
 					displaySettings();
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
@@ -256,6 +263,10 @@ OnClickListener {
 				else resId = R.string.bluetooth_setting_disabled;
 				enableBluetoothHint.setText(resId);
 
+				if (torSetting) resId = R.string.tor_wifi_setting_enabled;
+				else resId = R.string.tor_wifi_setting_disabled;
+				torOverWifiHint.setText(resId);
+
 				notifyPrivateMessages.setChecked(settings.getBoolean(
 						"notifyPrivateMessages", true));
 
@@ -298,7 +309,8 @@ OnClickListener {
 			}
 			storeBluetoothSetting();
 			displaySettings();
-		} else if (view == torOverWifi) {
+		} else if (view == torOverWifi || view == torOverWifiHint) {
+			torSetting = !torSetting;
 			storeTorSettings();
 		} else if (view == notifyPrivateMessages) {
 			Settings s = new Settings();
@@ -335,13 +347,17 @@ OnClickListener {
 	private void storeTorSettings() {
 		runOnDbThread(new Runnable() {
 			public void run() {
-				Settings s = new Settings();
-				s.putBoolean("torOverWifi", torOverWifi.isChecked());
-				TransportConfig c = new TransportConfig();
-				c.putBoolean("torOverWifi", torOverWifi.isChecked());
-				storeSettings(s);
 				try {
+					Settings s = new Settings();
+					s.putBoolean("torOverWifi", torSetting);
+					TransportConfig c = new TransportConfig();
+					c.putBoolean("torOverWifi", torSetting);
+					long now = System.currentTimeMillis();
+					db.mergeSettings(s);
 					db.mergeConfig(new TransportId("tor"), c);
+					long duration = System.currentTimeMillis() - now;
+					if (LOG.isLoggable(INFO))
+						LOG.info("Merging config took " + duration + " ms");
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);