diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index dc803da..49646f3 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -19,7 +19,7 @@
     <string name="sharedUserLabel" msgid="8024311725474286801">"Android কোর অ্যাপ্লিকেশানগুলি"</string>
     <string name="app_label" msgid="3389954322874982620">"পরিচিতিগুলির সংগ্রহস্থল"</string>
     <string name="provider_label" msgid="6012150850819899907">"পরিচিতিগুলি"</string>
-    <string name="upgrade_out_of_memory_notification_ticker" msgid="7638747231223520477">"পরিচিতিগুলি আপগ্রেড করার জন্য আরো সঞ্চয়স্থানের দরকার৷"</string>
+    <string name="upgrade_out_of_memory_notification_ticker" msgid="7638747231223520477">"পরিচিতিগুলি আপগ্রেড করার জন্য আরও সঞ্চয়স্থানের দরকার৷"</string>
     <string name="upgrade_out_of_memory_notification_title" msgid="8888171924684998531">"পরিচিতিগুলির জন্য সঞ্চয়স্থান আপগ্রেড করা হচ্ছে"</string>
     <string name="upgrade_out_of_memory_notification_text" msgid="2581831842693151968">"আপগ্রেড সম্পূর্ণ করতে আলতো চাপ দিন৷"</string>
     <string name="default_directory" msgid="93961630309570294">"পরিচিতিগুলি"</string>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 37bc150..e1fae51 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -26,7 +26,7 @@
     <string name="local_invisible_directory" msgid="705244318477396120">"Ostalo"</string>
     <string name="voicemail_from_column" msgid="435732568832121444">"Govorna pošta od "</string>
     <string name="debug_dump_title" msgid="4916885724165570279">"Kopiraj bazu podataka kontakata"</string>
-    <string name="debug_dump_database_message" msgid="406438635002392290">"Upravo ćete 1) napraviti kopiju svoje baze podataka koja sadrži sve informacije o kontaktima i sve popise poziva u unutrašnjoj pohrani i 2) poslati tu kopiju e-poštom. Ne zaboravite izbrisati kopiju čim je uspješno kopirate s uređaja ili čim primite poruku e-pošte."</string>
+    <string name="debug_dump_database_message" msgid="406438635002392290">"Upravo ćete 1) napraviti kopiju svoje baze podataka koja sadrži sve informacije o kontaktima i sve popise poziva u unutrašnjoj pohrani i 2) poslati tu kopiju e-poštom. Ne zaboravite izbrisati kopiju čim je uspješno kopirate s uređaja ili čim primite e-poruku."</string>
     <string name="debug_dump_delete_button" msgid="7832879421132026435">"Izbriši sada"</string>
     <string name="debug_dump_start_button" msgid="2837506913757600001">"Započni"</string>
     <string name="debug_dump_email_sender_picker" msgid="3534420908672176460">"Odaberite program za slanje fajla"</string>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
new file mode 100644
index 0000000..c62b699
--- /dev/null
+++ b/res/values-en-rCA/strings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2009 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="sharedUserLabel" msgid="8024311725474286801">"Android Core Apps"</string>
+    <string name="app_label" msgid="3389954322874982620">"Contacts Storage"</string>
+    <string name="provider_label" msgid="6012150850819899907">"Contacts"</string>
+    <string name="upgrade_out_of_memory_notification_ticker" msgid="7638747231223520477">"Contact upgrade needs more memory."</string>
+    <string name="upgrade_out_of_memory_notification_title" msgid="8888171924684998531">"Upgrading storage for contacts"</string>
+    <string name="upgrade_out_of_memory_notification_text" msgid="2581831842693151968">"Tap to complete the upgrade."</string>
+    <string name="default_directory" msgid="93961630309570294">"Contacts"</string>
+    <string name="local_invisible_directory" msgid="705244318477396120">"Other"</string>
+    <string name="voicemail_from_column" msgid="435732568832121444">"Voicemail from "</string>
+    <string name="debug_dump_title" msgid="4916885724165570279">"Copy contacts database"</string>
+    <string name="debug_dump_database_message" msgid="406438635002392290">"You are about to 1) make a copy of your database which includes all contacts related information and all call log to the internal storage, and 2) email it. Remember to delete the copy as soon as you have successfully copied it off the device or the email is received."</string>
+    <string name="debug_dump_delete_button" msgid="7832879421132026435">"Delete now"</string>
+    <string name="debug_dump_start_button" msgid="2837506913757600001">"Start"</string>
+    <string name="debug_dump_email_sender_picker" msgid="3534420908672176460">"Choose a programme to send your file"</string>
+    <string name="debug_dump_email_subject" msgid="108188398416385976">"Contacts Db attached"</string>
+    <string name="debug_dump_email_body" msgid="4577749800871444318">"Attached is my contacts database with all my contacts information. Handle with care."</string>
+</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
new file mode 100644
index 0000000..b7681dd
--- /dev/null
+++ b/res/values-en-rXC/strings.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2009 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="sharedUserLabel" msgid="8024311725474286801">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎Android Core Apps‎‏‎‎‏‎"</string>
+    <string name="app_label" msgid="3389954322874982620">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‎Contacts Storage‎‏‎‎‏‎"</string>
+    <string name="provider_label" msgid="6012150850819899907">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‏‏‎Contacts‎‏‎‎‏‎"</string>
+    <string name="upgrade_out_of_memory_notification_ticker" msgid="7638747231223520477">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‏‎‎‏‏‎‏‏‏‎‏‎Contacts upgrade needs more memory.‎‏‎‎‏‎"</string>
+    <string name="upgrade_out_of_memory_notification_title" msgid="8888171924684998531">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‎‎‏‏‎Upgrading storage for contacts‎‏‎‎‏‎"</string>
+    <string name="upgrade_out_of_memory_notification_text" msgid="2581831842693151968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‏‎‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎Tap to complete the upgrade.‎‏‎‎‏‎"</string>
+    <string name="default_directory" msgid="93961630309570294">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‏‏‏‏‎‏‏‎‎Contacts‎‏‎‎‏‎"</string>
+    <string name="local_invisible_directory" msgid="705244318477396120">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎Other‎‏‎‎‏‎"</string>
+    <string name="voicemail_from_column" msgid="435732568832121444">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‎‎‏‎‎‎Voicemail from ‎‏‎‎‏‎ "</string>
+    <string name="debug_dump_title" msgid="4916885724165570279">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎Copy contacts database‎‏‎‎‏‎"</string>
+    <string name="debug_dump_database_message" msgid="406438635002392290">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‏‎‎‎‏‎‎You are about to 1) make a copy of your database which includes all contacts related information and all call log to the internal storage, and 2) email it. Remember to delete the copy as soon as you have successfully copied it off the device or the email is received.‎‏‎‎‏‎"</string>
+    <string name="debug_dump_delete_button" msgid="7832879421132026435">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‎‎‏‏‎Delete now‎‏‎‎‏‎"</string>
+    <string name="debug_dump_start_button" msgid="2837506913757600001">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎Start‎‏‎‎‏‎"</string>
+    <string name="debug_dump_email_sender_picker" msgid="3534420908672176460">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‎‎Choose a program to send your file‎‏‎‎‏‎"</string>
+    <string name="debug_dump_email_subject" msgid="108188398416385976">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎Contacts Db attached‎‏‎‎‏‎"</string>
+    <string name="debug_dump_email_body" msgid="4577749800871444318">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‏‎‎Attached is my contacts database with all my contacts information. Handle with care.‎‏‎‎‏‎"</string>
+</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 5fa4021..a9b2025 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -25,8 +25,8 @@
     <string name="default_directory" msgid="93961630309570294">"संपर्क"</string>
     <string name="local_invisible_directory" msgid="705244318477396120">"अन्य"</string>
     <string name="voicemail_from_column" msgid="435732568832121444">"इनका ध्‍वनि‍मेल: "</string>
-    <string name="debug_dump_title" msgid="4916885724165570279">"संपर्क डेटाबेस की प्रतिलिपि बनाएं"</string>
-    <string name="debug_dump_database_message" msgid="406438635002392290">"आप 1) मोबाइल मेमोरी में अपने उस डेटाबेस की प्रतिलिपि बनाने वाले हैं जिसमें सभी संपर्कों संबंधी जानकारी और सभी कॉल लॉग शामिल हैं, और 2) उसे ईमेल करने वाले हैं. जैसे ही आप डिवाइस से इसकी प्रतिलिपि सफलतापूर्वक बना लें या ईमेल प्राप्त हो जाए तो प्रतिलिपि को हटाना न भूलें."</string>
+    <string name="debug_dump_title" msgid="4916885724165570279">"संपर्क डेटाबेस की कॉपी बनाएं"</string>
+    <string name="debug_dump_database_message" msgid="406438635002392290">"आप 1) मोबाइल मेमोरी में अपने उस डेटाबेस की कॉपी बनाने वाले हैं जिसमें सभी संपर्कों संबंधी जानकारी और सभी कॉल लॉग शामिल हैं, और 2) उसे ईमेल करने वाले हैं. जैसे ही आप डिवाइस से इसकी कॉपी सफलतापूर्वक बना लें या ईमेल प्राप्त हो जाए तो कॉपी को हटाना न भूलें."</string>
     <string name="debug_dump_delete_button" msgid="7832879421132026435">"अभी हटाएं"</string>
     <string name="debug_dump_start_button" msgid="2837506913757600001">"प्रारंभ करें"</string>
     <string name="debug_dump_email_sender_picker" msgid="3534420908672176460">"अपनी फ़ाइल भेजने के लिए कोई प्रोग्राम चुनें"</string>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 7e6d605..a4f324e 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -20,7 +20,7 @@
     <string name="app_label" msgid="3389954322874982620">"संपर्क संचयन"</string>
     <string name="provider_label" msgid="6012150850819899907">"संपर्क"</string>
     <string name="upgrade_out_of_memory_notification_ticker" msgid="7638747231223520477">"संपर्क श्रेणीसुधारित करण्‍यास अधिक मेमरी आवश्‍यक आहे."</string>
-    <string name="upgrade_out_of_memory_notification_title" msgid="8888171924684998531">"संपर्कांसाठी संचयन श्रेणीसुधारित करीत आहे"</string>
+    <string name="upgrade_out_of_memory_notification_title" msgid="8888171924684998531">"संपर्कांसाठी संचयन श्रेणीसुधारित करत आहे"</string>
     <string name="upgrade_out_of_memory_notification_text" msgid="2581831842693151968">"श्रेणीसुधारणा पूर्ण करण्यासाठी टॅप करा."</string>
     <string name="default_directory" msgid="93961630309570294">"संपर्क"</string>
     <string name="local_invisible_directory" msgid="705244318477396120">"इतर"</string>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 920511a..92bd391 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -21,7 +21,7 @@
     <string name="provider_label" msgid="6012150850819899907">"Anwani"</string>
     <string name="upgrade_out_of_memory_notification_ticker" msgid="7638747231223520477">"Kupandishwa gredi kwa anwani kunahitaji kumbukumbu zaidi."</string>
     <string name="upgrade_out_of_memory_notification_title" msgid="8888171924684998531">"Inapandisha gredi hifadhi ya anwani"</string>
-    <string name="upgrade_out_of_memory_notification_text" msgid="2581831842693151968">"Gonga ili ukamilishe kusasisha anwani."</string>
+    <string name="upgrade_out_of_memory_notification_text" msgid="2581831842693151968">"Gusa ili ukamilishe kusasisha anwani."</string>
     <string name="default_directory" msgid="93961630309570294">"Anwani"</string>
     <string name="local_invisible_directory" msgid="705244318477396120">"Nyingineyo"</string>
     <string name="voicemail_from_column" msgid="435732568832121444">"Barua ya sauti kutoka "</string>
diff --git a/src/com/android/providers/contacts/CallLogProvider.java b/src/com/android/providers/contacts/CallLogProvider.java
index 59e9b14..76e207a 100644
--- a/src/com/android/providers/contacts/CallLogProvider.java
+++ b/src/com/android/providers/contacts/CallLogProvider.java
@@ -383,7 +383,7 @@
         // Add the computed fields to the copied values.
         mCallLogInsertionHelper.addComputedValues(copiedValues);
 
-        long rowId = getDatabaseModifier(mCallsInserter).insert(copiedValues);
+        long rowId = createDatabaseModifier(mCallsInserter).insert(copiedValues);
         if (rowId > 0) {
             return ContentUris.withAppendedId(uri, rowId);
         }
@@ -423,7 +423,7 @@
                 throw new UnsupportedOperationException("Cannot update URL: " + uri);
         }
 
-        return getDatabaseModifier(db).update(uri, Tables.CALLS, values, selectionBuilder.build(),
+        return createDatabaseModifier(db).update(uri, Tables.CALLS, values, selectionBuilder.build(),
                 selectionArgs);
     }
 
@@ -445,7 +445,7 @@
             case CALLS:
                 // TODO: Special case - We may want to forward the delete request on user 0 to the
                 // shadow provider too.
-                return getDatabaseModifier(db).delete(Tables.CALLS,
+                return createDatabaseModifier(db).delete(Tables.CALLS,
                         selectionBuilder.build(), selectionArgs);
             default:
                 throw new UnsupportedOperationException("Cannot delete that URL: " + uri);
@@ -460,15 +460,15 @@
      * Returns a {@link DatabaseModifier} that takes care of sending necessary notifications
      * after the operation is performed.
      */
-    private DatabaseModifier getDatabaseModifier(SQLiteDatabase db) {
+    private DatabaseModifier createDatabaseModifier(SQLiteDatabase db) {
         return new DbModifierWithNotification(Tables.CALLS, db, getContext());
     }
 
     /**
-     * Same as {@link #getDatabaseModifier(SQLiteDatabase)} but used for insert helper operations
+     * Same as {@link #createDatabaseModifier(SQLiteDatabase)} but used for insert helper operations
      * only.
      */
-    private DatabaseModifier getDatabaseModifier(DatabaseUtils.InsertHelper insertHelper) {
+    private DatabaseModifier createDatabaseModifier(DatabaseUtils.InsertHelper insertHelper) {
         return new DbModifierWithNotification(Tables.CALLS, insertHelper, getContext());
     }
 
diff --git a/src/com/android/providers/contacts/ContactsProvider2.java b/src/com/android/providers/contacts/ContactsProvider2.java
index a5af51f..701c791 100644
--- a/src/com/android/providers/contacts/ContactsProvider2.java
+++ b/src/com/android/providers/contacts/ContactsProvider2.java
@@ -4649,6 +4649,9 @@
             if (flagExists(values, RawContacts.STARRED)) {
                 if (!callerIsSyncAdapter) {
                     updateFavoritesMembership(rawContactId, flagIsSet(values, RawContacts.STARRED));
+                    mTransactionContext.get().markRawContactDirtyAndChanged(
+                        rawContactId, callerIsSyncAdapter);
+                    mSyncToNetwork |= !callerIsSyncAdapter;
                 }
                 aggregator.updateStarred(rawContactId);
                 aggregator.updatePinned(rawContactId);
@@ -4662,6 +4665,9 @@
                             SELECTION_STARRED_FROM_RAW_CONTACTS,
                             new String[] {Long.toString(rawContactId)});
                     updateFavoritesMembership(rawContactId, starred);
+                    mTransactionContext.get().markRawContactDirtyAndChanged(
+                        rawContactId, callerIsSyncAdapter);
+                    mSyncToNetwork |= !callerIsSyncAdapter;
                 }
             }
             if (flagExists(values, RawContacts.SEND_TO_VOICEMAIL)) {
@@ -4832,6 +4838,7 @@
                     if (hasStarredValue) {
                         updateFavoritesMembership(rawContactId,
                                 flagIsSet(values, RawContacts.STARRED));
+                        mSyncToNetwork |= !callerIsSyncAdapter;
                     }
 
                     if (hasStarredValue || hasPinnedValue || hasVoiceMailValue) {
diff --git a/src/com/android/providers/contacts/DatabaseModifier.java b/src/com/android/providers/contacts/DatabaseModifier.java
index b11605b..60f9c7f 100644
--- a/src/com/android/providers/contacts/DatabaseModifier.java
+++ b/src/com/android/providers/contacts/DatabaseModifier.java
@@ -49,4 +49,10 @@
      * {@link SQLiteDatabase#delete(String, String, String[])} method.
      */
     public abstract int delete(String table, String whereClause, String[] whereArgs);
+
+    void startBulkOperation();
+
+    void yieldBulkOperation();
+
+    void finishBulkOperation();
 }
diff --git a/src/com/android/providers/contacts/DbModifierWithNotification.java b/src/com/android/providers/contacts/DbModifierWithNotification.java
index 7e7b3e1..36865fa 100644
--- a/src/com/android/providers/contacts/DbModifierWithNotification.java
+++ b/src/com/android/providers/contacts/DbModifierWithNotification.java
@@ -17,7 +17,6 @@
 
 package com.android.providers.contacts;
 
-import static android.Manifest.permission.ADD_VOICEMAIL;
 import static android.Manifest.permission.READ_VOICEMAIL;
 
 import android.content.ComponentName;
@@ -25,8 +24,6 @@
 import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
-import android.content.pm.ActivityInfo;
-import android.content.pm.ResolveInfo;
 import android.database.Cursor;
 import android.database.DatabaseUtils.InsertHelper;
 import android.database.sqlite.SQLiteDatabase;
@@ -37,17 +34,15 @@
 import android.provider.VoicemailContract.Status;
 import android.provider.VoicemailContract.Voicemails;
 import android.util.ArraySet;
-import android.util.Log;
 
 import com.android.common.io.MoreCloseables;
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.providers.contacts.CallLogDatabaseHelper.Tables;
 import com.android.providers.contacts.util.DbQueryUtils;
 
 import com.google.android.collect.Lists;
 import com.google.common.collect.Iterables;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
 import java.util.Set;
 
 /**
@@ -57,6 +52,7 @@
  * of then got affected by the change.
  */
 public class DbModifierWithNotification implements DatabaseModifier {
+
     private static final String TAG = "DbModifierWithNotify";
 
     private static final String[] PROJECTION = new String[] {
@@ -73,8 +69,11 @@
     private final Context mContext;
     private final Uri mBaseUri;
     private final boolean mIsCallsTable;
-    private final VoicemailPermissions mVoicemailPermissions;
+    private final VoicemailNotifier mVoicemailNotifier;
 
+    private boolean mIsBulkOperation = false;
+
+    private static VoicemailNotifier sVoicemailNotifierForTest;
 
     public DbModifierWithNotification(String tableName, SQLiteDatabase db, Context context) {
         this(tableName, db, null, context);
@@ -94,7 +93,8 @@
         mBaseUri = mTableName.equals(Tables.VOICEMAIL_STATUS) ?
                 Status.CONTENT_URI : Voicemails.CONTENT_URI;
         mIsCallsTable = mTableName.equals(Tables.CALLS);
-        mVoicemailPermissions = new VoicemailPermissions(mContext);
+        mVoicemailNotifier = sVoicemailNotifierForTest != null ? sVoicemailNotifierForTest
+                : new VoicemailNotifier(mContext, mBaseUri);
     }
 
     @Override
@@ -143,13 +143,21 @@
         }
     }
 
-    private void notifyVoicemailChangeOnInsert(Uri notificationUri, Set<String> packagesModified) {
+    private void notifyVoicemailChangeOnInsert(
+            Uri notificationUri, Set<String> packagesModified) {
         if (mIsCallsTable) {
-            notifyVoicemailChange(notificationUri, packagesModified,
-                    VoicemailContract.ACTION_NEW_VOICEMAIL, Intent.ACTION_PROVIDER_CHANGED);
-        } else {
-            notifyVoicemailChange(notificationUri, packagesModified,
-                    Intent.ACTION_PROVIDER_CHANGED);
+            mVoicemailNotifier.addIntentActions(VoicemailContract.ACTION_NEW_VOICEMAIL);
+        }
+        notifyVoicemailChange(notificationUri, packagesModified);
+    }
+
+    private void notifyVoicemailChange(Uri notificationUri,
+            Set<String> modifiedPackages) {
+        mVoicemailNotifier.addUri(notificationUri);
+        mVoicemailNotifier.addModifiedPackages(modifiedPackages);
+        mVoicemailNotifier.addIntentActions(Intent.ACTION_PROVIDER_CHANGED);
+        if (!mIsBulkOperation) {
+            mVoicemailNotifier.sendNotification();
         }
     }
 
@@ -197,7 +205,7 @@
 
         int count = mDb.update(table, values, whereClause, whereArgs);
         if (count > 0 && isVoicemail) {
-            notifyVoicemailChange(mBaseUri, packagesModified, Intent.ACTION_PROVIDER_CHANGED);
+            notifyVoicemailChange(mBaseUri, packagesModified);
         }
         if (count > 0 && mIsCallsTable) {
             notifyCallLogChange();
@@ -247,7 +255,7 @@
         }
 
         if (count > 0 && isVoicemail) {
-            notifyVoicemailChange(mBaseUri, packagesModified, Intent.ACTION_PROVIDER_CHANGED);
+            notifyVoicemailChange(mBaseUri, packagesModified);
         }
         if (count > 0 && mIsCallsTable) {
             notifyCallLogChange();
@@ -255,6 +263,25 @@
         return count;
     }
 
+    @Override
+    public void startBulkOperation() {
+        mIsBulkOperation = true;
+        mDb.beginTransaction();
+    }
+
+    @Override
+    public void yieldBulkOperation() {
+        mDb.yieldIfContendedSafely();
+    }
+
+    @Override
+    public void finishBulkOperation() {
+        mDb.setTransactionSuccessful();
+        mDb.endTransaction();
+        mIsBulkOperation = false;
+        mVoicemailNotifier.sendNotification();
+    }
+
     /**
      * Returns the set of packages affected when a modify operation is run for the specified
      * where clause. When called from an insert operation an empty set returned by this method
@@ -266,7 +293,7 @@
         Cursor cursor = mDb.query(mTableName, PROJECTION,
                 DbQueryUtils.concatenateClauses(NON_NULL_SOURCE_PACKAGE_SELECTION, whereClause),
                 whereArgs, null, null, null);
-        while(cursor.moveToNext()) {
+        while (cursor.moveToNext()) {
             modifiedPackages.add(cursor.getString(SOURCE_PACKAGE_COLUMN_INDEX));
         }
         MoreCloseables.closeQuietly(cursor);
@@ -281,7 +308,7 @@
      */
     private Set<String> getModifiedPackages(ContentValues values) {
         Set<String> impactedPackages = new ArraySet<>();
-        if(values.containsKey(VoicemailContract.SOURCE_PACKAGE_FIELD)) {
+        if (values.containsKey(VoicemailContract.SOURCE_PACKAGE_FIELD)) {
             impactedPackages.add(values.getAsString(VoicemailContract.SOURCE_PACKAGE_FIELD));
         }
         return impactedPackages;
@@ -304,58 +331,6 @@
                         || callingPackages.contains(mContext.getPackageName()));
     }
 
-    private void notifyVoicemailChange(Uri notificationUri, Set<String> modifiedPackages,
-            String... intentActions) {
-        // Notify the observers.
-        // Must be done only once, even if there are multiple broadcast intents.
-        mContext.getContentResolver().notifyChange(notificationUri, null, true);
-        Collection<String> callingPackages = getCallingPackages();
-        // Now fire individual intents.
-        for (String intentAction : intentActions) {
-            // self_change extra should be included only for provider_changed events.
-            boolean includeSelfChangeExtra = intentAction.equals(Intent.ACTION_PROVIDER_CHANGED);
-            for (ComponentName component :
-                    getBroadcastReceiverComponents(intentAction, notificationUri)) {
-                // Ignore any package that is not affected by the change and don't have full access
-                // either.
-                if (!modifiedPackages.contains(component.getPackageName()) &&
-                        !mVoicemailPermissions.packageHasReadAccess(
-                                component.getPackageName())) {
-                    continue;
-                }
-
-                Intent intent = new Intent(intentAction, notificationUri);
-                intent.setComponent(component);
-                if (includeSelfChangeExtra && callingPackages != null) {
-                    intent.putExtra(VoicemailContract.EXTRA_SELF_CHANGE,
-                            callingPackages.contains(component.getPackageName()));
-                }
-                String permissionNeeded = modifiedPackages.contains(component.getPackageName()) ?
-                        ADD_VOICEMAIL : READ_VOICEMAIL;
-                mContext.sendBroadcast(intent, permissionNeeded);
-                Log.v(TAG, String.format("Sent intent. act:%s, url:%s, comp:%s, perm:%s," +
-                        " self_change:%s", intent.getAction(), intent.getData(),
-                        component.getClassName(), permissionNeeded,
-                        intent.hasExtra(VoicemailContract.EXTRA_SELF_CHANGE) ?
-                                intent.getBooleanExtra(VoicemailContract.EXTRA_SELF_CHANGE, false) :
-                                        null));
-            }
-        }
-    }
-
-    /** Determines the components that can possibly receive the specified intent. */
-    private List<ComponentName> getBroadcastReceiverComponents(String intentAction, Uri uri) {
-        Intent intent = new Intent(intentAction, uri);
-        List<ComponentName> receiverComponents = new ArrayList<ComponentName>();
-        // For broadcast receivers ResolveInfo.activityInfo is the one that is populated.
-        for (ResolveInfo resolveInfo :
-                mContext.getPackageManager().queryBroadcastReceivers(intent, 0)) {
-            ActivityInfo activityInfo = resolveInfo.activityInfo;
-            receiverComponents.add(new ComponentName(activityInfo.packageName, activityInfo.name));
-        }
-        return receiverComponents;
-    }
-
     /**
      * Returns the package names of the calling process. If the calling process has more than
      * one packages, this returns them all
@@ -393,4 +368,9 @@
         }
         return CallLogProvider.getTimeForTestMillis();
     }
+
+    @VisibleForTesting
+    static void setVoicemailNotifierForTest(VoicemailNotifier notifier){
+        sVoicemailNotifierForTest = notifier;
+    }
 }
diff --git a/src/com/android/providers/contacts/VoicemailContentProvider.java b/src/com/android/providers/contacts/VoicemailContentProvider.java
index 160a1a9..01c1048 100644
--- a/src/com/android/providers/contacts/VoicemailContentProvider.java
+++ b/src/com/android/providers/contacts/VoicemailContentProvider.java
@@ -20,6 +20,7 @@
 import static com.android.providers.contacts.util.DbQueryUtils.concatenateClauses;
 import static com.android.providers.contacts.util.DbQueryUtils.getEqualityClause;
 
+import android.annotation.NonNull;
 import android.app.AppOpsManager;
 import android.content.ContentProvider;
 import android.content.ContentResolver;
@@ -157,6 +158,12 @@
     }
 
     @Override
+    public int bulkInsert(@NonNull Uri uri, @NonNull ContentValues[] values) {
+        UriData uriData = checkPermissionsAndCreateUriDataForWrite(uri, values);
+        return getTableDelegate(uriData).bulkInsert(uriData, values);
+    }
+
+    @Override
     public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
             String sortOrder) {
         if (VERBOSE_LOGGING) {
diff --git a/src/com/android/providers/contacts/VoicemailContentTable.java b/src/com/android/providers/contacts/VoicemailContentTable.java
index 09a8c1f..b295ac5 100644
--- a/src/com/android/providers/contacts/VoicemailContentTable.java
+++ b/src/com/android/providers/contacts/VoicemailContentTable.java
@@ -39,7 +39,6 @@
 import com.android.providers.contacts.util.CloseUtils;
 
 import com.google.common.collect.ImmutableSet;
-
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -52,10 +51,12 @@
     private static final String TAG = "VmContentProvider";
     private final ProjectionMap mVoicemailProjectionMap;
 
-    /** The private directory in which to store the data associated with the voicemail. */
+    /**
+     * The private directory in which to store the data associated with the voicemail.
+     */
     private static final String DATA_DIRECTORY = "voicemail-data";
 
-    private static final String[] FILENAME_ONLY_PROJECTION = new String[] { Voicemails._DATA };
+    private static final String[] FILENAME_ONLY_PROJECTION = new String[] {Voicemails._DATA};
 
     private static final ImmutableSet<String> ALLOWED_COLUMNS = new ImmutableSet.Builder<String>()
             .add(Voicemails._ID)
@@ -83,6 +84,8 @@
             .add(OpenableColumns.SIZE)
             .build();
 
+    private static final int BULK_INSERTS_PER_YIELD_POINT = 50;
+
     private final String mTableName;
     private final CallLogDatabaseHelper mDbHelper;
     private final Context mContext;
@@ -138,6 +141,30 @@
 
     @Override
     public Uri insert(UriData uriData, ContentValues values) {
+        DatabaseModifier modifier = createDatabaseModifier(mDbHelper.getWritableDatabase());
+        Uri uri = insertRow(modifier, uriData, values);
+        return uri;
+    }
+
+    @Override
+    public int bulkInsert(UriData uriData, ContentValues[] values) {
+        DatabaseModifier modifier = createDatabaseModifier(mDbHelper.getWritableDatabase());
+        modifier.startBulkOperation();
+        int count = 0;
+        for (ContentValues value : values) {
+            Uri uri = insertRow(modifier, uriData, value);
+            if (uri != null) {
+                count++;
+            }
+            if((count % BULK_INSERTS_PER_YIELD_POINT) == 0){
+                modifier.yieldBulkOperation();
+            }
+        }
+        modifier.finishBulkOperation();
+        return count;
+    }
+
+    private Uri insertRow(DatabaseModifier modifier, UriData uriData, ContentValues values) {
         checkForSupportedColumns(mVoicemailProjectionMap, values);
         ContentValues copiedValues = new ContentValues(values);
         checkInsertSupported(uriData);
@@ -160,7 +187,7 @@
         }
 
         SQLiteDatabase db = mDbHelper.getWritableDatabase();
-        long rowId = getDatabaseModifier(db).insert(mTableName, null, copiedValues);
+        long rowId = modifier.insert(mTableName, null, copiedValues);
         if (rowId > 0) {
             Uri newUri = ContentUris.withAppendedId(uriData.getUri(), rowId);
             // Populate the 'voicemail_uri' field to be used by the call_log provider.
@@ -228,7 +255,7 @@
         }
 
         // Now delete the rows themselves.
-        return getDatabaseModifier(db).delete(mTableName, combinedClause,
+        return createDatabaseModifier(db).delete(mTableName, combinedClause,
                 selectionArgs);
     }
 
@@ -262,7 +289,7 @@
         // URI that include message Id. I think we do want to support bulk update.
         String combinedClause = concatenateClauses(selection, uriData.getWhereClause(),
                 getCallTypeClause());
-        return getDatabaseModifier(db).update(uriData.getUri(), mTableName, values, combinedClause,
+        return createDatabaseModifier(db).update(uriData.getUri(), mTableName, values, combinedClause,
                 selectionArgs);
     }
 
@@ -298,7 +325,7 @@
         return getEqualityClause(Calls.TYPE, Calls.VOICEMAIL_TYPE);
     }
 
-    private DatabaseModifier getDatabaseModifier(SQLiteDatabase db) {
+    private DatabaseModifier createDatabaseModifier(SQLiteDatabase db) {
         return new DbModifierWithNotification(mTableName, db, mContext);
     }
 
diff --git a/src/com/android/providers/contacts/VoicemailNotifier.java b/src/com/android/providers/contacts/VoicemailNotifier.java
new file mode 100644
index 0000000..04a9bd6
--- /dev/null
+++ b/src/com/android/providers/contacts/VoicemailNotifier.java
@@ -0,0 +1,127 @@
+package com.android.providers.contacts;
+
+import static android.Manifest.permission.ADD_VOICEMAIL;
+import static android.Manifest.permission.READ_VOICEMAIL;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.ActivityInfo;
+import android.content.pm.ResolveInfo;
+import android.net.Uri;
+import android.os.Binder;
+import android.provider.VoicemailContract;
+import android.util.ArraySet;
+import android.util.Log;
+
+import com.google.android.collect.Lists;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Aggregates voicemail broadcasts from multiple operations in to a single one. The URIs will be
+ * {@link VoicemailContract.Voicemails#DIR_TYPE} instead of {@link
+ * VoicemailContract.Voicemails#ITEM_TYPE} if multiple URIs is notified.
+ */
+public class VoicemailNotifier {
+
+    private final String TAG = "VoicemailNotifier";
+
+    private final Context mContext;
+    private final Uri mBaseUri;
+
+    private final VoicemailPermissions mVoicemailPermissions;
+
+    private final Set<String> mIntentActions = new ArraySet<>();
+    private final Set<String> mModifiedPackages = new ArraySet<>();
+    private final Set<Uri> mUris = new ArraySet<>();
+
+    public VoicemailNotifier(Context context, Uri baseUri) {
+        mContext = context;
+        mBaseUri = baseUri;
+        mVoicemailPermissions = new VoicemailPermissions(mContext);
+    }
+
+    public void addIntentActions(String action) {
+        mIntentActions.add(action);
+    }
+
+    public void addModifiedPackages(Collection<String> packages) {
+        mModifiedPackages.addAll(packages);
+    }
+
+    public void addUri(Uri uri) {
+        mUris.add(uri);
+    }
+
+    public void sendNotification() {
+        Uri uri = mUris.size() == 1 ? mUris.iterator().next() : mBaseUri;
+        mContext.getContentResolver().notifyChange(uri, null, true);
+        Collection<String> callingPackages = getCallingPackages();
+        // Now fire individual intents.
+        for (String intentAction : mIntentActions) {
+            // self_change extra should be included only for provider_changed events.
+            boolean includeSelfChangeExtra = intentAction.equals(Intent.ACTION_PROVIDER_CHANGED);
+            Log.i(TAG, "receivers for " + intentAction + " :" + getBroadcastReceiverComponents(
+                    intentAction, uri));
+            for (ComponentName component :
+                    getBroadcastReceiverComponents(intentAction, uri)) {
+                // Ignore any package that is not affected by the change and don't have full access
+                // either.
+                if (!mModifiedPackages.contains(component.getPackageName()) &&
+                        !mVoicemailPermissions.packageHasReadAccess(
+                                component.getPackageName())) {
+                    continue;
+                }
+
+                Intent intent = new Intent(intentAction, uri);
+                intent.setComponent(component);
+                if (includeSelfChangeExtra && callingPackages != null) {
+                    intent.putExtra(VoicemailContract.EXTRA_SELF_CHANGE,
+                            callingPackages.contains(component.getPackageName()));
+                }
+                String permissionNeeded = mModifiedPackages.contains(component.getPackageName()) ?
+                        ADD_VOICEMAIL : READ_VOICEMAIL;
+                mContext.sendBroadcast(intent, permissionNeeded);
+                Log.v(TAG, String.format("Sent intent. act:%s, url:%s, comp:%s, perm:%s," +
+                                " self_change:%s", intent.getAction(), intent.getData(),
+                        component.getClassName(), permissionNeeded,
+                        intent.hasExtra(VoicemailContract.EXTRA_SELF_CHANGE) ?
+                                intent.getBooleanExtra(VoicemailContract.EXTRA_SELF_CHANGE, false) :
+                                null));
+            }
+        }
+        mIntentActions.clear();
+        mModifiedPackages.clear();
+        mUris.clear();
+    }
+
+    /**
+     * Returns the package names of the calling process. If the calling process has more than
+     * one packages, this returns them all
+     */
+    private Collection<String> getCallingPackages() {
+        int caller = Binder.getCallingUid();
+        if (caller == 0) {
+            return null;
+        }
+        return Lists.newArrayList(mContext.getPackageManager().getPackagesForUid(caller));
+    }
+
+    /**
+     * Determines the components that can possibly receive the specified intent.
+     */
+    private List<ComponentName> getBroadcastReceiverComponents(String intentAction, Uri uri) {
+        Intent intent = new Intent(intentAction, uri);
+        List<ComponentName> receiverComponents = new ArrayList<ComponentName>();
+        // For broadcast receivers ResolveInfo.activityInfo is the one that is populated.
+        for (ResolveInfo resolveInfo :
+                mContext.getPackageManager().queryBroadcastReceivers(intent, 0)) {
+            ActivityInfo activityInfo = resolveInfo.activityInfo;
+            receiverComponents.add(new ComponentName(activityInfo.packageName, activityInfo.name));
+        }
+        return receiverComponents;
+    }
+}
diff --git a/src/com/android/providers/contacts/VoicemailStatusTable.java b/src/com/android/providers/contacts/VoicemailStatusTable.java
index f3008c0..5b03c8a 100644
--- a/src/com/android/providers/contacts/VoicemailStatusTable.java
+++ b/src/com/android/providers/contacts/VoicemailStatusTable.java
@@ -32,8 +32,6 @@
 import com.android.common.content.ProjectionMap;
 import com.android.providers.contacts.VoicemailContentProvider.UriData;
 
-import java.util.Set;
-
 /**
  * Implementation of {@link VoicemailTable.Delegate} for the voicemail status table.
  *
@@ -78,7 +76,7 @@
             SQLiteDatabase db = mDbHelper.getWritableDatabase();
             // Try to update before insert.
             String combinedClause = uriData.getWhereClause();
-            int rowsChanged = getDatabaseModifier(db)
+            int rowsChanged = createDatabaseModifier(db)
                     .update(uriData.getUri(), mTableName, values, combinedClause, null);
             if (rowsChanged != 0) {
                 final String[] selection = new String[] {Status._ID};
@@ -90,7 +88,7 @@
             }
             ContentValues copiedValues = new ContentValues(values);
             mDelegateHelper.checkAndAddSourcePackageIntoValues(uriData, copiedValues);
-            long rowId = getDatabaseModifier(db).insert(mTableName, null, copiedValues);
+            long rowId = createDatabaseModifier(db).insert(mTableName, null, copiedValues);
             if (rowId > 0) {
                 return ContentUris.withAppendedId(uriData.getUri(), rowId);
             } else {
@@ -100,11 +98,23 @@
     }
 
     @Override
+    public int bulkInsert(UriData uriData, ContentValues[] values) {
+        int count = 0;
+        for (ContentValues value : values) {
+            Uri uri = insert(uriData, value);
+            if (uri != null) {
+                count++;
+            }
+        }
+        return count;
+    }
+
+    @Override
     public int delete(UriData uriData, String selection, String[] selectionArgs) {
         synchronized (DATABASE_LOCK) {
             SQLiteDatabase db = mDbHelper.getWritableDatabase();
             String combinedClause = concatenateClauses(selection, uriData.getWhereClause());
-            return getDatabaseModifier(db).delete(mTableName, combinedClause,
+            return createDatabaseModifier(db).delete(mTableName, combinedClause,
                     selectionArgs);
         }
     }
@@ -135,7 +145,7 @@
         synchronized (DATABASE_LOCK) {
             SQLiteDatabase db = mDbHelper.getWritableDatabase();
             String combinedClause = concatenateClauses(selection, uriData.getWhereClause());
-            return getDatabaseModifier(db)
+            return createDatabaseModifier(db)
                     .update(uriData.getUri(), mTableName, values, combinedClause, selectionArgs);
         }
     }
@@ -154,7 +164,7 @@
         throw new UnsupportedOperationException("File operation is not supported for status table");
     }
 
-    private DatabaseModifier getDatabaseModifier(SQLiteDatabase db) {
+    private DatabaseModifier createDatabaseModifier(SQLiteDatabase db) {
         return new DbModifierWithNotification(mTableName, db, mContext);
     }
 
diff --git a/src/com/android/providers/contacts/VoicemailTable.java b/src/com/android/providers/contacts/VoicemailTable.java
index fcb653c..f71b50d 100644
--- a/src/com/android/providers/contacts/VoicemailTable.java
+++ b/src/com/android/providers/contacts/VoicemailTable.java
@@ -46,6 +46,8 @@
         public ParcelFileDescriptor openFile(UriData uriData, String mode)
                 throws FileNotFoundException;
         public ArraySet<String> getSourcePackages();
+
+        int bulkInsert(UriData uriData, ContentValues[] values);
     }
 
     /**
diff --git a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
index 8930338..23b42da 100644
--- a/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
+++ b/tests/src/com/android/providers/contacts/ContactsProvider2Test.java
@@ -7021,7 +7021,6 @@
         values.put(ContactsContract.RawContacts.SEND_TO_VOICEMAIL, 1);
         values.put(ContactsContract.RawContacts.AGGREGATION_MODE,
                 RawContacts.AGGREGATION_MODE_IMMEDIATE);
-        values.put(ContactsContract.RawContacts.STARRED, 1);
         assertEquals(1, mResolver.update(uri, values, null, null));
         assertEquals(version, getVersion(uri));
 
@@ -7872,6 +7871,11 @@
         Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, contactId);
         assertStoredValue(contactUri, Contacts.STARRED, "0");
 
+        assertDirty(rawContactUri1, true);
+        assertDirty(rawContactUri2, true);
+        clearDirty(rawContactUri1);
+        clearDirty(rawContactUri2);
+
         ContentValues values = new ContentValues();
         values.put(RawContacts.STARRED, "1");
 
@@ -7880,20 +7884,41 @@
         assertStoredValue(rawContactUri1, RawContacts.STARRED, "1");
         assertStoredValue(rawContactUri2, RawContacts.STARRED, "0");
         assertStoredValue(contactUri, Contacts.STARRED, "1");
+        assertDirty(rawContactUri1, true);
+        assertNetworkNotified(true);
 
+        clearDirty(rawContactUri1);
         values.put(RawContacts.STARRED, "0");
         mResolver.update(rawContactUri1, values, null, null);
 
         assertStoredValue(rawContactUri1, RawContacts.STARRED, "0");
         assertStoredValue(rawContactUri2, RawContacts.STARRED, "0");
         assertStoredValue(contactUri, Contacts.STARRED, "0");
+        assertDirty(rawContactUri1, true);
+        assertNetworkNotified(true);
 
+        clearDirty(rawContactUri1);
         values.put(Contacts.STARRED, "1");
         mResolver.update(contactUri, values, null, null);
 
         assertStoredValue(rawContactUri1, RawContacts.STARRED, "1");
         assertStoredValue(rawContactUri2, RawContacts.STARRED, "1");
         assertStoredValue(contactUri, Contacts.STARRED, "1");
+        assertDirty(rawContactUri1, true);
+        assertNetworkNotified(true);
+    }
+
+    public void testUpdateContactOptionsSetStarred() {
+        long rawContactId = RawContactUtil.createRawContact(mResolver);
+        long contactId = queryContactId(rawContactId);
+        String lookupKey = queryLookupKey(contactId);
+        ContentValues values =new ContentValues();
+        values.put(Contacts.STARRED, 1);
+
+        Uri contactLookupUri = ContentUris.withAppendedId(
+            Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey), contactId);
+        mResolver.update(contactLookupUri, values, null, null);
+        assertNetworkNotified(true);
     }
 
     public void testSetAndClearSuperPrimaryEmail() {
diff --git a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
index 4fa935f..1cd6646 100644
--- a/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
+++ b/tests/src/com/android/providers/contacts/VoicemailProviderTest.java
@@ -20,7 +20,6 @@
 import android.content.ContentValues;
 import android.database.Cursor;
 import android.net.Uri;
-import android.os.BatteryStats.Uid.Proc;
 import android.os.ParcelFileDescriptor;
 import android.os.Process;
 import android.provider.CallLog;
@@ -32,6 +31,7 @@
 import android.test.suitebuilder.annotation.SmallTest;
 
 import com.android.common.io.MoreCloseables;
+import org.mockito.Mockito;
 
 import java.io.FileNotFoundException;
 import java.io.IOException;
@@ -40,6 +40,9 @@
 import java.util.Arrays;
 import java.util.List;
 
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.mock;
+
 /**
  * Unit tests for {@link VoicemailContentProvider}.
  *
@@ -51,7 +54,12 @@
 // TODO: Test that calltype and voicemail_uri are auto populated by the provider.
 @SmallTest
 public class VoicemailProviderTest extends BaseVoicemailProviderTest {
-    /** Fields specific to call_log provider that should not be exposed by voicemail provider. */
+
+    private static final String SYSTEM_PROPERTY_DEXMAKER_DEXCACHE = "dexmaker.dexcache";
+
+    /**
+     * Fields specific to call_log provider that should not be exposed by voicemail provider.
+     */
     private static final String[] CALLLOG_PROVIDER_SPECIFIC_COLUMNS = {
             Calls.CACHED_NAME,
             Calls.CACHED_NUMBER_LABEL,
@@ -60,23 +68,37 @@
             Calls.VOICEMAIL_URI,
             Calls.COUNTRY_ISO
     };
-    /** Total number of columns exposed by voicemail provider. */
+    /**
+     * Total number of columns exposed by voicemail provider.
+     */
     private static final int NUM_VOICEMAIL_FIELDS = 24;
 
     @Override
     protected void setUp() throws Exception {
         super.setUp();
         setUpForOwnPermission();
+        System.setProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE, getContext().getCacheDir().getPath());
+        Thread.currentThread().setContextClassLoader(VoicemailContentProvider.class.getClassLoader());
         addProvider(CallLogProviderTestable.class, CallLog.AUTHORITY);
     }
 
-    /** Returns the appropriate /voicemail URI. */
+    @Override
+    protected  void tearDown() throws Exception {
+        System.clearProperty(SYSTEM_PROPERTY_DEXMAKER_DEXCACHE);
+        DbModifierWithNotification.setVoicemailNotifierForTest(null);
+    }
+
+    /**
+     * Returns the appropriate /voicemail URI.
+     */
     private Uri voicemailUri() {
         return mUseSourceUri ?
                 Voicemails.buildSourceUri(mActor.packageName) : Voicemails.CONTENT_URI;
     }
 
-    /** Returns the appropriate /status URI. */
+    /**
+     * Returns the appropriate /status URI.
+     */
     private Uri statusUri() {
         return mUseSourceUri ?
                 Status.buildSourceUri(mActor.packageName) : Status.CONTENT_URI;
@@ -118,6 +140,14 @@
         }
     }
 
+    public void testBulkInsert() {
+        VoicemailNotifier notifier = mock(VoicemailNotifier.class);
+        DbModifierWithNotification.setVoicemailNotifierForTest(notifier);
+        mResolver.bulkInsert(voicemailUri(),
+                new ContentValues[] {getTestVoicemailValues(), getTestVoicemailValues()});
+        verify(notifier, Mockito.times(1)).sendNotification();
+    }
+
     // Test to ensure that media content can be written and read back.
     public void testFileContent() throws Exception {
         Uri uri = insertVoicemail();
