diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index cfdfe3c..dd9120f 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -19,9 +19,7 @@
 -->
 <manifest
     xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.android.launcher"
-    android:sharedUserId="@string/sharedUserId"
-    >
+    package="com.android.launcher">
 
     <original-package android:name="com.android.launcher2" />
 
@@ -51,20 +49,15 @@
         android:description="@string/permdesc_write_settings"/>
 
     <uses-permission android:name="android.permission.CALL_PHONE" />
-    <uses-permission android:name="android.permission.EXPAND_STATUS_BAR" />
-    <uses-permission android:name="android.permission.GET_TASKS" />
-    <uses-permission android:name="android.permission.READ_CONTACTS"/>
     <uses-permission android:name="android.permission.SET_WALLPAPER" />
     <uses-permission android:name="android.permission.SET_WALLPAPER_HINTS" />
     <uses-permission android:name="android.permission.VIBRATE" />
-    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
     <uses-permission android:name="android.permission.BIND_APPWIDGET" />
     <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
     <uses-permission android:name="com.android.launcher.permission.WRITE_SETTINGS" />
 
     <application
         android:name="com.android.launcher2.LauncherApplication"
-        android:process="@string/process"
         android:label="@string/application_name"
         android:icon="@drawable/ic_launcher_home"
         android:hardwareAccelerated="@bool/config_hardwareAccelerated"
diff --git a/res/layout-port/search_bar.xml b/res/layout-port/search_bar.xml
index dbacd3d..6b2c827 100644
--- a/res/layout-port/search_bar.xml
+++ b/res/layout-port/search_bar.xml
@@ -24,6 +24,7 @@
    <!-- Global search icon -->
    <LinearLayout
         style="@style/SearchButton"
+        android:id="@+id/search_button_container"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_alignParentLeft="true"
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0f4a3ba..6f6a158 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -18,13 +18,6 @@
 -->
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <!-- Manifest configuration. -->
-    <skip />
-    <!-- Do not translate. android:sharedUserId of this application. -->
-    <string name="sharedUserId" translatable="false"><xliff:g id="x"></xliff:g></string>
-    <!-- Do not translate. android:process of this application. -->
-    <string name="process" translatable="false"><xliff:g id="x"></xliff:g></string>
-
     <!-- General -->
     <skip />
     <!-- Application name -->
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 1fbf7a5..5eaf773 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -95,8 +95,10 @@
 
 import java.io.DataInputStream;
 import java.io.DataOutputStream;
+import java.io.FileDescriptor;
 import java.io.FileNotFoundException;
 import java.io.IOException;
+import java.io.PrintWriter;
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -188,7 +190,7 @@
     private Hotseat mHotseat;
     private View mAllAppsButton;
 
-    private SearchDropTargetBar mSearchDeleteBar;
+    private SearchDropTargetBar mSearchDropTargetBar;
     private AppsCustomizeTabHost mAppsCustomizeTabHost;
     private AppsCustomizePagedView mAppsCustomizeContent;
     private boolean mAutoAdvanceRunning = false;
@@ -236,6 +238,8 @@
     private static Drawable.ConstantState[] sVoiceSearchIcon = new Drawable.ConstantState[2];
     private static Drawable.ConstantState[] sAppMarketIcon = new Drawable.ConstantState[2];
 
+    static final ArrayList<String> sDumpLogs = new ArrayList<String>();
+
     private DragLayer mDragLayer;
 
     private BubbleTextView mWaitingForResume;
@@ -307,22 +311,28 @@
         IntentFilter filter = new IntentFilter(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
         registerReceiver(mCloseSystemDialogsReceiver, filter);
 
+        boolean searchVisible = false;
+        boolean voiceVisible = false;
         // If we have a saved version of these external icons, we load them up immediately
         int coi = getCurrentOrientationIndexForGlobalIcons();
         if (sGlobalSearchIcon[coi] == null || sVoiceSearchIcon[coi] == null ||
                 sAppMarketIcon[coi] == null) {
-            updateIconsAffectedByPackageManagerChanges();
-            updateGlobalSearchIcon();
+            updateAppMarketIcon();
+            searchVisible = updateGlobalSearchIcon();
+            voiceVisible = updateVoiceSearchIcon(searchVisible);
         }
         if (sGlobalSearchIcon[coi] != null) {
              updateGlobalSearchIcon(sGlobalSearchIcon[coi]);
+             searchVisible = true;
         }
         if (sVoiceSearchIcon[coi] != null) {
             updateVoiceSearchIcon(sVoiceSearchIcon[coi]);
+            voiceVisible = true;
         }
         if (sAppMarketIcon[coi] != null) {
             updateAppMarketIcon(sAppMarketIcon[coi]);
         }
+        mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible);
 
         // On large interfaces, we want the screen to auto-rotate based on the current orientation
         if (LauncherApplication.isScreenLarge() || Build.TYPE.contentEquals("eng")) {
@@ -720,7 +730,7 @@
         dragController.addDragListener(mWorkspace);
 
         // Get the search/delete bar
-        mSearchDeleteBar = (SearchDropTargetBar) mDragLayer.findViewById(R.id.qsb_bar);
+        mSearchDropTargetBar = (SearchDropTargetBar) mDragLayer.findViewById(R.id.qsb_bar);
 
         // Setup AppsCustomize
         mAppsCustomizeTabHost = (AppsCustomizeTabHost)
@@ -736,8 +746,8 @@
         dragController.setScrollView(mDragLayer);
         dragController.setMoveTarget(mWorkspace);
         dragController.addDropTarget(mWorkspace);
-        if (mSearchDeleteBar != null) {
-            mSearchDeleteBar.setup(this, dragController);
+        if (mSearchDropTargetBar != null) {
+            mSearchDropTargetBar.setup(this, dragController);
         }
     }
 
@@ -2360,7 +2370,7 @@
                     // exitSpringLoadedDragMode made it visible. This is a bit hacky; we should
                     // clean up our state transition functions
                     mAppsCustomizeTabHost.setVisibility(View.GONE);
-                    mSearchDeleteBar.showSearchBar(true);
+                    mSearchDropTargetBar.showSearchBar(true);
                     showWorkspace(true);
                 } else {
                     exitSpringLoadedDragMode();
@@ -2388,7 +2398,7 @@
     void showHotseat(boolean animated) {
         if (!LauncherApplication.isScreenLarge()) {
             if (animated) {
-                int duration = mSearchDeleteBar.getTransitionInDuration();
+                int duration = mSearchDropTargetBar.getTransitionInDuration();
                 mHotseat.animate().alpha(1f).setDuration(duration);
             } else {
                 mHotseat.setAlpha(1f);
@@ -2402,7 +2412,7 @@
     void hideHotseat(boolean animated) {
         if (!LauncherApplication.isScreenLarge()) {
             if (animated) {
-                int duration = mSearchDeleteBar.getTransitionOutDuration();
+                int duration = mSearchDropTargetBar.getTransitionOutDuration();
                 mHotseat.animate().alpha(0f).setDuration(duration);
             } else {
                 mHotseat.setAlpha(0f);
@@ -2417,7 +2427,7 @@
         mAppsCustomizeTabHost.requestFocus();
 
         // Hide the search bar and hotseat
-        mSearchDeleteBar.hideSearchBar(animated);
+        mSearchDropTargetBar.hideSearchBar(animated);
 
         // Change the state *after* we've called all the transition code
         mState = State.APPS_CUSTOMIZE;
@@ -2476,7 +2486,7 @@
             cameraZoomIn(State.APPS_CUSTOMIZE, animated, false);
 
             // Show the search bar and hotseat
-            mSearchDeleteBar.showSearchBar(animated);
+            mSearchDropTargetBar.showSearchBar(animated);
 
             // Set focus to the AppsCustomize button
             if (mAllAppsButton != null) {
@@ -2593,9 +2603,11 @@
         button.setImageDrawable(d.newDrawable(getResources()));
     }
 
-    private void updateGlobalSearchIcon() {
+    private boolean updateGlobalSearchIcon() {
+        final View searchButtonContainer = findViewById(R.id.search_button_container);
         final ImageView searchButton = (ImageView) findViewById(R.id.search_button);
         final View searchDivider = findViewById(R.id.search_divider);
+        final View voiceButtonContainer = findViewById(R.id.voice_button_container);
         final View voiceButton = findViewById(R.id.voice_button);
 
         final SearchManager searchManager =
@@ -2605,13 +2617,18 @@
             int coi = getCurrentOrientationIndexForGlobalIcons();
             sGlobalSearchIcon[coi] = updateButtonWithIconFromExternalActivity(
                     R.id.search_button, activityName, R.drawable.ic_home_search_normal_holo);
-            searchButton.setVisibility(View.VISIBLE);
             if (searchDivider != null) searchDivider.setVisibility(View.VISIBLE);
+            if (searchButtonContainer != null) searchButtonContainer.setVisibility(View.VISIBLE);
+            searchButton.setVisibility(View.VISIBLE);
+            return true;
         } else {
             // We disable both search and voice search when there is no global search provider
-            searchButton.setVisibility(View.GONE);
             if (searchDivider != null) searchDivider.setVisibility(View.GONE);
+            if (searchButtonContainer != null) searchButtonContainer.setVisibility(View.GONE);
+            if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.GONE);
+            searchButton.setVisibility(View.GONE);
             voiceButton.setVisibility(View.GONE);
+            return false;
         }
     }
 
@@ -2619,21 +2636,27 @@
         updateButtonWithDrawable(R.id.search_button, d);
     }
 
-    private void updateVoiceSearchIcon() {
+    private boolean updateVoiceSearchIcon(boolean searchVisible) {
         final View searchDivider = findViewById(R.id.search_divider);
+        final View voiceButtonContainer = findViewById(R.id.voice_button_container);
         final View voiceButton = findViewById(R.id.voice_button);
 
+        // We only show/update the voice search icon if the search icon is enabled as well
         Intent intent = new Intent(RecognizerIntent.ACTION_WEB_SEARCH);
         ComponentName activityName = intent.resolveActivity(getPackageManager());
-        if (activityName != null) {
+        if (searchVisible && activityName != null) {
             int coi = getCurrentOrientationIndexForGlobalIcons();
             sVoiceSearchIcon[coi] = updateButtonWithIconFromExternalActivity(
                     R.id.voice_button, activityName, R.drawable.ic_home_voice_search_holo);
             if (searchDivider != null) searchDivider.setVisibility(View.VISIBLE);
+            if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.VISIBLE);
             voiceButton.setVisibility(View.VISIBLE);
+            return true;
         } else {
             if (searchDivider != null) searchDivider.setVisibility(View.GONE);
+            if (voiceButtonContainer != null) voiceButtonContainer.setVisibility(View.GONE);
             voiceButton.setVisibility(View.GONE);
+            return false;
         }
     }
 
@@ -2937,21 +2960,17 @@
             completeAdd(sPendingAddList.get(i));
         }
         sPendingAddList.clear();
-    }
 
-    /**
-     * Updates the icons on the launcher that are affected by changes to the package list
-     * on the device.
-     */
-    private void updateIconsAffectedByPackageManagerChanges() {
+        // Update the market app icon as necessary (the other icons will be managed in response to
+        // package changes in bindSearchablesChanged()
         updateAppMarketIcon();
-        updateVoiceSearchIcon();
     }
 
     @Override
     public void bindSearchablesChanged() {
-        updateGlobalSearchIcon();
-        updateVoiceSearchIcon();
+        boolean searchVisible = updateGlobalSearchIcon();
+        boolean voiceVisible = updateVoiceSearchIcon(searchVisible);
+        mSearchDropTargetBar.onSearchPackagesChanged(searchVisible, voiceVisible);
     }
 
     /**
@@ -2977,9 +2996,6 @@
                 }
             }
         });
-
-        updateIconsAffectedByPackageManagerChanges();
-        updateGlobalSearchIcon();
     }
 
     /**
@@ -2994,7 +3010,6 @@
         if (mAppsCustomizeContent != null) {
             mAppsCustomizeContent.addApps(apps);
         }
-        updateIconsAffectedByPackageManagerChanges();
     }
 
     /**
@@ -3012,7 +3027,6 @@
         if (mAppsCustomizeContent != null) {
             mAppsCustomizeContent.updateApps(apps);
         }
-        updateIconsAffectedByPackageManagerChanges();
     }
 
     /**
@@ -3029,7 +3043,6 @@
         if (mAppsCustomizeContent != null) {
             mAppsCustomizeContent.removeApps(apps);
         }
-        updateIconsAffectedByPackageManagerChanges();
 
         // Notify the drag controller
         mDragController.onAppsRemoved(apps, this);
@@ -3223,6 +3236,16 @@
         }
         Log.d(TAG, "END launcher2 dump state");
     }
+
+    @Override
+    public void dump(String prefix, FileDescriptor fd, PrintWriter writer, String[] args) {
+        super.dump(prefix, fd, writer, args);
+        writer.println(" ");
+        writer.println("Debug logs: ");
+        for (int i = 0; i < sDumpLogs.size(); i++) {
+            writer.println("  " + sDumpLogs.get(i));
+        }
+    }
 }
 
 interface LauncherTransitionable {
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index f752de1..fc31d65 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -1091,8 +1091,10 @@
 
                             if (!isSafeMode && (provider == null || provider.provider == null ||
                                     provider.provider.getPackageName() == null)) {
-                                Log.e(TAG, "Deleting widget that isn't installed anymore: id="
-                                        + id + " appWidgetId=" + appWidgetId);
+                                String log = "Deleting widget that isn't installed anymore: id="
+                                    + id + " appWidgetId=" + appWidgetId;
+                                Log.e(TAG, log); 
+                                Launcher.sDumpLogs.add(log);
                                 itemsToRemove.add(id);
                             } else {
                                 appWidgetInfo = new LauncherAppWidgetInfo(appWidgetId);
diff --git a/src/com/android/launcher2/SearchDropTargetBar.java b/src/com/android/launcher2/SearchDropTargetBar.java
index 69a1213..b4a9fc9 100644
--- a/src/com/android/launcher2/SearchDropTargetBar.java
+++ b/src/com/android/launcher2/SearchDropTargetBar.java
@@ -21,7 +21,7 @@
 import android.animation.AnimatorSet;
 import android.animation.ObjectAnimator;
 import android.content.Context;
-import android.content.res.Configuration;
+import android.graphics.drawable.Drawable;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.animation.AccelerateInterpolator;
@@ -52,6 +52,8 @@
     private int mBarHeight;
     private boolean mDeferOnDragEnd = false;
 
+    private Drawable mPreviousBackground;
+
     public SearchDropTargetBar(Context context, AttributeSet attrs) {
         this(context, attrs, 0);
     }
@@ -213,4 +215,18 @@
             mDeferOnDragEnd = false;
         }
     }
+
+    public void onSearchPackagesChanged(boolean searchVisible, boolean voiceVisible) {
+        if (mQSBSearchBar != null) {
+            Drawable bg = mQSBSearchBar.getBackground();
+            if (bg != null && (!searchVisible && !voiceVisible)) {
+                // Save the background and disable it
+                mPreviousBackground = bg;
+                mQSBSearchBar.setBackgroundResource(0);
+            } else if (mPreviousBackground != null && (searchVisible || voiceVisible)) {
+                // Restore the background
+                mQSBSearchBar.setBackgroundDrawable(mPreviousBackground);
+            }
+        }
+    }
 }
