diff --git a/src/com/android/providers/telephony/MmsProvider.java b/src/com/android/providers/telephony/MmsProvider.java
index 515ecad..2c59f75 100644
--- a/src/com/android/providers/telephony/MmsProvider.java
+++ b/src/com/android/providers/telephony/MmsProvider.java
@@ -70,7 +70,7 @@
     @Override
     public boolean onCreate() {
         setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
-        mOpenHelper = MmsSmsDatabaseHelper.getInstance(getContext());
+        mOpenHelper = MmsSmsDatabaseHelper.getInstanceForCe(getContext());
         return true;
     }
 
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index f2d12d3..983f68a 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -24,6 +24,7 @@
 import android.database.Cursor;
 import android.database.sqlite.SQLiteDatabase;
 import android.database.sqlite.SQLiteOpenHelper;
+import android.os.storage.StorageManager;
 import android.provider.BaseColumns;
 import android.provider.Telephony;
 import android.provider.Telephony.Mms;
@@ -48,6 +49,23 @@
 import java.util.HashSet;
 import java.util.Iterator;
 
+/**
+ * A {@link SQLiteOpenHelper} that handles DB management of SMS and MMS tables.
+ *
+ * From N, SMS and MMS tables are split into two groups with different levels of encryption.
+ *   - the raw table, which lives inside DE(Device Encrypted) storage.
+ *   - all other tables, which lives under CE(Credential Encrypted) storage.
+ *
+ * All tables are created by this class in the same database that can live either in DE or CE
+ * storage. But not all tables in the same database should be used. Only DE tables should be used
+ * in the database created in DE and only CE tables should be used in the database created in CE.
+ * The only exception is a non-FBE device migrating from M to N, in which case the DE and CE tables
+ * will actually live inside the same storage/database.
+ *
+ * This class provides methods to create instances that manage databases in different storage.
+ * It's the responsibility of the clients of this class to make sure the right instance is
+ * used to access tables that are supposed to live inside the intended storage.
+ */
 public class MmsSmsDatabaseHelper extends SQLiteOpenHelper {
     private static final String TAG = "MmsSmsDatabaseHelper";
 
@@ -211,7 +229,8 @@
                         "     AND part.mid = pdu._id);" +
                         " END";
 
-    private static MmsSmsDatabaseHelper sInstance = null;
+    private static MmsSmsDatabaseHelper sDeInstance = null;
+    private static MmsSmsDatabaseHelper sCeInstance = null;
     private static boolean sTriedAutoIncrement = false;
     private static boolean sFakeLowStorageTest = false;     // for testing only
 
@@ -228,14 +247,29 @@
     }
 
     /**
-     * Return a singleton helper for the combined MMS and SMS
-     * database.
+     * Returns a singleton helper for the combined MMS and SMS database in device encrypted storage.
      */
-    /* package */ static synchronized MmsSmsDatabaseHelper getInstance(Context context) {
-        if (sInstance == null) {
-            sInstance = new MmsSmsDatabaseHelper(context);
+    /* package */ static synchronized MmsSmsDatabaseHelper getInstanceForDe(Context context) {
+        if (sDeInstance == null) {
+            sDeInstance = new MmsSmsDatabaseHelper(ProviderUtil.getDeviceEncryptedContext(context));
         }
-        return sInstance;
+        return sDeInstance;
+    }
+
+    /**
+     * Returns a singleton helper for the combined MMS and SMS database in credential encrypted
+     * storage. If FBE is not available, use the device encrypted storage instead.
+     */
+    /* package */ static synchronized MmsSmsDatabaseHelper getInstanceForCe(Context context) {
+        if (sCeInstance == null) {
+            if (StorageManager.isFileBasedEncryptionEnabled()) {
+                sCeInstance = new MmsSmsDatabaseHelper(
+                    ProviderUtil.getCredentialEncryptedContext(context));
+            } else {
+                sCeInstance = getInstanceForDe(context);
+            }
+        }
+        return sCeInstance;
     }
 
     /**
diff --git a/src/com/android/providers/telephony/MmsSmsProvider.java b/src/com/android/providers/telephony/MmsSmsProvider.java
index 0e4e447..b2fa117 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -308,7 +308,7 @@
     @Override
     public boolean onCreate() {
         setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
-        mOpenHelper = MmsSmsDatabaseHelper.getInstance(getContext());
+        mOpenHelper = MmsSmsDatabaseHelper.getInstanceForCe(getContext());
         mUseStrictPhoneNumberComparation =
             getContext().getResources().getBoolean(
                     com.android.internal.R.bool.config_use_strict_phone_number_comparation);
diff --git a/src/com/android/providers/telephony/ProviderUtil.java b/src/com/android/providers/telephony/ProviderUtil.java
index 34c6da9..7f5a2bd 100644
--- a/src/com/android/providers/telephony/ProviderUtil.java
+++ b/src/com/android/providers/telephony/ProviderUtil.java
@@ -23,7 +23,6 @@
 import android.net.Uri;
 import android.os.Process;
 import android.provider.Telephony;
-import android.provider.Telephony.Sms;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -112,4 +111,17 @@
         context.sendBroadcast(intent);
     }
 
+    public static Context getCredentialEncryptedContext(Context context) {
+        if (context.isCredentialEncryptedStorage()) {
+            return context;
+        }
+        return context.createCredentialEncryptedStorageContext();
+    }
+
+    public static Context getDeviceEncryptedContext(Context context) {
+        if (context.isDeviceEncryptedStorage()) {
+            return context;
+        }
+        return context.createDeviceEncryptedStorageContext();
+    }
 }
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index c282a7f..7032fda 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -17,12 +17,10 @@
 package com.android.providers.telephony;
 
 import android.app.AppOpsManager;
-import android.content.ComponentName;
 import android.content.ContentProvider;
 import android.content.ContentResolver;
 import android.content.ContentValues;
 import android.content.Context;
-import android.content.Intent;
 import android.content.UriMatcher;
 import android.database.Cursor;
 import android.database.DatabaseUtils;
@@ -44,8 +42,6 @@
 import android.text.TextUtils;
 import android.util.Log;
 
-import com.android.internal.telephony.SmsApplication;
-
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -90,7 +86,8 @@
     @Override
     public boolean onCreate() {
         setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
-        mOpenHelper = MmsSmsDatabaseHelper.getInstance(getContext());
+        mDeOpenHelper = MmsSmsDatabaseHelper.getInstanceForDe(getContext());
+        mCeOpenHelper = MmsSmsDatabaseHelper.getInstanceForCe(getContext());
         return true;
     }
 
@@ -256,7 +253,7 @@
             orderBy = Sms.DEFAULT_SORT_ORDER;
         }
 
-        SQLiteDatabase db = mOpenHelper.getReadableDatabase();
+        SQLiteDatabase db = getDBOpenHelper(match).getReadableDatabase();
         Cursor ret = qb.query(db, projectionIn, selection, selectionArgs,
                               null, null, orderBy);
 
@@ -266,6 +263,13 @@
         return ret;
     }
 
+    private SQLiteOpenHelper getDBOpenHelper(int match) {
+        if (match == SMS_RAW_MESSAGE) {
+            return mDeOpenHelper;
+        }
+        return mCeOpenHelper;
+    }
+
     private Object[] convertIccToSms(SmsMessage message, int id) {
         // N.B.: These calls must appear in the same order as the
         // columns appear in ICC_COLUMNS.
@@ -469,7 +473,7 @@
                 return null;
         }
 
-        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+        SQLiteDatabase db = getDBOpenHelper(match).getWritableDatabase();
 
         if (table.equals(TABLE_SMS)) {
             boolean addDate = false;
@@ -598,7 +602,7 @@
     public int delete(Uri url, String where, String[] whereArgs) {
         int count;
         int match = sURLMatcher.match(url);
-        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+        SQLiteDatabase db = getDBOpenHelper(match).getWritableDatabase();
         boolean notifyIfNotDefault = true;
         switch (match) {
             case SMS_ALL:
@@ -691,9 +695,10 @@
         String table = TABLE_SMS;
         String extraWhere = null;
         boolean notifyIfNotDefault = true;
-        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+        int match = sURLMatcher.match(url);
+        SQLiteDatabase db = getDBOpenHelper(match).getWritableDatabase();
 
-        switch (sURLMatcher.match(url)) {
+        switch (match) {
             case SMS_RAW_MESSAGE:
                 table = TABLE_RAW;
                 notifyIfNotDefault = false;
@@ -778,7 +783,10 @@
         }
     }
 
-    private SQLiteOpenHelper mOpenHelper;
+    // Db open helper for tables stored in CE(Credential Encrypted) storage.
+    private SQLiteOpenHelper mCeOpenHelper;
+    // Db open helper for tables stored in DE(Device Encrypted) storage.
+    private SQLiteOpenHelper mDeOpenHelper;
 
     private final static String TAG = "SmsProvider";
     private final static String VND_ANDROID_SMS = "vnd.android.cursor.item/sms";
