diff --git a/app/src/main/java/se/leap/bitmaskclient/firewall/SetupTetheringTask.java b/app/src/main/java/se/leap/bitmaskclient/firewall/SetupTetheringTask.java
index 6ce8ee61210c4b666bf5c0f7172e0fb02d2cbb9f..edf79add18eeec05a1c1d421ef57348918d0133c 100644
--- a/app/src/main/java/se/leap/bitmaskclient/firewall/SetupTetheringTask.java
+++ b/app/src/main/java/se/leap/bitmaskclient/firewall/SetupTetheringTask.java
@@ -147,18 +147,19 @@ public class SetupTetheringTask extends AsyncTask<Void, Boolean, Boolean> {
         return runBlockingCmd(addRules, log) == 0;
     }
 
-    private boolean removeBluetoothTetheringRules(TetheringState state, StringBuilder log) throws Exception {
+    private boolean addBluetoothTetheringRules(TetheringState state, StringBuilder log) throws Exception {
         Log.d(TAG, "add bluetooth tethering rules");
         String[] addRules = getAdditionRules(state.bluetoothAddress, state.bluetoothInterface);
         return runBlockingCmd(addRules, log) == 0;
     }
 
-    private boolean addBluetoothTetheringRules(TetheringState state, StringBuilder log) throws Exception {
+    private boolean removeBluetoothTetheringRules(TetheringState state, StringBuilder log) throws Exception {
         Log.d(TAG, "remove bluetooth tethering rules");
         String[] addRules = getDeletionRules(state, state.lastSeenBluetoothAddress, state.lastSeenBluetoothInterface);
         return runBlockingCmd(addRules, log) == 0;
     }
 
+
     private String[] getAdditionRules(String addressRange, String interfaceName) {
         return new String[] {
                 "su",
diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java
index 75d2941776bdeca8cdca7ca036dd27f76b538238..9bca25e974c053abb0f5e3c7795b5132d4e305c7 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringObservable.java
@@ -91,9 +91,16 @@ public class TetheringObservable extends Observable {
         }
     }
 
-    static void setBluetoothTethering(boolean enabled) {
-        if (getInstance().tetheringState.isBluetoothTetheringEnabled != enabled) {
-            getInstance().tetheringState.isBluetoothTetheringEnabled = enabled;
+    static void setBluetoothTethering(boolean enabled, @NonNull String address, @NonNull String interfaceName) {
+        if (getInstance().tetheringState.isBluetoothTetheringEnabled != enabled ||
+                !getInstance().tetheringState.bluetoothAddress.equals(address) ||
+                !getInstance().tetheringState.bluetoothInterface.equals(interfaceName)) {
+            TetheringState state = getInstance().tetheringState;
+            state.isBluetoothTetheringEnabled = enabled;
+            state.bluetoothAddress = address;
+            state.bluetoothInterface = interfaceName;
+            state.lastSeenBluetoothAddress = address.isEmpty() ? state.lastSeenBluetoothAddress : address;
+            state.lastSeenBluetoothInterface = interfaceName.isEmpty() ? state.lastSeenBluetoothInterface : interfaceName;
             getInstance().setChanged();
             getInstance().notifyObservers();
         }
diff --git a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
index 1a11945b4e1decbae9dc0126dafaeb0274172ab4..0af4c3579d6179e53a7aa73e322e6f172422238d 100644
--- a/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
+++ b/app/src/main/java/se/leap/bitmaskclient/tethering/TetheringStateManager.java
@@ -85,7 +85,7 @@ public class TetheringStateManager {
     }
 
     static void updateBluetoothTetheringState() {
-        TetheringObservable.setBluetoothTethering(isBluetoothTetheringEnabled());
+        TetheringObservable.setBluetoothTethering(isBluetoothTetheringEnabled(), getBluetoothAddressRange(), getBluetoothInterfaceName());
     }
 
     private static String getWifiAddressRange() {
@@ -98,6 +98,11 @@ public class TetheringStateManager {
         return getAddressRange(interfaceAddress);
     }
 
+    private static String getBluetoothAddressRange() {
+        String interfaceAddress = getInterfaceAddress(getBluetoothInterface());
+        return getAddressRange(interfaceAddress);
+    }
+
     private static String getWlanInterfaceName() {
         return getInterfaceName(getWlanInterface());
     }
@@ -106,6 +111,10 @@ public class TetheringStateManager {
         return getInterfaceName(getUsbInterface());
     }
 
+    private static String getBluetoothInterfaceName() {
+        return getInterfaceName(getBluetoothInterface());
+    }
+
     private static NetworkInterface getWlanInterface() {
         return getNetworkInterface(new String[]{"wlan", "eth"});
     }
@@ -114,6 +123,10 @@ public class TetheringStateManager {
         return getNetworkInterface(new String[]{"rndis"});
     }
 
+    private static NetworkInterface getBluetoothInterface() {
+        return getNetworkInterface(new String[]{"bt-pan"});
+    }
+
     private static boolean isBluetoothTetheringEnabled() {
         StringBuilder log = new StringBuilder();
         boolean hasBtPan = false;