diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 82b7838..b7772c1 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -263,10 +263,11 @@
                 // no need to do anything here.
                 return;
             }
-            mSearchQuery = newText;
             if (DEBUG) {
                 Log.d(TAG, "onTextChange for mSearchView called with new query: " + newText);
+                Log.d(TAG, "Previous Query: " + mSearchQuery);
             }
+            mSearchQuery = newText;
 
             // Show search fragment only when the query string is changed to non-empty text.
             if (!TextUtils.isEmpty(newText)) {
@@ -687,8 +688,11 @@
     }
 
     private void hideDialpadAndSearchUi() {
-        mSearchView.setText(null);
-        hideDialpadFragment(false, true);
+        if (mIsDialpadShown) {
+            hideDialpadFragment(false, true);
+        } else {
+            exitSearchUi();
+        }
     }
 
     private void hideInputMethod(View view) {
@@ -873,7 +877,6 @@
         setNotInSearchUi();
 
         final FragmentTransaction transaction = getFragmentManager().beginTransaction();
-        transaction.setCustomAnimations(0, android.R.animator.fade_out);
         if (mSmartDialSearchFragment != null) {
             transaction.remove(mSmartDialSearchFragment);
         }
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
index 229f7f3..30e0e0f 100644
--- a/src/com/android/dialer/list/ListsFragment.java
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -52,6 +52,9 @@
 public class ListsFragment extends Fragment implements CallLogQueryHandler.Listener,
         CallLogAdapter.CallFetcher, ViewPager.OnPageChangeListener {
 
+    private static final boolean DEBUG = DialtactsActivity.DEBUG;
+    private static final String TAG = "ListsFragment";
+
     public static final int TAB_INDEX_SPEED_DIAL = 0;
     public static final int TAB_INDEX_RECENTS = 1;
     public static final int TAB_INDEX_ALL_CONTACTS = 2;
@@ -154,11 +157,17 @@
 
         @Override
         public void onPanelOpened(View panel) {
+            if (DEBUG) {
+                Log.d(TAG, "onPanelOpened");
+            }
             mIsPanelOpen = true;
         }
 
         @Override
         public void onPanelClosed(View panel) {
+            if (DEBUG) {
+                Log.d(TAG, "onPanelClosed");
+            }
             mIsPanelOpen = false;
         }
     };
@@ -232,7 +241,6 @@
         // Wipe the cache to refresh the call shortcut item. This is not that expensive because
         // it only contains one item.
         mCallLogAdapter.invalidateCache();
-        mActionBar = null;
         super.onPause();
     }
 
diff --git a/src/com/android/dialer/widget/ActionBarController.java b/src/com/android/dialer/widget/ActionBarController.java
index 49506f4..67037a2 100644
--- a/src/com/android/dialer/widget/ActionBarController.java
+++ b/src/com/android/dialer/widget/ActionBarController.java
@@ -7,6 +7,8 @@
 import android.os.Bundle;
 import android.util.Log;
 
+import com.android.contacts.common.animation.AnimUtils;
+import com.android.contacts.common.animation.AnimUtils.AnimationCallback;
 import com.android.dialer.DialtactsActivity;
 
 /**
@@ -26,6 +28,18 @@
 
     private boolean mIsActionBarSlidUp;
 
+    private final AnimationCallback mFadeOutCallback = new AnimationCallback() {
+        @Override
+        public void onAnimationEnd() {
+            slideActionBarUp(false);
+        }
+
+        @Override
+        public void onAnimationCancel() {
+            slideActionBarUp(false);
+        }
+    };
+
     public interface ActivityUi {
         public boolean isInSearchUi();
         public boolean hasSearchQuery();
@@ -127,7 +141,7 @@
             slideActionBarUp(true);
         } else {
             // From the lists fragment
-            mSearchBox.fadeOut();
+            mSearchBox.fadeOut(mFadeOutCallback);
         }
     }
 
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
index ef3ddcc..311d2af 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -123,7 +123,11 @@
     }
 
     public void fadeOut() {
-        AnimUtils.fadeOut(this, ANIMATION_DURATION);
+        fadeOut(null);
+    }
+
+    public void fadeOut(AnimUtils.AnimationCallback callback) {
+        AnimUtils.fadeOut(this, ANIMATION_DURATION, callback);
         mIsFadedOut = true;
     }
 
