diff --git a/src/com/android/launcher/SearchAutoCompleteTextView.java b/src/com/android/launcher/SearchAutoCompleteTextView.java
index 4f0df18..e25a8f1 100644
--- a/src/com/android/launcher/SearchAutoCompleteTextView.java
+++ b/src/com/android/launcher/SearchAutoCompleteTextView.java
@@ -19,6 +19,8 @@
 import android.widget.AutoCompleteTextView;
 import android.content.Context;
 import android.content.res.Configuration;
+import android.os.Handler;
+import android.os.Message;
 import android.util.AttributeSet;
 import android.graphics.Rect;
 import android.view.WindowManager;
@@ -35,6 +37,15 @@
 public class SearchAutoCompleteTextView extends AutoCompleteTextView {
     private boolean mShowKeyboard;
 
+    private Handler mLoseFocusHandler = new Handler() {
+        public void handleMessage(Message msg) {
+            if (msg.what == 1 && !hasFocus()) {
+                // Hide the soft keyboard when the search widget loses the focus
+                InputMethodManager.peekInstance().hideSoftInputFromWindow(getWindowToken(), 0);
+            }
+        }
+    };
+    
     public SearchAutoCompleteTextView(Context context) {
         super(context);
     }
@@ -61,23 +72,24 @@
             lp.softInputMode =
                     (lp.softInputMode & ~WindowManager.LayoutParams.SOFT_INPUT_MASK_STATE) |
                             WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED;
-
-            // Hide the soft keyboard when the search widget loses the focus
-            InputMethodManager.peekInstance().hideSoftInputFromWindow(getWindowToken(), 0);
+            // If we don't immediately gain focus, we want to hide the IME.
+            mLoseFocusHandler.sendEmptyMessage(1);
         }
 
-        final WindowManager manager = (WindowManager)
-                getContext().getSystemService(Context.WINDOW_SERVICE);
-        manager.updateViewLayout(getRootView(), lp);
+        if (getWindowToken() != null) {
+            final WindowManager manager = (WindowManager)
+                    getContext().getSystemService(Context.WINDOW_SERVICE);
+            manager.updateViewLayout(getRootView(), lp);
 
-        if (mShowKeyboard) {
-            if (getContext().getResources().getConfiguration().hardKeyboardHidden ==
-                    Configuration.HARDKEYBOARDHIDDEN_YES) {
-                InputMethodManager inputManager = (InputMethodManager)
-                        getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
-                inputManager.showSoftInput(this, 0);
+            if (mShowKeyboard) {
+                if (getContext().getResources().getConfiguration().hardKeyboardHidden ==
+                        Configuration.HARDKEYBOARDHIDDEN_YES) {
+                    InputMethodManager inputManager = (InputMethodManager)
+                            getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+                    inputManager.showSoftInput(this, 0);
+                }
+                mShowKeyboard = false;
             }
-            mShowKeyboard = false;
         }
     }
 
