diff --git a/res/xml/privacy_and_security_preferences.xml b/res/xml/privacy_and_security_preferences.xml
index d5b2f9a..37eeaf8 100644
--- a/res/xml/privacy_and_security_preferences.xml
+++ b/res/xml/privacy_and_security_preferences.xml
@@ -56,7 +56,7 @@
             android:summaryOff="@string/pref_security_not_allowed"
             android:title="@string/pref_security_save_form_data" />
 
-        <SwitchPreference
+        <com.android.browser.mdm.MdmCheckBoxPreference
             android:layout="@layout/swe_preference"
             android:defaultValue="true"
             android:key="accept_third_cookies"
diff --git a/src/com/android/browser/mdm/ThirdPartyCookiesRestriction.java b/src/com/android/browser/mdm/ThirdPartyCookiesRestriction.java
index 86e3103..43bf6bd 100644
--- a/src/com/android/browser/mdm/ThirdPartyCookiesRestriction.java
+++ b/src/com/android/browser/mdm/ThirdPartyCookiesRestriction.java
@@ -31,6 +31,7 @@
 package com.android.browser.mdm;
 
 import android.os.Bundle;
+import android.preference.Preference;
 import android.util.Log;
 
 import org.codeaurora.swe.MdmManager;
@@ -40,10 +41,11 @@
     private final static String TAG = "TPC_Restriction";
 
     public static final String TPC_ENABLED = "ThirdPartyCookiesRestrictionEnabled"; // boolean
-    public static final String TPC_VALUE   = "ThirdPartyCookiesValue";   // boolean
+    public static final String TPC_ALLOWED = "AllowThirdPartyCookies";   // boolean
 
     private static ThirdPartyCookiesRestriction sInstance;
-    private boolean mTpcValue;
+    private boolean mAllowTpc;
+    private MdmCheckBoxPreference mPref = null;
 
     private ThirdPartyCookiesRestriction() {
         super(TAG);
@@ -58,15 +60,41 @@
         return sInstance;
     }
 
+    public void registerPreference (Preference pref) {
+        mPref = (MdmCheckBoxPreference) pref;
+        updatePref();
+    }
+
+    private void updatePref() {
+        if (null != mPref) {
+            if (isEnabled()) {
+                mPref.setChecked(getValue());
+                mPref.disablePref();
+            }
+            else {
+                mPref.enablePref();
+            }
+            mPref.setMdmRestrictionState(isEnabled());
+        }
+    }
+
     @Override
     public void enforce(Bundle restrictions) {
         enable(restrictions.getBoolean(TPC_ENABLED,false));
-        mTpcValue = restrictions.getBoolean(TPC_VALUE, false);
-        Log.i(TAG, "Enforcing. enabled[" + isEnabled() + "]. val[" + mTpcValue + "]");
-        MdmManager.updateMdmThirdPartyCookies(isEnabled(), mTpcValue);
+        mAllowTpc = restrictions.getBoolean(TPC_ALLOWED, true);
+        Log.d(TAG, "Enforcing. enabled[" + isEnabled() + "]. tpc allowed[" + mAllowTpc + "]");
+
+        // Real time update of the Preference if it is registered
+        updatePref();
+
+        if (isEnabled()) {
+            // Logic in native is "should we block?", so we need to
+            // reverse the logic here.
+            MdmManager.updateMdmThirdPartyCookies(!mAllowTpc);
+        }
     }
 
     public boolean getValue() {
-        return mTpcValue;
+        return mAllowTpc;
     }
 }
diff --git a/src/com/android/browser/mdm/tests/ThirdPartyCookiesRestrictionsTest.java b/src/com/android/browser/mdm/tests/ThirdPartyCookiesRestrictionsTest.java
index 230eab8..a77e94a 100644
--- a/src/com/android/browser/mdm/tests/ThirdPartyCookiesRestrictionsTest.java
+++ b/src/com/android/browser/mdm/tests/ThirdPartyCookiesRestrictionsTest.java
@@ -66,7 +66,7 @@
 
         clearTPCRestrictions();
         assertFalse(mTBCRestriction.isEnabled());
-        assertFalse(mTBCRestriction.getValue());
+        assertTrue(mTBCRestriction.getValue()); // default is 'allowed'
 
         setTPCRestrictions(false, true);
         assertFalse(mTBCRestriction.isEnabled());
@@ -88,7 +88,7 @@
      *
      * @param enable boolean. Set the state of the restriction.
      *
-     * @param value boolean. Set the state of Do Not Track if enabled is set to true.
+     * @param value boolean. Set the state of TPC. true == allowed. If enabled is set to true.
      *              we still bundle it, but it should be ignored by the handler.
      */
     private void setTPCRestrictions(boolean clear, boolean enable, boolean value) {
@@ -97,7 +97,7 @@
 
         if(!clear) {
             restrictions.putBoolean(ThirdPartyCookiesRestriction.TPC_ENABLED,enable);
-            restrictions.putBoolean(ThirdPartyCookiesRestriction.TPC_VALUE, value);
+            restrictions.putBoolean(ThirdPartyCookiesRestriction.TPC_ALLOWED, value);
         }
 
         // Deliver restriction on UI thread
diff --git a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
index 7e02de0..b021916 100644
--- a/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
+++ b/src/com/android/browser/preferences/PrivacySecurityPreferencesFragment.java
@@ -19,6 +19,7 @@
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 import com.android.browser.mdm.DoNotTrackRestriction;
+import com.android.browser.mdm.ThirdPartyCookiesRestriction;
 
 import android.app.ActionBar;
 import android.app.Activity;
@@ -76,6 +77,8 @@
         // Register Preference objects with their MDM restriction handlers
         DoNotTrackRestriction.getInstance().
                 registerPreference(findPreference(PreferenceKeys.PREF_DO_NOT_TRACK));
+        ThirdPartyCookiesRestriction.getInstance().
+                registerPreference(findPreference("accept_third_cookies"));
     }
 
     @Override
@@ -84,6 +87,7 @@
 
         // Un-register Preference objects from their MDM restriction handlers
         DoNotTrackRestriction.getInstance().registerPreference(null);
+        ThirdPartyCookiesRestriction.getInstance().registerPreference(null);
     }
 
     @Override
