diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 125a3ae..9ac0815 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -116,8 +116,7 @@
                   android:authorities="rcs"
                   android:multiprocess="false"
                   android:exported="true"
-                  android:singleUser="true"
-                  android:readPermission="android.permission.READ_SMS" />
+                  android:singleUser="true" />
 
         <service
             android:name=".TelephonyBackupAgent$DeferredSmsMmsRestoreService"
diff --git a/src/com/android/providers/telephony/MmsSmsProvider.java b/src/com/android/providers/telephony/MmsSmsProvider.java
index e2e9a1c..8c3555c 100644
--- a/src/com/android/providers/telephony/MmsSmsProvider.java
+++ b/src/com/android/providers/telephony/MmsSmsProvider.java
@@ -110,7 +110,7 @@
     /**
      * the name of the table that is used to store the canonical addresses for both SMS and MMS.
      */
-    private static final String TABLE_CANONICAL_ADDRESSES = "canonical_addresses";
+    static final String TABLE_CANONICAL_ADDRESSES = "canonical_addresses";
 
     /**
      * the name of the table that is used to store the conversation threads.
diff --git a/src/com/android/providers/telephony/RcsProvider.java b/src/com/android/providers/telephony/RcsProvider.java
index db45402..c0ca9e1 100644
--- a/src/com/android/providers/telephony/RcsProvider.java
+++ b/src/com/android/providers/telephony/RcsProvider.java
@@ -119,6 +119,7 @@
     private static final int OUTGOING_MESSAGE_ON_GROUP_THREAD_WITH_ID = 41;
     private static final int FILE_TRANSFER_WITH_ID = 42;
     private static final int EVENT = 43;
+    private static final int CANONICAL_ADDRESS = 44;
 
     SQLiteOpenHelper mDbOpenHelper;
 
@@ -130,6 +131,8 @@
     RcsProviderMessageHelper mMessageHelper;
     @VisibleForTesting
     RcsProviderEventHelper mEventHelper;
+    @VisibleForTesting
+    RcsProviderCanonicalAddressHelper mCanonicalAddressHelper;
 
     static {
         // example URI: content://rcs/thread
@@ -294,17 +297,19 @@
 
         // example URI: content://rcs/event
         URL_MATCHER.addURI(AUTHORITY, "event", EVENT);
+
+        URL_MATCHER.addURI(AUTHORITY, "canonical-address", CANONICAL_ADDRESS);
     }
 
     @Override
     public boolean onCreate() {
-        setAppOps(AppOpsManager.OP_READ_SMS, AppOpsManager.OP_WRITE_SMS);
         // Use the credential encrypted mmssms.db for RCS messages.
         mDbOpenHelper = MmsSmsDatabaseHelper.getInstanceForCe(getContext());
         mParticipantHelper = new RcsProviderParticipantHelper(mDbOpenHelper);
         mThreadHelper = new RcsProviderThreadHelper(mDbOpenHelper);
         mMessageHelper = new RcsProviderMessageHelper(mDbOpenHelper);
         mEventHelper = new RcsProviderEventHelper(mDbOpenHelper);
+        mCanonicalAddressHelper = new RcsProviderCanonicalAddressHelper(mDbOpenHelper);
         return true;
     }
 
@@ -447,6 +452,9 @@
                 return mMessageHelper.queryFileTransfer(uri);
             case EVENT:
                 return mEventHelper.queryEvents(queryArgs);
+            case CANONICAL_ADDRESS:
+                String canonicalAddress = uri.getQueryParameter("address");
+                return mCanonicalAddressHelper.getOrCreateCanonicalAddress(canonicalAddress);
             default:
                 Log.e(TAG, "Invalid query: " + uri);
         }
diff --git a/src/com/android/providers/telephony/RcsProviderCanonicalAddressHelper.java b/src/com/android/providers/telephony/RcsProviderCanonicalAddressHelper.java
new file mode 100644
index 0000000..496b512
--- /dev/null
+++ b/src/com/android/providers/telephony/RcsProviderCanonicalAddressHelper.java
@@ -0,0 +1,54 @@
+package com.android.providers.telephony;
+
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.provider.BaseColumns;
+import android.provider.Telephony;
+
+public class RcsProviderCanonicalAddressHelper {
+    SQLiteOpenHelper mSQLiteOpenHelper;
+
+    RcsProviderCanonicalAddressHelper(SQLiteOpenHelper sqLiteOpenHelper) {
+        mSQLiteOpenHelper = sqLiteOpenHelper;
+    }
+
+    Cursor getOrCreateCanonicalAddress(String canonicalAddress) {
+        SQLiteDatabase db = mSQLiteOpenHelper.getReadableDatabase();
+
+        Cursor cursor = db.query(
+                MmsSmsProvider.TABLE_CANONICAL_ADDRESSES,
+                new String[]{BaseColumns._ID}, Telephony.CanonicalAddressesColumns.ADDRESS + "=?",
+                new String[]{canonicalAddress}, null, null, null);
+
+        if (cursor != null && cursor.getCount() > 0) {
+            return cursor;
+        }
+
+        if (cursor != null) {
+            cursor.close();
+        }
+
+        return insertCanonicalAddress(canonicalAddress);
+    }
+
+    private Cursor insertCanonicalAddress(String canonicalAddress) {
+        ContentValues contentValues = new ContentValues();
+        contentValues.put(Telephony.CanonicalAddressesColumns.ADDRESS, canonicalAddress);
+
+        SQLiteDatabase db = mSQLiteOpenHelper.getWritableDatabase();
+
+        long id = db.insert(MmsSmsProvider.TABLE_CANONICAL_ADDRESSES, null, contentValues);
+
+        if (id == -1) {
+            return null;
+        }
+
+        MatrixCursor matrixCursor = new MatrixCursor(new String[]{BaseColumns._ID}, 1);
+        matrixCursor.addRow(new Object[]{id});
+
+        return matrixCursor;
+    }
+}
diff --git a/src/com/android/providers/telephony/RcsProviderParticipantHelper.java b/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
index 065cf81..57223c2 100644
--- a/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
+++ b/src/com/android/providers/telephony/RcsProviderParticipantHelper.java
@@ -259,7 +259,12 @@
             return TRANSACTION_FAILED;
         }
         SQLiteDatabase db = mSqLiteOpenHelper.getWritableDatabase();
-        return db.insert(RCS_PARTICIPANT_TABLE, RCS_PARTICIPANT_ID_COLUMN, contentValues);
+        long rowId = db.insert(RCS_PARTICIPANT_TABLE, RCS_PARTICIPANT_ID_COLUMN, contentValues);
+        Log.e(TAG, "Inserted participant with rowId=" + rowId);
+        if (rowId < 0) {
+            return TRANSACTION_FAILED;
+        }
+        return rowId;
     }
 
     long insertParticipantIntoP2pThread(Uri uri) {
