diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java
index 4ccd598..2ff3254 100644
--- a/src/com/android/settings/TetherSettings.java
+++ b/src/com/android/settings/TetherSettings.java
@@ -23,6 +23,7 @@
 import android.app.Dialog;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothPan;
+import android.bluetooth.BluetoothProfile;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
@@ -88,7 +89,12 @@
         addPreferencesFromResource(R.xml.tether_prefs);
 
         final Activity activity = getActivity();
-        mBluetoothPan = new BluetoothPan(activity);
+        BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+        if (adapter != null) {
+            adapter.getProfileProxy(activity.getApplicationContext(), mProfileServiceListener,
+                    BluetoothProfile.PAN);
+        }
+
 
         mEnableWifiAp = (CheckBoxPreference) findPreference(ENABLE_WIFI_AP);
         mWifiApSettings = (PreferenceScreen) findPreference(WIFI_AP_SETTINGS);
@@ -119,7 +125,7 @@
         if (!bluetoothAvailable) {
             getPreferenceScreen().removePreference(mBluetoothTether);
         } else {
-            if (mBluetoothPan.isTetheringOn()) {
+            if (mBluetoothPan != null && mBluetoothPan.isTetheringOn()) {
                 mBluetoothTether.setChecked(true);
             } else {
                 mBluetoothTether.setChecked(false);
@@ -130,6 +136,16 @@
         mView = new WebView(activity);
     }
 
+    private BluetoothProfile.ServiceListener mProfileServiceListener =
+        new BluetoothProfile.ServiceListener() {
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            mBluetoothPan = (BluetoothPan) proxy;
+        }
+        public void onServiceDisconnected(int profile) {
+            mBluetoothPan = null;
+        }
+    };
+
     @Override
     public Dialog onCreateDialog(int id) {
         if (id == DIALOG_TETHER_HELP) {
diff --git a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java
index fa0c2c3..3174750 100644
--- a/src/com/android/settings/bluetooth/BluetoothEventRedirector.java
+++ b/src/com/android/settings/bluetooth/BluetoothEventRedirector.java
@@ -139,14 +139,14 @@
                 mManager.getCachedDeviceManager().onProfileStateChanged(device,
                         Profile.HID, newState);
 
-            } else if (action.equals(BluetoothPan.ACTION_PAN_STATE_CHANGED)) {
+            } else if (action.equals(BluetoothPan.ACTION_CONNECTION_STATE_CHANGED)) {
                 final int role = intent.getIntExtra(
                         BluetoothPan.EXTRA_LOCAL_ROLE, 0);
                 if (role == BluetoothPan.LOCAL_PANU_ROLE) {
                     final int newState = intent.getIntExtra(
-                            BluetoothPan.EXTRA_PAN_STATE, 0);
+                            BluetoothPan.EXTRA_STATE, 0);
                     final int oldState = intent.getIntExtra(
-                            BluetoothPan.EXTRA_PREVIOUS_PAN_STATE, 0);
+                            BluetoothPan.EXTRA_PREVIOUS_STATE, 0);
                     if (newState == BluetoothPan.STATE_DISCONNECTED &&
                             oldState == BluetoothPan.STATE_CONNECTING) {
                         Log.i(TAG, "Failed to connect BT PAN");
@@ -199,7 +199,7 @@
         filter.addAction(BluetoothDevice.ACTION_PAIRING_CANCEL);
 
         // Fine-grained state broadcasts
-        filter.addAction(BluetoothPan.ACTION_PAN_STATE_CHANGED);
+        filter.addAction(BluetoothPan.ACTION_CONNECTION_STATE_CHANGED);
         filter.addAction(BluetoothInputDevice.ACTION_CONNECTION_STATE_CHANGED);
         filter.addAction(BluetoothA2dp.ACTION_CONNECTION_STATE_CHANGED);
         filter.addAction(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED);
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
index 889cb8a..164d2da 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
@@ -736,12 +736,22 @@
         }
     }
 
-    private static class PanProfileManager extends LocalBluetoothProfileManager {
-        private final BluetoothPan mService;
+    private static class PanProfileManager extends LocalBluetoothProfileManager
+            implements BluetoothProfile.ServiceListener {
+        private BluetoothPan mService;
 
         public PanProfileManager(LocalBluetoothManager localManager) {
             super(localManager);
-            mService = new BluetoothPan(localManager.getContext());
+            BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
+            adapter.getProfileProxy(localManager.getContext(), this, BluetoothProfile.PAN);
+        }
+
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            mService = (BluetoothPan) proxy;
+        }
+
+        public void onServiceDisconnected(int profile) {
+            mService = null;
         }
 
         @Override
@@ -799,7 +809,7 @@
 
         @Override
         public int getConnectionStatus(BluetoothDevice device) {
-            return convertState(mService.getPanDeviceState(device));
+            return convertState(mService.getConnectionState(device));
         }
 
         @Override
