diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index 3aeac53..447512a 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -1085,6 +1085,7 @@
             reply.writeInt(result);
             return true;
         }
+        
         case KILL_APPLICATION_WITH_UID_TRANSACTION: {
             data.enforceInterface(IActivityManager.descriptor);
             String pkg = data.readString();
@@ -1093,6 +1094,14 @@
             reply.writeNoException();
             return true;
         }
+        
+        case CLOSE_SYSTEM_DIALOGS_TRANSACTION: {
+            data.enforceInterface(IActivityManager.descriptor);
+            String reason = data.readString();
+            closeSystemDialogs(reason);
+            reply.writeNoException();
+            return true;
+        }
         }
         
         return super.onTransact(code, data, reply, flags);
@@ -2376,6 +2385,7 @@
         data.recycle();
         return result;
     }
+    
     public void killApplicationWithUid(String pkg, int uid) throws RemoteException {
         Parcel data = Parcel.obtain();
         Parcel reply = Parcel.obtain();
@@ -2387,6 +2397,17 @@
         data.recycle();
         reply.recycle();
     }
+    
+    public void closeSystemDialogs(String reason) throws RemoteException {
+        Parcel data = Parcel.obtain();
+        Parcel reply = Parcel.obtain();
+        data.writeInterfaceToken(IActivityManager.descriptor);
+        data.writeString(reason);
+        mRemote.transact(CLOSE_SYSTEM_DIALOGS_TRANSACTION, data, reply, 0);
+        reply.readException();
+        data.recycle();
+        reply.recycle();
+    }
         
     private IBinder mRemote;
 }
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index b1b5282..f6ef549 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -268,7 +268,9 @@
             throws RemoteException;
 
     public void killApplicationWithUid(String pkg, int uid) throws RemoteException;
-        
+    
+    public void closeSystemDialogs(String reason) throws RemoteException;
+    
     /*
      * Private non-Binder interfaces
      */
@@ -424,4 +426,5 @@
     int UNREGISTER_ACTIVITY_WATCHER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+93;
     int START_ACTIVITY_IN_PACKAGE_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+94;
     int KILL_APPLICATION_WITH_UID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+95;
+    int CLOSE_SYSTEM_DIALOGS_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION+96;
 }
diff --git a/core/java/android/app/IActivityWatcher.aidl b/core/java/android/app/IActivityWatcher.aidl
index 5d36e3f..6737545 100644
--- a/core/java/android/app/IActivityWatcher.aidl
+++ b/core/java/android/app/IActivityWatcher.aidl
@@ -23,4 +23,5 @@
  */
 oneway interface IActivityWatcher {
     void activityResuming(int activityId);
+    void closingSystemDialogs(String reason);
 }
diff --git a/core/java/android/server/search/SearchDialogWrapper.java b/core/java/android/server/search/SearchDialogWrapper.java
index b8a9875..49718cb 100644
--- a/core/java/android/server/search/SearchDialogWrapper.java
+++ b/core/java/android/server/search/SearchDialogWrapper.java
@@ -63,6 +63,8 @@
     private static final int MSG_STOP_SEARCH = 2;
     // arg1 is activity id
     private static final int MSG_ACTIVITY_RESUMING = 3;
+    // obj is the reason
+    private static final int MSG_CLOSING_SYSTEM_DIALOGS = 4;
 
     private static final String KEY_INITIAL_QUERY = "q";
     private static final String KEY_LAUNCH_ACTIVITY = "a";
@@ -127,8 +129,7 @@
     private void registerBroadcastReceiver() {
         if (!mReceiverRegistered) {
             IntentFilter filter = new IntentFilter(
-                    Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-            filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);
+                    Intent.ACTION_CONFIGURATION_CHANGED);
             mContext.registerReceiver(mBroadcastReceiver, filter, null,
                     mSearchUiThread);
             mReceiverRegistered = true;
@@ -149,12 +150,7 @@
         @Override
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
-            if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
-                if (!"search".equals(intent.getStringExtra("reason"))) {
-                    if (DBG) debug(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
-                    performStopSearch();
-                }
-            } else if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) {
+            if (Intent.ACTION_CONFIGURATION_CHANGED.equals(action)) {
                 if (DBG) debug(Intent.ACTION_CONFIGURATION_CHANGED);
                 performOnConfigurationChanged();
             }
@@ -219,6 +215,18 @@
         mSearchUiThread.sendMessage(msg);
     }
 
+    /**
+     * Handles closing of system windows/dialogs
+     * Can be called from any thread.
+     */
+    public void closingSystemDialogs(String reason) {
+        if (DBG) debug("closingSystemDialogs(reason=" + reason + ")");
+        Message msg = Message.obtain();
+        msg.what = MSG_CLOSING_SYSTEM_DIALOGS;
+        msg.obj = reason;
+        mSearchUiThread.sendMessage(msg);
+    }
+
     //
     // Implementation methods that run on the search UI thread
     //
@@ -244,6 +252,9 @@
                 case MSG_ACTIVITY_RESUMING:
                     performActivityResuming(msg.arg1);
                     break;
+                case MSG_CLOSING_SYSTEM_DIALOGS:
+                    performClosingSystemDialogs((String)msg.obj);
+                    break;
             }
         }
 
@@ -330,6 +341,19 @@
     }
 
     /**
+     * Updates due to system dialogs being closed
+     * This must be called on the search UI thread.
+     */
+    void performClosingSystemDialogs(String reason) {
+        if (DBG) debug("performClosingSystemDialogs(): mStartedIdent="
+                + mStartedIdent + ", reason: " + reason);
+        if (!"search".equals(reason)) {
+            if (DBG) debug(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+            performStopSearch();
+        }
+    }
+
+    /**
      * Must be called from the search UI thread.
      */
     void performOnConfigurationChanged() {
diff --git a/core/java/android/server/search/SearchManagerService.java b/core/java/android/server/search/SearchManagerService.java
index fdeb8f9..afed4a4 100644
--- a/core/java/android/server/search/SearchManagerService.java
+++ b/core/java/android/server/search/SearchManagerService.java
@@ -138,6 +138,11 @@
             if (mSearchDialog == null) return;
             mSearchDialog.activityResuming(activityId);
         }
+        public void closingSystemDialogs(String reason) {
+            if (DBG) Log.i("foo", "********************** closing dialogs: " + reason);
+            if (mSearchDialog == null) return;
+            mSearchDialog.closingSystemDialogs(reason);
+        }
     };
     
     /**
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 5ea59ca..51ee41a 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -4760,6 +4760,34 @@
         }
     }
 
+    public void closeSystemDialogs(String reason) {
+        Intent intent = new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
+        if (reason != null) {
+            intent.putExtra("reason", reason);
+        }
+        
+        final int uid = Binder.getCallingUid();
+        final long origId = Binder.clearCallingIdentity();
+        synchronized (this) {
+            int i = mWatchers.beginBroadcast();
+            while (i > 0) {
+                i--;
+                IActivityWatcher w = mWatchers.getBroadcastItem(i);
+                if (w != null) {
+                    try {
+                        w.closingSystemDialogs(reason);
+                    } catch (RemoteException e) {
+                    }
+                }
+            }
+            mWatchers.finishBroadcast();
+            
+            broadcastIntentLocked(null, null, intent, null,
+                    null, 0, null, null, null, false, false, -1, uid);
+        }
+        Binder.restoreCallingIdentity(origId);
+    }
+    
     private void restartPackageLocked(final String packageName, int uid) {
         uninstallPackageLocked(packageName, uid, false);
         Intent intent = new Intent(Intent.ACTION_PACKAGE_RESTARTED,
