diff --git a/res/layout/call_detail_header.xml b/res/layout/call_detail_header.xml
index 5931445..6eceb80 100644
--- a/res/layout/call_detail_header.xml
+++ b/res/layout/call_detail_header.xml
@@ -59,7 +59,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textColor="?attr/call_log_secondary_text_color"
-            android:textSize="@dimen/call_log_secondary_text_size"
+            android:textSize="@dimen/call_log_detail_text_size"
             android:layout_marginBottom="1dp"
             android:singleLine="true" />
 
@@ -68,7 +68,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:textColor="?attr/call_log_secondary_text_color"
-            android:textSize="@dimen/call_log_secondary_text_size"
+            android:textSize="@dimen/call_log_detail_text_size"
             android:singleLine="true"
             android:visibility="gone" />
 
diff --git a/res/layout/call_detail_history_item.xml b/res/layout/call_detail_history_item.xml
index cbe8442..10d9605 100644
--- a/res/layout/call_detail_history_item.xml
+++ b/res/layout/call_detail_history_item.xml
@@ -46,11 +46,11 @@
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="?attr/call_log_secondary_text_color"
-        android:textSize="@dimen/call_log_secondary_text_size" />
+        android:textSize="@dimen/call_log_detail_text_size" />
     <TextView
         android:id="@+id/duration"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:textColor="?attr/call_log_secondary_text_color"
-        android:textSize="@dimen/call_log_secondary_text_size" />
+        android:textSize="@dimen/call_log_detail_text_size" />
 </LinearLayout>
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index ec512b6..95de268 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -30,8 +30,8 @@
         android:layout_marginStart="@dimen/call_log_start_margin"
         android:layout_marginEnd="@dimen/call_log_outer_margin"
         android:fontFamily="sans-serif-medium"
-        android:textColor="?attr/call_log_secondary_text_color"
-        android:textSize="@dimen/call_log_secondary_text_size"
+        android:textColor="@color/call_log_day_group_heading_color"
+        android:textSize="@dimen/call_log_day_group_heading_size"
         android:paddingTop="@dimen/call_log_day_group_padding_top"
         android:paddingBottom="@dimen/call_log_day_group_padding_bottom" />
 
@@ -83,21 +83,10 @@
                         android:layout_height="wrap_content"
                         android:layout_marginBottom="@dimen/call_log_name_margin_bottom"
                         android:layout_marginEnd="@dimen/call_log_icon_margin"
-                        android:textColor="?attr/call_log_primary_text_color"
+                        android:textColor="@color/call_log_primary_color"
                         android:textSize="@dimen/call_log_primary_text_size"
                         android:singleLine="true" />
 
-                    <TextView
-                        android:id="@+id/voicemail_transcription"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_marginEnd="@dimen/call_log_icon_margin"
-                        android:textColor="?attr/call_log_secondary_text_color"
-                        android:textSize="@dimen/call_log_secondary_text_size"
-                        android:singleLine="true"
-                        android:ellipsize="marquee"
-                        android:visibility="gone" />
-
                     <LinearLayout
                         android:id="@+id/call_type"
                         android:layout_width="wrap_content"
@@ -118,8 +107,8 @@
                             android:layout_height="wrap_content"
                             android:layout_marginEnd="@dimen/call_log_icon_margin"
                             android:layout_gravity="center_vertical"
-                            android:textColor="?attr/call_log_secondary_text_color"
-                            android:textSize="@dimen/call_log_secondary_text_size"
+                            android:textColor="@color/call_log_detail_color"
+                            android:textSize="@dimen/call_log_detail_text_size"
                             android:singleLine="true" />
 
                     </LinearLayout>
@@ -130,10 +119,22 @@
                         android:layout_height="wrap_content"
                         android:layout_marginEnd="@dimen/call_log_icon_margin"
                         android:textColor="?attr/call_log_secondary_text_color"
-                        android:textSize="@dimen/call_log_secondary_text_size"
+                        android:textSize="@dimen/call_log_detail_text_size"
                         android:visibility="gone"
                         android:singleLine="true" />
 
+                    <TextView
+                      android:id="@+id/voicemail_transcription"
+                      android:layout_width="wrap_content"
+                      android:layout_height="wrap_content"
+                      android:layout_marginTop="@dimen/call_log_icon_margin"
+                      android:textColor="@color/call_log_voicemail_transcript_color"
+                      android:textSize="@dimen/call_log_voicemail_transcription_text_size"
+                      android:ellipsize="marquee"
+                      android:visibility="gone"
+                      android:singleLine="false"
+                      android:maxLines="10"/>
+
                 </LinearLayout>
 
                 <ImageView
diff --git a/res/layout/call_log_list_item_actions.xml b/res/layout/call_log_list_item_actions.xml
index 16a712b..262a176 100644
--- a/res/layout/call_log_list_item_actions.xml
+++ b/res/layout/call_log_list_item_actions.xml
@@ -19,6 +19,7 @@
     android:gravity="center_vertical"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:paddingBottom="@dimen/call_log_actions_bottom_padding"
     android:orientation="vertical"
     android:visibility="visible"
     android:importantForAccessibility="1">
@@ -35,16 +36,27 @@
 
     <LinearLayout
         android:id="@+id/call_action"
+        android:paddingTop="@dimen/call_log_actions_top_padding"
         style="@style/CallLogActionStyle">
 
         <ImageView
             style="@style/CallLogActionIconStyle"
             android:src="@drawable/ic_call_24dp" />
 
-        <TextView
-            android:id="@+id/call_action_text"
-            style="@style/CallLogActionTextStyle"
-            android:text="@string/description_call_log_call_action" />
+        <LinearLayout
+          android:layout_width="match_parent"
+          android:layout_height="wrap_content"
+          android:orientation="vertical"
+          android:gravity="center_vertical">
+            <TextView
+                android:id="@+id/call_action_text"
+                style="@style/CallLogActionTextStyle"
+                android:text="@string/description_call_log_call_action" />
+
+            <TextView
+              android:id="@+id/call_type_or_location_text"
+              style="@style/CallLogActionSupportTextStyle"/>
+        </LinearLayout>
 
     </LinearLayout>
 
diff --git a/res/layout/voicemail_promo_card.xml b/res/layout/voicemail_promo_card.xml
index 891f096..ba4ac59 100644
--- a/res/layout/voicemail_promo_card.xml
+++ b/res/layout/voicemail_promo_card.xml
@@ -57,7 +57,7 @@
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:textColor="@color/background_dialer_white"
-                    android:textSize="@dimen/call_log_secondary_text_size"
+                    android:textSize="@dimen/call_log_detail_text_size"
                     android:text="@string/visual_voicemail_text"
                     android:lineSpacingExtra="@dimen/promo_card_line_spacing"
                     android:singleLine="false"/>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index d0f7ed0..8b7b150 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -33,8 +33,20 @@
     <color name="setting_background_color">#ffffff</color>
     <color name="setting_button_color">#eee</color>
 
+    <!-- 54% black -->
+    <color name="call_log_icon_tint">#8a000000</color>
+    <!-- 87% black -->
+    <color name="call_log_primary_color">#de000000</color>
+    <!-- 54% black -->
+    <color name="call_log_detail_color">#8a000000</color>
+    <!-- 87% black -->
+    <color name="call_log_voicemail_transcript_color">#de000000</color>
     <!-- 70% black -->
-    <color name="call_log_icon_tint">#b3000000</color>
+    <color name="call_log_action_color">#b3000000</color>
+    <!-- 54% black -->
+    <color name="call_log_day_group_heading_color">#8a000000</color>
+    <!-- 87% black-->
+    <color name="call_log_unread_text_color">#de000000</color>
     <color name="call_log_list_item_primary_action_icon_tint">@color/call_log_icon_tint</color>
     <!-- Color of the text describing an unconsumed missed call. -->
     <color name="call_log_missed_call_highlight_color">@color/dialer_red_highlight_color</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index d3c52a3..18f33d5 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -108,17 +108,19 @@
     <dimen name="search_list_padding_top">16dp</dimen>
     <dimen name="search_box_elevation">3dp</dimen>
 
-    <dimen name="call_log_action_height">48dp</dimen>
     <dimen name="call_log_action_icon_margin_start">16dp</dimen>
     <dimen name="call_log_action_icon_dimen">24dp</dimen>
     <dimen name="call_log_action_horizontal_padding">24dp</dimen>
 
     <dimen name="call_log_actions_left_padding">64dp</dimen>
-    <dimen name="call_log_primary_text_size">14sp</dimen>
-    <dimen name="call_log_secondary_text_size">14sp</dimen>
-    <dimen name="call_log_list_item_actions_text_size">12sp</dimen>
+    <dimen name="call_log_actions_top_padding">8dp</dimen>
+    <dimen name="call_log_actions_bottom_padding">8dp</dimen>
+    <dimen name="call_log_primary_text_size">16sp</dimen>
+    <dimen name="call_log_detail_text_size">12sp</dimen>
+    <dimen name="call_log_day_group_heading_size">14sp</dimen>
+    <dimen name="call_log_voicemail_transcription_text_size">14sp</dimen>
     <!-- Height of the call log actions section for each call log entry -->
-    <dimen name="call_log_action_height">44dp</dimen>
+    <dimen name="call_log_action_height">48dp</dimen>
     <dimen name="call_log_day_group_padding_top">15dp</dimen>
     <dimen name="call_log_day_group_padding_bottom">9dp</dimen>
 
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3d86442..7828a20 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -222,14 +222,19 @@
         <item name="android:layout_height">wrap_content</item>
         <item name="android:paddingStart">@dimen/call_log_action_horizontal_padding</item>
         <item name="android:paddingEnd">@dimen/call_log_action_horizontal_padding</item>
-        <item name="android:textColor">?attr/call_log_secondary_text_color</item>
-        <item name="android:textSize">@dimen/call_log_list_item_actions_text_size</item>
-        <item name="android:fontFamily">"sans-serif-medium"</item>
+        <item name="android:textColor">@color/call_log_action_color</item>
+        <item name="android:textSize">@dimen/call_log_primary_text_size</item>
+        <item name="android:fontFamily">"sans-serif"</item>
         <item name="android:focusable">true</item>
         <item name="android:singleLine">true</item>
         <item name="android:importantForAccessibility">no</item>
     </style>
 
+    <style name="CallLogActionSupportTextStyle" parent="@style/CallLogActionTextStyle">
+        <item name="android:textSize">@dimen/call_log_detail_text_size</item>
+        <item name="android:textColor">@color/call_log_detail_color</item>
+    </style>
+
     <style name="CallLogActionIconStyle">
         <item name="android:layout_width">@dimen/call_log_action_icon_dimen</item>
         <item name="android:layout_height">@dimen/call_log_action_icon_dimen</item>
@@ -299,7 +304,7 @@
 
     <style name="PromoCardActionStyle" parent="TextActionStyle">
         <item name="android:textColor">@color/promo_card_text</item>
-        <item name="android:textSize">@dimen/call_log_list_item_actions_text_size</item>
+        <item name="android:textSize">@dimen/call_log_primary_text_size</item>
     </style>
 
     <style name="VoicemailPlaybackLayoutTextStyle">
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index d44e8e7..0893b1c 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -90,6 +90,7 @@
 import com.android.dialer.widget.SearchEditTextLayout;
 import com.android.dialer.widget.SearchEditTextLayout.Callback;
 import com.android.dialerbind.DatabaseHelperManager;
+import com.android.dialerbind.ObjectFactory;
 import com.android.incallui.Call.LogState;
 import com.android.phone.common.animation.AnimUtils;
 import com.android.phone.common.animation.AnimationListenerAdapter;
@@ -110,7 +111,6 @@
         ListsFragment.HostInterface,
         SpeedDialFragment.HostInterface,
         SearchFragment.HostInterface,
-        RegularSearchFragment.CapabilityChecker,
         OnDragDropListener,
         OnPhoneNumberPickerActionListener,
         PopupMenu.OnMenuItemClickListener,
@@ -230,6 +230,7 @@
     private View mVoiceSearchButton;
 
     private String mSearchQuery;
+    private String mDialpadQuery;
 
     private DialerDatabaseHelper mDialerDatabaseHelper;
     private DragDropController mDragDropController;
@@ -604,10 +605,12 @@
         } else if (fragment instanceof SmartDialSearchFragment) {
             mSmartDialSearchFragment = (SmartDialSearchFragment) fragment;
             mSmartDialSearchFragment.setOnPhoneNumberPickerActionListener(this);
+            if (!TextUtils.isEmpty(mDialpadQuery)) {
+                mSmartDialSearchFragment.setAddToContactNumber(mDialpadQuery);
+            }
         } else if (fragment instanceof SearchFragment) {
             mRegularSearchFragment = (RegularSearchFragment) fragment;
             mRegularSearchFragment.setOnPhoneNumberPickerActionListener(this);
-            mRegularSearchFragment.setCapabilityChecker(this);
         } else if (fragment instanceof ListsFragment) {
             mListsFragment = (ListsFragment) fragment;
             mListsFragment.addOnPageChangeListener(this);
@@ -872,7 +875,6 @@
         }
     }
 
-    @Override
     public boolean isNearbyPlacesSearchEnabled() {
         return false;
     }
@@ -1020,7 +1022,7 @@
             if (smartDialSearch) {
                 fragment = new SmartDialSearchFragment();
             } else {
-                fragment = new RegularSearchFragment();
+                fragment = ObjectFactory.newRegularSearchFragment();
                 fragment.setOnTouchListener(new View.OnTouchListener() {
                     @Override
                     public boolean onTouch(View v, MotionEvent event) {
@@ -1144,6 +1146,7 @@
 
     @Override
     public void onDialpadQueryChanged(String query) {
+        mDialpadQuery = query;
         if (mSmartDialSearchFragment != null) {
             mSmartDialSearchFragment.setAddToContactNumber(query);
         }
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index 2bcd8d4..c1923b2 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -40,6 +40,7 @@
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
 import com.android.dialer.TransactionSafeActivity;
+import com.android.dialer.util.DialerUtils;
 
 public class CallLogActivity extends TransactionSafeActivity implements ViewPager.OnPageChangeListener {
     private ViewPager mViewPager;
@@ -63,8 +64,13 @@
         }
 
         @Override
+        public long getItemId(int position) {
+            return getRtlPosition(position);
+        }
+
+        @Override
         public Fragment getItem(int position) {
-            switch (position) {
+            switch (getRtlPosition(position)) {
                 case TAB_INDEX_ALL:
                     return new CallLogFragment(
                             CallLogQueryHandler.CALL_TYPE_ALL, true /* isCallLogActivity */);
@@ -233,4 +239,11 @@
         }
         return null;
     }
+
+    private int getRtlPosition(int position) {
+        if (DialerUtils.isRtl()) {
+            return mViewPagerAdapter.getCount() - 1 - position;
+        }
+        return position;
+    }
 }
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 703b18f..0353170 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -367,7 +367,7 @@
      * TODO: This gets called 20-30 times when Dialer starts up for a single call log entry and
      * should not. It invokes cross-process methods and the repeat execution can get costly.
      *
-     * @param ViewHolder The view corresponding to this entry.
+     * @param viewHolder The view corresponding to this entry.
      * @param position The position of the entry.
      */
     public void onBindViewHolder(ViewHolder viewHolder, int position) {
@@ -419,7 +419,7 @@
                 c.getString(CallLogQuery.ACCOUNT_COMPONENT_NAME),
                 c.getString(CallLogQuery.ACCOUNT_ID));
         final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
-        final ContactInfo cachedContactInfo = mContactInfoHelper.getContactInfo(c);
+        final ContactInfo cachedContactInfo = ContactInfoHelper.getContactInfo(c);
         final boolean isVoicemailNumber =
                 mTelecomCallLogCache.isVoicemailNumber(accountHandle, number);
 
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index b7f068e..dff213b 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -18,20 +18,14 @@
 
 import static android.Manifest.permission.READ_CALL_LOG;
 
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
 import android.app.Activity;
-import android.app.DialogFragment;
 import android.app.Fragment;
 import android.app.KeyguardManager;
 import android.content.ContentResolver;
 import android.content.Context;
-import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.database.ContentObserver;
 import android.database.Cursor;
-import android.graphics.Rect;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
@@ -44,28 +38,16 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup.LayoutParams;
-import android.widget.ListView;
-import android.widget.TextView;
 
 import com.android.contacts.common.GeoUtil;
 import com.android.contacts.common.util.PermissionsUtil;
-import com.android.contacts.common.util.ViewUtil;
 import com.android.dialer.R;
-import com.android.dialer.list.ListsFragment.HostInterface;
-import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.EmptyLoader;
 import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
-import com.android.dialer.voicemail.VoicemailStatusHelper;
-import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
-import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
 import com.android.dialer.widget.EmptyContentView;
 import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
 import com.android.dialerbind.ObjectFactory;
 
-import java.util.List;
-
 /**
  * Displays a list of call log entries. To filter for a particular kind of call
  * (all, missed or voicemails), specify it in the constructor.
diff --git a/src/com/android/dialer/calllog/CallLogListItemHelper.java b/src/com/android/dialer/calllog/CallLogListItemHelper.java
index 8e45dd3..84d0364 100644
--- a/src/com/android/dialer/calllog/CallLogListItemHelper.java
+++ b/src/com/android/dialer/calllog/CallLogListItemHelper.java
@@ -57,7 +57,6 @@
     /**
      * Sets the name, label, and number for a contact.
      *
-     * @param context The application context.
      * @param views the views to populate
      * @param details the details of a phone call needed to fill in the data
      */
@@ -76,6 +75,10 @@
         // when the actions ViewStub is inflated.
         views.nameOrNumber = getNameOrNumber(details);
 
+        // The call type or Location associated with the call. Use when setting text for a
+        // voicemail log's call button
+        views.callTypeOrLocation = mPhoneCallDetailsHelper.getCallTypeOrLocation(details);
+
         // Cache country iso. Used for number filtering.
         views.countryIso = details.countryIso;
     }
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index 0e234e3..b70ea07 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -162,6 +162,12 @@
     public CharSequence nameOrNumber;
 
     /**
+     * The call type or Location associated with the call. Cached here for use when setting text
+     * for a voicemail log's call button
+     */
+    public CharSequence callTypeOrLocation;
+
+    /**
      * Whether this row is for a business or not.
      */
     public boolean isBusiness;
@@ -171,8 +177,6 @@
      */
     public ContactInfo info;
 
-    private static final int VOICEMAIL_TRANSCRIPTION_MAX_LINES = 10;
-
     private final Context mContext;
     private final TelecomCallLogCache mTelecomCallLogCache;
     private final CallLogListItemHelper mCallLogListItemHelper;
@@ -342,8 +346,6 @@
      * Configures the action buttons in the expandable actions ViewStub. The ViewStub is not
      * inflated during initial binding, so click handlers, tags and accessibility text must be set
      * here, if necessary.
-     *
-     * @param callLogItem The call log list item view.
      */
     public void inflateActionViewStub() {
         ViewStub stub = (ViewStub) rootView.findViewById(R.id.call_log_entry_actions_stub);
@@ -427,6 +429,14 @@
                     .setText(TextUtils.expandTemplate(
                             mContext.getString(R.string.call_log_action_call),
                             nameOrNumber));
+            TextView callTypeOrLocationView = ((TextView) callButtonView.findViewById(
+                    R.id.call_type_or_location_text));
+            if (callType == Calls.VOICEMAIL_TYPE && !TextUtils.isEmpty(callTypeOrLocation)) {
+                callTypeOrLocationView.setText(callTypeOrLocation);
+                callTypeOrLocationView.setVisibility(View.VISIBLE);
+            } else {
+                callTypeOrLocationView.setVisibility(View.GONE);
+            }
             callButtonView.setVisibility(View.VISIBLE);
         } else {
             callButtonView.setVisibility(View.GONE);
@@ -455,9 +465,13 @@
             voicemailPlaybackView.setVisibility(View.GONE);
         }
 
-        detailsButtonView.setVisibility(View.VISIBLE);
-        detailsButtonView.setTag(
+        if (callType == Calls.VOICEMAIL_TYPE) {
+            detailsButtonView.setVisibility(View.GONE);
+        } else {
+            detailsButtonView.setVisibility(View.VISIBLE);
+            detailsButtonView.setTag(
                 IntentProvider.getCallDetailIntentProvider(rowId, callIds, null));
+        }
 
         if (info != null && UriUtils.isEncodedContactUri(info.lookupUri)) {
             createNewContactButtonView.setTag(IntentProvider.getAddContactIntentProvider(
@@ -495,7 +509,7 @@
      * If the action views have never been shown yet for this view, inflate the view stub.
      */
     public void showActions(boolean show) {
-        expandVoicemailTranscriptionView(show);
+        showOrHideVoicemailTranscriptionView(show);
 
         if (show) {
             // Inflate the view stub if necessary, and wire up the event handlers.
@@ -514,17 +528,17 @@
         updatePrimaryActionButton(show);
     }
 
-    public void expandVoicemailTranscriptionView(boolean isExpanded) {
+    public void showOrHideVoicemailTranscriptionView(boolean isExpanded) {
         if (callType != Calls.VOICEMAIL_TYPE) {
             return;
         }
 
         final TextView view = phoneCallDetailsViews.voicemailTranscriptionView;
-        if (TextUtils.isEmpty(view.getText())) {
+        if (!isExpanded || TextUtils.isEmpty(view.getText())) {
+            view.setVisibility(View.GONE);
             return;
         }
-        view.setMaxLines(isExpanded ? VOICEMAIL_TRANSCRIPTION_MAX_LINES : 1);
-        view.setSingleLine(!isExpanded);
+        view.setVisibility(View.VISIBLE);
     }
 
     public void updatePhoto() {
diff --git a/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java b/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java
index 3792056..b16079a 100644
--- a/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/calllog/PhoneCallDetailsHelper.java
@@ -16,6 +16,7 @@
 
 package com.android.dialer.calllog;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.collect.Lists;
 
 import android.content.Context;
@@ -50,6 +51,9 @@
     private final Resources mResources;
     /** The injected current time in milliseconds since the epoch. Used only by tests. */
     private Long mCurrentTimeMillisForTest;
+
+    private CharSequence mPhoneTypeLabelForTest;
+
     private final TelecomCallLogCache mTelecomCallLogCache;
 
     /** Calendar used to construct dates */
@@ -138,12 +142,9 @@
 
         views.nameView.setText(nameText);
 
-        if (isVoicemail && !TextUtils.isEmpty(details.transcription)) {
-            views.voicemailTranscriptionView.setText(details.transcription);
-            views.voicemailTranscriptionView.setVisibility(View.VISIBLE);
-        } else {
-            views.voicemailTranscriptionView.setText(null);
-            views.voicemailTranscriptionView.setVisibility(View.GONE);
+        if (isVoicemail) {
+            views.voicemailTranscriptionView.setText(TextUtils.isEmpty(details.transcription) ? null
+                    : details.transcription);
         }
 
         // Bold if not read
@@ -151,10 +152,14 @@
         views.nameView.setTypeface(typeface);
         views.voicemailTranscriptionView.setTypeface(typeface);
         views.callLocationAndDate.setTypeface(typeface);
+        views.callLocationAndDate.setTextColor(mResources.getColor(
+                details.isRead ? R.color.call_log_detail_color : R.color.call_log_unread_text_color,
+                mContext.getTheme()));
     }
 
     /**
-     * Builds a string containing the call location and date.
+     * Builds a string containing the call location and date. For voicemail logs only the call date
+     * is returned because location information is displayed in the call action button
      *
      * @param details The call details.
      * @return The call location and date string.
@@ -162,15 +167,18 @@
     private CharSequence getCallLocationAndDate(PhoneCallDetails details) {
         mDescriptionItems.clear();
 
-        // Get type of call (ie mobile, home, etc) if known, or the caller's location.
-        CharSequence callTypeOrLocation = getCallTypeOrLocation(details);
+        if (details.callTypes[0] != Calls.VOICEMAIL_TYPE) {
+            // Get type of call (ie mobile, home, etc) if known, or the caller's location.
+            CharSequence callTypeOrLocation = getCallTypeOrLocation(details);
 
-        // Only add the call type or location if its not empty.  It will be empty for unknown
-        // callers.
-        if (!TextUtils.isEmpty(callTypeOrLocation)) {
-            mDescriptionItems.add(callTypeOrLocation);
+            // Only add the call type or location if its not empty.  It will be empty for unknown
+            // callers.
+            if (!TextUtils.isEmpty(callTypeOrLocation)) {
+                mDescriptionItems.add(callTypeOrLocation);
+            }
         }
-        // The date of this call, relative to the current time.
+
+        // The date of this call
         mDescriptionItems.add(getCallDate(details));
 
         // Create a comma separated list from the call type or location, and call date.
@@ -197,8 +205,8 @@
             } else if (!(details.numberType == Phone.TYPE_CUSTOM
                     && TextUtils.isEmpty(details.numberLabel))) {
                 // Get type label only if it will not be "Custom" because of an empty number label.
-                numberFormattedLabel = Phone.getTypeLabel(
-                        mResources, details.numberType, details.numberLabel);
+                numberFormattedLabel = MoreObjects.firstNonNull(mPhoneTypeLabelForTest,
+                        Phone.getTypeLabel(mResources, details.numberType, details.numberLabel));
             }
         }
 
@@ -208,6 +216,11 @@
         return numberFormattedLabel;
     }
 
+    @NeededForTesting
+    public void setPhoneTypeLabelForTest(CharSequence phoneTypeLabel) {
+        this.mPhoneTypeLabelForTest = phoneTypeLabel;
+    }
+
     /**
      * Get the call date/time of the call. For the call log this is relative to the current time.
      * e.g. 3 minutes ago. For voicemail, see {@link #getGranularDateTime(PhoneCallDetails)}
diff --git a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java
index e12fd6b..5740305 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumberFragment.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumberFragment.java
@@ -21,7 +21,9 @@
 import android.content.Intent;
 import android.content.Loader;
 import android.database.Cursor;
+import android.os.AsyncTask;
 import android.os.Bundle;
+import android.provider.ContactsContract.Contacts;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -32,7 +34,16 @@
 public class BlockedNumberFragment extends ListFragment implements
         LoaderManager.LoaderCallbacks<Cursor>, View.OnClickListener {
 
+    private static class SendToVoicemailContactQuery {
+        static final String[] PROJECTION = {
+            Contacts._ID
+        };
+
+        static final String SELECT_SEND_TO_VOICEMAIL_TRUE = Contacts.SEND_TO_VOICEMAIL + "=1";
+    }
+
     private BlockedNumberAdapter mAdapter;
+    private View mImportSettings;
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
@@ -47,6 +58,8 @@
 
         getActivity().findViewById(R.id.add_number_button).setOnClickListener(this);
         getListView().getEmptyView().findViewById(R.id.add_number_button).setOnClickListener(this);
+
+        mImportSettings = getActivity().findViewById(R.id.importsettings);
     }
 
     @Override
@@ -62,6 +75,12 @@
     }
 
     @Override
+    public void onResume() {
+        super.onResume();
+        checkForSendToVoicemailContact();
+    }
+
+    @Override
     public View onCreateView(
             LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.blocked_number_fragment, container, false);
@@ -102,4 +121,44 @@
             manageBlockedNumbersActivity.enterSearchUi();
         }
     }
+
+    /**
+     * Checks if there exists a contact with {@code Contacts.SEND_TO_VOICEMAIL} set to true,
+     * and updates the visibility of the import settings buttons accordingly.
+     */
+    private void checkForSendToVoicemailContact() {
+        final AsyncTask task = new AsyncTask<Object, Void, Boolean>() {
+            @Override
+            public Boolean doInBackground(Object[]  params) {
+                if (getActivity() == null) {
+                    return false;
+                }
+
+                final Cursor cursor = getActivity().getContentResolver().query(
+                        Contacts.CONTENT_URI,
+                        SendToVoicemailContactQuery.PROJECTION,
+                        SendToVoicemailContactQuery.SELECT_SEND_TO_VOICEMAIL_TRUE,
+                        null,
+                        null);
+
+                boolean hasSendToVoicemailContacts = false;
+                if (cursor != null) {
+                    try {
+                        hasSendToVoicemailContacts = cursor.getCount() > 0;
+                    } finally {
+                        cursor.close();
+                    }
+                }
+
+                return hasSendToVoicemailContacts;
+            }
+
+            @Override
+            public void onPostExecute(Boolean hasSendToVoicemailContact) {
+                final int visibility = hasSendToVoicemailContact ? View.VISIBLE : View.GONE;
+                mImportSettings.setVisibility(visibility);
+            }
+        };
+        task.execute();
+    }
 }
diff --git a/src/com/android/dialer/list/RegularSearchFragment.java b/src/com/android/dialer/list/RegularSearchFragment.java
index 33ce95f..6b89ef0 100644
--- a/src/com/android/dialer/list/RegularSearchFragment.java
+++ b/src/com/android/dialer/list/RegularSearchFragment.java
@@ -16,7 +16,6 @@
 package com.android.dialer.list;
 
 import static android.Manifest.permission.READ_CONTACTS;
-import static android.Manifest.permission.ACCESS_FINE_LOCATION;
 
 import android.app.Activity;
 import android.content.pm.PackageManager;
@@ -38,7 +37,7 @@
 public class RegularSearchFragment extends SearchFragment
         implements OnEmptyViewActionButtonClickedListener {
 
-    private static final int PERMISSION_REQUEST_CODE = 1;
+    public static final int PERMISSION_REQUEST_CODE = 1;
 
     private static final int SEARCH_DIRECTORY_RESULT_LIMIT = 5;
 
@@ -49,8 +48,7 @@
         public boolean isNearbyPlacesSearchEnabled();
     }
 
-    private String mPermissionToRequest;
-    private CapabilityChecker mCapabilityChecker;
+    protected String mPermissionToRequest;
 
     public RegularSearchFragment() {
         configureDirectorySearch();
@@ -64,7 +62,6 @@
 
     @Override
     public void onDetach() {
-        mCapabilityChecker = null;
         super.onDetach();
     }
 
@@ -110,13 +107,6 @@
                 descriptionResource = R.string.permission_no_search;
                 listener = this;
                 mPermissionToRequest = READ_CONTACTS;
-            } else if (isNearbyPlacesSearchEnabled()
-                    && !PermissionsUtil.hasPermission(getActivity(), ACCESS_FINE_LOCATION)) {
-                imageResource = R.drawable.empty_contacts;
-                actionLabelResource = R.string.permission_single_turn_on;
-                descriptionResource = R.string.permission_no_location_for_search;
-                listener = this;
-                mPermissionToRequest = ACCESS_FINE_LOCATION;
             } else {
                 imageResource = EmptyContentView.NO_IMAGE;
                 actionLabelResource = EmptyContentView.NO_LABEL;
@@ -141,8 +131,7 @@
             return;
         }
 
-        if (READ_CONTACTS.equals(mPermissionToRequest)
-                || ACCESS_FINE_LOCATION.equals(mPermissionToRequest)) {
+        if (READ_CONTACTS.equals(mPermissionToRequest)) {
             requestPermissions(new String[] {mPermissionToRequest}, PERMISSION_REQUEST_CODE);
         }
     }
@@ -164,15 +153,4 @@
         return isRemoteDirectory ? LogState.INITIATION_REMOTE_DIRECTORY
                 : LogState.INITIATION_REGULAR_SEARCH;
     }
-
-    public void setCapabilityChecker(CapabilityChecker capabilityChecker) {
-        mCapabilityChecker = capabilityChecker;
-    }
-
-    private boolean isNearbyPlacesSearchEnabled() {
-        if (mCapabilityChecker != null) {
-            return mCapabilityChecker.isNearbyPlacesSearchEnabled();
-        }
-        return false;
-    }
 }
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index 8b8b7c5..9b4e20d 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -625,7 +625,7 @@
      * playing.
      */
     public void resumePlayback() {
-        if (mView == null) {
+        if (mView == null || mContext == null) {
             return;
         }
 
@@ -638,7 +638,7 @@
 
         mIsPlaying = true;
 
-        if (!mMediaPlayer.isPlaying()) {
+        if (mMediaPlayer != null && !mMediaPlayer.isPlaying()) {
             // Clamp the start position between 0 and the duration.
             mPosition = Math.max(0, Math.min(mPosition, mDuration.get()));
 
diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java
index c64afe8..f346a7e 100644
--- a/src/com/android/dialerbind/ObjectFactory.java
+++ b/src/com/android/dialerbind/ObjectFactory.java
@@ -22,6 +22,7 @@
 
 import com.android.dialer.calllog.CallLogAdapter;
 import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.list.RegularSearchFragment;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.service.CachedNumberLookupService;
 import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
@@ -65,4 +66,8 @@
         // no-op
         return null;
     }
+
+    public static RegularSearchFragment newRegularSearchFragment() {
+        return new RegularSearchFragment();
+    }
 }
diff --git a/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java
index 263642c..b255edf 100644
--- a/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/PhoneCallDetailsHelperTest.java
@@ -116,14 +116,14 @@
     // Voicemail date string has 3 different formats depending on how long ago the call was placed
     public void testSetVoicemailPhoneCallDetails_Today() {
         setVoicemailPhoneCallDetailsWithDate(System.currentTimeMillis());
-        assertDateEquals("Today at");
+        assertLocationAndDateContains("Today at");
     }
 
     public void testSetVoicemailPhoneCallDetails_WithinCurrentYear() {
         mHelper.setCurrentTimeForTest(INJECTED_CURRENT_DATE);
         String formattedTestDate = "Jun 3 at 1:00 PM";
         setVoicemailPhoneCallDetailsWithDate(TEST_DATE);
-        assertDateEquals(formattedTestDate);
+        assertLocationAndDateContains(formattedTestDate);
     }
 
     public void testSetVoicemailPhoneCallDetails_OutsideCurrentYear() {
@@ -131,7 +131,12 @@
         long testDate = new GregorianCalendar(2009, 5, 3, 13, 0, 0).getTimeInMillis();
         String formattedTestDate = "Jun 3, 2009 at 1:00 PM";
         setVoicemailPhoneCallDetailsWithDate(testDate);
-        assertDateEquals(formattedTestDate);
+        assertLocationAndDateContains(formattedTestDate);
+    }
+
+    public void testVoicemailLocationNotShownWithDate() {
+        setVoicemailPhoneCallDetailsWithDate(TEST_DATE);
+        assertLocationAndDateExactEquals("Jun 3 at 1:00 PM");
     }
 
     /** Asserts that a char sequence is actually a Spanned corresponding to the expected HTML. */
@@ -150,19 +155,19 @@
 
         setPhoneCallDetailsWithDate(
                 new GregorianCalendar(2011, 5, 3, 13, 0, 0).getTimeInMillis());
-        assertDateEquals("0 min. ago");
+        assertLocationAndDateContains("0 min. ago");
 
         setPhoneCallDetailsWithDate(
                 new GregorianCalendar(2011, 5, 3, 12, 0, 0).getTimeInMillis());
-        assertDateEquals("1 hr. ago");
+        assertLocationAndDateContains("1 hr. ago");
 
         setPhoneCallDetailsWithDate(
                 new GregorianCalendar(2011, 5, 2, 13, 0, 0).getTimeInMillis());
-        assertDateEquals("Yesterday");
+        assertLocationAndDateContains("Yesterday");
 
         setPhoneCallDetailsWithDate(
                 new GregorianCalendar(2011, 5, 1, 13, 0, 0).getTimeInMillis());
-        assertDateEquals("2 days ago");
+        assertLocationAndDateContains("2 days ago");
     }
 
     public void testSetPhoneCallDetails_CallTypeIcons() {
@@ -232,24 +237,24 @@
     public void testSetPhoneCallDetails_Geocode() {
         setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "Pennsylvania");
         assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
-        assertLabelEquals("Pennsylvania"); // The geocode is shown as the label.
+        assertLocationAndDateContains("Pennsylvania"); // The geocode is shown as the label.
     }
 
     public void testSetPhoneCallDetails_NoGeocode() {
         setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", null);
         assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
-        assertLabelEquals(EMPTY_GEOCODE); // The empty geocode is shown as the label.
+        assertLocationAndDateContains(EMPTY_GEOCODE); // The empty geocode is shown as the label.
     }
 
     public void testSetPhoneCallDetails_EmptyGeocode() {
         setPhoneCallDetailsWithNumberAndGeocode("+14125555555", "1-412-555-5555", "");
         assertNameEquals("1-412-555-5555");  // The phone number is shown as the name.
-        assertLabelEquals(EMPTY_GEOCODE); // The empty geocode is shown as the label.
+        assertLocationAndDateContains(EMPTY_GEOCODE); // The empty geocode is shown as the label.
     }
 
     public void testSetPhoneCallDetails_NoGeocodeForVoicemail() {
         setPhoneCallDetailsWithNumberAndGeocode(TEST_VOICEMAIL_NUMBER, "", "United States");
-        assertLabelEquals(EMPTY_GEOCODE); // The empty geocode is shown as the label.
+        assertLocationAndDateContains(EMPTY_GEOCODE); // The empty geocode is shown as the label.
     }
 
     public void testSetPhoneCallDetails_Highlighted() {
@@ -297,6 +302,25 @@
         assertEquals("John Doe", mNameView.getText().toString());
     }
 
+    public void testGetCallTypeOrLocation_Geocode() {
+        assertEquals(TEST_GEOCODE, mHelper.getCallTypeOrLocation(getPhoneCallDetails()));
+    }
+
+    public void testGetCallTypeOrLocation_CallType() {
+        PhoneCallDetails details = getPhoneCallDetails();
+        details.geocode = null;
+        details.numberType = Calls.INCOMING_TYPE;
+        mHelper.setPhoneTypeLabelForTest("mobile");
+        assertEquals("mobile", mHelper.getCallTypeOrLocation(details));
+    }
+
+    public void testGetCallTypeOrLocation_DisplayNumber() {
+        PhoneCallDetails details = getPhoneCallDetails("", Calls.PRESENTATION_ALLOWED,
+                TEST_FORMATTED_NUMBER);
+        details.name = "name";
+        assertEquals(TEST_FORMATTED_NUMBER, mHelper.getCallTypeOrLocation(details));
+    }
+
     /** Asserts that the name text field contains the value of the given string resource. */
     private void assertNameEqualsResource(int resId) {
         assertNameEquals(getContext().getString(resId));
@@ -307,14 +331,14 @@
         assertEquals(text, mViews.nameView.getText().toString());
     }
 
-    /** Asserts that the label text field contains the given string value. */
-    private void assertLabelEquals(String text) {
+    /** Asserts that the location and date text field contains the given string value. */
+    private void assertLocationAndDateContains(String text) {
         assertTrue(mViews.callLocationAndDate.getText().toString().contains(text));
     }
 
-    /** Asserts that the date text field contains the given string value. */
-    private void assertDateEquals(String text) {
-        assertTrue(mViews.callLocationAndDate.getText().toString().contains(text));
+    /** Asserts that the location and date text field exactly equals the given string value. */
+    private void assertLocationAndDateExactEquals(String text) {
+        assertEquals(text, mViews.callLocationAndDate.getText());
     }
 
     /** Asserts that the video icon is shown. */
