diff --git a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
index c22ec73..a7e1771 100644
--- a/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
+++ b/java/com/android/dialer/calldetails/CallDetailsCursorLoader.java
@@ -42,7 +42,8 @@
         AnnotatedCallLog.TIMESTAMP,
         AnnotatedCallLog.DURATION,
         AnnotatedCallLog.DATA_USAGE,
-        AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME
+        AnnotatedCallLog.PHONE_ACCOUNT_COMPONENT_NAME,
+        AnnotatedCallLog.CALL_MAPPING_ID
       };
 
   // Indexes for COLUMNS_FOR_CALL_DETAILS
@@ -53,6 +54,7 @@
   private static final int DURATION = 4;
   private static final int DATA_USAGE = 5;
   private static final int PHONE_ACCOUNT_COMPONENT_NAME = 6;
+  private static final int CALL_MAPPING_ID = 7;
 
   CallDetailsCursorLoader(Context context, CoalescedIds coalescedIds) {
     super(
@@ -140,9 +142,7 @@
         .setDate(cursor.getLong(TIMESTAMP))
         .setDuration(cursor.getLong(DURATION))
         .setDataUsage(cursor.getLong(DATA_USAGE))
-
-        .setCallMappingId(String.valueOf(cursor.getLong(TIMESTAMP)));
-
+        .setCallMappingId(cursor.getString(CALL_MAPPING_ID));
 
     String phoneAccountComponentName = cursor.getString(PHONE_ACCOUNT_COMPONENT_NAME);
     entry.setIsDuoCall(
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index 61f7deb..32f303f 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -45,7 +45,7 @@
       @ApplicationContext Context appContext,
       @AnnotatedCallLogMaxRows int maxRows,
       @BackgroundExecutor ListeningExecutorService backgroundExecutor) {
-    super(appContext, FILENAME, null, 1);
+    super(appContext, FILENAME, null, 2);
 
     this.appContext = appContext;
     this.maxRows = maxRows;
@@ -75,9 +75,24 @@
           + (AnnotatedCallLog.NUMBER_ATTRIBUTES + " blob, ")
           + (AnnotatedCallLog.IS_VOICEMAIL_CALL + " integer, ")
           + (AnnotatedCallLog.VOICEMAIL_CALL_TAG + " text, ")
-          + (AnnotatedCallLog.TRANSCRIPTION_STATE + " integer")
+          + (AnnotatedCallLog.TRANSCRIPTION_STATE + " integer, ")
+          + (AnnotatedCallLog.CALL_MAPPING_ID + " text")
           + ");";
 
+  private static final String ALTER_TABLE_SQL_ADD_CALL_MAPPING_ID_COLUMN =
+      "alter table "
+          + AnnotatedCallLog.TABLE
+          + " add column "
+          + AnnotatedCallLog.CALL_MAPPING_ID
+          + " text;";
+  private static final String UPDATE_CALL_MAPPING_ID_COLUMN =
+      "update "
+          + AnnotatedCallLog.TABLE
+          + " set "
+          + AnnotatedCallLog.CALL_MAPPING_ID
+          + " = "
+          + AnnotatedCallLog.TIMESTAMP;
+
   /**
    * Deletes all but the first maxRows rows (by timestamp, excluding voicemails) to keep the table a
    * manageable size.
@@ -143,7 +158,12 @@
   }
 
   @Override
-  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
+  public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+    if (oldVersion == 1 && newVersion == 2) {
+      db.execSQL(ALTER_TABLE_SQL_ADD_CALL_MAPPING_ID_COLUMN);
+      db.execSQL(UPDATE_CALL_MAPPING_ID_COLUMN);
+    }
+  }
 
   /** Closes the database and deletes it. */
   public ListenableFuture<Void> delete() {
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
index 5e4e4af..ee888d1 100644
--- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
+++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
@@ -221,6 +221,17 @@
      * <p>TYPE: TEXT
      */
     public static final String VOICEMAIL_URI = "voicemail_uri";
+
+    /**
+     * An unique id to associate this call log row to a {@link android.telecom.Call}.
+     *
+     * <p>For pre-Q device, this is same as {@link TIMESTAMP}.
+     *
+     * <p>For Q+ device, this will be copied from {@link android.provider.CallLog.Calls}.
+     *
+     * <p>Type: TEXT
+     */
+    public static final String CALL_MAPPING_ID = "call_mapping_id";
   }
 
   /**
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 661b249..fb18e89 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -367,6 +367,9 @@
         contentValues.put(AnnotatedCallLog.DATA_USAGE, dataUsage);
         contentValues.put(AnnotatedCallLog.TRANSCRIPTION, transcription);
         contentValues.put(AnnotatedCallLog.VOICEMAIL_URI, voicemailUri);
+
+        contentValues.put(AnnotatedCallLog.CALL_MAPPING_ID, String.valueOf(date));
+
         setTranscriptionState(cursor, contentValues);
 
         if (existingAnnotatedCallLogIds.contains(id)) {
