diff --git a/Android.mk b/Android.mk
index 2eddb56..46bbcd6 100644
--- a/Android.mk
+++ b/Android.mk
@@ -1,6 +1,5 @@
 # Local modifications:
 # * Dagger classes have been manually crafted.
-# * Precompiled proto classes have been included.
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
@@ -95,7 +94,6 @@
 	$(BASE_DIR)/dialer/app/manifests/activities/AndroidManifest.xml \
 	$(BASE_DIR)/dialer/app/voicemail/error/AndroidManifest.xml \
 	$(BASE_DIR)/dialer/backup/AndroidManifest.xml \
-	$(BASE_DIR)/dialer/binary/aosp/AndroidManifest.xml \
 	$(BASE_DIR)/dialer/blocking/AndroidManifest.xml \
 	$(BASE_DIR)/dialer/callcomposer/AndroidManifest.xml \
 	$(BASE_DIR)/dialer/callcomposer/camera/AndroidManifest.xml \
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2e42d50..df9be67 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -12,12 +12,12 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<!-- From java/com/android/dialer/binary/aosp/AndroidManifest.xml -->
+
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
   coreApp="true"
   package="com.android.dialer"
-  android:versionCode="90000"
-  android:versionName="9.0">
+  android:versionCode="100000"
+  android:versionName="10.0">
 
   <uses-sdk
     android:minSdkVersion="23"
@@ -111,6 +111,8 @@
     android:name="com.android.dialer.binary.aosp.AospDialerApplication"
     android:supportsRtl="true"
     android:usesCleartextTraffic="false">
+
+
   </application>
 
 </manifest>
diff --git a/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png
index c74bfab..2121878 100644
--- a/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png
+++ b/java/com/android/contacts/common/res/drawable-hdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.png
index a5a3021..a7875c5 100644
--- a/java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.png
+++ b/java/com/android/contacts/common/res/drawable-mdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.png
index ca9d7d6..8dc1d59 100644
--- a/java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.png
+++ b/java/com/android/contacts/common/res/drawable-xhdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.png
index d0979e9..5d22cbe 100644
--- a/java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.png
+++ b/java/com/android/contacts/common/res/drawable-xxhdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.png b/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.png
index 1d6e1aa..762b636 100644
--- a/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.png
+++ b/java/com/android/contacts/common/res/drawable-xxxhdpi/ic_voicemail_avatar.png
Binary files differ
diff --git a/java/com/android/dialer/app/calllog/PhoneAccountHandles.java b/java/com/android/dialer/app/calllog/PhoneAccountHandles.java
index 6d51b85..b0fa1ed 100644
--- a/java/com/android/dialer/app/calllog/PhoneAccountHandles.java
+++ b/java/com/android/dialer/app/calllog/PhoneAccountHandles.java
@@ -1,3 +1,18 @@
+/*
+ * 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.app.calllog;
 
 import android.content.ComponentName;
diff --git a/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java b/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java
index d34a0f3..628ef87 100644
--- a/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java
+++ b/java/com/android/dialer/app/voicemail/error/VoicemailErrorAlert.java
@@ -56,7 +56,7 @@
     this.modalAlertManager = modalAlertManager;
     this.messageCreator = messageCreator;
 
-    view = alertManager.inflate(R.layout.voicemai_error_message_fragment);
+    view = alertManager.inflate(R.layout.voicemail_error_message_fragment);
     header = (TextView) view.findViewById(R.id.error_card_header);
     details = (TextView) view.findViewById(R.id.error_card_details);
     primaryAction = (TextView) view.findViewById(R.id.primary_action);
diff --git a/java/com/android/dialer/app/voicemail/error/res/layout/voicemai_error_message_fragment.xml b/java/com/android/dialer/app/voicemail/error/res/layout/voicemail_error_message_fragment.xml
similarity index 100%
rename from java/com/android/dialer/app/voicemail/error/res/layout/voicemai_error_message_fragment.xml
rename to java/com/android/dialer/app/voicemail/error/res/layout/voicemail_error_message_fragment.xml
diff --git a/java/com/android/dialer/binary/aosp/AndroidManifest.xml b/java/com/android/dialer/binary/aosp/AndroidManifest.xml
deleted file mode 100644
index 63edb83..0000000
--- a/java/com/android/dialer/binary/aosp/AndroidManifest.xml
+++ /dev/null
@@ -1,116 +0,0 @@
-<!-- Copyright (C) 2016 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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  coreApp="true"
-  package="com.android.dialer"
-  android:versionCode="100000"
-  android:versionName="10.0">
-
-  <uses-sdk
-    android:minSdkVersion="23"
-    android:targetSdkVersion="25"/>
-
-  <uses-permission android:name="android.permission.CALL_PHONE"/>
-  <uses-permission android:name="android.permission.READ_CONTACTS"/>
-  <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
-  <uses-permission android:name="android.permission.READ_CALL_LOG"/>
-  <uses-permission android:name="android.permission.WRITE_CALL_LOG"/>
-  <uses-permission android:name="android.permission.READ_PROFILE"/>
-  <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
-  <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
-  <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
-  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
-  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
-  <uses-permission android:name="android.permission.INTERNET"/>
-  <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
-  <uses-permission android:name="android.permission.NFC"/>
-  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
-  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
-  <uses-permission android:name="android.permission.MODIFY_PHONE_STATE"/>
-  <uses-permission android:name="android.permission.WAKE_LOCK"/>
-  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-  <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
-  <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
-  <uses-permission android:name="android.permission.VIBRATE"/>
-  <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/>
-  <uses-permission android:name="com.android.voicemail.permission.ADD_VOICEMAIL"/>
-  <uses-permission android:name="com.android.voicemail.permission.WRITE_VOICEMAIL"/>
-  <uses-permission android:name="com.android.voicemail.permission.READ_VOICEMAIL"/>
-  <uses-permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK"/>
-  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
-  <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
-  <uses-permission android:name="android.permission.BROADCAST_STICKY"/>
-  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
-  <uses-permission android:name="android.permission.SEND_SMS"/>
-
-  <uses-permission android:name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
-  <!-- We use this to disable the status bar buttons of home, back and recent
-  during an incoming call. By doing so this allows us to not show the user
-  is viewing the activity in full screen alert, on a fresh system/factory
-  reset state of the app. -->
-  <uses-permission android:name="android.permission.STATUS_BAR"/>
-  <uses-permission android:name="android.permission.CAMERA"/>
-
-  <!-- This tells the activity manager to not delay any of our activity
-   start requests, even if they happen immediately after the user
-   presses home. -->
-  <uses-permission android:name="android.permission.STOP_APP_SWITCHES"/>
-
-  <!-- Permissions needed for badger count showing on launch icon. -->
-
-  <!--for Samsung-->
-  <uses-permission android:name="com.sec.android.provider.badge.permission.READ"/>
-  <uses-permission android:name="com.sec.android.provider.badge.permission.WRITE"/>
-
-  <!--for htc-->
-  <uses-permission android:name="com.htc.launcher.permission.READ_SETTINGS"/>
-  <uses-permission android:name="com.htc.launcher.permission.UPDATE_SHORTCUT"/>
-
-  <!--for sony-->
-  <uses-permission android:name="com.sonyericsson.home.permission.BROADCAST_BADGE"/>
-  <uses-permission android:name="com.sonymobile.home.permission.PROVIDER_INSERT_BADGE"/>
-
-  <!--for apex-->
-  <uses-permission android:name="com.anddoes.launcher.permission.UPDATE_COUNT"/>
-
-  <!--for solid-->
-  <uses-permission android:name="com.majeur.launcher.permission.UPDATE_BADGE"/>
-
-  <!--for huawei-->
-  <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE"/>
-  <uses-permission android:name="com.huawei.android.launcher.permission.READ_SETTINGS"/>
-  <uses-permission android:name="com.huawei.android.launcher.permission.WRITE_SETTINGS"/>
-
-  <!--for ZUK-->
-  <uses-permission android:name="android.permission.READ_APP_BADGE"/>
-
-  <!--for OPPO-->
-  <uses-permission android:name="com.oppo.launcher.permission.READ_SETTINGS"/>
-  <uses-permission android:name="com.oppo.launcher.permission.WRITE_SETTINGS"/>
-
-  <application
-    android:backupAgent='com.android.dialer.backup.DialerBackupAgent'
-    android:fullBackupOnly="true"
-    android:restoreAnyVersion="true"
-    android:hardwareAccelerated="true"
-    android:icon="@mipmap/ic_launcher_phone"
-    android:label="@string/applicationLabel"
-    android:name="com.android.dialer.binary.aosp.AospDialerApplication"
-    android:supportsRtl="true"
-    android:usesCleartextTraffic="false">
-  </application>
-
-</manifest>
diff --git a/java/com/android/dialer/calldetails/CallDetailsAdapter.java b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
index 9545830..7471c9c 100644
--- a/java/com/android/dialer/calldetails/CallDetailsAdapter.java
+++ b/java/com/android/dialer/calldetails/CallDetailsAdapter.java
@@ -71,11 +71,12 @@
       ((CallDetailsFooterViewHolder) holder).setPhoneNumber(contact.number);
     } else {
       CallDetailsEntryViewHolder viewHolder = (CallDetailsEntryViewHolder) holder;
+      CallDetailsEntry entry = callDetailsEntries[position - 1];
       viewHolder.setCallDetails(
           contact.number,
-          callDetailsEntries[position - 1],
+          entry,
           callTypeHelper,
-          position != getItemCount() - 2);
+          entry.historyResults.length > 0 && position != getItemCount() - 2);
     }
   }
 
diff --git a/java/com/android/dialer/calldetails/res/drawable/multimedia_image_background.xml b/java/com/android/dialer/calldetails/res/drawable/multimedia_image_background.xml
index 421bdbf..8182e24 100644
--- a/java/com/android/dialer/calldetails/res/drawable/multimedia_image_background.xml
+++ b/java/com/android/dialer/calldetails/res/drawable/multimedia_image_background.xml
@@ -16,5 +16,5 @@
   -->
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
   android:shape="rectangle">
-  <corners android:radius="2dp"/>
+  <corners android:radius="8dp"/>
 </shape>
diff --git a/java/com/android/dialer/calldetails/res/layout/call_details_activity.xml b/java/com/android/dialer/calldetails/res/layout/call_details_activity.xml
index 038a874..79f2837 100644
--- a/java/com/android/dialer/calldetails/res/layout/call_details_activity.xml
+++ b/java/com/android/dialer/calldetails/res/layout/call_details_activity.xml
@@ -14,24 +14,25 @@
   ~ See the License for the specific language governing permissions and
   ~ limitations under the License
   -->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-  android:orientation="vertical"
-  android:layout_width="match_parent"
-  android:layout_height="match_parent">
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
 
   <Toolbar
-    android:id="@+id/toolbar"
-    android:layout_width="match_parent"
-    android:layout_height="?attr/actionBarSize"
-    android:background="@color/dialer_theme_color"
-    android:elevation="4dp"
-    android:titleTextAppearance="@style/toolbar_title_text"
-    android:title="@string/call_details"
-    android:navigationIcon="@drawable/quantum_ic_arrow_back_white_24"/>
+      android:id="@+id/toolbar"
+      android:layout_width="match_parent"
+      android:layout_height="?attr/actionBarSize"
+      android:background="@color/dialer_theme_color"
+      android:elevation="4dp"
+      android:titleTextAppearance="@style/toolbar_title_text"
+      android:title="@string/call_details"
+      android:navigationIcon="@drawable/quantum_ic_arrow_back_white_24"/>
 
   <android.support.v7.widget.RecyclerView
-    android:id="@+id/recycler_view"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:background="@color/background_dialer_white"/>
+      android:id="@+id/recycler_view"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:background="@color/background_dialer_white"/>
 </LinearLayout>
\ No newline at end of file
diff --git a/java/com/android/dialer/calldetails/res/layout/contact_container.xml b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
index 95fe189..bcda55e 100644
--- a/java/com/android/dialer/calldetails/res/layout/contact_container.xml
+++ b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
@@ -18,6 +18,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:layout_marginTop="@dimen/call_details_top_margin"
     android:gravity="center_vertical"
     android:padding="@dimen/contact_container_padding">
 
@@ -25,27 +26,31 @@
       android:id="@+id/quick_contact_photo"
       android:layout_width="@dimen/call_details_contact_photo_size"
       android:layout_height="@dimen/call_details_contact_photo_size"
+      android:layout_marginTop="2dp"
       android:focusable="true"/>
 
-  <TextView
-      android:id="@+id/contact_name"
+  <LinearLayout
+      android:orientation="vertical"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
-      android:layout_marginBottom="@dimen/text_bottom_margin"
-      android:layout_marginStart="@dimen/photo_text_margin"
       android:layout_toEndOf="@+id/quick_contact_photo"
       android:layout_toStartOf="@+id/call_back_button"
-      style="@style/PrimaryText"/>
+      android:layout_centerVertical="true">
 
-  <TextView
-      android:id="@+id/phone_number"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_marginStart="@dimen/photo_text_margin"
-      android:layout_toEndOf="@+id/quick_contact_photo"
-      android:layout_toStartOf="@+id/call_back_button"
-      android:layout_below="@+id/contact_name"
-      style="@style/SecondaryText"/>
+    <TextView
+        android:id="@+id/contact_name"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/photo_text_margin"
+        style="@style/PrimaryText"/>
+
+    <TextView
+        android:id="@+id/phone_number"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginStart="@dimen/photo_text_margin"
+        style="@style/SecondaryText"/>
+  </LinearLayout>
 
   <ImageView
       android:id="@+id/call_back_button"
diff --git a/java/com/android/dialer/calldetails/res/layout/ec_data_container.xml b/java/com/android/dialer/calldetails/res/layout/ec_data_container.xml
index 5ad7912..85cc4ed 100644
--- a/java/com/android/dialer/calldetails/res/layout/ec_data_container.xml
+++ b/java/com/android/dialer/calldetails/res/layout/ec_data_container.xml
@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/ec_container_height">
 
@@ -8,6 +9,7 @@
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
+      android:layout_marginStart="1dp"
       android:maxLines="2"
       style="@style/SecondaryText"/>
 
@@ -22,21 +24,21 @@
       android:outlineProvider="background"
       android:visibility="gone">
 
-    <ImageView
-        android:id="@+id/multimedia_image"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:scaleType="centerCrop"/>
+  <ImageView
+      android:id="@+id/multimedia_image"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:scaleType="centerCrop"/>
 
-    <com.android.incallui.autoresizetext.AutoResizeTextView
-        android:id="@+id/multimedia_attachments_number"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:padding="4dp"
-        android:gravity="center"
-        android:textColor="@color/background_dialer_white"
-        android:textSize="100sp"
-        android:background="#80000000"
-        android:visibility="gone"/>
+  <TextView
+      android:id="@+id/multimedia_attachments_number"
+      android:layout_width="match_parent"
+      android:layout_height="match_parent"
+      android:textColor="@color/background_dialer_white"
+      android:textSize="20sp"
+      android:fontFamily="sans-serif-medium"
+      android:background="#80000000"
+      android:gravity="center"
+      android:visibility="gone"/>
   </FrameLayout>
 </RelativeLayout>
\ No newline at end of file
diff --git a/java/com/android/dialer/calldetails/res/values/dimens.xml b/java/com/android/dialer/calldetails/res/values/dimens.xml
index b1a8f1c..59f2371 100644
--- a/java/com/android/dialer/calldetails/res/values/dimens.xml
+++ b/java/com/android/dialer/calldetails/res/values/dimens.xml
@@ -15,9 +15,9 @@
   ~ limitations under the License
   -->
 <resources>
-  <dimen name="text_bottom_margin">2dp</dimen>
   <dimen name="call_details_primary_text_size">16sp</dimen>
   <dimen name="call_details_secondary_text_size">14sp</dimen>
+  <dimen name="call_details_top_margin">6dp</dimen>
 
   <!-- contact container -->
   <dimen name="contact_container_padding">16dp</dimen>
diff --git a/java/com/android/dialer/calllogutils/res/values/colors.xml b/java/com/android/dialer/calllogutils/res/values/colors.xml
index dc4ec24..e0e6fb2 100644
--- a/java/com/android/dialer/calllogutils/res/values/colors.xml
+++ b/java/com/android/dialer/calllogutils/res/values/colors.xml
@@ -16,7 +16,7 @@
  -->
 <resources>
   <!-- Color for missed call icons. -->
-  <color name="missed_call">#ff2e58</color>
+  <color name="missed_call">#C53929</color>
   <!-- Color for answered or outgoing call icons. -->
   <color name="answered_call">#00c853</color>
   <!-- Color for blocked call icons. -->
diff --git a/java/com/android/dialer/calllogutils/res/values/strings.xml b/java/com/android/dialer/calllogutils/res/values/strings.xml
index 6a6f101..01a5a9b 100644
--- a/java/com/android/dialer/calllogutils/res/values/strings.xml
+++ b/java/com/android/dialer/calllogutils/res/values/strings.xml
@@ -82,9 +82,9 @@
   <!-- String used for displaying calls to the voicemail number in the call log -->
   <string name="voicemail_string">Voicemail</string>
 
-  <!-- A nicely formatted call duration displayed when viewing call details. For example "42 min 28 sec" -->
-  <string name="call_details_duration_format"><xliff:g example="42" id="minutes">%s</xliff:g> min <xliff:g example="28" id="seconds">%s</xliff:g> sec</string>
+  <!-- A nicely formatted call duration displayed when viewing call details. For example "42m 28s" -->
+  <string name="call_details_duration_format"><xliff:g example="42" id="minutes">%s</xliff:g>m <xliff:g example="28" id="seconds">%s</xliff:g>s</string>
 
-  <!-- A nicely formatted call duration displayed when viewing call details for duration less than 1 minute. For example "28 sec" -->
-  <string name="call_details_short_duration_format"><xliff:g example="28" id="seconds">%s</xliff:g> sec</string>
+  <!-- A nicely formatted call duration displayed when viewing call details for duration less than 1 minute. For example "28s" -->
+  <string name="call_details_short_duration_format"><xliff:g example="28" id="seconds">%s</xliff:g>s</string>
 </resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/debug/AndroidManifest.xml b/java/com/android/dialer/debug/AndroidManifest.xml
deleted file mode 100644
index 053d7e7..0000000
--- a/java/com/android/dialer/debug/AndroidManifest.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<manifest
-  package="com.android.dialer.debug">
-</manifest>
diff --git a/java/com/android/dialer/debug/bindings/impl/DebugBindings.java b/java/com/android/dialer/debug/bindings/impl/DebugBindings.java
deleted file mode 100644
index a8b4460..0000000
--- a/java/com/android/dialer/debug/bindings/impl/DebugBindings.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * Copyright (C) 2016 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.debug.bindings;
-
-import android.content.Context;
-import com.android.dialer.debug.impl.DebugConnectionService;
-
-/** Hooks into the debug module. */
-public class DebugBindings {
-
-  public static void registerConnectionService(Context context) {
-    DebugConnectionService.register(context);
-  }
-
-  public static void addNewIncomingCall(Context context, String phoneNumber) {
-    DebugConnectionService.addNewIncomingCall(context, phoneNumber);
-  }
-}
diff --git a/java/com/android/dialer/debug/bindings/stub/DebugBindings.java b/java/com/android/dialer/debug/bindings/stub/DebugBindings.java
deleted file mode 100644
index 7df3834..0000000
--- a/java/com/android/dialer/debug/bindings/stub/DebugBindings.java
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
- * Copyright (C) 2016 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.debug.bindings;
-
-import android.content.Context;
-
-/** Hooks into the debug module. */
-public class DebugBindings {
-
-  public static void registerConnectionService(Context context) {}
-
-  public static void addNewIncomingCall(Context context, String phoneNumber) {}
-}
diff --git a/java/com/android/dialer/debug/impl/AndroidManifest.xml b/java/com/android/dialer/debug/impl/AndroidManifest.xml
deleted file mode 100644
index b875661..0000000
--- a/java/com/android/dialer/debug/impl/AndroidManifest.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  package="com.android.dialer.debug.impl">
-
-  <application>
-
-    <service
-      android:exported="true"
-      android:name=".DebugConnectionService"
-      android:permission="android.permission.BIND_CONNECTION_SERVICE">
-      <intent-filter>
-        <action android:name="android.telecomm.ConnectionService"/>
-      </intent-filter>
-    </service>
-
-  </application>
-
-</manifest>
diff --git a/java/com/android/dialer/debug/impl/DebugConnection.java b/java/com/android/dialer/debug/impl/DebugConnection.java
deleted file mode 100644
index 2ef83aa..0000000
--- a/java/com/android/dialer/debug/impl/DebugConnection.java
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2016 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.debug.impl;
-
-import android.telecom.Connection;
-import android.telecom.DisconnectCause;
-import com.android.dialer.common.LogUtil;
-
-class DebugConnection extends Connection {
-
-  @Override
-  public void onAnswer() {
-    LogUtil.i("DebugConnection.onAnswer", null);
-    setActive();
-  }
-
-  @Override
-  public void onReject() {
-    LogUtil.i("DebugConnection.onReject", null);
-    setDisconnected(new DisconnectCause(DisconnectCause.REJECTED));
-  }
-
-  @Override
-  public void onHold() {
-    LogUtil.i("DebugConnection.onHold", null);
-    setOnHold();
-  }
-
-  @Override
-  public void onUnhold() {
-    LogUtil.i("DebugConnection.onUnhold", null);
-    setActive();
-  }
-
-  @Override
-  public void onDisconnect() {
-    LogUtil.i("DebugConnection.onDisconnect", null);
-    setDisconnected(new DisconnectCause(DisconnectCause.LOCAL));
-    destroy();
-  }
-}
diff --git a/java/com/android/dialer/debug/impl/DebugConnectionService.java b/java/com/android/dialer/debug/impl/DebugConnectionService.java
deleted file mode 100644
index 69aab1e..0000000
--- a/java/com/android/dialer/debug/impl/DebugConnectionService.java
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * Copyright (C) 2016 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.debug.impl;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.net.Uri;
-import android.os.Bundle;
-import android.telecom.Connection;
-import android.telecom.ConnectionRequest;
-import android.telecom.ConnectionService;
-import android.telecom.PhoneAccount;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.telephony.TelephonyManager;
-import com.android.dialer.common.LogUtil;
-import java.util.ArrayList;
-import java.util.List;
-
-/** Simple connection provider to create an incoming call. This is useful for emulators. */
-public class DebugConnectionService extends ConnectionService {
-
-  private static final String PHONE_ACCOUNT_ID = "DEBUG_DIALER";
-
-  public static void register(Context context) {
-    LogUtil.i(
-        "DebugConnectionService.register",
-        context.getSystemService(Context.TELECOM_SERVICE).toString());
-    context.getSystemService(TelecomManager.class).registerPhoneAccount(buildPhoneAccount(context));
-  }
-
-  public static void addNewIncomingCall(Context context, String phoneNumber) {
-    LogUtil.i("DebugConnectionService.addNewIncomingCall", null);
-    Bundle bundle = new Bundle();
-    bundle.putString(TelephonyManager.EXTRA_INCOMING_NUMBER, phoneNumber);
-    try {
-      context
-          .getSystemService(TelecomManager.class)
-          .addNewIncomingCall(getConnectionServiceHandle(context), bundle);
-    } catch (SecurityException e) {
-      LogUtil.i(
-          "DebugConnectionService.addNewIncomingCall",
-          "unable to add call. Make sure to enable the service in Phone app -> Settings -> Calls ->"
-              + " Calling accounts.");
-    }
-  }
-
-  private static PhoneAccount buildPhoneAccount(Context context) {
-    PhoneAccount.Builder builder =
-        new PhoneAccount.Builder(
-            getConnectionServiceHandle(context), "DebugDialerConnectionService");
-    List<String> uriSchemes = new ArrayList<>();
-    uriSchemes.add(PhoneAccount.SCHEME_TEL);
-
-    return builder
-        .setCapabilities(PhoneAccount.CAPABILITY_CALL_PROVIDER)
-        .setShortDescription("Debug Dialer Connection Serivce")
-        .setSupportedUriSchemes(uriSchemes)
-        .build();
-  }
-
-  private static PhoneAccountHandle getConnectionServiceHandle(Context context) {
-    ComponentName componentName = new ComponentName(context, DebugConnectionService.class);
-    return new PhoneAccountHandle(componentName, PHONE_ACCOUNT_ID);
-  }
-
-  private static Uri getPhoneNumber(ConnectionRequest request) {
-    String phoneNumber = request.getExtras().getString(TelephonyManager.EXTRA_INCOMING_NUMBER);
-    return Uri.fromParts(PhoneAccount.SCHEME_TEL, phoneNumber, null);
-  }
-
-  @Override
-  public Connection onCreateOutgoingConnection(
-      PhoneAccountHandle phoneAccount, ConnectionRequest request) {
-    return null;
-  }
-
-  @Override
-  public Connection onCreateIncomingConnection(
-      PhoneAccountHandle phoneAccount, ConnectionRequest request) {
-    LogUtil.i("DebugConnectionService.onCreateIncomingConnection", null);
-    DebugConnection connection = new DebugConnection();
-    connection.setRinging();
-    connection.setAddress(getPhoneNumber(request), TelecomManager.PRESENTATION_ALLOWED);
-    connection.setConnectionCapabilities(
-        Connection.CAPABILITY_MUTE | Connection.CAPABILITY_SUPPORT_HOLD);
-    return connection;
-  }
-}
diff --git a/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java b/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java
index f589f94..250c643 100644
--- a/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java
+++ b/java/com/android/dialer/enrichedcall/FuzzyPhoneNumberMatcher.java
@@ -1,3 +1,18 @@
+/*
+ * 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.enrichedcall;
 
 import android.support.annotation.NonNull;
diff --git a/java/com/android/dialer/enrichedcall/historyquery/HistoryQuery.java b/java/com/android/dialer/enrichedcall/historyquery/HistoryQuery.java
index b7593ce..e61c79e 100644
--- a/java/com/android/dialer/enrichedcall/historyquery/HistoryQuery.java
+++ b/java/com/android/dialer/enrichedcall/historyquery/HistoryQuery.java
@@ -1,3 +1,18 @@
+/*
+ * 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.enrichedcall.historyquery;
 
 import android.support.annotation.NonNull;
diff --git a/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java b/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java
index bcc387a..f24724a 100644
--- a/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java
+++ b/java/com/android/dialer/enrichedcall/videoshare/VideoShareListener.java
@@ -1,3 +1,18 @@
+/*
+ * 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.enrichedcall.videoshare;
 
 import android.support.annotation.MainThread;
diff --git a/java/com/android/dialer/oem/MotorolaUtils.java b/java/com/android/dialer/oem/MotorolaUtils.java
index 29bf0b2..e31ec98 100644
--- a/java/com/android/dialer/oem/MotorolaUtils.java
+++ b/java/com/android/dialer/oem/MotorolaUtils.java
@@ -1,3 +1,18 @@
+/*
+ * 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.oem;
 
 import android.content.Context;
diff --git a/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java b/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
index 6cd5733..4acb548 100644
--- a/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
+++ b/java/com/android/dialer/simulator/impl/SimulatorActionProvider.java
@@ -17,7 +17,9 @@
 package com.android.dialer.simulator.impl;
 
 import android.content.Context;
+import android.content.Intent;
 import android.os.AsyncTask;
+import android.provider.VoicemailContract;
 import android.support.annotation.NonNull;
 import android.view.ActionProvider;
 import android.view.MenuItem;
@@ -72,6 +74,14 @@
               populateDatabase();
               return true;
             });
+    subMenu
+        .add("Sync Voicemail")
+        .setOnMenuItemClickListener(
+            (item) -> {
+              Intent intent = new Intent(VoicemailContract.ACTION_SYNC_VOICEMAIL);
+              context.sendBroadcast(intent);
+              return true;
+            });
   }
 
   private void populateDatabase() {
diff --git a/java/com/android/dialer/theme/res/values/dimens.xml b/java/com/android/dialer/theme/res/values/dimens.xml
index fa750c6..373b33d 100644
--- a/java/com/android/dialer/theme/res/values/dimens.xml
+++ b/java/com/android/dialer/theme/res/values/dimens.xml
@@ -26,8 +26,8 @@
   <dimen name="actionbar_and_tab_height">107dp</dimen>
   <dimen name="actionbar_contentInsetStart">72dp</dimen>
 
-  <dimen name="toolbar_title_text_size">20sp</dimen>
-  <dimen name="toolbar_subtitle_text_size">14sp</dimen>
+  <dimen name="toolbar_title_text_size">14sp</dimen>
+  <dimen name="toolbar_subtitle_text_size">12sp</dimen>
 
   <dimen name="call_log_icon_margin">4dp</dimen>
 </resources>
diff --git a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
index 6e8e1f7..587b923 100644
--- a/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
+++ b/java/com/android/incallui/answer/impl/answermethod/FlingUpDownMethod.java
@@ -388,10 +388,6 @@
     // Since the animation progression is controlled by user gesture instead of real timeline, the
     // spec timeline can be divided into 9 slots. Each slot is equivalent to 83ms in the spec.
     // Therefore, we use 9 slots of 83ms to map user gesture into the spec timeline.
-    //
-    // See specs -
-    // Accept: https://direct.googleplex.com/#/spec/8510001
-    // Decline: https://direct.googleplex.com/#/spec/3850001
     final float progressSlots = 9;
 
     // Fade out the "swipe up to answer". It only takes 1 slot to complete the fade.
diff --git a/java/com/android/incallui/calllocation/impl/GoogleLocationSettingHelper.java b/java/com/android/incallui/calllocation/impl/GoogleLocationSettingHelper.java
index 18a80b8..bcb3e8d 100644
--- a/java/com/android/incallui/calllocation/impl/GoogleLocationSettingHelper.java
+++ b/java/com/android/incallui/calllocation/impl/GoogleLocationSettingHelper.java
@@ -28,8 +28,7 @@
 import com.android.dialer.common.LogUtil;
 
 /**
- * Helper class to check if Google Location Services is enabled. This class is based on
- * https://docs.google.com/a/google.com/document/d/1sGm8pHgGY1QmxbLCwTZuWQASEDN7CFW9EPSZXAuGQfo
+ * Helper class to check if Google Location Services is enabled.
  */
 public class GoogleLocationSettingHelper {
 
diff --git a/java/com/android/incallui/calllocation/impl/HttpFetcher.java b/java/com/android/incallui/calllocation/impl/HttpFetcher.java
index 7bfbaa6..c4aaa22 100644
--- a/java/com/android/incallui/calllocation/impl/HttpFetcher.java
+++ b/java/com/android/incallui/calllocation/impl/HttpFetcher.java
@@ -223,8 +223,6 @@
   /**
    * Lookup up url re-write rules from gServices and apply to the given url.
    *
-   * <p>https://wiki.corp.google.com/twiki/bin/view/Main/AndroidGservices#URL_Rewriting_Rules
-   *
    * @return The new url.
    */
   private static URL reWriteUrl(Context context, String url) {
diff --git a/java/com/android/incallui/incall/impl/FakeDragAnimation.java b/java/com/android/incallui/incall/impl/FakeDragAnimation.java
deleted file mode 100644
index c84c3c4..0000000
--- a/java/com/android/incallui/incall/impl/FakeDragAnimation.java
+++ /dev/null
@@ -1,62 +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.incallui.incall.impl;
-
-import android.animation.ValueAnimator;
-import android.animation.ValueAnimator.AnimatorUpdateListener;
-import android.support.v4.view.ViewPager;
-import android.support.v4.view.animation.FastOutSlowInInterpolator;
-
-/**
- * An animation that controls the fake drag of a {@link ViewPager}. See {@link
- * ViewPager#fakeDragBy(float)} for more details.
- */
-public class FakeDragAnimation implements AnimatorUpdateListener {
-
-  /** The view to animate. */
-  private final ViewPager pager;
-
-  private final ValueAnimator animator;
-  private int oldDragPosition;
-
-  public FakeDragAnimation(ViewPager pager) {
-    this.pager = pager;
-    animator = ValueAnimator.ofInt(0, pager.getWidth());
-    animator.addUpdateListener(this);
-    animator.setInterpolator(new FastOutSlowInInterpolator());
-    animator.setDuration(600);
-  }
-
-  public void start() {
-    animator.start();
-  }
-
-  @Override
-  public void onAnimationUpdate(ValueAnimator animation) {
-    if (!pager.isFakeDragging()) {
-      pager.beginFakeDrag();
-    }
-    int dragPosition = (Integer) animation.getAnimatedValue();
-    int dragOffset = dragPosition - oldDragPosition;
-    oldDragPosition = dragPosition;
-    pager.fakeDragBy(-dragOffset);
-
-    if (animation.getAnimatedFraction() == 1) {
-      pager.endFakeDrag();
-    }
-  }
-}
diff --git a/java/com/android/incallui/incall/impl/InCallFragment.java b/java/com/android/incallui/incall/impl/InCallFragment.java
index 3f31651..b6ae490 100644
--- a/java/com/android/incallui/incall/impl/InCallFragment.java
+++ b/java/com/android/incallui/incall/impl/InCallFragment.java
@@ -253,13 +253,16 @@
       if (!stateRestored) {
         new Handler()
             .postDelayed(
-                () -> {
-                  // In order to prevent user confusion and educate the user on our UI, we animate
-                  // the view pager to the button grid after a short period to show them where the
-                  // UI that they are more familiar with is located.
-                  new FakeDragAnimation(pager).start();
+                new Runnable() {
+                  @Override
+                  public void run() {
+                    // In order to prevent user confusion and educate the user on our UI, we animate
+                    // the view pager to the button grid after 2 seconds show them when the UI is
+                    // that they are more familiar with.
+                    pager.setCurrentItem(adapter.getButtonGridPosition());
+                  }
                 },
-                333);
+                2000);
       }
     } else {
       tabLayout.setVisibility(View.GONE);
diff --git a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
index c255019..2c706d2 100644
--- a/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
+++ b/java/com/android/voicemail/impl/sync/OmtpVvmSyncService.java
@@ -180,7 +180,7 @@
     // The number of voicemails that exceed our threshold and should be deleted from the server
     int numVoicemails =
         imapHelper.getOccuupiedQuota()
-            - ((int) AUTO_DELETE_ARCHIVE_VM_THRESHOLD * imapHelper.getTotalQuota());
+            - (int) (AUTO_DELETE_ARCHIVE_VM_THRESHOLD * imapHelper.getTotalQuota());
     List<Voicemail> oldestVoicemails = mQueryHelper.oldestVoicemailsOnServer(numVoicemails);
     if (!oldestVoicemails.isEmpty()) {
       mQueryHelper.markArchivedInDatabase(oldestVoicemails);
diff --git a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
index d129406..fc8119a 100644
--- a/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
+++ b/java/com/android/voicemail/impl/sync/VoicemailsQueryHelper.java
@@ -272,14 +272,15 @@
     String sortAndLimit = "date ASC limit " + numVoicemails;
 
     try (Cursor cursor =
-        mContentResolver.query(mSourceUri, null, ARCHIVED_SELECTION, null, sortAndLimit)) {
+        mContentResolver.query(mSourceUri, PROJECTION, ARCHIVED_SELECTION, null, sortAndLimit)) {
 
       Assert.isNotNull(cursor);
 
       List<Voicemail> voicemails = new ArrayList<>();
       while (cursor.moveToNext()) {
+        final long id = cursor.getLong(_ID);
         final String sourceData = cursor.getString(SOURCE_DATA);
-        Voicemail voicemail = Voicemail.createForUpdate(cursor.getLong(_ID), sourceData).build();
+        Voicemail voicemail = Voicemail.createForUpdate(id, sourceData).build();
         voicemails.add(voicemail);
       }
 
