diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index b9945c5..9f55fe2 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -492,6 +492,7 @@
             android:name=".bluetooth.DockEventReceiver">
             <intent-filter>
                 <action android:name="android.intent.action.DOCK_EVENT" />
+                <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
         </receiver>
diff --git a/src/com/android/settings/bluetooth/DockEventReceiver.java b/src/com/android/settings/bluetooth/DockEventReceiver.java
index 73f90e5..3324be4 100644
--- a/src/com/android/settings/bluetooth/DockEventReceiver.java
+++ b/src/com/android/settings/bluetooth/DockEventReceiver.java
@@ -27,7 +27,7 @@
 
 public class DockEventReceiver extends BroadcastReceiver {
 
-    private static final boolean DEBUG = false;
+    private static final boolean DEBUG = DockService.DEBUG;
 
     private static final String TAG = "DockEventReceiver";
 
@@ -74,6 +74,13 @@
                     if (DEBUG) Log.e(TAG, "Unknown state");
                     break;
             }
+        } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) {
+            int btState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
+            if (btState == BluetoothAdapter.STATE_ON) {
+                Intent i = new Intent(intent);
+                i.setClass(context, DockService.class);
+                beginStartingService(context, i);
+            }
         }
     }
 
diff --git a/src/com/android/settings/bluetooth/DockService.java b/src/com/android/settings/bluetooth/DockService.java
index 4545b4e..1365b52 100644
--- a/src/com/android/settings/bluetooth/DockService.java
+++ b/src/com/android/settings/bluetooth/DockService.java
@@ -19,9 +19,10 @@
 import android.app.AlertDialog;
 import android.app.Notification;
 import android.app.Service;
+import android.bluetooth.BluetoothA2dp;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
-import android.content.BroadcastReceiver;
+import android.bluetooth.BluetoothHeadset;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -41,13 +42,15 @@
 import com.android.settings.R;
 import com.android.settings.bluetooth.LocalBluetoothProfileManager.Profile;
 
+import java.util.List;
+
 public class DockService extends Service implements AlertDialog.OnMultiChoiceClickListener,
         DialogInterface.OnClickListener, DialogInterface.OnDismissListener,
         CompoundButton.OnCheckedChangeListener {
 
     private static final String TAG = "DockService";
 
-    private static final boolean DEBUG = false;
+    static final boolean DEBUG = false;
 
     // Time allowed for the device to be undocked and redocked without severing
     // the bluetooth connection
@@ -87,7 +90,6 @@
     private BluetoothDevice mPendingDevice;
     private int mPendingStartId;
 
-    private boolean mRegistered;
     private Object mBtSynchroObject = new Object();
 
     @Override
@@ -111,10 +113,6 @@
             mDialog.dismiss();
             mDialog = null;
         }
-        if (mRegistered) {
-            unregisterReceiver(mReceiver);
-            mRegistered = false;
-        }
         mServiceLooper.quit();
     }
 
@@ -138,6 +136,12 @@
             return START_NOT_STICKY;
         }
 
+        if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) {
+            handleBtStateChange(intent);
+            DockEventReceiver.finishStartingService(this, startId);
+            return START_NOT_STICKY;
+        }
+
         Message msg = parseIntent(intent);
         if (msg == null) {
             // Bad intent
@@ -407,12 +411,11 @@
         return items;
     }
 
-    private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            int state = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
-            if (state == BluetoothAdapter.STATE_ON && mPendingDevice != null) {
-                synchronized (mBtSynchroObject) {
+    public void handleBtStateChange(Intent intent) {
+        int btState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, BluetoothAdapter.ERROR);
+        if (btState == BluetoothAdapter.STATE_ON) {
+            synchronized (mBtSynchroObject) {
+                if (mPendingDevice != null) {
                     if (mPendingDevice.equals(mDevice)) {
                         if(DEBUG) Log.d(TAG, "applying settings");
                         applyBtSettings(mPendingDevice, mPendingStartId);
@@ -423,10 +426,46 @@
 
                     mPendingDevice = null;
                     DockEventReceiver.finishStartingService(mContext, mPendingStartId);
+                } else {
+                    // Reconnect if docked and bluetooth was enabled by user.
+                    Intent i = registerReceiver(null, new IntentFilter(Intent.ACTION_DOCK_EVENT));
+                    if (i != null) {
+                        int state = i.getIntExtra(Intent.EXTRA_DOCK_STATE,
+                                Intent.EXTRA_DOCK_STATE_UNDOCKED);
+                        if (state != Intent.EXTRA_DOCK_STATE_UNDOCKED) {
+                            BluetoothDevice device = i
+                                    .getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                            if (device != null) {
+                                connectIfEnabled(device);
+                            }
+                        }
+                    }
                 }
             }
         }
-    };
+    }
+
+    private synchronized void connectIfEnabled(BluetoothDevice device) {
+        CachedBluetoothDevice cachedDevice = getCachedBluetoothDevice(mContext, mBtManager, device);
+        List<Profile> profiles = cachedDevice.getConnectableProfiles();
+        for (int i = 0; i < profiles.size(); i++) {
+            LocalBluetoothProfileManager profileManager = LocalBluetoothProfileManager
+                    .getProfileManager(mBtManager, profiles.get(i));
+            int auto;
+            if (Profile.A2DP == profiles.get(i)) {
+                auto = BluetoothA2dp.PRIORITY_AUTO_CONNECT;
+            } else if (Profile.HEADSET == profiles.get(i)) {
+                auto = BluetoothHeadset.PRIORITY_AUTO_CONNECT;
+            } else {
+                continue;
+            }
+
+            if (profileManager.getPreferred(device) == auto) {
+                cachedDevice.connect();
+                break;
+            }
+        }
+    }
 
     private synchronized void applyBtSettings(final BluetoothDevice device, int startId) {
         if (device == null || mProfiles == null || mCheckedItems == null)
@@ -444,12 +483,8 @@
                             if (mPendingDevice != null && mPendingDevice.equals(mDevice)) {
                                 return;
                             }
-                            if (!mRegistered) {
-                                registerReceiver(mReceiver, new IntentFilter(
-                                        BluetoothAdapter.ACTION_STATE_CHANGED));
-                            }
+
                             mPendingDevice = device;
-                            mRegistered = true;
                             mPendingStartId = startId;
                             if (btState != BluetoothAdapter.STATE_TURNING_ON) {
                                 // BT is off. Enable it
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
index 24ba045..f3aaade 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
@@ -136,6 +136,8 @@
 
     public abstract boolean isPreferred(BluetoothDevice device);
 
+    public abstract int getPreferred(BluetoothDevice device);
+
     public abstract void setPreferred(BluetoothDevice device, boolean preferred);
 
     public boolean isConnected(BluetoothDevice device) {
@@ -213,6 +215,11 @@
         }
 
         @Override
+        public int getPreferred(BluetoothDevice device) {
+            return mService.getSinkPriority(device);
+        }
+
+        @Override
         public void setPreferred(BluetoothDevice device, boolean preferred) {
             if (preferred) {
                 if (mService.getSinkPriority(device) < BluetoothA2dp.PRIORITY_ON) {
@@ -332,6 +339,11 @@
         }
 
         @Override
+        public int getPreferred(BluetoothDevice device) {
+            return mService.getPriority(device);
+        }
+
+        @Override
         public void setPreferred(BluetoothDevice device, boolean preferred) {
             if (preferred) {
                 if (mService.getPriority(device) < BluetoothHeadset.PRIORITY_ON) {
@@ -403,6 +415,11 @@
         }
 
         @Override
+        public int getPreferred(BluetoothDevice device) {
+            return -1;
+        }
+
+        @Override
         public void setPreferred(BluetoothDevice device, boolean preferred) {
         }
 
