diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index e0aadd5..71a90eb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -241,7 +241,8 @@
 
         <activity-alias android:name="ContactShortcut"
             android:targetActivity="ContactsListActivity"
-            android:label="@string/shortcutContact">
+            android:label="@string/shortcutContact"
+            android:icon="@drawable/ic_launcher_shortcut_contact">
 
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_SHORTCUT" />
@@ -252,7 +253,7 @@
 
         <activity android:name="CallDetailActivity"
             android:label="@string/callDetailTitle"
-            android:theme="@android:style/Theme.NoTitleBar"
+            android:theme="@style/TallTitleBarTheme"
         >
             <intent-filter>
                 <action android:name="android.intent.action.VIEW" />
@@ -264,7 +265,7 @@
         <!-- Views the details of a single contact -->
         <activity android:name="ViewContactActivity"
             android:label="@string/viewContactTitle"
-            android:theme="@android:style/Theme.NoTitleBar"
+            android:theme="@style/TallTitleBarTheme"
         >
             <intent-filter android:label="@string/viewContactDesription">
                 <action android:name="android.intent.action.VIEW" />
@@ -314,7 +315,7 @@
         <activity
             android:name=".ContactsLiveFolders$AllContacts"
             android:label="@string/liveFolderAll"
-            android:icon="@drawable/ic_launcher_contacts">
+            android:icon="@drawable/ic_launcher_folder_live_contacts">
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -324,7 +325,7 @@
         <activity
             android:name=".ContactsLiveFolders$StarredContacts"
             android:label="@string/liveFolderFavorites"
-            android:icon="@drawable/ic_launcher_contacts_starred">
+            android:icon="@drawable/ic_launcher_folder_live_contacts_starred">
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
                 <category android:name="android.intent.category.DEFAULT" />
@@ -334,7 +335,7 @@
         <activity
             android:name=".ContactsLiveFolders$PhoneContacts"
             android:label="@string/liveFolderPhone"
-            android:icon="@drawable/ic_launcher_contacts_phones">
+            android:icon="@drawable/ic_launcher_folder_live_contacts_phone">
             <intent-filter>
                 <action android:name="android.intent.action.CREATE_LIVE_FOLDER" />
                 <category android:name="android.intent.category.DEFAULT" />
diff --git a/res/drawable-finger/ic_contact_list_picture.png b/res/drawable-finger/ic_contact_list_picture.png
new file mode 100644
index 0000000..f8aa4ba
--- /dev/null
+++ b/res/drawable-finger/ic_contact_list_picture.png
Binary files differ
diff --git a/res/drawable-finger/ic_contact_list_picture_2.png b/res/drawable-finger/ic_contact_list_picture_2.png
new file mode 100644
index 0000000..771ffb2
--- /dev/null
+++ b/res/drawable-finger/ic_contact_list_picture_2.png
Binary files differ
diff --git a/res/drawable-finger/ic_contact_list_picture_3.png b/res/drawable-finger/ic_contact_list_picture_3.png
new file mode 100644
index 0000000..92c1213
--- /dev/null
+++ b/res/drawable-finger/ic_contact_list_picture_3.png
Binary files differ
diff --git a/res/drawable/ic_launcher_contacts_phones.png b/res/drawable/ic_launcher_contacts_phones.png
deleted file mode 100644
index 822cc31..0000000
--- a/res/drawable/ic_launcher_contacts_phones.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_contacts_starred.png b/res/drawable/ic_launcher_contacts_starred.png
deleted file mode 100644
index 328761e..0000000
--- a/res/drawable/ic_launcher_contacts_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts.png b/res/drawable/ic_launcher_folder_live_contacts.png
new file mode 100644
index 0000000..5e222ec
--- /dev/null
+++ b/res/drawable/ic_launcher_folder_live_contacts.png
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts_phone.png b/res/drawable/ic_launcher_folder_live_contacts_phone.png
new file mode 100644
index 0000000..02637da
--- /dev/null
+++ b/res/drawable/ic_launcher_folder_live_contacts_phone.png
Binary files differ
diff --git a/res/drawable/ic_launcher_folder_live_contacts_starred.png b/res/drawable/ic_launcher_folder_live_contacts_starred.png
new file mode 100644
index 0000000..927b343
--- /dev/null
+++ b/res/drawable/ic_launcher_folder_live_contacts_starred.png
Binary files differ
diff --git a/res/drawable/ic_launcher_shortcut_contact.png b/res/drawable/ic_launcher_shortcut_contact.png
new file mode 100644
index 0000000..ed7025c
--- /dev/null
+++ b/res/drawable/ic_launcher_shortcut_contact.png
Binary files differ
diff --git a/res/layout-finger/list_separator.xml b/res/layout-finger/list_separator.xml
index 5d93d36..0c21541 100644
--- a/res/layout-finger/list_separator.xml
+++ b/res/layout-finger/list_separator.xml
@@ -16,12 +16,5 @@
 
 <!-- Layout used for list separators. -->
 <TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-    android:gravity="center_vertical"
-    android:background="@android:drawable/dark_header"
-    android:textColor="?android:attr/textColorSecondary"
-    android:textStyle="bold"
-    android:textSize="14sp"
-    android:paddingLeft="8dip"
+    style="?android:attr/listSeparatorTextViewStyle"
 />
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index efc635e..fe17666 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -16,10 +16,10 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="contactsList">"連絡先"</string>
-    <string name="launcherDialer">"通話"</string>
+    <string name="launcherDialer">"電話"</string>
     <string name="shortcutContact">"連絡先"</string>
     <string name="starredList">"スター付き"</string>
-    <string name="frequentList">"よく連絡する連絡先"</string>
+    <string name="frequentList">"よく使う連絡先"</string>
     <string name="strequentList">"お気に入り"</string>
     <string name="viewContactTitle">"連絡先情報"</string>
     <string name="viewContactDesription">"連絡先を表示"</string>
@@ -95,7 +95,7 @@
     <string name="groupNameWithPhones">"電話番号のある連絡先"</string>
     <string name="contactCreatedToast">"連絡先を作成しました。"</string>
     <string name="contactSavedToast">"連絡先を保存しました。"</string>
-    <string name="listSeparatorCallNumber">"電話をかける"</string>
+    <string name="listSeparatorCallNumber">"発信"</string>
     <string name="listSeparatorCallNumber_edit">"電話番号"</string>
     <string name="listSeparatorSendSmsMms">"SMS/MMSを送信"</string>
     <string name="listSeparatorSendEmail">"メールを送信"</string>
@@ -109,8 +109,8 @@
     <string name="listSeparatorOtherInformation_edit">"その他のオプション"</string>
     <string name="listSeparatorMore_edit">"開く"</string>
     <string name="contactsIconLabel">"連絡先"</string>
-    <string name="contactsFavoritesLabel">"お気に入り"</string>
-    <string name="dialerIconLabel">"通話"</string>
+    <string name="contactsFavoritesLabel">"お気入り"</string>
+    <string name="dialerIconLabel">"電話"</string>
     <string name="recentCallsIconLabel">"通話履歴"</string>
     <string name="liveFolderAll">"すべての連絡先"</string>
     <string name="liveFolderFavorites">"スター付きの連絡先"</string>
@@ -129,7 +129,7 @@
     <!-- no translation found for payphone (4864313342828942922) -->
     <skip />
     <string name="dialerKeyboardHintText">"キーボードで番号を入力してください"</string>
-    <string name="dialerDialpadHintText">"ダイヤルして追加"</string>
+    <string name="dialerDialpadHintText">"ダイヤルして通話追加"</string>
     <string name="simContacts_emptyLoading">"SIMカードから読み取り中..."</string>
     <string name="simContacts_title">"SIMカードの連絡先"</string>
     <string name="contactsSyncPlug"><font fgcolor="#ffffffff">"Googleアカウントの連絡先同期"</font>" "\n"Googleサービスで使っている連絡先をこの携帯電話でも使えるようになります。"</string>
@@ -163,8 +163,7 @@
     <string name="detailIncomingCallsGoToVoicemail">"直接ボイスメールに送信します"</string>
     <string name="detailsRingtone">"<xliff:g id="RINGTONE_NAME">%s</xliff:g>に設定"</string>
     <string name="callBack">"コールバック"</string>
-    <!-- no translation found for callAgain (3197312117049874778) -->
-    <skip />
+    <string name="callAgain">"再発信"</string>
     <string name="returnCall">"発信"</string>
     <string name="callDetailsDurationFormat">"<xliff:g id="MINUTES">%s</xliff:g>分<xliff:g id="SECONDS">%s</xliff:g>秒"</string>
     <!-- no translation found for favoritesFrquentSeparator (5007070838253932139) -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index e43842c..c202eda 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -31,4 +31,8 @@
         <item name="android:src">@drawable/ic_btn_round_more</item>
     </style>
 
+    <style name="TallTitleBarTheme" parent="android:Theme.NoTitleBar">
+        <item name="android:windowContentOverlay">@null</item>
+    </style>
+
 </resources>
diff --git a/src/com/android/contacts/ContactsListActivity.java b/src/com/android/contacts/ContactsListActivity.java
index 5ba0ec5..a13b9d8 100644
--- a/src/com/android/contacts/ContactsListActivity.java
+++ b/src/com/android/contacts/ContactsListActivity.java
@@ -16,6 +16,8 @@
 
 package com.android.contacts;
 
+import static com.android.contacts.ShowOrCreateActivity.QUERY_KIND_EMAIL_OR_IM;
+
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.ListActivity;
@@ -32,6 +34,7 @@
 import android.content.SharedPreferences;
 import android.database.CharArrayBuffer;
 import android.database.Cursor;
+import android.database.CursorWrapper;
 import android.graphics.Bitmap;
 import android.graphics.BitmapFactory;
 import android.net.Uri;
@@ -70,8 +73,6 @@
 import android.widget.SectionIndexer;
 import android.widget.TextView;
 
-import static com.android.contacts.ShowOrCreateActivity.QUERY_KIND_EMAIL_OR_IM;
-
 import java.lang.ref.SoftReference;
 import java.lang.ref.WeakReference;
 import java.util.ArrayList;
@@ -1039,7 +1040,7 @@
             } else {
                 intent.putExtra(Intent.EXTRA_SHORTCUT_ICON_RESOURCE,
                         Intent.ShortcutIconResource.fromContext(this,
-                                R.drawable.ic_launcher_contacts));
+                                R.drawable.ic_launcher_shortcut_contact));
             }
             setResult(RESULT_OK, intent);
         } else {
@@ -1414,6 +1415,7 @@
         private CharSequence[] mLocalizedLabels;
         private boolean mDisplayPhotos = false;
         private SparseArray<SoftReference<Bitmap>> mBitmapCache = null;
+        private int mFrequentSeparatorPos = ListView.INVALID_POSITION;
 
         public ContactItemListAdapter(Context context) {
             super(context, R.layout.contacts_list_item, null, false);
@@ -1486,6 +1488,45 @@
         }
 
         @Override
+        public int getItemViewType(int position) {
+            if (position == mFrequentSeparatorPos) {
+                // We don't want the separator view to be recycled.
+                return IGNORE_ITEM_VIEW_TYPE;
+            }
+            return super.getItemViewType(position);
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            if (!mDataValid) {
+                throw new IllegalStateException(
+                        "this should only be called when the cursor is valid");
+            }
+
+            // Handle the separator specially
+            if (position == mFrequentSeparatorPos) {
+                LayoutInflater inflater =
+                        (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
+                TextView view = (TextView) inflater.inflate(R.layout.list_separator, parent, false);
+                view.setText(R.string.favoritesFrquentSeparator);
+                return view;
+            }
+
+            if (!mCursor.moveToPosition(getRealPosition(position))) {
+                throw new IllegalStateException("couldn't move cursor to position " + position);
+            }
+            
+            View v;
+            if (convertView == null) {
+                v = newView(mContext, mCursor, parent);
+            } else {
+                v = convertView;
+            }
+            bindView(v, mContext, mCursor);
+            return v;
+        }
+
+        @Override
         public View newView(Context context, Cursor cursor, ViewGroup parent) {
             final View view = super.newView(context, cursor, parent);
 
@@ -1549,27 +1590,18 @@
 
             // Set the proper icon (star or presence or nothing)
             ImageView presenceView = cache.presenceView;
-            if (mMode != MODE_STREQUENT) {
-                if ((mMode & MODE_MASK_NO_PRESENCE) == 0) {
-                    int serverStatus;
-                    if (!cursor.isNull(SERVER_STATUS_COLUMN_INDEX)) {
-                        serverStatus = cursor.getInt(SERVER_STATUS_COLUMN_INDEX);
-                        presenceView.setImageResource(
-                                Presence.getPresenceIconResourceId(serverStatus));
-                        presenceView.setVisibility(View.VISIBLE);
-                    } else {
-                        presenceView.setVisibility(View.GONE);
-                    }
-                } else {
-                    presenceView.setVisibility(View.GONE);
-                }
-            } else {
-                if (cursor.getInt(STARRED_COLUMN_INDEX) != 0) {
-                    presenceView.setImageResource(R.drawable.star_on);
+            if ((mMode & MODE_MASK_NO_PRESENCE) == 0) {
+                int serverStatus;
+                if (!cursor.isNull(SERVER_STATUS_COLUMN_INDEX)) {
+                    serverStatus = cursor.getInt(SERVER_STATUS_COLUMN_INDEX);
+                    presenceView.setImageResource(
+                            Presence.getPresenceIconResourceId(serverStatus));
                     presenceView.setVisibility(View.VISIBLE);
                 } else {
                     presenceView.setVisibility(View.GONE);
                 }
+            } else {
+                presenceView.setVisibility(View.GONE);
             }
 
             // Set the photo, if requested
@@ -1602,13 +1634,29 @@
                 if (photo != null) {
                     cache.photoView.setImageBitmap(photo);
                 } else {
-                    cache.photoView.setImageResource(R.drawable.ic_contact_picture);
+                    cache.photoView.setImageResource(R.drawable.ic_contact_list_picture);
                 }
             }
         }
 
         @Override
         public void changeCursor(Cursor cursor) {
+            // Get the split between starred and frequent items, if the mode is strequent
+            mFrequentSeparatorPos = ListView.INVALID_POSITION;
+            if (cursor != null && cursor.getCount() > 0 && mMode == MODE_STREQUENT) {
+                cursor.move(-1);
+                for (int i = 0; cursor.moveToNext(); i++) {
+                    int starred = cursor.getInt(STARRED_COLUMN_INDEX);
+                    if (starred == 0) {
+                        if (i > 0) {
+                            // Only add the separator when there are starred items present
+                            mFrequentSeparatorPos = i;
+                        }
+                        break;
+                    }
+                }
+            }
+
             super.changeCursor(cursor);
 
             // Update the indexer for the fast scroll widget
@@ -1656,7 +1704,7 @@
                 return mIndexer.getSections();
            }
         }
-        
+
         public int getPositionForSection(int sectionIndex) {
             if (mMode == MODE_STREQUENT) {
                 return 0;
@@ -1673,13 +1721,56 @@
 
             return mIndexer.getPositionForSection(sectionIndex);
         }
-        
+
         public int getSectionForPosition(int position) {
             // Note: JapaneseContactListIndexer depends on the fact
             // this method always returns 0. If you change this,
             // please care it too.
             return 0;
-        }        
+        }
+
+        @Override
+        public boolean areAllItemsEnabled() {
+            return mMode != MODE_STREQUENT;
+        }
+
+        @Override
+        public boolean isEnabled(int position) {
+            return position != mFrequentSeparatorPos;
+        }
+
+        @Override
+        public int getCount() {
+            if (mFrequentSeparatorPos != ListView.INVALID_POSITION) {
+                return super.getCount() + 1;
+            } else {
+                return super.getCount();
+            }
+        }
+        
+        private int getRealPosition(int pos) {
+            if (mFrequentSeparatorPos == ListView.INVALID_POSITION) {
+                // No separator, identity map
+                return pos;
+            } else if (pos <= mFrequentSeparatorPos) {
+                // Before or at the separator, identity map
+                return pos;
+            } else {
+                // After the separator, remove 1 from the pos to get the real underlying pos
+                return pos - 1;
+            }
+            
+        }
+        
+        @Override
+        public Object getItem(int pos) {
+            return super.getItem(getRealPosition(pos));
+        }
+        
+        @Override
+        public long getItemId(int pos) {
+            return super.getItemId(getRealPosition(pos)); 
+        }
     }
 }
 
diff --git a/src/com/android/contacts/ContactsLiveFolders.java b/src/com/android/contacts/ContactsLiveFolders.java
index 8ca199a..d437e80 100644
--- a/src/com/android/contacts/ContactsLiveFolders.java
+++ b/src/com/android/contacts/ContactsLiveFolders.java
@@ -39,7 +39,7 @@
             if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
                 setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
                         getString(R.string.liveFolder_favorites_label),
-                        R.drawable.ic_launcher_contacts_starred));
+                        R.drawable.ic_launcher_folder_live_contacts_starred));
             } else {
                 setResult(RESULT_CANCELED);
             }
@@ -62,7 +62,7 @@
             if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
                 setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
                         getString(R.string.liveFolder_phones_label),
-                        R.drawable.ic_launcher_contacts_phones));
+                        R.drawable.ic_launcher_folder_live_contacts_phone));
             } else {
                 setResult(RESULT_CANCELED);
             }
@@ -85,7 +85,7 @@
             if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
                 setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
                         getString(R.string.liveFolder_all_label),
-                        R.drawable.ic_launcher_contacts));
+                        R.drawable.ic_launcher_folder_live_contacts));
             } else {
                 setResult(RESULT_CANCELED);
             }
diff --git a/src/com/android/contacts/TwelveKeyDialer.java b/src/com/android/contacts/TwelveKeyDialer.java
index c80e67b..ea157fc 100644
--- a/src/com/android/contacts/TwelveKeyDialer.java
+++ b/src/com/android/contacts/TwelveKeyDialer.java
@@ -55,6 +55,7 @@
 import android.view.View;
 import android.view.ViewConfiguration;
 import android.view.ViewGroup;
+import android.view.inputmethod.InputMethodManager;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.EditText;
@@ -321,8 +322,9 @@
         if (!TextUtils.isEmpty(dialString)) {
             Editable digits = mDigits.getText();
             digits.replace(0, digits.length(), dialString);
-            mDigits.setCompoundDrawablesWithIntrinsicBounds(
-                    getResources().getDrawable(R.drawable.ic_dial_number), null, null, null);
+            // for some reason this isn't getting called in the digits.replace call above..
+            // but in any case, this will make sure the background drawable looks right
+            afterTextChanged(digits);
         }
     }
 
@@ -426,6 +428,19 @@
     }
 
     @Override
+    public void onWindowFocusChanged(boolean hasFocus) {
+        if (hasFocus) {
+            // Hide soft keyboard, if visible (it's fugly over button dialer).
+            // The only known case where this will be true is when launching the dialer with
+            // ACTION_DIAL via a soft keyboard.  we dismiss it here because we don't
+            // have a window token yet in onCreate / onNewIntent
+            InputMethodManager inputMethodManager = (InputMethodManager)
+                    getSystemService(Context.INPUT_METHOD_SERVICE);
+            inputMethodManager.hideSoftInputFromWindow(mDigits.getWindowToken(), 0);            
+        }
+    }
+
+    @Override
     protected void onPause() {
         super.onPause();
 
