diff --git a/java/com/android/dialer/binary/aosp/testing/TestActivity.java b/java/com/android/dialer/binary/aosp/testing/TestActivity.java
deleted file mode 100644
index 9cb26da..0000000
--- a/java/com/android/dialer/binary/aosp/testing/TestActivity.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.dialer.binary.aosp.testing;
-
-import android.app.Activity;
-
-/**
- * An empty Activity to use in tests. This can be useful when UI needs to be tested outside an
- * Activity, either as a background or to keep the test framework running.
- */
-public class TestActivity extends Activity {}
diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
index a3180a0..a6a6466 100644
--- a/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
+++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogDatabaseHelper.java
@@ -32,6 +32,7 @@
     this.maxRows = maxRows;
   }
 
+  // TODO(uabdullah): Use concatenation to avoid klippy warnings
   private static final String CREATE_TABLE_SQL =
       new StringBuilder()
           .append("create table if not exists " + AnnotatedCallLog.TABLE + " (")
@@ -57,8 +58,8 @@
           .append(AnnotatedCallLog.IS_BUSINESS + " integer, ")
           .append(AnnotatedCallLog.IS_VOICEMAIL + " integer, ")
           .append(AnnotatedCallLog.TRANSCRIPTION + " integer, ")
-          .append(AnnotatedCallLog.CALL_TYPE)
-          .append(" integer")
+          .append(AnnotatedCallLog.VOICEMAIL_URI + " string, ")
+          .append(AnnotatedCallLog.CALL_TYPE + " integer")
           .append(");")
           .toString();
 
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
index 832a9c2..4f26f0c 100644
--- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
+++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java
@@ -232,6 +232,13 @@
      * <p>TYPE: TEXT
      */
     public static final String TRANSCRIPTION = "transcription";
+
+    /**
+     * See {@link android.provider.CallLog.Calls#VOICEMAIL_URI}.
+     *
+     * <p>TYPE: TEXT
+     */
+    public static final String VOICEMAIL_URI = "voicemail_uri";
   }
 
   /**
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 5c73933..1fe3507 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -218,6 +218,7 @@
                   Calls.CACHED_NUMBER_LABEL,
                   Calls.DURATION,
                   Calls.TRANSCRIPTION,
+                  Calls.VOICEMAIL_URI,
                   Calls.IS_READ,
                   Calls.NEW,
                   Calls.GEOCODED_LOCATION,
@@ -256,6 +257,7 @@
         int cachedNumberLabelColumn = cursor.getColumnIndexOrThrow(Calls.CACHED_NUMBER_LABEL);
         int durationsColumn = cursor.getColumnIndexOrThrow(Calls.DURATION);
         int transcriptionColumn = cursor.getColumnIndexOrThrow(Calls.TRANSCRIPTION);
+        int voicemailUriColumn = cursor.getColumnIndexOrThrow(Calls.VOICEMAIL_URI);
         int isReadColumn = cursor.getColumnIndexOrThrow(Calls.IS_READ);
         int newColumn = cursor.getColumnIndexOrThrow(Calls.NEW);
         int geocodedLocationColumn = cursor.getColumnIndexOrThrow(Calls.GEOCODED_LOCATION);
@@ -282,6 +284,7 @@
           String cachedNumberLabel = cursor.getString(cachedNumberLabelColumn);
           int duration = cursor.getInt(durationsColumn);
           String transcription = cursor.getString(transcriptionColumn);
+          String voicemailUri = cursor.getString(voicemailUriColumn);
           int isRead = cursor.getInt(isReadColumn);
           int isNew = cursor.getInt(newColumn);
           String geocodedLocation = cursor.getString(geocodedLocationColumn);
@@ -329,6 +332,7 @@
           contentValues.put(AnnotatedCallLog.FEATURES, features);
           contentValues.put(AnnotatedCallLog.DURATION, duration);
           contentValues.put(AnnotatedCallLog.TRANSCRIPTION, transcription);
+          contentValues.put(AnnotatedCallLog.VOICEMAIL_URI, voicemailUri);
 
           if (existingAnnotatedCallLogIds.contains(id)) {
             mutations.update(id, contentValues);
diff --git a/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java b/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
index e371e5e..3112d95 100644
--- a/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
+++ b/java/com/android/dialer/voicemail/listui/VoicemailCursorLoader.java
@@ -42,7 +42,8 @@
         AnnotatedCallLog.DURATION,
         AnnotatedCallLog.GEOCODED_LOCATION,
         AnnotatedCallLog.CALL_TYPE,
-        AnnotatedCallLog.TRANSCRIPTION
+        AnnotatedCallLog.TRANSCRIPTION,
+        AnnotatedCallLog.VOICEMAIL_URI
       };
 
   // Indexes for VOICEMAIL_COLUMNS
@@ -58,6 +59,7 @@
   private static final int GEOCODED_LOCATION = 9;
   private static final int CALL_TYPE = 10;
   private static final int TRANSCRIPTION = 11;
+  private static final int VOICEMAIL_URI = 12;
 
   // TODO(zachh): Optimize indexes
   VoicemailCursorLoader(Context context) {
@@ -90,6 +92,7 @@
         .setLookupUri(cursor.getString(LOOKUP_URI))
         .setDuration(cursor.getLong(DURATION))
         .setTranscription(cursor.getString(TRANSCRIPTION))
+        .setVoicemailUri(cursor.getString(VOICEMAIL_URI))
         .setGeocodedLocation(cursor.getString(GEOCODED_LOCATION))
         .setCallType(cursor.getInt(CALL_TYPE))
         .build();
diff --git a/java/com/android/dialer/voicemail/model/VoicemailEntry.java b/java/com/android/dialer/voicemail/model/VoicemailEntry.java
index fc548f1..df30dee 100644
--- a/java/com/android/dialer/voicemail/model/VoicemailEntry.java
+++ b/java/com/android/dialer/voicemail/model/VoicemailEntry.java
@@ -64,6 +64,9 @@
   @Nullable
   public abstract String transcription();
 
+  @Nullable
+  public abstract String voicemailUri();
+
   public abstract int callType();
 
   /** Builder for {@link VoicemailEntry}. */
@@ -90,6 +93,8 @@
 
     public abstract Builder setTranscription(@Nullable String transcription);
 
+    public abstract Builder setVoicemailUri(@Nullable String voicemailUri);
+
     public abstract Builder setGeocodedLocation(@Nullable String geocodedLocation);
 
     public abstract Builder setCallType(int callType);
