diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index df846f1..caafbdb 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -108,4 +108,6 @@
     <!-- Recent apps label. Shown as title on recent apps panel -->
     <string name="recent_tasks_app_label">Apps</string>
 
+    <!-- Network connection string for Bluetooth Reverse Tethering -->
+    <string name="bluetooth_tethered">Bluetooth tethered"</string>
 </resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index b0b93e0..cb5e361 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -77,7 +77,7 @@
     int mDataDirectionIconId;
     int mDataSignalIconId;
     int mDataTypeIconId;
- 
+
     // wifi
     final WifiManager mWifiManager;
     boolean mWifiEnabled, mWifiConnected;
@@ -85,6 +85,11 @@
     String mWifiSsid;
     int mWifiIconId;
 
+    // bluetooth
+    private boolean mBluetoothTethered = false;
+    private int mBluetoothTetherIconId =
+        com.android.internal.R.drawable.stat_sys_tether_bluetooth;
+
     // data connectivity (regardless of state, can we access the internet?)
     // state of inet connection - 0 not connected, 100 connected
     private int mInetCondition = 0;
@@ -104,7 +109,7 @@
     int mLastCombinedSignalIconId = -1;
     int mLastDataTypeIconId = -1;
     String mLastLabel = "";
-    
+
     // yuck -- stop doing this here and put it in the framework
     IBatteryStats mBatteryStats;
 
@@ -235,7 +240,7 @@
         @Override
         public void onDataConnectionStateChanged(int state, int networkType) {
             if (DEBUG) {
-                Slog.d(TAG, "onDataConnectionStateChanged: state=" + state 
+                Slog.d(TAG, "onDataConnectionStateChanged: state=" + state
                         + " type=" + networkType);
             }
             mDataState = state;
@@ -649,13 +654,22 @@
                 mInetCondition = inetCondition;
                 updateWifiIcons();
                 break;
+            case ConnectivityManager.TYPE_BLUETOOTH:
+                mInetCondition = inetCondition;
+                if (info != null) {
+                    mBluetoothTethered = info.isConnected() ? true: false;
+                } else {
+                    mBluetoothTethered = false;
+                }
+                break;
         }
     }
 
 
     // ===== Update the views =======================================================
 
-    // figure out what to show: first wifi, then 3G, then nothing
+    // figure out what to show- there should be one connected network or nothing
+    // General order of preference is: wifi, 3G than bluetooth. This might vary by product.
     void refreshViews() {
         Context context = mContext;
 
@@ -672,12 +686,16 @@
             }
             combinedSignalIconId = mWifiIconId;
             dataTypeIconId = 0;
+        } else if (mDataConnected) {
+            label = mNetworkName;
+            combinedSignalIconId = mDataSignalIconId;
+            dataTypeIconId = mDataTypeIconId;
+        } else if (mBluetoothTethered) {
+            label = mContext.getString(R.string.bluetooth_tethered);
+            combinedSignalIconId = mBluetoothTetherIconId;
+            dataTypeIconId = 0;
         } else {
-            if (mDataConnected) {
-                label = mNetworkName;
-            } else {
-                label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
-            }
+            label = context.getString(R.string.status_bar_settings_signal_meter_disconnected);
             combinedSignalIconId = mDataSignalIconId;
             dataTypeIconId = mDataTypeIconId;
         }
@@ -689,7 +707,8 @@
                     + " mDataDirectionIconId=0x" + Integer.toHexString(mDataDirectionIconId)
                     + " mDataSignalIconId=0x" + Integer.toHexString(mDataSignalIconId)
                     + " mDataTypeIconId=0x" + Integer.toHexString(mDataTypeIconId)
-                    + " mWifiIconId=0x" + Integer.toHexString(mWifiIconId));
+                    + " mWifiIconId=0x" + Integer.toHexString(mWifiIconId)
+                    + "mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId));
         }
 
         // the phone icon on phones
@@ -809,6 +828,10 @@
         pw.print("  mWifiIconId=");
         pw.println(mWifiIconId);
 
+        pw.println("  - Bluetooth ----");
+        pw.print(" mBtReverseTethered=");
+        pw.println(mBluetoothTethered);
+
         pw.println("  - connectivity ------");
         pw.print("  mInetCondition=");
         pw.println(mInetCondition);
