diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index f63fcf3..2e2bea8 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -445,11 +445,11 @@
     private void updateBlockActionItem() {
         if (mBlockedNumberId == null) {
             mBlockNumberActionItem.setText(R.string.action_block_number);
-            mBlockNumberActionItem.setCompoundDrawablesWithIntrinsicBounds(
+            mBlockNumberActionItem.setCompoundDrawablesRelativeWithIntrinsicBounds(
                     R.drawable.ic_call_detail_block, 0, 0, 0);
         } else {
             mBlockNumberActionItem.setText(R.string.action_unblock_number);
-            mBlockNumberActionItem.setCompoundDrawablesWithIntrinsicBounds(
+            mBlockNumberActionItem.setCompoundDrawablesRelativeWithIntrinsicBounds(
                     R.drawable.ic_call_detail_unblock, 0, 0, 0);
         }
 
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index 0087506..89596f2 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -467,7 +467,8 @@
         }
 
         // For voicemail calls, show the voicemail playback layout; hide otherwise.
-        if (callType == Calls.VOICEMAIL_TYPE && mVoicemailPlaybackPresenter != null) {
+        if (callType == Calls.VOICEMAIL_TYPE && mVoicemailPlaybackPresenter != null
+                && !TextUtils.isEmpty(voicemailUri)) {
             voicemailPlaybackView.setVisibility(View.VISIBLE);
 
             Uri uri = Uri.parse(voicemailUri);
diff --git a/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java b/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java
index be83df7..ce96b67 100644
--- a/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java
+++ b/src/com/android/dialer/filterednumber/BlockedNumbersAdapter.java
@@ -18,6 +18,7 @@
 import android.app.FragmentManager;
 import android.content.Context;
 import android.database.Cursor;
+import android.telephony.PhoneNumberUtils;
 import android.view.View;
 
 import com.android.contacts.common.ContactPhotoManager;
@@ -64,7 +65,7 @@
                         id,
                         number,
                         countryIso,
-                        number,
+                        PhoneNumberUtils.formatNumber(number, countryIso),
                         R.id.blocked_number_fragment,
                         getFragmentManager(),
                         null /* callback */);
diff --git a/src/com/android/dialer/list/BlockedListSearchFragment.java b/src/com/android/dialer/list/BlockedListSearchFragment.java
index bddd3d4..daa384a 100644
--- a/src/com/android/dialer/list/BlockedListSearchFragment.java
+++ b/src/com/android/dialer/list/BlockedListSearchFragment.java
@@ -19,6 +19,7 @@
 import android.os.Bundle;
 import android.support.v7.app.ActionBar;
 import android.support.v7.app.AppCompatActivity;
+import android.telephony.PhoneNumberUtils;
 import android.text.Editable;
 import android.text.TextUtils;
 import android.text.TextWatcher;
@@ -31,7 +32,6 @@
 
 import com.android.contacts.common.GeoUtil;
 import com.android.contacts.common.list.ContactEntryListAdapter;
-import com.android.contacts.common.list.ContactListItemView;
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.dialer.R;
 import com.android.dialer.database.FilteredNumberAsyncQueryHandler;
@@ -48,22 +48,18 @@
     private FilteredNumberAsyncQueryHandler mFilteredNumberAsyncQueryHandler;
 
     private EditText mSearchView;
-    private String mSearchQuery;
 
     private final TextWatcher mPhoneSearchQueryTextListener = new TextWatcher() {
         @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
-        }
+        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
 
         @Override
         public void onTextChanged(CharSequence s, int start, int before, int count) {
-            mSearchQuery = s.toString();
-            setQueryString(mSearchQuery, false);
+            setQueryString(s.toString(), false);
         }
 
         @Override
-        public void afterTextChanged(Editable s) {
-        }
+        public void afterTextChanged(Editable s) {}
     };
 
     private final SearchEditTextLayout.Callback mSearchLayoutCallback =
@@ -82,14 +78,17 @@
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
-        // Show list of all phone numbers when search query is empty.
-        setShowEmptyListForNullQuery(false);
-
+        setShowEmptyListForNullQuery(true);
+        /*
+         * Pass in the empty string here so ContactEntryListFragment#setQueryString interprets it as
+         * an empty search query, rather than as an uninitalized value. In the latter case, the
+         * adapter returned by #createListAdapter is used, which populates the view with contacts.
+         * Passing in the empty string forces ContactEntryListFragment to interpret it as an empty
+         * query, which results in showing an empty view
+         */
+        setQueryString(getQueryString() == null ? "" : getQueryString(), false);
         mFilteredNumberAsyncQueryHandler = new FilteredNumberAsyncQueryHandler(
                 getContext().getContentResolver());
-        if (savedInstanceState != null) {
-            mSearchQuery = savedInstanceState.getString(KEY_SEARCH_QUERY);
-        }
     }
 
     @Override
@@ -115,8 +114,8 @@
         searchEditTextLayout.findViewById(R.id.search_box_expanded)
                 .setBackgroundColor(getContext().getResources().getColor(android.R.color.white));
 
-        if (!TextUtils.isEmpty(mSearchQuery)) {
-            mSearchView.setText(mSearchQuery);
+        if (!TextUtils.isEmpty(getQueryString())) {
+            mSearchView.setText(getQueryString());
         }
 
         // TODO: Don't set custom text size; use default search text size.
@@ -125,21 +124,17 @@
     }
 
     @Override
-    public void onSaveInstanceState(Bundle outState) {
-        super.onSaveInstanceState(outState);
-        outState.putString(KEY_SEARCH_QUERY, getAdapter().getQueryString());
-    }
-
-    @Override
     protected ContactEntryListAdapter createListAdapter() {
         BlockedListSearchAdapter adapter = new BlockedListSearchAdapter(getActivity());
         adapter.setDisplayPhotos(true);
         // Don't show SIP addresses.
         adapter.setUseCallableUri(false);
-        adapter.setQueryString(mSearchQuery);
+        // Keep in sync with the queryString set in #onCreate
+        adapter.setQueryString(getQueryString() == null ? "" : getQueryString());
         return adapter;
     }
 
+
     @Override
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
         super.onItemClick(parent, view, position, id);
@@ -152,7 +147,7 @@
             case DialerPhoneNumberListAdapter.SHORTCUT_INVALID:
                 // Handles click on a search result, either contact or nearby places result.
                 number = adapter.getPhoneNumber(adapterPosition);
-                blockContactNumber(adapter, (ContactListItemView) view, number, blockId);
+                blockContactNumber(number, blockId);
                 break;
             case DialerPhoneNumberListAdapter.SHORTCUT_BLOCK_NUMBER:
                 // Handles click on 'Block number' shortcut to add the user query as a number.
@@ -181,7 +176,7 @@
                             id,
                             number,
                             countryIso,
-                            number,
+                            PhoneNumberUtils.formatNumber(number, countryIso),
                             R.id.blocked_numbers_activity_container,
                             getFragmentManager(),
                             BlockedListSearchFragment.this);
@@ -217,11 +212,7 @@
         getAdapter().notifyDataSetChanged();
     }
 
-    private void blockContactNumber(
-            final BlockedListSearchAdapter adapter,
-            final ContactListItemView view,
-            final String number,
-            final Integer blockId) {
+    private void blockContactNumber(final String number, final Integer blockId) {
         if (blockId != null) {
             Toast.makeText(getContext(), ContactDisplayUtils.getTtsSpannedPhoneNumber(
                             getResources(), R.string.alreadyBlocked, number),
diff --git a/src/com/android/dialer/logging/ScreenEvent.java b/src/com/android/dialer/logging/ScreenEvent.java
index c88a7b7..7af3f6e 100644
--- a/src/com/android/dialer/logging/ScreenEvent.java
+++ b/src/com/android/dialer/logging/ScreenEvent.java
@@ -121,6 +121,9 @@
         sScreenNameMap.put(ScreenEvent.INCOMING_CALL, AnswerFragment.class.getSimpleName());
         sScreenNameMap.put(ScreenEvent.CONFERENCE_MANAGEMENT,
                 ConferenceManagerFragment.class.getSimpleName());
+        sScreenNameMap.put(ScreenEvent.INCALL_DIALPAD,
+                getScreenNameWithTag(DialpadFragment.class.getSimpleName(), "InCall"));
+
     }
 
     /**
