diff --git a/res/layout/gestures.xml b/res/layout/gestures.xml
index 846c063..c9ea2a5 100644
--- a/res/layout/gestures.xml
+++ b/res/layout/gestures.xml
@@ -90,7 +90,7 @@
         android:layout_height="wrap_content"
         android:layout_alignParentRight="true"
         android:layout_alignTop="@id/gestures_actions"
-        android:layout_marginRight="10dip"  
-        android:layout_marginTop="-22dip" />
+        android:layout_marginRight="5dip"  
+        android:layout_marginTop="-47dip" />
 
 </com.android.launcher.GesturesPanel>
diff --git a/src/com/android/launcher/ApplicationInfo.java b/src/com/android/launcher/ApplicationInfo.java
index c9c8c5c..cee9f3b 100644
--- a/src/com/android/launcher/ApplicationInfo.java
+++ b/src/com/android/launcher/ApplicationInfo.java
@@ -100,7 +100,7 @@
         String titleStr = title != null ? title.toString() : null;
         values.put(LauncherSettings.BaseLauncherColumns.TITLE, titleStr);
 
-        String uri = intent != null ? intent.toURI() : null;
+        String uri = intent != null ? intent.toUri(0) : null;
         values.put(LauncherSettings.BaseLauncherColumns.INTENT, uri);
 
         if (customIcon) {
diff --git a/src/com/android/launcher/Launcher.java b/src/com/android/launcher/Launcher.java
index 2e72818..328a5ca 100644
--- a/src/com/android/launcher/Launcher.java
+++ b/src/com/android/launcher/Launcher.java
@@ -519,6 +519,8 @@
             mRestoring = true;
         }
 
+        mCurrentGesture = (Gesture) savedState.get(RUNTIME_STATE_PENDING_GESTURE);
+
         boolean gesturesShowing = savedState.getBoolean(RUNTIME_STATE_GESTURES_PANEL, false);
         if (gesturesShowing) {
             final Gesture gesture = (Gesture) savedState.get(RUNTIME_STATE_GESTURES_PANEL_GESTURE);
@@ -536,8 +538,6 @@
                 }
             });
         }
-
-        mCurrentGesture = (Gesture) savedState.get(RUNTIME_STATE_PENDING_GESTURE);
     }
 
     /**
@@ -1056,12 +1056,14 @@
             outState.putParcelable(RUNTIME_STATE_PENDING_GESTURE, mCurrentGesture);
         }
 
-        if (mGesturesWindow != null && mGesturesWindow.isShowing() && isConfigurationChange) {
+        if (mGesturesWindow != null && mGesturesWindow.isShowing()) {
             outState.putBoolean(RUNTIME_STATE_GESTURES_PANEL, true);
 
-            final Gesture gesture = mGesturesOverlay.getGesture();
-            if (gesture != null) {
-                outState.putParcelable(RUNTIME_STATE_GESTURES_PANEL_GESTURE, gesture);
+            if (mCurrentGesture == null || !mWaitingForResult) {
+                final Gesture gesture = mGesturesOverlay.getGesture();
+                if (gesture != null) {
+                    outState.putParcelable(RUNTIME_STATE_GESTURES_PANEL_GESTURE, gesture);
+                }
             }
         }
     }
@@ -2427,6 +2429,10 @@
                 mMatcher.gesture = overlay.getGesture();
                 if (mMatcher.gesture.getLength() < GesturesConstants.LENGTH_THRESHOLD) {
                     overlay.clear(false);
+                    if (mGesturesAction.intent != null) {
+                        mGesturesAction.intent = null;
+                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
+                    }
                 } else {
                     mMatcher.run();
                 }
@@ -2436,6 +2442,10 @@
                 mMatcher.gesture = overlay.getGesture();
                 if (mMatcher.gesture.getLength() < GesturesConstants.LENGTH_THRESHOLD) {
                     overlay.clear(false);
+                    if (mGesturesAction.intent != null) {
+                        mGesturesAction.intent = null;
+                        setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
+                    }
                 } else {
                     overlay.postDelayed(mMatcher, GesturesConstants.MATCH_DELAY);
                 }
@@ -2473,6 +2483,7 @@
                 }
 
                 if (!match){
+                    mGesturesAction.intent = null;
                     if (animate) {
                         setGesturesNextPrompt(null, getString(R.string.gestures_unknown));
                     } else {
@@ -2488,7 +2499,7 @@
 
         private void updatePrompt(ApplicationInfo info, boolean animate) {
             if (mGesturesAction.intent != null &&
-                    info.intent.toURI().equals(mGesturesAction.intent.toURI()) &&
+                    info.intent.toUri(0).equals(mGesturesAction.intent.toUri(0)) &&
                     info.title.equals(((TextView) mGesturesPrompt.getCurrentView()).getText())) {
                 return;
             }
diff --git a/src/com/android/launcher/LauncherModel.java b/src/com/android/launcher/LauncherModel.java
index cd0ffd2..a1398d4 100644
--- a/src/com/android/launcher/LauncherModel.java
+++ b/src/com/android/launcher/LauncherModel.java
@@ -641,7 +641,7 @@
 
                     final String intentUri = c.getString(intentIndex);
                     if (intentUri != null) {
-                        final Intent shortcut = Intent.getIntent(intentUri);
+                        final Intent shortcut = Intent.parseUri(intentUri, 0);
                         if (Intent.ACTION_MAIN.equals(shortcut.getAction())) {
                             final ComponentName name = shortcut.getComponent();
                             if (name != null) {
@@ -773,7 +773,7 @@
                         case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
                             intentDescription = c.getString(intentIndex);
                             try {
-                                intent = Intent.getIntent(intentDescription);
+                                intent = Intent.parseUri(intentDescription, 0);
                             } catch (java.net.URISyntaxException e) {
                                 continue;
                             }
@@ -843,7 +843,7 @@
                             intent = null;
                             if (intentDescription != null) {
                                 try {
-                                    intent = Intent.getIntent(intentDescription);
+                                    intent = Intent.parseUri(intentDescription, 0);
                                 } catch (java.net.URISyntaxException e) {
                                     // Ignore, a live folder might not have a base intent
                                 }
@@ -1259,7 +1259,7 @@
         final ContentResolver cr = context.getContentResolver();
         Cursor c = cr.query(LauncherSettings.Favorites.CONTENT_URI,
             new String[] { "title", "intent" }, "title=? and intent=?",
-            new String[] { title, intent.toURI() }, null);
+            new String[] { title, intent.toUri(0) }, null);
         boolean result = false;
         try {
             result = c.moveToFirst();
@@ -1437,7 +1437,7 @@
                     case LauncherSettings.Favorites.ITEM_TYPE_SHORTCUT:
                         intentDescription = c.getString(intentIndex);
                         try {
-                            intent = Intent.getIntent(intentDescription);
+                            intent = Intent.parseUri(intentDescription, 0);
                         } catch (java.net.URISyntaxException e) {
                             return null;
                         }
diff --git a/src/com/android/launcher/LauncherProvider.java b/src/com/android/launcher/LauncherProvider.java
index 5316fa8..fc38cdd 100644
--- a/src/com/android/launcher/LauncherProvider.java
+++ b/src/com/android/launcher/LauncherProvider.java
@@ -563,7 +563,7 @@
                 intent.setComponent(cn);
                 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                         | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
-                values.put(Favorites.INTENT, intent.toURI());
+                values.put(Favorites.INTENT, intent.toUri(0));
                 values.put(Favorites.TITLE, info.loadLabel(packageManager).toString());
                 values.put(Favorites.ITEM_TYPE, Favorites.ITEM_TYPE_APPLICATION);
                 values.put(Favorites.SPANX, 1);
diff --git a/src/com/android/launcher/LauncherSettings.java b/src/com/android/launcher/LauncherSettings.java
index 062c8a6..8cc2559 100644
--- a/src/com/android/launcher/LauncherSettings.java
+++ b/src/com/android/launcher/LauncherSettings.java
@@ -32,7 +32,7 @@
 
         /**
          * The Intent URL of the gesture, describing what it points to. This
-         * value is given to {@link android.content.Intent#getIntent} to create
+         * value is given to {@link android.content.Intent#parseUri(String, int)} to create
          * an Intent that can be launched.
          * <P>Type: TEXT</P>
          */
diff --git a/src/com/android/launcher/LiveFolderAdapter.java b/src/com/android/launcher/LiveFolderAdapter.java
index 4a5c077..c405041 100644
--- a/src/com/android/launcher/LiveFolderAdapter.java
+++ b/src/com/android/launcher/LiveFolderAdapter.java
@@ -116,7 +116,7 @@
 
         if (holder.intentIndex != -1) {
             try {
-                holder.intent = Intent.getIntent(cursor.getString(holder.intentIndex));
+                holder.intent = Intent.parseUri(cursor.getString(holder.intentIndex), 0);
             } catch (URISyntaxException e) {
                 // Ignore
             }
diff --git a/src/com/android/launcher/LiveFolderInfo.java b/src/com/android/launcher/LiveFolderInfo.java
index 2432cc3..ec865a4 100644
--- a/src/com/android/launcher/LiveFolderInfo.java
+++ b/src/com/android/launcher/LiveFolderInfo.java
@@ -63,7 +63,7 @@
         values.put(LauncherSettings.Favorites.TITLE, title.toString());
         values.put(LauncherSettings.Favorites.URI, uri.toString());
         if (baseIntent != null) {
-            values.put(LauncherSettings.Favorites.INTENT, baseIntent.toURI());
+            values.put(LauncherSettings.Favorites.INTENT, baseIntent.toUri(0));
         }
         values.put(LauncherSettings.Favorites.ICON_TYPE, LauncherSettings.Favorites.ICON_TYPE_RESOURCE);
         values.put(LauncherSettings.Favorites.DISPLAY_MODE, displayMode);
diff --git a/src/com/android/launcher/UninstallShortcutReceiver.java b/src/com/android/launcher/UninstallShortcutReceiver.java
index 3bcdcbe..9fd6298 100644
--- a/src/com/android/launcher/UninstallShortcutReceiver.java
+++ b/src/com/android/launcher/UninstallShortcutReceiver.java
@@ -53,7 +53,7 @@
             try {
                 while (c.moveToNext()) {
                     try {
-                        if (intent.filterEquals(Intent.getIntent(c.getString(intentIndex)))) {
+                        if (intent.filterEquals(Intent.parseUri(c.getString(intentIndex), 0))) {
                             final long id = c.getLong(idIndex);
                             final Uri uri = LauncherSettings.Favorites.getContentUri(id, false);
                             cr.delete(uri, null, null);
