diff --git a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
index bcb803b..e61b3fd 100755
--- a/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
+++ b/src/com/android/settings/bluetooth/CachedBluetoothDevice.java
@@ -133,7 +133,9 @@
         }
         mProfileConnectionState.put(profile, newProfileState);
         if (newProfileState == BluetoothProfile.STATE_CONNECTED) {
-            if (!mProfiles.contains(profile)) {
+            if (profile instanceof MapProfile) {
+                profile.setPreferred(mDevice, true);
+            } else if (!mProfiles.contains(profile)) {
                 mRemovedProfiles.remove(profile);
                 mProfiles.add(profile);
                 if (profile instanceof PanProfile &&
@@ -142,15 +144,8 @@
                     mLocalNapRoleConnected = true;
                 }
             }
-            if (profile instanceof MapProfile) {
-                profile.setPreferred(mDevice, true);
-            }
         } else if (profile instanceof MapProfile &&
                 newProfileState == BluetoothProfile.STATE_DISCONNECTED) {
-            if (mProfiles.contains(profile)) {
-                mRemovedProfiles.add(profile);
-                mProfiles.remove(profile);
-            }
             profile.setPreferred(mDevice, false);
         } else if (mLocalNapRoleConnected && profile instanceof PanProfile &&
                 ((PanProfile) profile).isLocalRoleNap(mDevice) &&
diff --git a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
index c94c2cf..757535a 100755
--- a/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
+++ b/src/com/android/settings/bluetooth/DeviceProfilesSettings.java
@@ -154,6 +154,13 @@
             mProfileContainer.addPreference(pbapPref);
         }
 
+        final MapProfile mapProfile = mManager.getProfileManager().getMapProfile();
+        final int mapPermission = mCachedDevice.getMessagePermissionChoice();
+        if (mapPermission != CachedBluetoothDevice.ACCESS_UNKNOWN) {
+            CheckBoxPreference mapPreference = createProfilePreference(mapProfile);
+            mProfileContainer.addPreference(mapPreference);
+        }
+
         showOrHideProfileGroup();
     }
 
@@ -225,9 +232,13 @@
         boolean isConnected =
                 status == BluetoothProfile.STATE_CONNECTED;
 
-        if (isConnected) {
+        if (profilePref.isChecked()) {
             askDisconnect(mManager.getForegroundActivity(), profile);
         } else {
+            if (profile instanceof MapProfile) {
+                mCachedDevice.setMessagePermissionChoice(BluetoothDevice.ACCESS_ALLOWED);
+                refreshProfilePreference(profilePref, profile);
+            }
             if (profile.isPreferred(device)) {
                 // profile is preferred but not connected: disable auto-connect
                 profile.setPreferred(device, false);
@@ -259,6 +270,11 @@
             public void onClick(DialogInterface dialog, int which) {
                 device.disconnect(profile);
                 profile.setPreferred(device.getDevice(), false);
+                if (profile instanceof MapProfile) {
+                    device.setMessagePermissionChoice(BluetoothDevice.ACCESS_REJECTED);
+                    refreshProfilePreference(
+                            (CheckBoxPreference)findPreference(profile.toString()), profile);
+                }
             }
         };
 
@@ -297,6 +313,7 @@
                 mProfileContainer.removePreference(profilePref);
             }
         }
+
         showOrHideProfileGroup();
     }
 
@@ -307,7 +324,10 @@
         // Gray out checkbox while connecting and disconnecting.
         profilePref.setEnabled(!mCachedDevice.isBusy());
 
-        if (profile instanceof PbapServerProfile) {
+        if (profile instanceof MapProfile) {
+            profilePref.setChecked(mCachedDevice.getMessagePermissionChoice()
+                    == CachedBluetoothDevice.ACCESS_ALLOWED);
+        } else if (profile instanceof PbapServerProfile) {
             // Handle PBAP specially.
             profilePref.setChecked(mCachedDevice.getPhonebookPermissionChoice()
                     == CachedBluetoothDevice.ACCESS_ALLOWED);
diff --git a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
index 8fff9648..2a6a759 100644
--- a/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
+++ b/src/com/android/settings/bluetooth/LocalBluetoothProfileManager.java
@@ -309,6 +309,10 @@
         return mPbapProfile;
     }
 
+    MapProfile getMapProfile(){
+        return mMapProfile;
+    }
+
     /**
      * Fill in a list of LocalBluetoothProfile objects that are supported by
      * the local device and the remote device.
diff --git a/src/com/android/settings/bluetooth/MapProfile.java b/src/com/android/settings/bluetooth/MapProfile.java
index fb1b180..f47e24f 100644
--- a/src/com/android/settings/bluetooth/MapProfile.java
+++ b/src/com/android/settings/bluetooth/MapProfile.java
@@ -113,7 +113,7 @@
 
     public boolean connect(BluetoothDevice device) {
         if(V)Log.d(TAG,"connect() - should not get called");
-        return true; // MAP never connects out
+        return false; // MAP never connects out
     }
 
     public boolean disconnect(BluetoothDevice device) {
