diff --git a/src/com/android/providers/telephony/MmsProvider.java b/src/com/android/providers/telephony/MmsProvider.java
index ed5ea8d..2d801e0 100644
--- a/src/com/android/providers/telephony/MmsProvider.java
+++ b/src/com/android/providers/telephony/MmsProvider.java
@@ -65,11 +65,10 @@
 
     @Override
     public boolean onCreate() {
-        if (!Telephony.AUTO_PERSIST) {
-            // TODO(ywen): Temporarily enable this so not to break existing apps
-            setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
-        }
-        mOpenHelper = MmsSmsDatabaseHelper.getInstance(getContext());
+        setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_NONE);
+        final Context context = getContext();
+        mOpenHelper = MmsSmsDatabaseHelper.getInstance(context);
+        mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
         return true;
     }
 
@@ -277,7 +276,10 @@
 
     @Override
     public Uri insert(Uri uri, ContentValues values) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(TAG, "insert: rejected");
+            return rejectInsert(uri, values);
+        }
         // Don't let anyone insert anything with the _data column
         if (values != null && values.containsKey(Part._DATA)) {
             return null;
@@ -543,7 +545,10 @@
     @Override
     public int delete(Uri uri, String selection,
             String[] selectionArgs) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(TAG, "delete: rejected");
+            return 0;
+        }
         int match = sURLMatcher.match(uri);
         if (LOCAL_LOGV) {
             Log.v(TAG, "Delete uri=" + uri + ", match=" + match);
@@ -697,7 +702,10 @@
     @Override
     public int update(Uri uri, ContentValues values,
             String selection, String[] selectionArgs) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(TAG, "update: rejected");
+            return 0;
+        }
         // Don't let anyone update the _data column
         if (values != null && values.containsKey(Part._DATA)) {
             return 0;
@@ -941,6 +949,8 @@
 
     private SQLiteOpenHelper mOpenHelper;
 
+    private AppOpsManager mAppOps;
+
     private static String concatSelections(String selection1, String selection2) {
         if (TextUtils.isEmpty(selection1)) {
             return selection2;
diff --git a/src/com/android/providers/telephony/MmsSmsProvider.java b/src/com/android/providers/telephony/MmsSmsProvider.java
index 3c6fae9..57ac277 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -281,15 +281,16 @@
 
     private SQLiteOpenHelper mOpenHelper;
 
+    private AppOpsManager mAppOps;
+
     private boolean mUseStrictPhoneNumberComparation;
 
     @Override
     public boolean onCreate() {
-        if (!Telephony.AUTO_PERSIST) {
-            // TODO(ywen): Temporarily enable this so not to break existing apps
-            setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
-        }
-        mOpenHelper = MmsSmsDatabaseHelper.getInstance(getContext());
+        setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_NONE);
+        final Context context = getContext();
+        mOpenHelper = MmsSmsDatabaseHelper.getInstance(context);
+        mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
         mUseStrictPhoneNumberComparation =
             getContext().getResources().getBoolean(
                     com.android.internal.R.bool.config_use_strict_phone_number_comparation);
@@ -1174,7 +1175,10 @@
     @Override
     public int delete(Uri uri, String selection,
             String[] selectionArgs) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(LOG_TAG, "delete: rejected");
+            return 0;
+        }
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
         Context context = getContext();
         int affectedRows = 0;
@@ -1230,7 +1234,10 @@
 
     @Override
     public Uri insert(Uri uri, ContentValues values) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(LOG_TAG, "insert: rejected");
+            return rejectInsert(uri, values);
+        }
         if (URI_MATCHER.match(uri) == URI_PENDING_MSG) {
             SQLiteDatabase db = mOpenHelper.getWritableDatabase();
             long rowId = db.insert(TABLE_PENDING_MSG, null, values);
@@ -1242,7 +1249,10 @@
     @Override
     public int update(Uri uri, ContentValues values,
             String selection, String[] selectionArgs) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(LOG_TAG, "update: rejected");
+            return 0;
+        }
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
         int affectedRows = 0;
         switch(URI_MATCHER.match(uri)) {
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index 89736e5..74ff103 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -20,6 +20,7 @@
 import android.content.ContentProvider;
 import android.content.ContentResolver;
 import android.content.ContentValues;
+import android.content.Context;
 import android.content.UriMatcher;
 
 import android.database.Cursor;
@@ -84,11 +85,10 @@
 
     @Override
     public boolean onCreate() {
-        if (!Telephony.AUTO_PERSIST) {
-            // TODO(ywen): Temporarily enable this so not to break existing apps
-            setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
-        }
-        mOpenHelper = MmsSmsDatabaseHelper.getInstance(getContext());
+        setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_NONE);
+        final Context context = getContext();
+        mOpenHelper = MmsSmsDatabaseHelper.getInstance(context);
+        mAppOps = (AppOpsManager) context.getSystemService(Context.APP_OPS_SERVICE);
         return true;
     }
 
@@ -350,7 +350,10 @@
 
     @Override
     public Uri insert(Uri url, ContentValues initialValues) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(TAG, "insert: rejected");
+            return rejectInsert(url, initialValues);
+        }
         long token = Binder.clearCallingIdentity();
         try {
             return insertInner(url, initialValues);
@@ -543,7 +546,10 @@
 
     @Override
     public int delete(Uri url, String where, String[] whereArgs) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(TAG, "delete: rejected");
+            return 0;
+        }
         int count;
         int match = sURLMatcher.match(url);
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
@@ -629,7 +635,10 @@
 
     @Override
     public int update(Uri url, ContentValues values, String where, String[] whereArgs) {
-        SmsWritePermission.enforce();
+        if (!SmsWritePermission.permit(mAppOps, getCallingPackage())) {
+            Log.e(TAG, "update: rejected");
+            return 0;
+        }
         int count = 0;
         String table = TABLE_SMS;
         String extraWhere = null;
@@ -710,6 +719,8 @@
 
     private SQLiteOpenHelper mOpenHelper;
 
+    private AppOpsManager mAppOps;
+
     private final static String TAG = "SmsProvider";
     private final static String VND_ANDROID_SMS = "vnd.android.cursor.item/sms";
     private final static String VND_ANDROID_SMSCHAT =
diff --git a/src/com/android/providers/telephony/SmsWritePermission.java b/src/com/android/providers/telephony/SmsWritePermission.java
index 186a75f..6229673 100644
--- a/src/com/android/providers/telephony/SmsWritePermission.java
+++ b/src/com/android/providers/telephony/SmsWritePermission.java
@@ -16,9 +16,10 @@
 
 package com.android.providers.telephony;
 
+import android.app.AppOpsManager;
+import android.content.Context;
 import android.os.Binder;
 import android.os.Process;
-import android.provider.Telephony;
 import android.util.Log;
 
 /**
@@ -27,15 +28,18 @@
 public class SmsWritePermission {
     public static final String TAG = "SmsWritePermission";
 
-    public static void enforce() {
-        if (!Telephony.AUTO_PERSIST) {
-            // TODO(ywen): Temporarily disable this so not to break existing apps
-            return;
+    public static boolean permit(AppOpsManager appOpsManager, String callingPkg) {
+        final int uid = Binder.getCallingUid();
+        Log.d(TAG, "SmsWritePermission.permit: calling UID " + uid);
+        if (uid == Process.SYSTEM_UID || uid == Process.PHONE_UID) {
+            // Allow system or phone process to access anyway
+            return true;
         }
-        final long uid = Binder.getCallingUid();
-        Log.d(TAG, "Calling UID " + uid);
-        if (uid != Process.SYSTEM_UID && uid != Process.PHONE_UID) {
-            throw new SecurityException("Only system or phone can access");
+        if (appOpsManager.noteOp(AppOpsManager.OP_WRITE_SMS, uid, callingPkg) ==
+                AppOpsManager.MODE_ALLOWED) {
+            // Or we allow the default SMS app to access
+            return true;
         }
+        return false;
     }
 }
