diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 2f0ee53..e5c3c58 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -601,7 +601,7 @@
                 view.getLocalVisibleRect(localVisibleRect);
                 final int scrollingNeeded = localVisibleRect.top > 0 ? -localVisibleRect.top
                         : view.getMeasuredHeight() - localVisibleRect.height();
-
+                final ListView listView = getListView();
                 animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
 
                     private int mCurrentScroll = 0;
@@ -618,9 +618,11 @@
                         view.requestLayout();
 
                         if (isExpand) {
-                            int scrollBy = (int) (value * scrollingNeeded) - mCurrentScroll;
-                            getListView().smoothScrollBy(scrollBy, /* duration = */ 0);
-                            mCurrentScroll += scrollBy;
+                            if (listView != null) {
+                                int scrollBy = (int) (value * scrollingNeeded) - mCurrentScroll;
+                                listView.smoothScrollBy(scrollBy, /* duration = */ 0);
+                                mCurrentScroll += scrollBy;
+                            }
                         }
                     }
                 });
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 9eb6884..7faed07 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -225,7 +225,7 @@
         public void onCallStateChanged(int state, String incomingNumber) {
             // Log.i(TAG, "PhoneStateListener.onCallStateChanged: "
             //       + state + ", '" + incomingNumber + "'");
-            if ((state == TelephonyManager.CALL_STATE_IDLE) && dialpadChooserVisible()) {
+            if ((state == TelephonyManager.CALL_STATE_IDLE) && isDialpadChooserVisible()) {
                 // Log.i(TAG, "Call ended with dialpad chooser visible!  Taking it down...");
                 // Note there's a race condition in the UI here: the
                 // dialpad chooser could conceivably disappear (on its
@@ -838,7 +838,6 @@
             }
             mPressedDialpadKeys.add(view);
         } else {
-            view.jumpDrawablesToCurrentState();
             mPressedDialpadKeys.remove(view);
             if (mPressedDialpadKeys.isEmpty()) {
                 stopTone();
@@ -1211,7 +1210,7 @@
         }
 
         if (enabled) {
-            // Log.i(TAG, "Showing dialpad chooser!");
+            Log.i(TAG, "Showing dialpad chooser!");
             if (mDialpadView != null) {
                 mDialpadView.setVisibility(View.GONE);
             }
@@ -1226,7 +1225,7 @@
             }
             mDialpadChooser.setAdapter(mDialpadChooserAdapter);
         } else {
-            // Log.i(TAG, "Displaying normal Dialer UI.");
+            Log.i(TAG, "Displaying normal Dialer UI.");
             if (mDialpadView != null) {
                 mDialpadView.setVisibility(View.VISIBLE);
             } else {
@@ -1241,7 +1240,7 @@
     /**
      * @return true if we're currently showing the "dialpad chooser" UI.
      */
-    private boolean dialpadChooserVisible() {
+    private boolean isDialpadChooserVisible() {
         return mDialpadChooser.getVisibility() == View.VISIBLE;
     }
 
@@ -1604,7 +1603,7 @@
         final DialtactsActivity activity = (DialtactsActivity) getActivity();
         final DialpadView dialpadView = (DialpadView) getView().findViewById(R.id.dialpad_view);
         if (activity == null) return;
-        if (!hidden) {
+        if (!hidden && !isDialpadChooserVisible()) {
             if (mAnimate) {
                 dialpadView.animateShow();
             }
