Merge change I2a7e4e10 into eclair

* changes:
  Make secondary edit entries unvisible if no data kind for it.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 67a55c0..d63da99 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -261,11 +261,11 @@
             </intent-filter>
         </activity>
 
-        <!-- Used to show FastTrack window over a translucent activity, which is a
+        <!-- Used to show QuickContact window over a translucent activity, which is a
              temporary hack until we add better framework support. -->
         <activity
-            android:name=".ui.FastTrackActivity"
-            android:theme="@style/FullyTranslucent.FastTrack">
+            android:name=".ui.QuickContactActivity"
+            android:theme="@style/FullyTranslucent.QuickContact">
 
             <intent-filter>
                 <action android:name="com.android.contacts.action.FAST_TRACK" />
diff --git a/res/anim/fasttrack.xml b/res/anim/quickcontact.xml
similarity index 100%
rename from res/anim/fasttrack.xml
rename to res/anim/quickcontact.xml
diff --git a/res/anim/fasttrack_above_enter.xml b/res/anim/quickcontact_above_enter.xml
similarity index 100%
rename from res/anim/fasttrack_above_enter.xml
rename to res/anim/quickcontact_above_enter.xml
diff --git a/res/anim/fasttrack_above_exit.xml b/res/anim/quickcontact_above_exit.xml
similarity index 100%
rename from res/anim/fasttrack_above_exit.xml
rename to res/anim/quickcontact_above_exit.xml
diff --git a/res/anim/fasttrack_below_enter.xml b/res/anim/quickcontact_below_enter.xml
similarity index 100%
rename from res/anim/fasttrack_below_enter.xml
rename to res/anim/quickcontact_below_enter.xml
diff --git a/res/anim/fasttrack_below_exit.xml b/res/anim/quickcontact_below_exit.xml
similarity index 100%
rename from res/anim/fasttrack_below_exit.xml
rename to res/anim/quickcontact_below_exit.xml
diff --git a/res/drawable-finger/fasttrack_disambig_checkbox.xml b/res/drawable-finger/quickcontact_disambig_checkbox.xml
similarity index 84%
rename from res/drawable-finger/fasttrack_disambig_checkbox.xml
rename to res/drawable-finger/quickcontact_disambig_checkbox.xml
index 0bd2030..4add69c 100644
--- a/res/drawable-finger/fasttrack_disambig_checkbox.xml
+++ b/res/drawable-finger/quickcontact_disambig_checkbox.xml
@@ -18,8 +18,8 @@
     android:dither="true">
 
     <item android:state_checked="true"
-        android:drawable="@drawable/fasttrack_disambig_checkbox_on" />
+        android:drawable="@drawable/quickcontact_disambig_checkbox_on" />
     <item
-        android:drawable="@drawable/fasttrack_disambig_checkbox_off" />
+        android:drawable="@drawable/quickcontact_disambig_checkbox_off" />
 
 </selector>
diff --git a/res/drawable-finger/fasttrack_slider_btn.xml b/res/drawable-finger/quickcontact_slider_btn.xml
similarity index 72%
rename from res/drawable-finger/fasttrack_slider_btn.xml
rename to res/drawable-finger/quickcontact_slider_btn.xml
index b89a543..a1be8f4 100644
--- a/res/drawable-finger/fasttrack_slider_btn.xml
+++ b/res/drawable-finger/quickcontact_slider_btn.xml
@@ -18,14 +18,14 @@
     android:dither="true">
 
     <item android:state_checked="true"
-        android:drawable="@drawable/fasttrack_slider_btn_on" />
+        android:drawable="@drawable/quickcontact_slider_btn_on" />
     <item android:state_window_focused="false"
-        android:drawable="@drawable/fasttrack_slider_btn_normal" />
+        android:drawable="@drawable/quickcontact_slider_btn_normal" />
     <item android:state_pressed="true"
-        android:drawable="@drawable/fasttrack_slider_btn_pressed" />
+        android:drawable="@drawable/quickcontact_slider_btn_pressed" />
     <item android:state_focused="true"
-        android:drawable="@drawable/fasttrack_slider_btn_selected" />
+        android:drawable="@drawable/quickcontact_slider_btn_selected" />
     <item
-        android:drawable="@drawable/fasttrack_slider_btn_normal" />
+        android:drawable="@drawable/quickcontact_slider_btn_normal" />
 
 </selector>
diff --git a/res/drawable-hdpi-finger/fasttrack_arrow_down.png b/res/drawable-hdpi-finger/quickcontact_arrow_down.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_arrow_down.png
rename to res/drawable-hdpi-finger/quickcontact_arrow_down.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_arrow_up.png b/res/drawable-hdpi-finger/quickcontact_arrow_up.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_arrow_up.png
rename to res/drawable-hdpi-finger/quickcontact_arrow_up.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_bottom_frame.9.png b/res/drawable-hdpi-finger/quickcontact_bottom_frame.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_bottom_frame.9.png
rename to res/drawable-hdpi-finger/quickcontact_bottom_frame.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_disambig_bottom_bg.9.png b/res/drawable-hdpi-finger/quickcontact_disambig_bottom_bg.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_disambig_bottom_bg.9.png
rename to res/drawable-hdpi-finger/quickcontact_disambig_bottom_bg.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_disambig_checkbox_off.png b/res/drawable-hdpi-finger/quickcontact_disambig_checkbox_off.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_disambig_checkbox_off.png
rename to res/drawable-hdpi-finger/quickcontact_disambig_checkbox_off.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_disambig_checkbox_on.png b/res/drawable-hdpi-finger/quickcontact_disambig_checkbox_on.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_disambig_checkbox_on.png
rename to res/drawable-hdpi-finger/quickcontact_disambig_checkbox_on.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_disambig_divider.9.png b/res/drawable-hdpi-finger/quickcontact_disambig_divider.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_disambig_divider.9.png
rename to res/drawable-hdpi-finger/quickcontact_disambig_divider.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_drop_shadow.9.png b/res/drawable-hdpi-finger/quickcontact_drop_shadow.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_drop_shadow.9.png
rename to res/drawable-hdpi-finger/quickcontact_drop_shadow.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_frame_divider_med.png b/res/drawable-hdpi-finger/quickcontact_frame_divider_med.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_frame_divider_med.png
rename to res/drawable-hdpi-finger/quickcontact_frame_divider_med.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_background.png b/res/drawable-hdpi-finger/quickcontact_slider_background.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_background.png
rename to res/drawable-hdpi-finger/quickcontact_slider_background.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_btn_normal.9.png b/res/drawable-hdpi-finger/quickcontact_slider_btn_normal.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_btn_normal.9.png
rename to res/drawable-hdpi-finger/quickcontact_slider_btn_normal.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_btn_on.9.png b/res/drawable-hdpi-finger/quickcontact_slider_btn_on.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_btn_on.9.png
rename to res/drawable-hdpi-finger/quickcontact_slider_btn_on.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_btn_pressed.9.png b/res/drawable-hdpi-finger/quickcontact_slider_btn_pressed.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_btn_pressed.9.png
rename to res/drawable-hdpi-finger/quickcontact_slider_btn_pressed.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_btn_selected.9.png b/res/drawable-hdpi-finger/quickcontact_slider_btn_selected.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_btn_selected.9.png
rename to res/drawable-hdpi-finger/quickcontact_slider_btn_selected.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_grip_left.png b/res/drawable-hdpi-finger/quickcontact_slider_grip_left.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_grip_left.png
rename to res/drawable-hdpi-finger/quickcontact_slider_grip_left.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_grip_right.png b/res/drawable-hdpi-finger/quickcontact_slider_grip_right.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_grip_right.png
rename to res/drawable-hdpi-finger/quickcontact_slider_grip_right.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_presence_active.png b/res/drawable-hdpi-finger/quickcontact_slider_presence_active.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_presence_active.png
rename to res/drawable-hdpi-finger/quickcontact_slider_presence_active.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_presence_away.png b/res/drawable-hdpi-finger/quickcontact_slider_presence_away.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_presence_away.png
rename to res/drawable-hdpi-finger/quickcontact_slider_presence_away.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_presence_busy.png b/res/drawable-hdpi-finger/quickcontact_slider_presence_busy.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_presence_busy.png
rename to res/drawable-hdpi-finger/quickcontact_slider_presence_busy.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_slider_presence_inactive.png b/res/drawable-hdpi-finger/quickcontact_slider_presence_inactive.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_slider_presence_inactive.png
rename to res/drawable-hdpi-finger/quickcontact_slider_presence_inactive.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/fasttrack_top_frame.9.png b/res/drawable-hdpi-finger/quickcontact_top_frame.9.png
similarity index 100%
rename from res/drawable-hdpi-finger/fasttrack_top_frame.9.png
rename to res/drawable-hdpi-finger/quickcontact_top_frame.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_arrow_down.png b/res/drawable-mdpi-finger/quickcontact_arrow_down.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_arrow_down.png
rename to res/drawable-mdpi-finger/quickcontact_arrow_down.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_arrow_up.png b/res/drawable-mdpi-finger/quickcontact_arrow_up.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_arrow_up.png
rename to res/drawable-mdpi-finger/quickcontact_arrow_up.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_bottom_frame.9.png b/res/drawable-mdpi-finger/quickcontact_bottom_frame.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_bottom_frame.9.png
rename to res/drawable-mdpi-finger/quickcontact_bottom_frame.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_disambig_bottom_bg.9.png b/res/drawable-mdpi-finger/quickcontact_disambig_bottom_bg.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_disambig_bottom_bg.9.png
rename to res/drawable-mdpi-finger/quickcontact_disambig_bottom_bg.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_disambig_checkbox_off.png b/res/drawable-mdpi-finger/quickcontact_disambig_checkbox_off.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_disambig_checkbox_off.png
rename to res/drawable-mdpi-finger/quickcontact_disambig_checkbox_off.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_disambig_checkbox_on.png b/res/drawable-mdpi-finger/quickcontact_disambig_checkbox_on.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_disambig_checkbox_on.png
rename to res/drawable-mdpi-finger/quickcontact_disambig_checkbox_on.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_disambig_divider.9.png b/res/drawable-mdpi-finger/quickcontact_disambig_divider.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_disambig_divider.9.png
rename to res/drawable-mdpi-finger/quickcontact_disambig_divider.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_drop_shadow.9.png b/res/drawable-mdpi-finger/quickcontact_drop_shadow.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_drop_shadow.9.png
rename to res/drawable-mdpi-finger/quickcontact_drop_shadow.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_frame_divider_med.png b/res/drawable-mdpi-finger/quickcontact_frame_divider_med.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_frame_divider_med.png
rename to res/drawable-mdpi-finger/quickcontact_frame_divider_med.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_background.png b/res/drawable-mdpi-finger/quickcontact_slider_background.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_background.png
rename to res/drawable-mdpi-finger/quickcontact_slider_background.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_btn_normal.9.png b/res/drawable-mdpi-finger/quickcontact_slider_btn_normal.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_btn_normal.9.png
rename to res/drawable-mdpi-finger/quickcontact_slider_btn_normal.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_btn_on.9.png b/res/drawable-mdpi-finger/quickcontact_slider_btn_on.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_btn_on.9.png
rename to res/drawable-mdpi-finger/quickcontact_slider_btn_on.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_btn_pressed.9.png b/res/drawable-mdpi-finger/quickcontact_slider_btn_pressed.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_btn_pressed.9.png
rename to res/drawable-mdpi-finger/quickcontact_slider_btn_pressed.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_btn_selected.9.png b/res/drawable-mdpi-finger/quickcontact_slider_btn_selected.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_btn_selected.9.png
rename to res/drawable-mdpi-finger/quickcontact_slider_btn_selected.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_grip_left.png b/res/drawable-mdpi-finger/quickcontact_slider_grip_left.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_grip_left.png
rename to res/drawable-mdpi-finger/quickcontact_slider_grip_left.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_grip_right.png b/res/drawable-mdpi-finger/quickcontact_slider_grip_right.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_grip_right.png
rename to res/drawable-mdpi-finger/quickcontact_slider_grip_right.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_presence_active.png b/res/drawable-mdpi-finger/quickcontact_slider_presence_active.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_presence_active.png
rename to res/drawable-mdpi-finger/quickcontact_slider_presence_active.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_presence_away.png b/res/drawable-mdpi-finger/quickcontact_slider_presence_away.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_presence_away.png
rename to res/drawable-mdpi-finger/quickcontact_slider_presence_away.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_presence_busy.png b/res/drawable-mdpi-finger/quickcontact_slider_presence_busy.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_presence_busy.png
rename to res/drawable-mdpi-finger/quickcontact_slider_presence_busy.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_slider_presence_inactive.png b/res/drawable-mdpi-finger/quickcontact_slider_presence_inactive.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_slider_presence_inactive.png
rename to res/drawable-mdpi-finger/quickcontact_slider_presence_inactive.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/fasttrack_top_frame.9.png b/res/drawable-mdpi-finger/quickcontact_top_frame.9.png
similarity index 100%
rename from res/drawable-mdpi-finger/fasttrack_top_frame.9.png
rename to res/drawable-mdpi-finger/quickcontact_top_frame.9.png
Binary files differ
diff --git a/res/drawable/fasttrack.9.png b/res/drawable/quickcontact.9.png
similarity index 100%
rename from res/drawable/fasttrack.9.png
rename to res/drawable/quickcontact.9.png
Binary files differ
diff --git a/res/layout-finger/contacts_list_item.xml b/res/layout-finger/contacts_list_item.xml
index 0e7852e..775e163 100644
--- a/res/layout-finger/contacts_list_item.xml
+++ b/res/layout-finger/contacts_list_item.xml
@@ -58,7 +58,9 @@
                 <View android:id="@+id/divider"
                     android:layout_width="1px"
                     android:layout_height="fill_parent"
-                    android:background="@*android:drawable/divider_vertical_dark_opaque"
+                    android:layout_marginTop="5dip"
+                    android:layout_marginBottom="5dip"
+                    android:background="@drawable/divider_vertical_dark"
                 />
 
                 <com.android.contacts.ui.widget.DontPressWithParentImageView android:id="@+id/call_button"
diff --git a/res/layout-finger/contacts_list_item_photo.xml b/res/layout-finger/contacts_list_item_photo.xml
index b15c586..f387502 100644
--- a/res/layout-finger/contacts_list_item_photo.xml
+++ b/res/layout-finger/contacts_list_item_photo.xml
@@ -30,7 +30,7 @@
     <RelativeLayout
         android:layout_width="fill_parent"
         android:layout_height="?android:attr/listPreferredItemHeight"
-        android:paddingLeft="5dip"
+        android:paddingLeft="4dip"
     >
 
         <LinearLayout android:id="@+id/right_side"
@@ -58,7 +58,9 @@
                 <View android:id="@+id/divider"
                     android:layout_width="1px"
                     android:layout_height="fill_parent"
-                    android:background="@*android:drawable/divider_vertical_dark_opaque"
+                    android:layout_marginTop="5dip"
+                    android:layout_marginBottom="5dip"
+                    android:background="@drawable/divider_vertical_dark"
                 />
 
                 <com.android.contacts.ui.widget.DontPressWithParentImageView android:id="@+id/call_button"
diff --git a/res/layout-finger/list_item_text_icons.xml b/res/layout-finger/list_item_text_icons.xml
index f87aab8..552d28a 100644
--- a/res/layout-finger/list_item_text_icons.xml
+++ b/res/layout-finger/list_item_text_icons.xml
@@ -43,28 +43,28 @@
             android:textAppearance="?android:attr/textAppearanceLarge"
         />
 
-		<LinearLayout
-		    android:layout_width="wrap_content"
-		    android:layout_height="wrap_content"
-		    android:orientation="horizontal"
-		>
-		    
-	        <TextView android:id="@android:id/text2"
-	            android:layout_width="wrap_content"
-	            android:layout_height="wrap_content"
-	            android:layout_gravity="center_vertical"
-	            android:textAppearance="?android:attr/textAppearanceSmall"
-	        />
-	
-	        <ImageView android:id="@+id/primary_icon"
-	            android:layout_width="wrap_content"
-	            android:layout_height="wrap_content"
-	            android:layout_gravity="center_vertical"
-	            android:paddingLeft="3dip"
-	            android:src="@drawable/ic_default_number"
-	        />
-    	</LinearLayout>
-    	
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+        >
+            
+            <TextView android:id="@android:id/text2"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:textAppearance="?android:attr/textAppearanceSmall"
+            />
+    
+            <ImageView android:id="@+id/primary_icon"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_vertical"
+                android:paddingLeft="3dip"
+                android:src="@drawable/ic_default_number"
+            />
+        </LinearLayout>
+        
     </LinearLayout>
 
     <ImageView android:id="@+id/presence_icon"
@@ -85,8 +85,10 @@
     />
     
     <View android:id="@+id/divider"
-        android:layout_width="1dip"
+        android:layout_width="1px"
         android:layout_height="fill_parent"
+        android:layout_marginTop="5dip"
+        android:layout_marginBottom="5dip"
         android:background="@drawable/divider_vertical_dark"
     />
 
diff --git a/res/layout-finger/fasttrack.xml b/res/layout-finger/quickcontact.xml
similarity index 79%
rename from res/layout-finger/fasttrack.xml
rename to res/layout-finger/quickcontact.xml
index 46e5d63..33007f7 100644
--- a/res/layout-finger/fasttrack.xml
+++ b/res/layout-finger/quickcontact.xml
@@ -18,7 +18,7 @@
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
-    android:background="@drawable/fasttrack_drop_shadow">
+    android:background="@drawable/quickcontact_drop_shadow">
 
     <FrameLayout
         android:id="@+id/header"
@@ -31,21 +31,21 @@
             android:inflatedId="@+id/header_small"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:layout="@layout/fasttrack_header_small" />
+            android:layout="@layout/quickcontact_header_small" />
 
         <ViewStub
             android:id="@+id/header_medium"
             android:inflatedId="@+id/header_medium"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:layout="@layout/fasttrack_header_med" />
+            android:layout="@layout/quickcontact_header_med" />
 
         <ViewStub
             android:id="@+id/header_large"
             android:inflatedId="@+id/header_large"
             android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            android:layout="@layout/fasttrack_header_large" />
+            android:layout="@layout/quickcontact_header_large" />
 
     </FrameLayout>
 
@@ -55,11 +55,11 @@
         android:layout_height="wrap_content"
         android:layout_below="@id/header"
         android:fadingEdgeLength="0dip"
-        android:background="@drawable/fasttrack_slider_background"
+        android:background="@drawable/quickcontact_slider_background"
         android:scrollbars="none">
 
         <LinearLayout
-            android:id="@+id/fasttrack"
+            android:id="@+id/quickcontact"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:paddingTop="4dip"
@@ -69,12 +69,12 @@
             <ImageView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:src="@drawable/fasttrack_slider_grip_left" />
+                android:src="@drawable/quickcontact_slider_grip_left" />
 
             <ImageView
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:src="@drawable/fasttrack_slider_grip_right" />
+                android:src="@drawable/quickcontact_slider_grip_right" />
 
         </LinearLayout>
 
@@ -85,14 +85,14 @@
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/scroll"
-        android:background="@drawable/fasttrack_bottom_frame" />
+        android:background="@drawable/quickcontact_bottom_frame" />
 
     <LinearLayout
         android:id="@+id/footer_disambig"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:layout_below="@id/scroll"
-        android:background="@drawable/fasttrack_disambig_bottom_bg"
+        android:background="@drawable/quickcontact_disambig_bottom_bg"
         android:orientation="vertical"
         android:visibility="gone">
 
@@ -101,8 +101,8 @@
             android:layout_width="fill_parent"
             android:layout_height="0dip"
 	    android:layout_weight="1"
-            android:background="@color/fasttrack_disambig"
-            android:divider="@drawable/fasttrack_disambig_divider"
+            android:background="@color/quickcontact_disambig"
+            android:divider="@drawable/quickcontact_disambig_divider"
             android:cacheColorHint="@null" />
 
         <CheckBox
@@ -114,9 +114,9 @@
             android:minHeight="60dip"
             android:textColor="#f000"
             android:textStyle="bold"
-            android:text="@string/fasttrack_remember_choice"
+            android:text="@string/quickcontact_remember_choice"
             android:textAppearance="?android:attr/textAppearanceSmallInverse"
-            android:button="@drawable/fasttrack_disambig_checkbox" />
+            android:button="@drawable/quickcontact_disambig_checkbox" />
 
     </LinearLayout>
 
@@ -124,7 +124,7 @@
         android:id="@+id/arrow_up"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:src="@drawable/fasttrack_arrow_up" />
+        android:src="@drawable/quickcontact_arrow_up" />
 
     <ImageView
         android:id="@+id/arrow_down"
@@ -132,6 +132,6 @@
         android:layout_height="wrap_content"
         android:layout_marginTop="-1dip"
         android:layout_below="@id/footer"
-        android:src="@drawable/fasttrack_arrow_down" />
+        android:src="@drawable/quickcontact_arrow_down" />
 
 </RelativeLayout>
diff --git a/res/layout-finger/fasttrack_header_large.xml b/res/layout-finger/quickcontact_header_large.xml
similarity index 94%
rename from res/layout-finger/fasttrack_header_large.xml
rename to res/layout-finger/quickcontact_header_large.xml
index f950349..c94f1ad 100644
--- a/res/layout-finger/fasttrack_header_large.xml
+++ b/res/layout-finger/quickcontact_header_large.xml
@@ -20,7 +20,7 @@
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:minHeight="87dip"
-    android:background="@drawable/fasttrack_top_frame"
+    android:background="@drawable/quickcontact_top_frame"
     android:gravity="center_vertical"
     android:orientation="horizontal">
 
@@ -57,7 +57,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginRight="15dip"
-        android:src="@drawable/fasttrack_slider_presence_active"
+        android:src="@drawable/quickcontact_slider_presence_active"
         android:scaleType="centerInside" />
 
 </LinearLayout>
diff --git a/res/layout-finger/fasttrack_header_med.xml b/res/layout-finger/quickcontact_header_med.xml
similarity index 93%
rename from res/layout-finger/fasttrack_header_med.xml
rename to res/layout-finger/quickcontact_header_med.xml
index 98e9233..3533502 100644
--- a/res/layout-finger/fasttrack_header_med.xml
+++ b/res/layout-finger/quickcontact_header_med.xml
@@ -20,7 +20,7 @@
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
     android:minHeight="45dip"
-    android:background="@drawable/fasttrack_top_frame"
+    android:background="@drawable/quickcontact_top_frame"
     android:gravity="center_vertical"
     android:orientation="horizontal">
 
@@ -40,7 +40,7 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_marginTop="1dip"
-        android:src="@drawable/fasttrack_frame_divider_med" />
+        android:src="@drawable/quickcontact_frame_divider_med" />
 
     <ImageView
         android:id="@+id/source"
diff --git a/res/layout-finger/fasttrack_header_small.xml b/res/layout-finger/quickcontact_header_small.xml
similarity index 93%
rename from res/layout-finger/fasttrack_header_small.xml
rename to res/layout-finger/quickcontact_header_small.xml
index feb49f2..3711dcc 100644
--- a/res/layout-finger/fasttrack_header_small.xml
+++ b/res/layout-finger/quickcontact_header_small.xml
@@ -19,5 +19,5 @@
     android:id="@+id/header_small"
     android:layout_width="fill_parent"
     android:layout_height="wrap_content"
-    android:background="@drawable/fasttrack_top_frame"
+    android:background="@drawable/quickcontact_top_frame"
     android:orientation="horizontal" />
diff --git a/res/layout-finger/fasttrack_item.xml b/res/layout-finger/quickcontact_item.xml
similarity index 94%
rename from res/layout-finger/fasttrack_item.xml
rename to res/layout-finger/quickcontact_item.xml
index 58d85aa..819915d 100644
--- a/res/layout-finger/fasttrack_item.xml
+++ b/res/layout-finger/quickcontact_item.xml
@@ -25,4 +25,4 @@
     android:scaleType="centerInside"
     android:focusable="true"
     android:clickable="true"
-    android:background="@drawable/fasttrack_slider_btn" />
+    android:background="@drawable/quickcontact_slider_btn" />
diff --git a/res/layout-finger/fasttrack_resolve_item.xml b/res/layout-finger/quickcontact_resolve_item.xml
similarity index 100%
rename from res/layout-finger/fasttrack_resolve_item.xml
rename to res/layout-finger/quickcontact_resolve_item.xml
diff --git a/res/menu/edit.xml b/res/menu/edit.xml
index 3a24f27..658a567 100644
--- a/res/menu/edit.xml
+++ b/res/menu/edit.xml
@@ -47,4 +47,13 @@
         android:icon="@android:drawable/ic_menu_delete"
         android:title="@string/removePicture" />
 
+    <item
+        android:id="@+id/menu_split"
+        android:icon="@drawable/ic_menu_merge"
+        android:title="@string/menu_splitAggregate" />
+
+    <item
+        android:id="@+id/menu_join"
+        android:icon="@drawable/ic_menu_merge"
+        android:title="@string/menu_joinAggregate" />
 </menu>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 2b3c3fc..79c7f19 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Aplikace potřebná k provedení této akce nebyla nalezena"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Zapamatovat tuto volbu"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Neznámé"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Aplikace potřebná k provedení této akce nebyla nalezena"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Zapamatovat tuto volbu"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Neznámé"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Účty"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 88d3563..1a3d060 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Der blev ikke fundet noget program til denne handling"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Husk dette valg"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Ukendte"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Der blev ikke fundet noget program til denne handling"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Husk dette valg"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Ukendte"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Konti"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index b45e33a..e13626a 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Für diese Aktion wurde keine Anwendung gefunden."</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Diese Auswahl speichern"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Unbekannt"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Für diese Aktion wurde keine Anwendung gefunden."</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Diese Auswahl speichern"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Unbekannt"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Konten"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ce6be87..71bb3bd 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Δεν υπάρχει εφαρμογή για τη διαχείριση αυτής της ενέργειας"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Διατήρηση αυτής της ρύθμισης"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Άγνωστος"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Δεν υπάρχει εφαρμογή για τη διαχείριση αυτής της ενέργειας"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Διατήρηση αυτής της ρύθμισης"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Άγνωστος"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Λογαριασμοί"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index d051af8..8372650 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"No se encontró aplicación para permitir esta acción"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Recuerda esta opción"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Desconocido"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"No se encontró aplicación para permitir esta acción"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Recuerda esta opción"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Desconocido"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Cuentas"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index ad45fb6..3ea81a0 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"No se ha encontrado ninguna aplicación que pueda realizar esta acción."</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Recordar esta opción"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Desconocido"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"No se ha encontrado ninguna aplicación que pueda realizar esta acción."</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Recordar esta opción"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Desconocido"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Cuentas"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 26b026b..0aba70f 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Aucune application pour gérer cette action"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Mémoriser ce choix"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Inconnu"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Aucune application pour gérer cette action"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Mémoriser ce choix"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Inconnu"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Comptes"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 5797d61..9e28302 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Nessuna applicazione trovata in grado di gestire questa azione"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Memorizza questa scelta"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Sconosciuto"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Nessuna applicazione trovata in grado di gestire questa azione"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Memorizza questa scelta"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Sconosciuto"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Account"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 1e539dd..b6abc9a 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"この操作を行うアプリケーションが見つかりません"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"この選択を保存"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"不明"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"この操作を行うアプリケーションが見つかりません"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"この選択を保存"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"不明"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"アカウント"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index cd45ca9..f07aec0 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"이 작업을 처리하는 응용프로그램을 찾을 수 없습니다."</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"이 선택사항 저장"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"알 수 없음"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"이 작업을 처리하는 응용프로그램을 찾을 수 없습니다."</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"이 선택사항 저장"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"알 수 없음"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"계정"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 57d17c1..e04b8da 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Ingen programmer som kan utføre denne handlingen ble funnet"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Husk dette valget"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Ukjent"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Ingen programmer som kan utføre denne handlingen ble funnet"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Husk dette valget"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Ukjent"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Kontoer"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index d2ca5b3..e3a6ac8 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Er is geen toepassing gevonden om deze actie uit te voeren"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Deze keuze onthouden"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Onbekend"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Er is geen toepassing gevonden om deze actie uit te voeren"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Deze keuze onthouden"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Onbekend"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Accounts"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 02797d5..06523ca 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Nie znaleziono aplikacji do obsługi tej akcji"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Zapamiętaj ten wybór"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Nieznane"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Nie znaleziono aplikacji do obsługi tej akcji"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Zapamiętaj ten wybór"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Nieznane"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Konta"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 5802679..3de0004 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Não foram encontradas aplicações para executar esta acção"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Memorizar esta escolha"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Desconhecido"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Não foram encontradas aplicações para executar esta acção"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Memorizar esta escolha"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Desconhecido"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Contas"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 86423f1..6438046 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Nenhum aplicativo foi encontrado para executar esta ação."</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Lembrar desta escolha"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Desconhecido"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Nenhum aplicativo foi encontrado para executar esta ação."</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Lembrar desta escolha"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Desconhecido"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Contas"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index aa5d2f8..76256f4 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Отсутствует приложение для обработки этого действия"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Запомнить выбранное"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Неизвестно"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Отсутствует приложение для обработки этого действия"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Запомнить выбранное"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Неизвестно"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Аккаунты"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 50d9f8d..728fbca 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Inget program som kan hantera åtgärden hittades"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Kom ihåg det här valet"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Okänd"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Inget program som kan hantera åtgärden hittades"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Kom ihåg det här valet"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Okänd"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Konton"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index c8ae19c..1df1655 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"Bu eylemi gerçekleştirecek bir uygulama bulunamadı"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"Bu tercihi anımsa"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"Bilinmiyor"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"Bu eylemi gerçekleştirecek bir uygulama bulunamadı"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"Bu tercihi anımsa"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"Bilinmiyor"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"Hesaplar"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 4ee3b92..cf30983 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"未找到可处理此操作的应用程序"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"记住此选择"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"未知"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"未找到可处理此操作的应用程序"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"记住此选择"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"未知"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"帐户"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index e0f04cf..df5a614 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -281,9 +281,9 @@
     <skip />
     <!-- no translation found for make_primary (5829291915305113983) -->
     <skip />
-    <string name="fasttrack_missing_app" msgid="1181287640680679441">"找不到可以處理這個動作的應用程式"</string>
-    <string name="fasttrack_remember_choice" msgid="2858356075887897116">"記住這個選擇"</string>
-    <string name="fasttrack_missing_name" msgid="7806083820928955853">"不明"</string>
+    <string name="quickcontact_missing_app" msgid="1181287640680679441">"找不到可以處理這個動作的應用程式"</string>
+    <string name="quickcontact_remember_choice" msgid="2858356075887897116">"記住這個選擇"</string>
+    <string name="quickcontact_missing_name" msgid="7806083820928955853">"不明"</string>
     <string name="menu_accounts" msgid="8499114602017077970">"帳戶"</string>
     <!-- no translation found for menu_import_export (3765725645491577190) -->
     <skip />
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 12630c0..880c269 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -18,6 +18,6 @@
     <color name="textColorIconOverlay">#fff</color>
     <color name="textColorIconOverlayShadow">#000</color>
     <color name="sect_secondary">#4fff</color>
-    <color name="fasttrack_disambig">#f2f2f2</color>
-    <color name="fasttrack_disambig_divider">#afafaf</color>
+    <color name="quickcontact_disambig">#f2f2f2</color>
+    <color name="quickcontact_disambig_divider">#afafaf</color>
 </resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 4361fd4..845c3dc 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -15,7 +15,7 @@
 -->
 
 <resources>
-    <dimen name="fasttrack_shadow">37dip</dimen>
+    <dimen name="quickcontact_shadow">37dip</dimen>
     <dimen name="edit_photo_size">76dip</dimen>
         
     <!-- The height of the ScrollingTabWidget -->
diff --git a/res/values/ids.xml b/res/values/ids.xml
index cf1d419..92b0eac 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -41,6 +41,12 @@
     <item type="id" name="dialog_io_exception" />
     <item type="id" name="dialog_error_with_message" />
 
+    <!-- For ContactsListActivity -->
+    <item type="id" name="dialog_delete_contact_confirmation" />
+    <item type="id" name="dialog_cannot_delete_readonly_contact" />
+    <item type="id" name="dialog_multiple_contact_delete_confirmation" />
+    <item type="id" name="dialog_readonly_contact_delete_confirmation" />
+
     <!-- For ExportVCard -->
     <item type="id" name="dialog_export_confirmation" />
     <item type="id" name="dialog_fail_to_export_with_reason" />
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4df8b7c..e26b42e 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -165,7 +165,16 @@
     <!-- Confirmation dialog title after users selects to delete a contact. -->
     <string name="deleteConfirmation_title">Delete</string>
 
-    <!-- Confirmation dialog contents after users selects to delete a contact. -->
+    <!-- Warning dialog contents after users selects to delete a ReadOnly contact. -->
+    <string name="readOnlyContactWarning">You cannot delete contacts from read-only accounts.</string>
+
+    <!-- Warning dialog contents after users selects to delete a contact with ReadOnly and Writable sources. -->
+    <string name="readOnlyContactDeleteConfirmation">This contact contains information from multiple accounts. The information from read-only accounts will not be deleted.</string>
+
+    <!-- Warning dialog contents after users selects to delete a contact with multiple Writable sources. -->
+    <string name="multipleContactDeleteConfirmation">Deleting this contact will delete information from multiple accounts.</string>
+
+    <!-- Confirmation dialog contents after users selects to delete a Writable contact. -->
     <string name="deleteConfirmation">This contact will be deleted.</string>
 
     <!-- Menu item to indicate you are done editing a contact and want to save the changes you've made -->
@@ -909,15 +918,15 @@
 
     <!-- Shown as a toast when the user taps on a Fast-Track icon, and no application
          was found that could perform the selected action -->
-    <string name="fasttrack_missing_app">No application found to handle this action</string>
+    <string name="quickcontact_missing_app">No application found to handle this action</string>
 
     <!-- Shown as the checkbox label that, when checked, will store remember the
          selected choice and shortcut to it in the future.  For example, this would
          make a selected phone number the default. -->
-    <string name="fasttrack_remember_choice">Remember this choice</string>
+    <string name="quickcontact_remember_choice">Remember this choice</string>
 
     <!-- Shown as the header name for a person when the name is missing or unknown. -->
-    <string name="fasttrack_missing_name">Unknown</string>
+    <string name="quickcontact_missing_name">Unknown</string>
 
     <!-- The menu item to open the list of accounts -->
     <string name="menu_accounts">Accounts</string>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 05c0916..8c5ae35 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -52,15 +52,15 @@
         <item name="android:windowContentOverlay">@null</item>
     </style>
 
-    <style name="FullyTranslucent.FastTrack">
+    <style name="FullyTranslucent.QuickContact">
         <!-- This is a hack because we want to be able to animate away the
-             FastTrack window, and we close its containing activity at the
+             QuickContact window, and we close its containing activity at the
              same time.  So put in a dummy animation so this guy sticks around
              while the fast track window is animating. -->
         <item name="android:windowAnimationStyle">@style/DummyAnimation</item>
     </style>
 
-    <style name="FastTrack">
+    <style name="QuickContact">
         <item name="android:windowFrame">@null</item>
         <item name="android:windowBackground">@android:color/transparent</item>
         <item name="android:windowIsFloating">true</item>
@@ -71,14 +71,14 @@
         -->
     </style>
 
-    <style name="FastTrackAboveAnimation">
-        <item name="android:windowEnterAnimation">@anim/fasttrack_above_enter</item>
-        <item name="android:windowExitAnimation">@anim/fasttrack_above_exit</item>
+    <style name="QuickContactAboveAnimation">
+        <item name="android:windowEnterAnimation">@anim/quickcontact_above_enter</item>
+        <item name="android:windowExitAnimation">@anim/quickcontact_above_exit</item>
     </style>
 
-    <style name="FastTrackBelowAnimation">
-        <item name="android:windowEnterAnimation">@anim/fasttrack_below_enter</item>
-        <item name="android:windowExitAnimation">@anim/fasttrack_below_exit</item>
+    <style name="QuickContactBelowAnimation">
+        <item name="android:windowEnterAnimation">@anim/quickcontact_below_enter</item>
+        <item name="android:windowExitAnimation">@anim/quickcontact_below_exit</item>
     </style>
 
     <style name="DummyAnimation">
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index c7d06e2..5e1638f 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -102,8 +102,11 @@
 import android.widget.TextView;
 import android.widget.AbsListView.OnScrollListener;
 
+import com.android.contacts.model.ContactsSource;
+
 import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
@@ -186,8 +189,8 @@
     static final int MODE_MASK_NO_DATA = 0x04000000;
     /** Mask for showing a call button in the list */
     static final int MODE_MASK_SHOW_CALL_BUTTON = 0x02000000;
-    /** Mask to disable fasttrack (images will show as normal images) */
-    static final int MODE_MASK_DISABLE_FASTTRACK = 0x01000000;
+    /** Mask to disable quickcontact (images will show as normal images) */
+    static final int MODE_MASK_DISABLE_QUIKCCONTACT = 0x01000000;
     /** Mask to show the total number of contacts at the top */
     static final int MODE_MASK_SHOW_NUMBER_OF_CONTACTS = 0x00800000;
 
@@ -205,16 +208,16 @@
     static final int MODE_STREQUENT = 35 | MODE_MASK_SHOW_PHOTOS | MODE_MASK_SHOW_CALL_BUTTON;
     /** Show all contacts and pick them when clicking */
     static final int MODE_PICK_CONTACT = 40 | MODE_MASK_PICKER | MODE_MASK_SHOW_PHOTOS
-            | MODE_MASK_DISABLE_FASTTRACK;
+            | MODE_MASK_DISABLE_QUIKCCONTACT;
     /** Show all contacts as well as the option to create a new one */
     static final int MODE_PICK_OR_CREATE_CONTACT = 42 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW
-            | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_FASTTRACK;
+            | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_QUIKCCONTACT;
     /** Show all people through the legacy provider and pick them when clicking */
     static final int MODE_LEGACY_PICK_PERSON = 43 | MODE_MASK_PICKER | MODE_MASK_SHOW_PHOTOS
-            | MODE_MASK_DISABLE_FASTTRACK;
+            | MODE_MASK_DISABLE_QUIKCCONTACT;
     /** Show all people through the legacy provider as well as the option to create a new one */
-    static final int MODE_LEGACY_PICK_OR_CREATE_PERSON = 44 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW
-            | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_FASTTRACK;
+    static final int MODE_LEGACY_PICK_OR_CREATE_PERSON = 44 | MODE_MASK_PICKER
+            | MODE_MASK_CREATE_NEW | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_QUIKCCONTACT;
     /** Show all contacts and pick them when clicking, and allow creating a new contact */
     static final int MODE_INSERT_OR_EDIT_CONTACT = 45 | MODE_MASK_PICKER | MODE_MASK_CREATE_NEW;
     /** Show all phone numbers and pick them when clicking */
@@ -236,7 +239,7 @@
 
     /** Show join suggestions followed by an A-Z list */
     static final int MODE_JOIN_CONTACT = 70 | MODE_MASK_PICKER | MODE_MASK_NO_PRESENCE
-            | MODE_MASK_NO_DATA | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_FASTTRACK;
+            | MODE_MASK_NO_DATA | MODE_MASK_SHOW_PHOTOS | MODE_MASK_DISABLE_QUIKCCONTACT;
 
     /** Maximum number of suggestions shown for joining aggregates */
     static final int MAX_SUGGESTIONS = 4;
@@ -306,6 +309,12 @@
         ContactMethods.DATA, //3
         People.DISPLAY_NAME, // 4
     };
+    static final String[] RAW_CONTACTS_PROJECTION = new String[] {
+        RawContacts._ID, //0
+        RawContacts.CONTACT_ID, //1
+        RawContacts.ACCOUNT_TYPE, //2
+    };
+
     static final int POSTAL_ID_COLUMN_INDEX = 0;
     static final int POSTAL_TYPE_COLUMN_INDEX = 1;
     static final int POSTAL_LABEL_COLUMN_INDEX = 2;
@@ -324,6 +333,7 @@
     private String mQuery;
     private boolean mJustCreated;
     private boolean mSyncEnabled;
+    private Uri mSelectedContactUri;
 
 //    private boolean mDisplayAll;
     private boolean mDisplayOnlyPhones;
@@ -332,6 +342,10 @@
 
     private long mQueryAggregateId;
 
+    private ArrayList<Long> mWritableRawContactIds = new ArrayList<Long>();
+    private int  mWritableSourcesCnt;
+    private int  mReadOnlySourcesCnt;
+
     /**
      * Used to keep track of the scroll state of the list.
      */
@@ -388,7 +402,15 @@
         }
 
         public void onClick(DialogInterface dialog, int which) {
-            getContentResolver().delete(mUri, null, null);
+	    if (mReadOnlySourcesCnt > 0) {
+	        for (long rawContactIdToDelete: mWritableRawContactIds) {
+		    final Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI,
+                            rawContactIdToDelete);
+                    getContentResolver().delete(rawContactUri, null, null);
+		}
+            } else {
+	        getContentResolver().delete(mUri, null, null);
+            }
         }
     }
 
@@ -854,11 +876,44 @@
             }
             case R.id.dialog_sdcard_not_found: {
                 AlertDialog.Builder builder = new AlertDialog.Builder(this)
-                .setTitle(R.string.no_sdcard_title)
-                .setIcon(android.R.drawable.ic_dialog_alert)
-                .setMessage(R.string.no_sdcard_message)
-                .setPositiveButton(android.R.string.ok, null);
+                        .setTitle(R.string.no_sdcard_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.no_sdcard_message)
+                        .setPositiveButton(android.R.string.ok, null);
+		break;
             }
+	    case R.id.dialog_delete_contact_confirmation: {
+                AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                        .setTitle(R.string.deleteConfirmation_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.deleteConfirmation)
+                        .setNegativeButton(android.R.string.cancel, null)
+                        .setPositiveButton(android.R.string.ok, new DeleteClickListener(mSelectedContactUri));
+                break;
+            }
+            case R.id.dialog_cannot_delete_readonly_contact: {
+                AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                        .setTitle(R.string.deleteConfirmation_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.readOnlyContactWarning)
+                        .setPositiveButton(android.R.string.ok, null);
+		break;
+            }
+            case R.id.dialog_readonly_contact_delete_confirmation: {
+                AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                        .setTitle(R.string.deleteConfirmation_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.readOnlyContactDeleteConfirmation)
+                        .setPositiveButton(android.R.string.ok, new DeleteClickListener(mSelectedContactUri));
+                }
+	    case R.id.dialog_multiple_contact_delete_confirmation: {
+                AlertDialog.Builder builder = new AlertDialog.Builder(this)
+                        .setTitle(R.string.deleteConfirmation_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.multipleContactDeleteConfirmation)
+                        .setPositiveButton(android.R.string.ok, new DeleteClickListener(mSelectedContactUri));
+                }
+
         }
         return super.onCreateDialog(id);
     }
@@ -1061,8 +1116,8 @@
             }
 
             case MENU_ITEM_DELETE: {
-                final Uri selectedUri = getContactUri(info.position);
-                doContactDelete(selectedUri);
+                mSelectedContactUri = getContactUri(info.position);
+                doContactDelete();
                 return true;
             }
         }
@@ -1082,8 +1137,8 @@
             case KeyEvent.KEYCODE_DEL: {
                 final int position = getListView().getSelectedItemPosition();
                 if (position != ListView.INVALID_POSITION) {
-                    final Uri selectedUri = getContactUri(position);
-                    doContactDelete(selectedUri);
+                    mSelectedContactUri = getContactUri(position);
+                    doContactDelete();
                     return true;
                 }
                 break;
@@ -1096,14 +1151,41 @@
     /**
      * Prompt the user before deleting the given {@link Contacts} entry.
      */
-    protected void doContactDelete(Uri contactUri) {
-        new AlertDialog.Builder(ContactsListActivity.this)
-            .setTitle(R.string.deleteConfirmation_title)
-            .setIcon(android.R.drawable.ic_dialog_alert)
-            .setMessage(R.string.deleteConfirmation)
-            .setNegativeButton(android.R.string.cancel, null)
-            .setPositiveButton(android.R.string.ok, new DeleteClickListener(contactUri))
-            .show();
+    protected void doContactDelete() {
+        mReadOnlySourcesCnt = 0;
+	mWritableSourcesCnt = 0;
+        mWritableRawContactIds.clear();
+
+	if (mSelectedContactUri != null) {
+            Cursor c = getContentResolver().query(RawContacts.CONTENT_URI,
+	            RAW_CONTACTS_PROJECTION, RawContacts.CONTACT_ID + "="
+		    + ContentUris.parseId(mSelectedContactUri), null, null);
+            Sources sources = Sources.getInstance(ContactsListActivity.this);
+            if (c != null) {
+                while (c.moveToNext()) {
+                    final String accountType = c.getString(2);
+		    final long rawContactId = c.getLong(0);
+                    ContactsSource contactsSource = sources.getInflatedSource(accountType,
+                            ContactsSource.LEVEL_SUMMARY);
+                    if (contactsSource != null && contactsSource.readOnly) {
+                        mReadOnlySourcesCnt += 1;
+                    } else {
+                        mWritableSourcesCnt += 1;
+			mWritableRawContactIds.add(rawContactId);
+		    }
+                 }
+            }
+            c.close();
+	    if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt > 0) {
+	        showDialog(R.id.dialog_readonly_contact_delete_confirmation);
+	    } else if (mReadOnlySourcesCnt > 0 && mWritableSourcesCnt == 0) {
+	        showDialog(R.id.dialog_cannot_delete_readonly_contact);
+	    } else if (mReadOnlySourcesCnt == 0 && mWritableSourcesCnt > 1) {
+	        showDialog(R.id.dialog_multiple_contact_delete_confirmation);
+            } else {
+	        showDialog(R.id.dialog_delete_contact_confirmation);
+	    }
+	}
     }
 
     @Override
@@ -1918,7 +2000,7 @@
         public CharArrayBuffer dataBuffer = new CharArrayBuffer(128);
         public ImageView presenceView;
         public QuickContactBadge photoView;
-        public ImageView nonFastTrackPhotoView;
+        public ImageView nonQuickContactPhotoView;
     }
 
     final static class PhotoInfo {
@@ -2222,7 +2304,7 @@
             cache.dataView = (TextView) view.findViewById(R.id.data);
             cache.presenceView = (ImageView) view.findViewById(R.id.presence);
             cache.photoView = (QuickContactBadge) view.findViewById(R.id.photo);
-            cache.nonFastTrackPhotoView = (ImageView) view.findViewById(R.id.noQuickContactPhoto);
+            cache.nonQuickContactPhotoView = (ImageView) view.findViewById(R.id.noQuickContactPhoto);
             view.setTag(cache);
 
             return view;
@@ -2289,7 +2371,7 @@
 
             // Set the photo, if requested
             if (mDisplayPhotos) {
-                boolean useFastTrack = (mMode & MODE_MASK_DISABLE_FASTTRACK) == 0;
+                boolean useQuickContact = (mMode & MODE_MASK_DISABLE_QUIKCCONTACT) == 0;
 
                 long photoId = 0;
                 if (!cursor.isNull(SUMMARY_PHOTO_ID_COLUMN_INDEX)) {
@@ -2297,18 +2379,18 @@
                 }
 
                 ImageView viewToUse;
-                if (useFastTrack) {
+                if (useQuickContact) {
                     viewToUse = cache.photoView;
                     // Build soft lookup reference
                     final long contactId = cursor.getLong(SUMMARY_ID_COLUMN_INDEX);
                     final String lookupKey = cursor.getString(SUMMARY_LOOKUP_KEY);
                     cache.photoView.assignContactUri(Contacts.getLookupUri(contactId, lookupKey));
                     cache.photoView.setVisibility(View.VISIBLE);
-                    cache.nonFastTrackPhotoView.setVisibility(View.INVISIBLE);
+                    cache.nonQuickContactPhotoView.setVisibility(View.INVISIBLE);
                 } else {
-                    viewToUse = cache.nonFastTrackPhotoView;
+                    viewToUse = cache.nonQuickContactPhotoView;
                     cache.photoView.setVisibility(View.INVISIBLE);
-                    cache.nonFastTrackPhotoView.setVisibility(View.VISIBLE);
+                    cache.nonQuickContactPhotoView.setVisibility(View.VISIBLE);
                 }
 
 
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index bec871f..0e03cf3 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -99,6 +99,8 @@
     private static final boolean SHOW_SEPARATORS = false;
 
     private static final int DIALOG_CONFIRM_DELETE = 1;
+    private static final int DIALOG_CONFIRM_READONLY_DELETE = 2;
+    private static final int DIALOG_CONFIRM_MULTIPLE_DELETE = 3;
 
     private static final int REQUEST_JOIN_CONTACT = 1;
     private static final int REQUEST_EDIT_CONTACT = 2;
@@ -154,6 +156,9 @@
     private static final String SAVED_STATE_TABS_VISIBLE_KEY = "tabsVisibleKey";
 
     protected Long mSelectedRawContactId = null;
+    protected int mReadOnlySourcesCnt;
+    protected int mWritableSourcesCnt;
+    protected ArrayList<Long> mWritableRawContactIds = new ArrayList<Long>();
 
     private static final int TOKEN_QUERY = 0;
 
@@ -173,7 +178,15 @@
 
     public void onClick(DialogInterface dialog, int which) {
         closeCursor();
-        getContentResolver().delete(mLookupUri, null, null);
+	if (mReadOnlySourcesCnt > 0) {
+	    for (long rawContactIdToDelete: mWritableRawContactIds) {
+		final Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI,
+                        rawContactIdToDelete);
+                getContentResolver().delete(rawContactUri, null, null);
+            }
+        } else {
+	    getContentResolver().delete(mLookupUri, null, null);
+	}
         finish();
     }
 
@@ -297,6 +310,24 @@
                         .setPositiveButton(android.R.string.ok, this)
                         .setCancelable(false)
                         .create();
+            case DIALOG_CONFIRM_READONLY_DELETE:
+                return new AlertDialog.Builder(this)
+                        .setTitle(R.string.deleteConfirmation_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.readOnlyContactDeleteConfirmation)
+                        .setNegativeButton(android.R.string.cancel, null)
+                        .setPositiveButton(android.R.string.ok, this)
+                        .setCancelable(false)
+                        .create();
+            case DIALOG_CONFIRM_MULTIPLE_DELETE:
+                return new AlertDialog.Builder(this)
+                        .setTitle(R.string.deleteConfirmation_title)
+                        .setIcon(android.R.drawable.ic_dialog_alert)
+                        .setMessage(R.string.multipleContactDeleteConfirmation)
+                        .setNegativeButton(android.R.string.cancel, null)
+                        .setPositiveButton(android.R.string.ok, this)
+                        .setCancelable(false)
+                        .create();
         }
         return null;
     }
@@ -597,6 +628,10 @@
         final boolean hasRawContact = (mRawContactIds.size() > 0);
         menu.findItem(R.id.menu_edit).setEnabled(hasRawContact);
 
+        // Disable delete for readonly contact
+	if (mWritableSourcesCnt == 0) {
+            menu.findItem(R.id.menu_delete).setEnabled(false);
+        }
         return true;
     }
 
@@ -667,7 +702,13 @@
             }
             case R.id.menu_delete: {
                 // Get confirmation
-                showDialog(DIALOG_CONFIRM_DELETE);
+		if (mReadOnlySourcesCnt > 0 & mWritableSourcesCnt > 0) {
+                    showDialog(DIALOG_CONFIRM_READONLY_DELETE);
+		} else if (mWritableSourcesCnt > 1) {
+		    showDialog(DIALOG_CONFIRM_MULTIPLE_DELETE);
+		} else {
+		    showDialog(DIALOG_CONFIRM_DELETE);
+		}
                 return true;
             }
             case R.id.menu_join: {
@@ -857,7 +898,13 @@
             }
 
             case KeyEvent.KEYCODE_DEL: {
-                showDialog(DIALOG_CONFIRM_DELETE);
+		if (mReadOnlySourcesCnt > 0 & mWritableSourcesCnt > 0) {
+                    showDialog(DIALOG_CONFIRM_READONLY_DELETE);
+		} else if (mWritableSourcesCnt > 1) {
+		    showDialog(DIALOG_CONFIRM_MULTIPLE_DELETE);
+		} else {
+		    showDialog(DIALOG_CONFIRM_DELETE);
+		}
                 return true;
             }
         }
@@ -915,6 +962,9 @@
         }
 
         mRawContactIds.clear();
+        mReadOnlySourcesCnt = 0;
+	mWritableSourcesCnt = 0;
+        mWritableRawContactIds.clear();
 
         Sources sources = Sources.getInstance(this);
 
@@ -936,6 +986,12 @@
 
                 final ContactsSource source = sources.getInflatedSource(accountType,
                         ContactsSource.LEVEL_SUMMARY);
+	        if (source.readOnly) {
+		    mReadOnlySourcesCnt += 1;
+		} else {
+		    mWritableSourcesCnt += 1;
+                    mWritableRawContactIds.add(rawContactId);
+		}
                 final String accountName = entValues.getAsString(RawContacts.ACCOUNT_NAME);
                 mAccountName.setText(getString(R.string.account_name_format,
                         source.getDisplayLabel(this), accountName));
diff --git a/src/com/android/contacts/model/EntitySet.java b/src/com/android/contacts/model/EntitySet.java
index adc87ee..be2f70f 100644
--- a/src/com/android/contacts/model/EntitySet.java
+++ b/src/com/android/contacts/model/EntitySet.java
@@ -43,6 +43,8 @@
  * and applying another {@link EntitySet} over it.
  */
 public class EntitySet extends ArrayList<EntityDelta> implements Parcelable {
+    private boolean mSplitRawContacts;
+
     private EntitySet() {
     }
 
@@ -128,15 +130,22 @@
         }
 
         final int assertMark = diff.size();
+        int backRefs[] = new int[size()];
+
+        int rawContactIndex = 0;
 
         // Second pass builds actual operations
         for (EntityDelta delta : this) {
             final int firstBatch = diff.size();
+            backRefs[rawContactIndex++] = firstBatch;
             delta.buildDiff(diff);
 
             // Only create rules for inserts
             if (!delta.isContactInsert()) continue;
 
+            // If we are going to split all contacts, there is no point in first combining them
+            if (mSplitRawContacts) continue;
+
             if (rawContactId != -1) {
                 // Has existing contact, so bind to it strongly
                 final Builder builder = beginKeepTogether();
@@ -157,6 +166,10 @@
             }
         }
 
+        if (mSplitRawContacts) {
+            buildSplitContactDiff(diff, backRefs);
+        }
+
         // No real changes if only left with asserts
         if (diff.size() == assertMark) {
             diff.clear();
@@ -177,6 +190,47 @@
     }
 
     /**
+     * Builds {@link AggregationExceptions} to split all constituent raw contacts into
+     * separate contacts.
+     */
+    private void buildSplitContactDiff(final ArrayList<ContentProviderOperation> diff,
+            int[] backRefs) {
+        int count = size();
+        for (int i = 0; i < count; i++) {
+            for (int j = 0; j < count; j++) {
+                if (i != j) {
+                    buildSplitContactDiff(diff, i, j, backRefs);
+                }
+            }
+        }
+    }
+
+    /**
+     * Construct a {@link AggregationExceptions#TYPE_KEEP_SEPARATE}.
+     */
+    private void buildSplitContactDiff(ArrayList<ContentProviderOperation> diff, int index1,
+            int index2, int[] backRefs) {
+        Builder builder =
+                ContentProviderOperation.newUpdate(AggregationExceptions.CONTENT_URI);
+        builder.withValue(AggregationExceptions.TYPE, AggregationExceptions.TYPE_KEEP_SEPARATE);
+
+        Long rawContactId1 = get(index1).getValues().getAsLong(RawContacts._ID);
+        if (rawContactId1 != null && rawContactId1 >= 0) {
+            builder.withValue(AggregationExceptions.RAW_CONTACT_ID1, rawContactId1);
+        } else {
+            builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID1, backRefs[index1]);
+        }
+
+        Long rawContactId2 = get(index2).getValues().getAsLong(RawContacts._ID);
+        if (rawContactId2 != null && rawContactId2 >= 0) {
+            builder.withValue(AggregationExceptions.RAW_CONTACT_ID2, rawContactId2);
+        } else {
+            builder.withValueBackReference(AggregationExceptions.RAW_CONTACT_ID2, backRefs[index2]);
+        }
+        diff.add(builder.build());
+    }
+
+    /**
      * Search all contained {@link EntityDelta} for the first one with an
      * existing {@link RawContacts#_ID} value. Usually used when creating
      * {@link AggregationExceptions} during an update.
@@ -249,6 +303,10 @@
         return randomEntry;
     }
 
+    public void splitRawContacts() {
+        mSplitRawContacts = true;
+    }
+
     /** {@inheritDoc} */
     public int describeContents() {
         // Nothing special about this parcel
diff --git a/src/com/android/contacts/ui/DisplayGroupsActivity.java b/src/com/android/contacts/ui/DisplayGroupsActivity.java
index 7bd7b9d..ce68dcb 100644
--- a/src/com/android/contacts/ui/DisplayGroupsActivity.java
+++ b/src/com/android/contacts/ui/DisplayGroupsActivity.java
@@ -299,7 +299,7 @@
             } else if (isUpdate()) {
                 // When has changes and "before" exists, then "update"
                 final Builder builder = ContentProviderOperation
-                        .newUpdate(mUngrouped ? Settings.CONTENT_URI : Groups.CONTENT_URI);
+                        .newUpdate(mUngrouped ? Settings.CONTENT_URI : addCallerIsSyncAdapterParameter(Groups.CONTENT_URI));
                 if (mUngrouped) {
                     builder.withSelection(Settings.ACCOUNT_NAME + "=? AND " + Settings.ACCOUNT_TYPE
                             + "=?", new String[] {
@@ -323,6 +323,12 @@
         }
     }
 
+    private static Uri addCallerIsSyncAdapterParameter(Uri uri) {
+        return uri.buildUpon()
+	        .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true")
+		.build();
+    }
+
     /**
      * {@link Comparator} to sort by {@link Groups#_ID}.
      */
diff --git a/src/com/android/contacts/ui/EditContactActivity.java b/src/com/android/contacts/ui/EditContactActivity.java
index 9c0c69a..5e9959f 100644
--- a/src/com/android/contacts/ui/EditContactActivity.java
+++ b/src/com/android/contacts/ui/EditContactActivity.java
@@ -96,6 +96,9 @@
     private static final String KEY_EDIT_STATE = "state";
     private static final String KEY_SELECTED_RAW_CONTACT = "selected";
 
+    /** The result code when view activity should close after edit returns */
+    public static final int RESULT_CLOSE_VIEW_ACTIVITY = 777;
+
     private String mQuerySelection;
 
     private ScrollingTabWidget mTabWidget;
@@ -363,7 +366,7 @@
             this.setSelectedRawContactId(selectedRawContactId);
         } else {
             // Nothing remains to edit, save and bail entirely
-            this.doSaveAction();
+            this.doSaveAction(RESULT_OK);
         }
 
         // Show editor now that we've loaded state
@@ -461,7 +464,7 @@
     public void onClick(View view) {
         switch (view.getId()) {
             case R.id.btn_done:
-                doSaveAction();
+                doSaveAction(RESULT_OK);
                 break;
             case R.id.btn_discard:
                 doRevertAction();
@@ -472,7 +475,7 @@
     /** {@inheritDoc} */
     @Override
     public void onBackPressed() {
-        doSaveAction();
+        doSaveAction(RESULT_OK);
     }
 
     /** {@inheritDoc} */
@@ -519,7 +522,7 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.menu_done:
-                return doSaveAction();
+                return doSaveAction(RESULT_OK);
             case R.id.menu_discard:
                 return doRevertAction();
             case R.id.menu_add:
@@ -530,6 +533,10 @@
                 return doPickPhotoAction();
             case R.id.menu_photo_remove:
                 return doRemovePhotoAction();
+            case R.id.menu_split:
+                return doSplitContactAction();
+            case R.id.menu_join:
+                return doJoinContactAction();
         }
         return false;
     }
@@ -552,8 +559,11 @@
 
         private WeakReference<ProgressDialog> progress;
 
-        public PersistTask(EditContactActivity target) {
+        private final int mResultCode;
+
+        public PersistTask(EditContactActivity target, int resultCode) {
             super(target);
+            mResultCode = resultCode;
         }
 
         /** {@inheritDoc} */
@@ -599,7 +609,7 @@
                          final Uri contactLookupUri = RawContacts.getContactLookupUri(resolver,
                                  rawContactUri);
                          intent.setData(contactLookupUri);
-                         target.setResult(RESULT_OK, intent);
+                         target.setResult(mResultCode, intent);
                          target.finish();
                     }
                     result = (diff.size() > 0) ? RESULT_SUCCESS : RESULT_UNCHANGED;
@@ -665,10 +675,10 @@
      * Saves or creates the contact based on the mode, and if successful
      * finishes the activity.
      */
-    private boolean doSaveAction() {
+    private boolean doSaveAction(int resultCode) {
         if (!hasValidState()) return false;
 
-        final PersistTask task = new PersistTask(this);
+        final PersistTask task = new PersistTask(this, resultCode);
         task.execute(mState);
 
         return true;
@@ -751,6 +761,16 @@
         }
     }
 
+    private boolean doSplitContactAction() {
+        mState.splitRawContacts();
+        return doSaveAction(RESULT_CLOSE_VIEW_ACTIVITY);
+    }
+
+    private boolean doJoinContactAction() {
+        // TODO Auto-generated method stub
+        return false;
+    }
+
 
 
 
diff --git a/src/com/android/contacts/ui/FastTrackActivity.java b/src/com/android/contacts/ui/QuickContactActivity.java
similarity index 61%
rename from src/com/android/contacts/ui/FastTrackActivity.java
rename to src/com/android/contacts/ui/QuickContactActivity.java
index 6958298..5cd2d18 100644
--- a/src/com/android/contacts/ui/FastTrackActivity.java
+++ b/src/com/android/contacts/ui/QuickContactActivity.java
@@ -21,22 +21,23 @@
 import android.graphics.Rect;
 import android.net.Uri;
 import android.os.Bundle;
-import android.provider.ContactsContract.FastTrack;
+import android.provider.ContactsContract.QuickContact;
 
 /**
- * Stub translucent activity that just shows {@link FastTrackWindow} floating
+ * Stub translucent activity that just shows {@link QuickContactWindow} floating
  * above the caller. This temporary hack should eventually be replaced with
  * direct framework support.
  */
-public final class FastTrackActivity extends Activity implements FastTrackWindow.OnDismissListener {
-    private FastTrackWindow mFastTrack;
+public final class QuickContactActivity extends Activity implements
+        QuickContactWindow.OnDismissListener {
+    private QuickContactWindow mQuickContact;
 
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
 
-        if (FastTrackWindow.TRACE_LAUNCH) {
-            android.os.Debug.startMethodTracing(FastTrackWindow.TRACE_TAG);
+        if (QuickContactWindow.TRACE_LAUNCH) {
+            android.os.Debug.startMethodTracing(QuickContactWindow.TRACE_TAG);
         }
 
         // Use our local window token for now
@@ -45,22 +46,22 @@
         final Bundle extras = intent.getExtras();
 
         // Read requested parameters for displaying
-        final Rect target = (Rect)extras.getParcelable(FastTrack.EXTRA_TARGET_RECT);
-        final int mode = extras.getInt(FastTrack.EXTRA_MODE, FastTrack.MODE_MEDIUM);
-        final String[] excludeMimes = extras.getStringArray(FastTrack.EXTRA_EXCLUDE_MIMES);
+        final Rect target = (Rect)extras.getParcelable(QuickContact.EXTRA_TARGET_RECT);
+        final int mode = extras.getInt(QuickContact.EXTRA_MODE, QuickContact.MODE_MEDIUM);
+        final String[] excludeMimes = extras.getStringArray(QuickContact.EXTRA_EXCLUDE_MIMES);
 
-        mFastTrack = new FastTrackWindow(this, this);
-        mFastTrack.show(lookupUri, target, mode, excludeMimes);
+        mQuickContact = new QuickContactWindow(this, this);
+        mQuickContact.show(lookupUri, target, mode, excludeMimes);
     }
 
     @Override
     protected void onStop() {
         super.onStop();
-        mFastTrack.dismiss();
+        mQuickContact.dismiss();
     }
 
     /** {@inheritDoc} */
-    public void onDismiss(FastTrackWindow dialog) {
+    public void onDismiss(QuickContactWindow dialog) {
         // When dismissed, finish this activity
         finish();
     }
diff --git a/src/com/android/contacts/ui/FastTrackWindow.java b/src/com/android/contacts/ui/QuickContactWindow.java
similarity index 95%
rename from src/com/android/contacts/ui/FastTrackWindow.java
rename to src/com/android/contacts/ui/QuickContactWindow.java
index 2f0d212..6059079 100644
--- a/src/com/android/contacts/ui/FastTrackWindow.java
+++ b/src/com/android/contacts/ui/QuickContactWindow.java
@@ -40,7 +40,7 @@
 import android.net.Uri;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.FastTrack;
+import android.provider.ContactsContract.QuickContact;
 import android.provider.ContactsContract.Presence;
 import android.provider.ContactsContract.RawContacts;
 import android.provider.ContactsContract.CommonDataKinds.Email;
@@ -86,17 +86,17 @@
  * Window that shows fast-track contact details for a specific
  * {@link Contacts#_ID}.
  */
-public class FastTrackWindow implements Window.Callback,
+public class QuickContactWindow implements Window.Callback,
         NotifyingAsyncQueryHandler.AsyncQueryListener, View.OnClickListener,
         AbsListView.OnItemClickListener, CompoundButton.OnCheckedChangeListener {
-    private static final String TAG = "FastTrackWindow";
+    private static final String TAG = "QuickContactWindow";
 
     /**
-     * Interface used to allow the person showing a {@link FastTrackWindow} to
+     * Interface used to allow the person showing a {@link QuickContactWindow} to
      * know when the window has been dismissed.
      */
     public interface OnDismissListener {
-        public void onDismiss(FastTrackWindow dialog);
+        public void onDismiss(QuickContactWindow dialog);
     }
 
     private final Context mContext;
@@ -164,13 +164,13 @@
     private static final int TOKEN_DATA = 3;
 
     static final boolean TRACE_LAUNCH = false;
-    static final String TRACE_TAG = "fasttrack";
+    static final String TRACE_TAG = "quickcontact";
 
     /**
      * Prepare a fast-track window to show in the given {@link Context}.
      */
-    public FastTrackWindow(Context context) {
-        mContext = new ContextThemeWrapper(context, R.style.FastTrack);
+    public QuickContactWindow(Context context) {
+        mContext = new ContextThemeWrapper(context, R.style.QuickContact);
         mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
         mWindowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
 
@@ -178,7 +178,7 @@
         mWindow.setCallback(this);
         mWindow.setWindowManager(mWindowManager, null, null);
 
-        mWindow.setContentView(R.layout.fasttrack);
+        mWindow.setContentView(R.layout.quickcontact);
 
         mArrowUp = (ImageView)mWindow.findViewById(R.id.arrow_up);
         mArrowDown = (ImageView)mWindow.findViewById(R.id.arrow_down);
@@ -186,9 +186,9 @@
         mResolveCache = new ResolveCache(mContext);
 
         final Resources res = mContext.getResources();
-        mShadowHeight = res.getDimensionPixelSize(R.dimen.fasttrack_shadow);
+        mShadowHeight = res.getDimensionPixelSize(R.dimen.quickcontact_shadow);
 
-        mTrack = (ViewGroup)mWindow.findViewById(R.id.fasttrack);
+        mTrack = (ViewGroup)mWindow.findViewById(R.id.quickcontact);
         mTrackScroll = (HorizontalScrollView)mWindow.findViewById(R.id.scroll);
 
         mFooter = mWindow.findViewById(R.id.footer);
@@ -199,7 +199,7 @@
         mSetPrimaryCheckBox.setOnCheckedChangeListener(this);
 
         // Prepare track entrance animation
-        mTrackAnim = AnimationUtils.loadAnimation(mContext, R.anim.fasttrack);
+        mTrackAnim = AnimationUtils.loadAnimation(mContext, R.anim.quickcontact);
         mTrackAnim.setInterpolator(new Interpolator() {
             public float getInterpolation(float t) {
                 // Pushes past the target area, then snaps back into place.
@@ -215,7 +215,7 @@
      * notify the given {@link OnDismissListener} each time this dialog is
      * dismissed.
      */
-    public FastTrackWindow(Context context, OnDismissListener dismissListener) {
+    public QuickContactWindow(Context context, OnDismissListener dismissListener) {
         this(context);
         mDismissListener = dismissListener;
     }
@@ -223,13 +223,13 @@
     private View getHeaderView(int mode) {
         View header = null;
         switch (mode) {
-            case FastTrack.MODE_SMALL:
+            case QuickContact.MODE_SMALL:
                 header = mWindow.findViewById(R.id.header_small);
                 break;
-            case FastTrack.MODE_MEDIUM:
+            case QuickContact.MODE_MEDIUM:
                 header = mWindow.findViewById(R.id.header_medium);
                 break;
-            case FastTrack.MODE_LARGE:
+            case QuickContact.MODE_LARGE:
                 header = mWindow.findViewById(R.id.header_large);
                 break;
         }
@@ -264,7 +264,7 @@
         mHeader = getHeaderView(mode);
         mExcludeMimes = excludeMimes;
 
-        setHeaderText(R.id.name, R.string.fasttrack_missing_name);
+        setHeaderText(R.id.name, R.string.quickcontact_missing_name);
         setHeaderText(R.id.status, null);
         setHeaderImage(R.id.presence, null);
 
@@ -325,14 +325,14 @@
             // edge with top of anchor area, and adjusting to inset arrow.
             showArrow(R.id.arrow_down, mAnchor.centerX());
             l.y = mAnchor.top - blockHeight + mShadowHeight;
-            l.windowAnimations = R.style.FastTrackAboveAnimation;
+            l.windowAnimations = R.style.QuickContactAboveAnimation;
 
         } else {
             // Otherwise show upwards callout, aligning block top with bottom of
             // anchor area, and adjusting to inset arrow.
             showArrow(R.id.arrow_up, mAnchor.centerX());
             l.y = mAnchor.bottom - mShadowHeight;
-            l.windowAnimations = R.style.FastTrackBelowAnimation;
+            l.windowAnimations = R.style.QuickContactBelowAnimation;
 
         }
 
@@ -418,10 +418,10 @@
      */
     private synchronized void considerShowing() {
         if (mHasSummary && mHasSocial && mHasActions && !mShowing) {
-            if (mMode == FastTrack.MODE_MEDIUM && !mHasValidSocial) {
+            if (mMode == QuickContact.MODE_MEDIUM && !mHasValidSocial) {
                 // Missing valid social, swap medium for small header
                 mHeader.setVisibility(View.GONE);
-                mHeader = getHeaderView(FastTrack.MODE_SMALL);
+                mHeader = getHeaderView(QuickContact.MODE_SMALL);
             }
 
             // All queries have returned, pull curtain
@@ -546,21 +546,21 @@
         int resId = -1;
         switch (status) {
             case Presence.AVAILABLE:
-                resId = R.drawable.fasttrack_slider_presence_active;
+                resId = R.drawable.quickcontact_slider_presence_active;
                 break;
             case Presence.IDLE:
             case Presence.AWAY:
-                resId = R.drawable.fasttrack_slider_presence_away;
+                resId = R.drawable.quickcontact_slider_presence_away;
                 break;
             case Presence.DO_NOT_DISTURB:
-                resId = R.drawable.fasttrack_slider_presence_busy;
+                resId = R.drawable.quickcontact_slider_presence_busy;
                 break;
             case Presence.INVISIBLE:
-                resId = R.drawable.fasttrack_slider_presence_inactive;
+                resId = R.drawable.quickcontact_slider_presence_inactive;
                 break;
             case Presence.OFFLINE:
             default:
-                resId = R.drawable.fasttrack_slider_presence_inactive;
+                resId = R.drawable.quickcontact_slider_presence_inactive;
         }
         return mContext.getResources().getDrawable(resId);
     }
@@ -999,7 +999,8 @@
      * the icon provided by the {@link DataKind}.
      */
     private View inflateAction(String mimeType) {
-        CheckableImageView view = (CheckableImageView)mInflater.inflate(R.layout.fasttrack_item, mTrack, false);
+        CheckableImageView view = (CheckableImageView)mInflater.inflate(
+                R.layout.quickcontact_item, mTrack, false);
         boolean isActionSet = false;
 
         // Add direct intent if single child, otherwise flag for multiple
@@ -1095,7 +1096,8 @@
                 }
 
             } catch (ActivityNotFoundException e) {
-                Toast.makeText(mContext, R.string.fasttrack_missing_app, Toast.LENGTH_SHORT).show();
+                Toast.makeText(mContext, R.string.quickcontact_missing_app, Toast.LENGTH_SHORT)
+                        .show();
             }
         } else if (tag instanceof ActionList) {
             // Incoming tag is a MIME-type, so show resolution list
@@ -1120,7 +1122,8 @@
 
                 public View getView(int position, View convertView, ViewGroup parent) {
                     if (convertView == null) {
-                        convertView = mInflater.inflate(R.layout.fasttrack_resolve_item, parent, false);
+                        convertView = mInflater.inflate(
+                                R.layout.quickcontact_resolve_item, parent, false);
                     }
 
                     // Set action title based on summary value
diff --git a/src/com/android/contacts/ui/widget/CheckableImageView.java b/src/com/android/contacts/ui/widget/CheckableImageView.java
index ceddf57..ff5abc0 100644
--- a/src/com/android/contacts/ui/widget/CheckableImageView.java
+++ b/src/com/android/contacts/ui/widget/CheckableImageView.java
@@ -23,7 +23,7 @@
 
 /**
  * A special variation of ImageView that can be used as a checkable object.
- * This is used as the background view of fasttrack chiclet, which is in checked state
+ * This is used as the background view of quickcontact chiclet, which is in checked state
  * when disambig list is shown. Otherwise, it works identically to a ImageView.
  */
 public class CheckableImageView extends ImageView implements Checkable {