diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java
index 9597fa512f1d99fe1b708fbcd5975e42bc1d4d7a..5bb975e1a6b0390725f71c60b950c00f05fb72e6 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/droidtooth/DroidtoothPlugin.java
@@ -67,6 +67,7 @@ import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_BLUETOOTH;
 import static org.briarproject.bramble.api.plugin.BluetoothConstants.ID;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.PREF_BT_ENABLE;
 import static org.briarproject.bramble.api.plugin.BluetoothConstants.PROP_ADDRESS;
 import static org.briarproject.bramble.api.plugin.BluetoothConstants.PROP_UUID;
 import static org.briarproject.bramble.api.plugin.BluetoothConstants.UUID_BYTES;
@@ -164,7 +165,7 @@ class DroidtoothPlugin implements DuplexPlugin {
 			bind();
 		} else {
 			// Enable Bluetooth if settings allow
-			if (callback.getSettings().getBoolean("enable", false)) {
+			if (callback.getSettings().getBoolean(PREF_BT_ENABLE, false)) {
 				wasEnabledByUs = true;
 				if (adapter.enable()) LOG.info("Enabling Bluetooth");
 				else LOG.info("Could not enable Bluetooth");
diff --git a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
index d678aac020c6cf9e3323b84f7d3a34588a2ce226..3043f28163ab14b4387a0dd343135f6b85e28482 100644
--- a/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
+++ b/bramble-android/src/main/java/org/briarproject/bramble/plugin/tor/TorPlugin.java
@@ -79,6 +79,9 @@ 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.bramble.api.plugin.TorConstants.CONTROL_PORT;
+import static org.briarproject.bramble.api.plugin.TorConstants.ID;
+import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK;
+import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_PORT;
 import static org.briarproject.bramble.util.PrivacyUtils.scrubOnion;
 
 @MethodsNotNullByDefault
@@ -379,7 +382,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 			@Override
 			public void run() {
 				// If there's already a port number stored in config, reuse it
-				String portString = callback.getSettings().get("port");
+				String portString = callback.getSettings().get(PREF_TOR_PORT);
 				int port;
 				if (StringUtils.isNullOrEmpty(portString)) port = 0;
 				else port = Integer.parseInt(portString);
@@ -402,7 +405,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 				// Store the port number
 				final String localPort = String.valueOf(ss.getLocalPort());
 				Settings s = new Settings();
-				s.put("port", localPort);
+				s.put(PREF_TOR_PORT, localPort);
 				callback.mergeSettings(s);
 				// Create a hidden service if necessary
 				ioExecutor.execute(new Runnable() {
@@ -679,7 +682,8 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 	@Override
 	public void eventOccurred(Event e) {
 		if (e instanceof SettingsUpdatedEvent) {
-			if (((SettingsUpdatedEvent) e).getNamespace().equals("tor")) {
+			SettingsUpdatedEvent s = (SettingsUpdatedEvent) e;
+			if (s.getNamespace().equals(ID.getString())) {
 				LOG.info("Tor settings updated");
 				updateConnectionStatus();
 			}
@@ -701,7 +705,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 				boolean blocked = TorNetworkMetadata.isTorProbablyBlocked(
 						country);
 				Settings s = callback.getSettings();
-				boolean useMobileData = s.getBoolean("torOverMobile", true);
+				int network = s.getInt(PREF_TOR_NETWORK, 2);
 
 				if (LOG.isLoggable(INFO)) {
 					LOG.info("Online: " + online + ", wifi: " + wifi);
@@ -716,7 +720,7 @@ class TorPlugin implements DuplexPlugin, EventHandler, EventListener {
 					} else if (blocked) {
 						LOG.info("Disabling network, country is blocked");
 						enableNetwork(false);
-					} else if (!wifi && !useMobileData) {
+					} else if (network == 0 || (network == 1 && !wifi)) {
 						LOG.info("Disabling network due to data setting");
 						enableNetwork(false);
 					} else {
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java
index b8660d0f716d89db105b48b0ab8b661e9f6c508c..785aee2b3c4f00fe07c2dc17e56f1f07af6bd9af 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/BluetoothConstants.java
@@ -9,4 +9,5 @@ public interface BluetoothConstants {
 	String PROP_ADDRESS = "address";
 	String PROP_UUID = "uuid";
 
+	String PREF_BT_ENABLE = "enable";
 }
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java
index 056d53713263be448c57dccfc735570e6bc2906b..9d486c4ae183dd7ca323b0226495e9d1c008e589 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/LanTcpConstants.java
@@ -4,4 +4,5 @@ public interface LanTcpConstants {
 
 	TransportId ID = new TransportId("org.briarproject.bramble.lan");
 
+	String PREF_LAN_IP_PORTS = "ipPorts";
 }
diff --git a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java
index 28f3e438e3735c89c9a3f9181a3e1aeb4931e027..0b6be6cc73f3352dd096ea22bd89395a2ad6320a 100644
--- a/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java
+++ b/bramble-api/src/main/java/org/briarproject/bramble/api/plugin/TorConstants.java
@@ -8,4 +8,7 @@ public interface TorConstants {
 	int CONTROL_PORT = 59051;
 
 	int CONNECT_TO_PROXY_TIMEOUT = 5000; // Milliseconds
+
+	String PREF_TOR_NETWORK = "network";
+	String PREF_TOR_PORT = "port";
 }
diff --git a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java
index 36c06d48533fd9a5ae5723de59657247cc32962f..0163882781d8eb43ad3d599d60f0bf4ddec7ae83 100644
--- a/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java
+++ b/bramble-core/src/main/java/org/briarproject/bramble/plugin/tcp/LanTcpPlugin.java
@@ -34,6 +34,7 @@ import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
 import static org.briarproject.bramble.api.keyagreement.KeyAgreementConstants.TRANSPORT_ID_LAN;
 import static org.briarproject.bramble.api.plugin.LanTcpConstants.ID;
+import static org.briarproject.bramble.api.plugin.LanTcpConstants.PREF_LAN_IP_PORTS;
 import static org.briarproject.bramble.util.ByteUtils.MAX_16_BIT_UNSIGNED;
 import static org.briarproject.bramble.util.PrivacyUtils.scrubSocketAddress;
 
@@ -82,19 +83,19 @@ class LanTcpPlugin extends TcpPlugin {
 	private List<InetSocketAddress> parseSocketAddresses(String ipPorts) {
 		if (StringUtils.isNullOrEmpty(ipPorts)) return Collections.emptyList();
 		String[] split = ipPorts.split(SEPARATOR);
-		List<InetSocketAddress> remotes = new ArrayList<InetSocketAddress>();
+		List<InetSocketAddress> addresses = new ArrayList<InetSocketAddress>();
 		for (String ipPort : split) {
 			InetSocketAddress a = parseSocketAddress(ipPort);
-			if (a != null) remotes.add(a);
+			if (a != null) addresses.add(a);
 		}
-		return remotes;
+		return addresses;
 	}
 
 	@Override
 	protected void setLocalSocketAddress(InetSocketAddress a) {
 		String ipPort = getIpPortString(a);
 		// Get the list of recently used addresses
-		String setting = callback.getSettings().get(PROP_IP_PORTS);
+		String setting = callback.getSettings().get(PREF_LAN_IP_PORTS);
 		List<String> recent = new ArrayList<String>();
 		if (!StringUtils.isNullOrEmpty(setting))
 			Collections.addAll(recent, setting.split(SEPARATOR));
@@ -120,7 +121,7 @@ class LanTcpPlugin extends TcpPlugin {
 		}
 		// Save the setting
 		Settings settings = new Settings();
-		settings.put(PROP_IP_PORTS, setting);
+		settings.put(PREF_LAN_IP_PORTS, setting);
 		callback.mergeSettings(settings);
 	}
 
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
index d41835c809831db362a8758781ef17587656ea1c..1db457407a29661a2ef3bf0ceece9bdf1d9470a8 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/AndroidNotificationManagerImpl.java
@@ -73,8 +73,6 @@ import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_
 import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_CONTACTS;
 import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_FORUMS;
 import static org.briarproject.briar.android.navdrawer.NavDrawerActivity.INTENT_GROUPS;
-import static org.briarproject.briar.android.settings.SettingsFragment.PREF_NOTIFY_BLOG;
-import static org.briarproject.briar.android.settings.SettingsFragment.PREF_NOTIFY_GROUP;
 import static org.briarproject.briar.android.settings.SettingsFragment.SETTINGS_NAMESPACE;
 
 @ThreadSafe
@@ -92,13 +90,13 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 
 	// Content URIs to differentiate between pending intents
 	private static final String CONTACT_URI =
-			"content://org.briarproject/contact";
+			"content://org.briarproject.briar/contact";
 	private static final String GROUP_URI =
-			"content://org.briarproject/group";
+			"content://org.briarproject.briar/group";
 	private static final String FORUM_URI =
-			"content://org.briarproject/forum";
+			"content://org.briarproject.briar/forum";
 	private static final String BLOG_URI =
-			"content://org.briarproject/blog";
+			"content://org.briarproject.briar/blog";
 
 	// Actions for intents that are broadcast when notifications are dismissed
 	private static final String CLEAR_PRIVATE_MESSAGE_ACTION =
@@ -325,17 +323,18 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	private void updateContactNotification() {
 		if (contactTotal == 0) {
 			clearContactNotification();
-		} else if (settings.getBoolean("notifyPrivateMessages", true)) {
+		} else if (settings.getBoolean(PREF_NOTIFY_PRIVATE, true)) {
 			NotificationCompat.Builder b =
 					new NotificationCompat.Builder(appContext);
 			b.setSmallIcon(R.drawable.notification_private_message);
-			b.setColor(ContextCompat.getColor(appContext, R.color.briar_primary));
+			b.setColor(ContextCompat.getColor(appContext,
+					R.color.briar_primary));
 			b.setContentTitle(appContext.getText(R.string.app_name));
 			b.setContentText(appContext.getResources().getQuantityString(
 					R.plurals.private_message_notification_text, contactTotal,
 					contactTotal));
-			boolean sound = settings.getBoolean("notifySound", true);
-			String ringtoneUri = settings.get("notifyRingtoneUri");
+			boolean sound = settings.getBoolean(PREF_NOTIFY_SOUND, true);
+			String ringtoneUri = settings.get(PREF_NOTIFY_RINGTONE_URI);
 			if (sound && !StringUtils.isNullOrEmpty(ringtoneUri))
 				b.setSound(Uri.parse(ringtoneUri));
 			b.setDefaults(getDefaults());
@@ -381,11 +380,11 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	@UiThread
 	private int getDefaults() {
 		int defaults = DEFAULT_LIGHTS;
-		boolean sound = settings.getBoolean("notifySound", true);
-		String ringtoneUri = settings.get("notifyRingtoneUri");
+		boolean sound = settings.getBoolean(PREF_NOTIFY_SOUND, true);
+		String ringtoneUri = settings.get(PREF_NOTIFY_RINGTONE_URI);
 		if (sound && StringUtils.isNullOrEmpty(ringtoneUri))
 			defaults |= DEFAULT_SOUND;
-		if (settings.getBoolean("notifyVibration", true))
+		if (settings.getBoolean(PREF_NOTIFY_VIBRATION, true))
 			defaults |= DEFAULT_VIBRATE;
 		return defaults;
 	}
@@ -438,12 +437,13 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 			NotificationCompat.Builder b =
 					new NotificationCompat.Builder(appContext);
 			b.setSmallIcon(R.drawable.notification_private_group);
-			b.setColor(ContextCompat.getColor(appContext, R.color.briar_primary));
+			b.setColor(ContextCompat.getColor(appContext,
+					R.color.briar_primary));
 			b.setContentTitle(appContext.getText(R.string.app_name));
 			b.setContentText(appContext.getResources().getQuantityString(
 					R.plurals.group_message_notification_text, groupTotal,
 					groupTotal));
-			String ringtoneUri = settings.get("notifyRingtoneUri");
+			String ringtoneUri = settings.get(PREF_NOTIFY_RINGTONE_URI);
 			if (!StringUtils.isNullOrEmpty(ringtoneUri))
 				b.setSound(Uri.parse(ringtoneUri));
 			b.setDefaults(getDefaults());
@@ -530,16 +530,17 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 	private void updateForumPostNotification() {
 		if (forumTotal == 0) {
 			clearForumPostNotification();
-		} else if (settings.getBoolean("notifyForumPosts", true)) {
+		} else if (settings.getBoolean(PREF_NOTIFY_FORUM, true)) {
 			NotificationCompat.Builder b =
 					new NotificationCompat.Builder(appContext);
 			b.setSmallIcon(R.drawable.notification_forum);
-			b.setColor(ContextCompat.getColor(appContext, R.color.briar_primary));
+			b.setColor(ContextCompat.getColor(appContext,
+					R.color.briar_primary));
 			b.setContentTitle(appContext.getText(R.string.app_name));
 			b.setContentText(appContext.getResources().getQuantityString(
 					R.plurals.forum_post_notification_text, forumTotal,
 					forumTotal));
-			String ringtoneUri = settings.get("notifyRingtoneUri");
+			String ringtoneUri = settings.get(PREF_NOTIFY_RINGTONE_URI);
 			if (!StringUtils.isNullOrEmpty(ringtoneUri))
 				b.setSound(Uri.parse(ringtoneUri));
 			b.setDefaults(getDefaults());
@@ -630,12 +631,13 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 			NotificationCompat.Builder b =
 					new NotificationCompat.Builder(appContext);
 			b.setSmallIcon(R.drawable.notification_blog);
-			b.setColor(ContextCompat.getColor(appContext, R.color.briar_primary));
+			b.setColor(ContextCompat.getColor(appContext,
+					R.color.briar_primary));
 			b.setContentTitle(appContext.getText(R.string.app_name));
 			b.setContentText(appContext.getResources().getQuantityString(
 					R.plurals.blog_post_notification_text, blogTotal,
 					blogTotal));
-			String ringtoneUri = settings.get("notifyRingtoneUri");
+			String ringtoneUri = settings.get(PREF_NOTIFY_RINGTONE_URI);
 			if (!StringUtils.isNullOrEmpty(ringtoneUri))
 				b.setSound(Uri.parse(ringtoneUri));
 			b.setDefaults(getDefaults());
@@ -696,7 +698,7 @@ class AndroidNotificationManagerImpl implements AndroidNotificationManager,
 		b.setContentText(appContext.getResources().getQuantityString(
 				R.plurals.introduction_notification_text, introductionTotal,
 				introductionTotal));
-		String ringtoneUri = settings.get("notifyRingtoneUri");
+		String ringtoneUri = settings.get(PREF_NOTIFY_RINGTONE_URI);
 		if (!StringUtils.isNullOrEmpty(ringtoneUri))
 			b.setSound(Uri.parse(ringtoneUri));
 		b.setDefaults(getDefaults());
diff --git a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
index 1ac1a7568858baecac3aec653da985d170b3e09e..badba407d3ab2f851fe32a534064140a3e4dadff 100644
--- a/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
+++ b/briar-android/src/main/java/org/briarproject/briar/android/settings/SettingsFragment.java
@@ -22,6 +22,8 @@ import org.briarproject.bramble.api.event.EventBus;
 import org.briarproject.bramble.api.event.EventListener;
 import org.briarproject.bramble.api.nullsafety.MethodsNotNullByDefault;
 import org.briarproject.bramble.api.nullsafety.ParametersNotNullByDefault;
+import org.briarproject.bramble.api.plugin.BluetoothConstants;
+import org.briarproject.bramble.api.plugin.TorConstants;
 import org.briarproject.bramble.api.settings.Settings;
 import org.briarproject.bramble.api.settings.SettingsManager;
 import org.briarproject.bramble.api.settings.event.SettingsUpdatedEvent;
@@ -45,7 +47,17 @@ import static android.media.RingtoneManager.TYPE_NOTIFICATION;
 import static android.provider.Settings.System.DEFAULT_NOTIFICATION_URI;
 import static java.util.logging.Level.INFO;
 import static java.util.logging.Level.WARNING;
+import static org.briarproject.bramble.api.plugin.BluetoothConstants.PREF_BT_ENABLE;
+import static org.briarproject.bramble.api.plugin.TorConstants.PREF_TOR_NETWORK;
 import static org.briarproject.briar.android.activity.RequestCodes.REQUEST_RINGTONE;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_BLOG;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_FORUM;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_GROUP;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_PRIVATE;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_RINGTONE_NAME;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_RINGTONE_URI;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_SOUND;
+import static org.briarproject.briar.api.android.AndroidNotificationManager.PREF_NOTIFY_VIBRATION;
 
 @MethodsNotNullByDefault
 @ParametersNotNullByDefault
@@ -53,8 +65,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		implements EventListener, Preference.OnPreferenceChangeListener {
 
 	public static final String SETTINGS_NAMESPACE = "android-ui";
-	public static final String PREF_NOTIFY_GROUP = "notifyGroupMessages";
-	public static final String PREF_NOTIFY_BLOG = "notifyBlogPosts";
+	public static final String BT_NAMESPACE = BluetoothConstants.ID.getString();
+	public static final String TOR_NAMESPACE = TorConstants.ID.getString();
 
 	private static final Logger LOG =
 			Logger.getLogger(SettingsFragment.class.getName());
@@ -62,7 +74,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 	private SettingsActivity listener;
 	private AndroidExecutor androidExecutor;
 	private ListPreference enableBluetooth;
-	private ListPreference torOverMobile;
+	private ListPreference torNetwork;
 	private CheckBoxPreference notifyPrivateMessages;
 	private CheckBoxPreference notifyGroupMessages;
 	private CheckBoxPreference notifyForumPosts;
@@ -74,7 +86,6 @@ public class SettingsFragment extends PreferenceFragmentCompat
 	private volatile SettingsManager settingsManager;
 	private volatile EventBus eventBus;
 	private volatile Settings settings;
-	private volatile boolean bluetoothSetting = false, torSetting = false;
 
 	@Override
 	public void onAttach(Context context) {
@@ -90,10 +101,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
 	public void onCreatePreferences(Bundle bundle, String s) {
 		addPreferencesFromResource(R.xml.settings);
 
-		enableBluetooth =
-				(ListPreference) findPreference("pref_key_bluetooth");
-		torOverMobile =
-				(ListPreference) findPreference("pref_key_tor_mobile");
+		enableBluetooth = (ListPreference) findPreference("pref_key_bluetooth");
+		torNetwork = (ListPreference) findPreference("pref_key_tor_network");
 		notifyPrivateMessages = (CheckBoxPreference) findPreference(
 				"pref_key_notify_private_messages");
 		notifyGroupMessages = (CheckBoxPreference) findPreference(
@@ -107,7 +116,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		notifySound = findPreference("pref_key_notify_sound");
 
 		enableBluetooth.setOnPreferenceChangeListener(this);
-		torOverMobile.setOnPreferenceChangeListener(this);
+		torNetwork.setOnPreferenceChangeListener(this);
 		notifyPrivateMessages.setOnPreferenceChangeListener(this);
 		notifyGroupMessages.setOnPreferenceChangeListener(this);
 		notifyForumPosts.setOnPreferenceChangeListener(this);
@@ -126,10 +135,10 @@ public class SettingsFragment extends PreferenceFragmentCompat
 						i.putExtra(EXTRA_RINGTONE_DEFAULT_URI,
 								DEFAULT_NOTIFICATION_URI);
 						i.putExtra(EXTRA_RINGTONE_SHOW_SILENT, true);
-						if (settings.getBoolean("notifySound", true)) {
+						if (settings.getBoolean(PREF_NOTIFY_SOUND, true)) {
 							Uri uri;
 							String ringtoneUri =
-									settings.get("notifyRingtoneUri");
+									settings.get(PREF_NOTIFY_RINGTONE_URI);
 							if (StringUtils.isNullOrEmpty(ringtoneUri))
 								uri = DEFAULT_NOTIFICATION_URI;
 							else uri = Uri.parse(ringtoneUri);
@@ -181,14 +190,17 @@ public class SettingsFragment extends PreferenceFragmentCompat
 				try {
 					long now = System.currentTimeMillis();
 					settings = settingsManager.getSettings(SETTINGS_NAMESPACE);
-					Settings btSettings = settingsManager.getSettings("bt");
-					Settings torSettings = settingsManager.getSettings("tor");
+					Settings btSettings =
+							settingsManager.getSettings(BT_NAMESPACE);
+					Settings torSettings =
+							settingsManager.getSettings(TOR_NAMESPACE);
 					long duration = System.currentTimeMillis() - now;
 					if (LOG.isLoggable(INFO))
 						LOG.info("Loading settings took " + duration + " ms");
-					bluetoothSetting = btSettings.getBoolean("enable", false);
-					torSetting = torSettings.getBoolean("torOverMobile", true);
-					displaySettings();
+					boolean btSetting =
+							btSettings.getBoolean(PREF_BT_ENABLE, false);
+					int torSetting = torSettings.getInt(PREF_TOR_NETWORK, 2);
+					displaySettings(btSetting, torSetting);
 				} catch (DbException e) {
 					if (LOG.isLoggable(WARNING))
 						LOG.log(WARNING, e.toString(), e);
@@ -197,31 +209,33 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		});
 	}
 
-	private void displaySettings() {
+	private void displaySettings(final boolean btSetting,
+			final int torSetting) {
 		listener.runOnUiThreadUnlessDestroyed(new Runnable() {
 			@Override
 			public void run() {
-				enableBluetooth.setValue(Boolean.toString(bluetoothSetting));
-				torOverMobile.setValue(Boolean.toString(torSetting));
+				enableBluetooth.setValue(Boolean.toString(btSetting));
+				torNetwork.setValue(Integer.toString(torSetting));
 
 				notifyPrivateMessages.setChecked(settings.getBoolean(
-						"notifyPrivateMessages", true));
+						PREF_NOTIFY_PRIVATE, true));
 
 				notifyGroupMessages.setChecked(settings.getBoolean(
 						PREF_NOTIFY_GROUP, true));
 
 				notifyForumPosts.setChecked(settings.getBoolean(
-						"notifyForumPosts", true));
+						PREF_NOTIFY_FORUM, true));
 
 				notifyBlogPosts.setChecked(settings.getBoolean(
 						PREF_NOTIFY_BLOG, true));
 
 				notifyVibration.setChecked(settings.getBoolean(
-						"notifyVibration", true));
+						PREF_NOTIFY_VIBRATION, true));
 
 				String text;
-				if (settings.getBoolean("notifySound", true)) {
-					String ringtoneName = settings.get("notifyRingtoneName");
+				if (settings.getBoolean(PREF_NOTIFY_SOUND, true)) {
+					String ringtoneName =
+							settings.get(PREF_NOTIFY_RINGTONE_NAME);
 					if (StringUtils.isNullOrEmpty(ringtoneName)) {
 						text = getString(R.string.notify_sound_setting_default);
 					} else {
@@ -248,15 +262,15 @@ public class SettingsFragment extends PreferenceFragmentCompat
 	@Override
 	public boolean onPreferenceChange(Preference preference, Object o) {
 		if (preference == enableBluetooth) {
-			bluetoothSetting = Boolean.valueOf((String) o);
-			enableOrDisableBluetooth(bluetoothSetting);
-			storeBluetoothSettings();
-		} else if (preference == torOverMobile) {
-			torSetting = Boolean.valueOf((String) o);
-			storeTorSettings();
+			boolean btSetting = Boolean.valueOf((String) o);
+			enableOrDisableBluetooth(btSetting);
+			storeBluetoothSettings(btSetting);
+		} else if (preference == torNetwork) {
+			int torSetting = Integer.valueOf((String) o);
+			storeTorSettings(torSetting);
 		} else if (preference == notifyPrivateMessages) {
 			Settings s = new Settings();
-			s.putBoolean("notifyPrivateMessages", (Boolean) o);
+			s.putBoolean(PREF_NOTIFY_PRIVATE, (Boolean) o);
 			storeSettings(s);
 		} else if (preference == notifyGroupMessages) {
 			Settings s = new Settings();
@@ -264,7 +278,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 			storeSettings(s);
 		} else if (preference == notifyForumPosts) {
 			Settings s = new Settings();
-			s.putBoolean("notifyForumPosts", (Boolean) o);
+			s.putBoolean(PREF_NOTIFY_FORUM, (Boolean) o);
 			storeSettings(s);
 		} else if (preference == notifyBlogPosts) {
 			Settings s = new Settings();
@@ -272,7 +286,7 @@ public class SettingsFragment extends PreferenceFragmentCompat
 			storeSettings(s);
 		} else if (preference == notifyVibration) {
 			Settings s = new Settings();
-			s.putBoolean("notifyVibration", (Boolean) o);
+			s.putBoolean(PREF_NOTIFY_VIBRATION, (Boolean) o);
 			storeSettings(s);
 		}
 		return true;
@@ -291,15 +305,15 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		}
 	}
 
-	private void storeTorSettings() {
+	private void storeTorSettings(final int torSetting) {
 		listener.runOnDbThread(new Runnable() {
 			@Override
 			public void run() {
 				try {
 					Settings s = new Settings();
-					s.putBoolean("torOverMobile", torSetting);
+					s.putInt(PREF_TOR_NETWORK, torSetting);
 					long now = System.currentTimeMillis();
-					settingsManager.mergeSettings(s, "tor");
+					settingsManager.mergeSettings(s, TOR_NAMESPACE);
 					long duration = System.currentTimeMillis() - now;
 					if (LOG.isLoggable(INFO))
 						LOG.info("Merging settings took " + duration + " ms");
@@ -311,15 +325,15 @@ public class SettingsFragment extends PreferenceFragmentCompat
 		});
 	}
 
-	private void storeBluetoothSettings() {
+	private void storeBluetoothSettings(final boolean btSetting) {
 		listener.runOnDbThread(new Runnable() {
 			@Override
 			public void run() {
 				try {
 					Settings s = new Settings();
-					s.putBoolean("enable", bluetoothSetting);
+					s.putBoolean(PREF_BT_ENABLE, btSetting);
 					long now = System.currentTimeMillis();
-					settingsManager.mergeSettings(s, "bt");
+					settingsManager.mergeSettings(s, BT_NAMESPACE);
 					long duration = System.currentTimeMillis() - now;
 					if (LOG.isLoggable(INFO))
 						LOG.info("Merging settings took " + duration + " ms");
@@ -357,21 +371,21 @@ public class SettingsFragment extends PreferenceFragmentCompat
 			Uri uri = data.getParcelableExtra(EXTRA_RINGTONE_PICKED_URI);
 			if (uri == null) {
 				// The user chose silence
-				s.putBoolean("notifySound", false);
-				s.put("notifyRingtoneName", "");
-				s.put("notifyRingtoneUri", "");
+				s.putBoolean(PREF_NOTIFY_SOUND, false);
+				s.put(PREF_NOTIFY_RINGTONE_NAME, "");
+				s.put(PREF_NOTIFY_RINGTONE_URI, "");
 			} else if (RingtoneManager.isDefault(uri)) {
 				// The user chose the default
-				s.putBoolean("notifySound", true);
-				s.put("notifyRingtoneName", "");
-				s.put("notifyRingtoneUri", "");
+				s.putBoolean(PREF_NOTIFY_SOUND, true);
+				s.put(PREF_NOTIFY_RINGTONE_NAME, "");
+				s.put(PREF_NOTIFY_RINGTONE_URI, "");
 			} else {
 				// The user chose a ringtone other than the default
 				Ringtone r = RingtoneManager.getRingtone(getContext(), uri);
 				String name = r.getTitle(getContext());
-				s.putBoolean("notifySound", true);
-				s.put("notifyRingtoneName", name);
-				s.put("notifyRingtoneUri", uri.toString());
+				s.putBoolean(PREF_NOTIFY_SOUND, true);
+				s.put(PREF_NOTIFY_RINGTONE_NAME, name);
+				s.put(PREF_NOTIFY_RINGTONE_URI, uri.toString());
 			}
 			storeSettings(s);
 		}
@@ -381,7 +395,8 @@ public class SettingsFragment extends PreferenceFragmentCompat
 	public void eventOccurred(Event e) {
 		if (e instanceof SettingsUpdatedEvent) {
 			String namespace = ((SettingsUpdatedEvent) e).getNamespace();
-			if (namespace.equals("bt") || namespace.equals("tor")
+			if (namespace.equals(BT_NAMESPACE)
+					|| namespace.equals(TOR_NAMESPACE)
 					|| namespace.equals(SETTINGS_NAMESPACE)) {
 				LOG.info("Settings updated");
 				loadSettings();
diff --git a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
index 5161fe860d13a8a422187c66d85afeae0e4da210..869869c2efd0299c269b3c152634f38fba1f1c97 100644
--- a/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
+++ b/briar-android/src/main/java/org/briarproject/briar/api/android/AndroidNotificationManager.java
@@ -9,6 +9,16 @@ import org.briarproject.bramble.api.sync.GroupId;
  */
 public interface AndroidNotificationManager {
 
+	String PREF_NOTIFY_PRIVATE = "notifyPrivateMessages";
+	String PREF_NOTIFY_GROUP = "notifyGroupMessages";
+	String PREF_NOTIFY_FORUM = "notifyForumPosts";
+	String PREF_NOTIFY_BLOG = "notifyBlogPosts";
+
+	String PREF_NOTIFY_SOUND = "notifySound";
+	String PREF_NOTIFY_RINGTONE_NAME = "notifyRingtoneName";
+	String PREF_NOTIFY_RINGTONE_URI = "notifyRingtoneUri";
+	String PREF_NOTIFY_VIBRATION = "notifyVibration";
+
 	void clearContactNotification(ContactId c);
 
 	void clearAllContactNotifications();
diff --git a/briar-android/src/main/res/values/arrays.xml b/briar-android/src/main/res/values/arrays.xml
index be699e2a2873d82a8270f42edf0ab35529cb45e4..3eea71ecd758e23340424437cb570c15378a65a4 100644
--- a/briar-android/src/main/res/values/arrays.xml
+++ b/briar-android/src/main/res/values/arrays.xml
@@ -8,8 +8,14 @@
 		<item>@string/bluetooth_setting_enabled</item>
 		<item>@string/bluetooth_setting_disabled</item>
 	</string-array>
-	<string-array name="tor_mobile_setting_names">
-		<item>@string/tor_mobile_setting_enabled</item>
-		<item>@string/tor_mobile_setting_disabled</item>
+	<string-array name="tor_network_setting_names">
+		<item>@string/tor_network_setting_never</item>
+		<item>@string/tor_network_setting_wifi</item>
+		<item>@string/tor_network_setting_always</item>
+	</string-array>
+	<string-array name="tor_network_setting_values">
+		<item>0</item>
+		<item>1</item>
+		<item>2</item>
 	</string-array>
 </resources>
\ No newline at end of file
diff --git a/briar-android/src/main/res/values/strings.xml b/briar-android/src/main/res/values/strings.xml
index 45f4a9c1c74ac55766eb6585beb175eb432875f9..4cdd0efb7cdc674d57c63bb7551776c40c083390 100644
--- a/briar-android/src/main/res/values/strings.xml
+++ b/briar-android/src/main/res/values/strings.xml
@@ -310,9 +310,10 @@
 	<string name="bluetooth_setting">Connect via Bluetooth</string>
 	<string name="bluetooth_setting_enabled">Whenever contacts are nearby</string>
 	<string name="bluetooth_setting_disabled">Only when adding contacts</string>
-	<string name="tor_mobile_setting">Connect via Tor</string>
-	<string name="tor_mobile_setting_enabled">When using Wi-Fi or mobile data</string>
-	<string name="tor_mobile_setting_disabled">Only when using Wi-Fi</string>
+	<string name="tor_network_setting">Connect via Tor</string>
+	<string name="tor_network_setting_never">Never</string>
+	<string name="tor_network_setting_wifi">Only when using Wi-Fi</string>
+	<string name="tor_network_setting_always">When using Wi-Fi or mobile data</string>
 
 	<!-- Settings Security and Panic -->
 	<string name="security_settings_title">Security</string>
diff --git a/briar-android/src/main/res/xml/settings.xml b/briar-android/src/main/res/xml/settings.xml
index 5c865755d7e1a6b198c4ac9d44ba43c8cbac45ed..26f8aa46199b063c0c664451ceeccd748c80e8fa 100644
--- a/briar-android/src/main/res/xml/settings.xml
+++ b/briar-android/src/main/res/xml/settings.xml
@@ -15,13 +15,13 @@
 			android:title="@string/bluetooth_setting"/>
 
 		<ListPreference
-			android:defaultValue="true"
-			android:entries="@array/tor_mobile_setting_names"
-			android:entryValues="@array/boolean_array"
-			android:key="pref_key_tor_mobile"
+			android:defaultValue="2"
+			android:entries="@array/tor_network_setting_names"
+			android:entryValues="@array/tor_network_setting_values"
+			android:key="pref_key_tor_network"
 			android:persistent="false"
 			android:summary="%s"
-			android:title="@string/tor_mobile_setting"/>
+			android:title="@string/tor_network_setting"/>
 
 	</PreferenceCategory>