diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index b0d3241..4675bb2 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -76,6 +76,7 @@
 import com.android.settings.applications.ManageApplications;
 import com.android.settings.applications.ProcessStatsUi;
 import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settings.bluetooth.MessageAccessSettings;
 import com.android.settings.dashboard.DashboardCategory;
 import com.android.settings.dashboard.DashboardSummary;
 import com.android.settings.dashboard.DashboardTile;
@@ -237,6 +238,7 @@
             AdvancedWifiSettings.class.getName(),
             SavedAccessPointsWifiSettings.class.getName(),
             BluetoothSettings.class.getName(),
+            MessageAccessSettings.class.getName(),
             TetherSettings.class.getName(),
             WifiP2pSettings.class.getName(),
             VpnSettings.class.getName(),
diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java
index f329c3d..8eee272 100755
--- a/src/com/android/settings/bluetooth/BluetoothSettings.java
+++ b/src/com/android/settings/bluetooth/BluetoothSettings.java
@@ -18,8 +18,6 @@
 
 import static android.os.UserManager.DISALLOW_CONFIG_BLUETOOTH;
 
-import android.app.ActionBar;
-import android.app.Activity;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
 import android.content.BroadcastReceiver;
@@ -33,12 +31,10 @@
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
 import android.util.Log;
-import android.view.Gravity;
 import android.view.Menu;
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.Switch;
 import android.widget.TextView;
 
 import com.android.settings.R;
@@ -63,6 +59,7 @@
     private static final int MENU_ID_RENAME_DEVICE = Menu.FIRST + 1;
     private static final int MENU_ID_VISIBILITY_TIMEOUT = Menu.FIRST + 2;
     private static final int MENU_ID_SHOW_RECEIVED = Menu.FIRST + 3;
+    private static final int MENU_ID_MESSAGE_ACCESS = Menu.FIRST + 4;
 
     /* Private intent to show the list of received files */
     private static final String BTOPP_ACTION_OPEN_RECEIVED_FILES =
@@ -187,6 +184,12 @@
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         menu.add(Menu.NONE, MENU_ID_SHOW_RECEIVED, 0, R.string.bluetooth_show_received_files)
                 .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+        // Message Access API is still not finished, once completed we undo this check.
+        // Bug 16232864
+        if (android.os.SystemProperties.get("show_bluetooth_message_access").equals("true")){
+            menu.add(Menu.NONE, MENU_ID_MESSAGE_ACCESS, 0, R.string.bluetooth_show_message_access)
+                    .setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+        }
         super.onCreateOptionsMenu(menu, inflater);
     }
 
@@ -213,6 +216,14 @@
                 Intent intent = new Intent(BTOPP_ACTION_OPEN_RECEIVED_FILES);
                 getActivity().sendBroadcast(intent);
                 return true;
+
+            case MENU_ID_MESSAGE_ACCESS:
+                if (getActivity() instanceof SettingsActivity) {
+                    ((SettingsActivity) getActivity()).startPreferencePanel(
+                            MessageAccessSettings.class.getCanonicalName(), null,
+                            R.string.bluetooth_show_message_access, null, this, 0);
+                }
+                return true;
         }
         return super.onOptionsItemSelected(item);
     }
@@ -355,6 +366,7 @@
         getActivity().invalidateOptionsMenu();
     }
 
+    @Override
     public void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState) {
         setDeviceListGroup(getPreferenceScreen());
         removeAllDevices();
@@ -433,5 +445,4 @@
                 return result;
             }
         };
-
 }
diff --git a/src/com/android/settings/bluetooth/MessageAccessSettings.java b/src/com/android/settings/bluetooth/MessageAccessSettings.java
new file mode 100644
index 0000000..bef59c8
--- /dev/null
+++ b/src/com/android/settings/bluetooth/MessageAccessSettings.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.bluetooth;
+
+import android.accounts.Account;
+import android.accounts.AccountManager;
+import android.app.ActivityManagerNative;
+import android.content.Context;
+import android.content.pm.PackageManager.NameNotFoundException;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.UserHandle;
+import android.preference.SwitchPreference;
+import android.preference.Preference;
+import android.preference.PreferenceGroup;
+import android.preference.PreferenceScreen;
+import android.provider.SearchIndexableResource;
+import android.util.Log;
+
+import com.android.settings.accounts.AuthenticatorHelper;
+import com.android.settings.R;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class MessageAccessSettings extends SettingsPreferenceFragment
+        implements AuthenticatorHelper.OnAccountsUpdateListener, Indexable {
+    private static final String TAG = "MessageAccessSettings";
+    private static final String GMAIL_PACKAGE_NAME = "com.google.android.gm";
+    private static final String EMAIL_PACKAGE_NAME = "com.google.android.email";
+
+    private Account[] mAccounts;
+    private UserHandle mUserHandle;
+    private PreferenceGroup mAvailableAccounts;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mUserHandle = Utils.getProfileToDisplay(ActivityManagerNative.getDefault(),
+                getActivity().getActivityToken(), savedInstanceState);
+
+        addPreferencesFromResource(R.xml.bluetooth_message_access);
+    }
+
+    @Override
+    public void onResume() {
+        super.onResume();
+        initPreferences();
+    }
+
+    @Override
+    public void onAccountsUpdate(final UserHandle userHandle) {
+        mAccounts = AccountManager.get(getActivity()).getAccountsAsUser(
+                mUserHandle.getIdentifier());
+
+        final int mAccountsSize = mAccounts.length;
+        for (int i = 0; i < mAccountsSize; ++i){
+            Log.d(TAG, String.format("account.type = %s\n", mAccounts[i].type));
+        }
+    }
+
+    /**
+     * Retrieves the email icon for a given account's email preference
+     *
+     * @param accountPref The user's account to retrieve the icon from.
+     *
+     * @return The drawable representing the icon of the user's email preference
+     **/
+    private Drawable getIcon(AccountPreference accountPref){
+        Drawable icon = null;
+
+        // Currently only two types of icons are allowed.
+        final String packageName = accountPref.account.type.equals("com.google")
+                ? GMAIL_PACKAGE_NAME : EMAIL_PACKAGE_NAME;
+
+        try{
+            icon = getPackageManager().getApplicationIcon(packageName);
+        }catch(NameNotFoundException nnfe){
+            icon = null;
+        }
+
+        return icon;
+    }
+
+    private void initPreferences() {
+        final PreferenceScreen preferenceScreen = getPreferenceScreen();
+        mAvailableAccounts = (PreferenceGroup)preferenceScreen.findPreference("accounts");
+        mAccounts = AccountManager.get(getActivity()).getAccountsAsUser(
+                mUserHandle.getIdentifier());
+
+        final int mAccountsSize = mAccounts.length;
+        for (int i = 0; i < mAccountsSize; ++i){
+            AccountPreference accountPref = new AccountPreference(getActivity(), mAccounts[i]);
+            Drawable icon = getIcon(accountPref);
+            if (icon != null){
+                accountPref.setIcon(icon);
+            }
+            mAvailableAccounts.addPreference(accountPref);
+        }
+    }
+
+    private class AccountPreference extends SwitchPreference
+            implements Preference.OnPreferenceChangeListener{
+        private Account account;
+
+        AccountPreference(Context context, Account account){
+            super(context);
+            this.account = account;
+            setTitle(account.type);
+            setSummary(account.name);
+
+            setOnPreferenceChangeListener(this);
+        }
+
+        @Override
+        public boolean onPreferenceChange(Preference preference, Object val) {
+            if (preference instanceof AccountPreference){
+                final AccountPreference accountPref = (AccountPreference) preference;
+
+                if (((Boolean)val).booleanValue()){
+                    // Enable paired deviced to connect, fill in once API is available
+                    Log.w(TAG, String.format(
+                                "User has turned on '%s' for Bluetooth message access.",
+                                accountPref.account.name));
+                } else {
+                    // Disable paired deviced to connect, fill in once API is available
+                    Log.w(TAG, String.format(
+                                "User has turned off '%s' for Bluetooth message access.",
+                                accountPref.account.name));
+                }
+            }
+            return true;
+        }
+    }
+
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+        new BaseSearchIndexProvider() {
+            @Override
+            public List<SearchIndexableResource> getXmlResourcesToIndex(
+                    Context context, boolean enabled) {
+                List<SearchIndexableResource> indexables = new ArrayList<SearchIndexableResource>();
+                SearchIndexableResource indexable = new SearchIndexableResource(context);
+                indexable.xmlResId = R.xml.bluetooth_message_access;
+                indexables.add(indexable);
+                return indexables;
+            }
+        };
+}
diff --git a/src/com/android/settings/search/Ranking.java b/src/com/android/settings/search/Ranking.java
index 0d53d85..fbb6f99 100644
--- a/src/com/android/settings/search/Ranking.java
+++ b/src/com/android/settings/search/Ranking.java
@@ -30,6 +30,7 @@
 import com.android.settings.WirelessSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settings.bluetooth.MessageAccessSettings;
 import com.android.settings.deviceinfo.Memory;
 import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
@@ -90,6 +91,7 @@
 
         // BT
         sRankMap.put(BluetoothSettings.class.getName(), RANK_BT);
+        sRankMap.put(MessageAccessSettings.class.getName(), RANK_BT);
 
         // DataUsage
         sRankMap.put(DataUsageSummary.class.getName(), RANK_DATA_USAGE);
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 4e35a72..0a3ec2a 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -33,6 +33,7 @@
 import com.android.settings.WirelessSettings;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.bluetooth.BluetoothSettings;
+import com.android.settings.bluetooth.MessageAccessSettings;
 import com.android.settings.deviceinfo.Memory;
 import com.android.settings.fuelgauge.BatterySaverSettings;
 import com.android.settings.fuelgauge.PowerUsageSummary;
@@ -87,6 +88,13 @@
                         BluetoothSettings.class.getName(),
                         R.drawable.ic_settings_bluetooth2));
 
+        sResMap.put(MessageAccessSettings.class.getName(),
+                new SearchIndexableResource(
+                        Ranking.getRankForClassName(MessageAccessSettings.class.getName()),
+                        NO_DATA_RES_ID,
+                        MessageAccessSettings.class.getName(),
+                        R.drawable.ic_settings_bluetooth2));
+
         sResMap.put(DataUsageSummary.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(DataUsageSummary.class.getName()),
