diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 922b383..43b2c58 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -61,6 +61,7 @@
 import android.widget.AbsListView.OnScrollListener;
 import android.widget.EditText;
 import android.widget.ImageButton;
+import android.widget.ImageView;
 import android.widget.PopupMenu;
 import android.widget.RelativeLayout;
 import android.widget.Toast;
@@ -220,7 +221,6 @@
 
     private EditText mSearchView;
     private View mVoiceSearchButton;
-    private SearchEditTextLayout mSearchEditTextLayout;
 
     /**
      * View that contains the "Remove" dialog that shows up when the user long presses a contact.
@@ -362,15 +362,19 @@
         mActionBarController = new ActionBarController(this,
                 (SearchEditTextLayout) actionBar.getCustomView());
 
-        mSearchEditTextLayout = (SearchEditTextLayout) actionBar.getCustomView();
-        mSearchEditTextLayout.setPreImeKeyListener(mSearchEditTextLayoutListener);
 
-        mSearchView = (EditText) mSearchEditTextLayout.findViewById(R.id.search_view);
+        SearchEditTextLayout searchEditTextLayout =
+                (SearchEditTextLayout) actionBar.getCustomView();
+        searchEditTextLayout.setPreImeKeyListener(mSearchEditTextLayoutListener);
+
+        mSearchView = (EditText) searchEditTextLayout.findViewById(R.id.search_view);
         mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
-        mVoiceSearchButton = mSearchEditTextLayout.findViewById(R.id.voice_search_button);
-        mSearchEditTextLayout.findViewById(R.id.search_box_start_search).setOnClickListener(
-                mSearchViewOnClickListener);
-        mSearchEditTextLayout.setOnBackButtonClickedListener(new OnBackButtonClickedListener() {
+        mVoiceSearchButton = searchEditTextLayout.findViewById(R.id.voice_search_button);
+        searchEditTextLayout.findViewById(R.id.search_magnifying_glass)
+                .setOnClickListener(mSearchViewOnClickListener);
+        searchEditTextLayout.findViewById(R.id.search_box_start_search)
+                .setOnClickListener(mSearchViewOnClickListener);
+        searchEditTextLayout.setOnBackButtonClickedListener(new OnBackButtonClickedListener() {
             @Override
             public void onBackButtonClicked() {
                 onBackPressed();
@@ -385,8 +389,8 @@
         mFloatingActionButtonController = new FloatingActionButtonController(this, mIsLandscape,
                 floatingActionButtonContainer);
 
-        ImageButton optionsMenuButton = (ImageButton) mSearchEditTextLayout.findViewById(
-                R.id.dialtacts_options_menu_button);
+        ImageButton optionsMenuButton =
+                (ImageButton) searchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button);
         optionsMenuButton.setOnClickListener(this);
         final OptionsPopupMenu optionsMenu = buildOptionsMenu(optionsMenuButton);
         optionsMenuButton.setOnTouchListener(optionsMenu.getDragToOpenListener());
