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/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();
+    }
 }
