diff --git a/res/drawable-hdpi/search_floater.9.png b/res/drawable-hdpi/search_floater.9.png
index 1c6d836..02441d0 100644
--- a/res/drawable-hdpi/search_floater.9.png
+++ b/res/drawable-hdpi/search_floater.9.png
Binary files differ
diff --git a/res/layout/widget_search.xml b/res/layout/widget_search.xml
index 3aee913..a346723 100644
--- a/res/layout/widget_search.xml
+++ b/res/layout/widget_search.xml
@@ -19,25 +19,25 @@
     xmlns:launcher="http://schemas.android.com/apk/res/com.android.launcher2"
     android:id="@+id/widget_search"  
     android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
+    android:layout_height="fill_parent"
     android:orientation="vertical"
-    android:gravity="top">
+    android:gravity="center">
 
     <LinearLayout
         android:id="@+id/search_plate"
         android:layout_width="fill_parent"
         android:layout_height="wrap_content"
         android:orientation="horizontal"
-        android:paddingLeft="12dip"
-        android:paddingRight="12dip"
-        android:paddingTop="7dip"
-        android:paddingBottom="13dip"
+        android:paddingLeft="14dip"
+        android:paddingRight="14dip"
+        android:paddingTop="13dip"
+        android:paddingBottom="12dip"
         android:background="@drawable/search_floater" >
 
         <TextView
             android:id="@+id/search_src_text"
             android:layout_width="0dip"
-            android:layout_height="wrap_content"
+            android:layout_height="42dip"
             android:layout_weight="1.0"
             android:editable="false"
             android:focusable="true"
@@ -50,8 +50,8 @@
         <ImageButton 
             android:id="@+id/search_voice_btn"
             android:layout_width="wrap_content"
-            android:layout_height="fill_parent"
-            android:layout_marginLeft="8dip"
+            android:layout_height="42dip"
+            android:layout_marginLeft="4dip"
             android:background="@*android:drawable/btn_search_dialog_voice"
             android:src="@*android:drawable/ic_btn_speak_now"
         />
diff --git a/src/com/android/launcher2/DragView.java b/src/com/android/launcher2/DragView.java
index 7128ded..7a86273 100644
--- a/src/com/android/launcher2/DragView.java
+++ b/src/com/android/launcher2/DragView.java
@@ -84,9 +84,7 @@
 
     @Override
     protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        int widthSize = resolveSize(mBitmap.getWidth(), widthMeasureSpec);
-        int heightSize = resolveSize(mBitmap.getHeight(), heightMeasureSpec);
-        setMeasuredDimension(widthSize, heightSize);
+        setMeasuredDimension(mBitmap.getWidth(), mBitmap.getHeight());
     }
 
     @Override
diff --git a/src/com/android/launcher2/Search.java b/src/com/android/launcher2/Search.java
index ccf7792..09646bd 100644
--- a/src/com/android/launcher2/Search.java
+++ b/src/com/android/launcher2/Search.java
@@ -16,20 +16,15 @@
 
 package com.android.launcher2;
 
-import android.app.SearchManager;
+import android.app.Activity;
 import android.content.ActivityNotFoundException;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
 import android.graphics.drawable.Drawable;
 import android.os.Bundle;
-import android.server.search.SearchableInfo;
-import android.server.search.Searchables;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.view.KeyEvent;
@@ -76,8 +71,6 @@
     // For voice searching
     private Intent mVoiceSearchIntent;
 
-    private SearchManager mSearchManager;
-
     /**
      * Used to inflate the Workspace from XML.
      *
@@ -138,8 +131,6 @@
         mVoiceSearchIntent = new Intent(android.speech.RecognizerIntent.ACTION_WEB_SEARCH);
         mVoiceSearchIntent.putExtra(android.speech.RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                 android.speech.RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH);
-        
-        mSearchManager = (SearchManager) getContext().getSystemService(Context.SEARCH_SERVICE);
     }
 
     /**
@@ -174,7 +165,7 @@
 
     /**
      * Morph the search gadget to the search dialog.
-     * See {@link Activity.startSearch()} for the arguments.
+     * See {@link Activity#startSearch()} for the arguments.
      */
     public void startSearch(String initialQuery, boolean selectInitialQuery, 
             Bundle appSearchData, boolean globalSearch) {
@@ -233,11 +224,11 @@
     }
 
     private boolean isAtTop() {
-        return getTop() == 0;
+        return getWidgetTop() == 0;
     }
 
     private int getAnimationDuration() {
-        return (int) (getTop() / ANIMATION_VELOCITY);
+        return (int) (getWidgetTop() / ANIMATION_VELOCITY);
     }
 
     /**
@@ -351,7 +342,7 @@
         @Override
         protected void applyTransformation(float interpolatedTime, Transformation t) {
             float dx = -getLeft() * interpolatedTime;
-            float dy = -getTop() * interpolatedTime;
+            float dy = -getWidgetTop() * interpolatedTime;
             t.getMatrix().setTranslate(dx, dy);
         }
     }
@@ -363,9 +354,17 @@
         @Override
         protected void applyTransformation(float interpolatedTime, Transformation t) {
             float dx = -getLeft() * (1.0f - interpolatedTime);
-            float dy = -getTop() * (1.0f - interpolatedTime);
+            float dy = -getWidgetTop() * (1.0f - interpolatedTime);
             t.getMatrix().setTranslate(dx, dy);
         }
     }
 
+    /**
+     * The widget is centered vertically within it's 4x1 slot. This is accomplished by nesting
+     * the actual widget inside another view. For animation purposes, we care about the top of the
+     * actual widget rather than it's container. This method return the top of the actual widget.
+     */
+    private int getWidgetTop() {
+        return getTop() + getChildAt(0).getTop();
+    }
 }
