diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 3eec49f..0d44db8 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -86,10 +86,10 @@
     <dimen name="dragViewOffsetY">-8dp</dimen>
 
     <!-- Padding applied to AppWidgets -->
-    <dimen name="app_widget_padding_left">4dp</dimen>
-    <dimen name="app_widget_padding_right">4dp</dimen>
-    <dimen name="app_widget_padding_top">4dp</dimen>
-    <dimen name="app_widget_padding_bottom">4dp</dimen>
+    <dimen name="app_widget_padding_left">3dp</dimen>
+    <dimen name="app_widget_padding_right">3dp</dimen>
+    <dimen name="app_widget_padding_top">1dp</dimen>
+    <dimen name="app_widget_padding_bottom">1dp</dimen>
 
 <!-- Folders -->
     <!-- The size of the image which sits behind the preview of the folder contents -->
diff --git a/res/xml/default_workspace.xml b/res/xml/default_workspace.xml
index 5bb6b4b..f6e363c 100644
--- a/res/xml/default_workspace.xml
+++ b/res/xml/default_workspace.xml
@@ -18,14 +18,6 @@
     <!-- Far-left screen [0] -->
 
     <!-- Left screen [1] -->
-    <appwidget
-        launcher:packageName="com.android.settings"
-        launcher:className="com.android.settings.widget.SettingsAppWidgetProvider"
-        launcher:screen="1"
-        launcher:x="0"
-        launcher:y="1"
-        launcher:spanX="4"
-        launcher:spanY="1" />
 
     <!-- Middle screen [2] -->
     <favorite
@@ -37,7 +29,8 @@
     <folder
         launcher:screen="2"
         launcher:x="3"
-        launcher:y="3">
+        launcher:y="3"
+        launcher:title="@string/google_apps_folder_name">
         <favorite
             launcher:packageName="com.google.android.apps.plus"
             launcher:className="com.google.android.apps.plus.phone.HomeActivity" />
@@ -45,9 +38,6 @@
             launcher:packageName="com.google.android.gm"
             launcher:className="com.google.android.gm.ConversationListActivityGmail" />
         <favorite
-            launcher:packageName="com.google.android.talk"
-            launcher:className="com.google.android.talk.SigningInActivity" />
-        <favorite
             launcher:packageName="com.google.android.apps.maps"
             launcher:className="com.google.android.maps.MapsActivity" />
         <favorite
@@ -77,14 +67,6 @@
     </folder>
 
     <!-- Right screen [3] -->
-    <appwidget
-        launcher:packageName="com.android.vending"
-        launcher:className="com.android.vending.MarketWidgetProvider"
-        launcher:screen="3"
-        launcher:x="1"
-        launcher:y="1"
-        launcher:spanX="2"
-        launcher:spanY="2" />
 
     <!-- Far-right screen [4] -->
 
@@ -104,8 +86,8 @@
         launcher:x="1"
         launcher:y="0" />
     <favorite
-        launcher:packageName="com.android.mms"
-        launcher:className="com.android.mms.ui.ConversationList"
+        launcher:packageName="com.google.android.talk"
+        launcher:className="com.google.android.talk.SigningInActivity"
         launcher:container="-101"
         launcher:screen="3"
         launcher:x="3"
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index f05850b..eaa98c1 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -52,7 +52,6 @@
 import android.graphics.drawable.Drawable;
 import android.net.Uri;
 import android.os.AsyncTask;
-import android.os.Build;
 import android.os.Bundle;
 import android.os.Environment;
 import android.os.Handler;
@@ -75,8 +74,8 @@
 import android.view.MotionEvent;
 import android.view.Surface;
 import android.view.View;
-import android.view.ViewGroup;
 import android.view.View.OnLongClickListener;
+import android.view.ViewGroup;
 import android.view.accessibility.AccessibilityEvent;
 import android.view.animation.DecelerateInterpolator;
 import android.view.inputmethod.InputMethodManager;
@@ -730,6 +729,8 @@
         }
     }
 
+
+
     /**
      * Creates a view representing a shortcut.
      *
@@ -844,39 +845,6 @@
         }
     }
 
-    class Padding {
-        int left = 0;
-        int right = 0;
-        int top = 0;
-        int bottom = 0;
-    }
-
-    Padding getPaddingForWidget(AppWidgetProviderInfo widgetInfo) {
-        PackageManager packageManager = getPackageManager();
-        Padding p = new Padding();
-        android.content.pm.ApplicationInfo appInfo;
-
-        try {
-            appInfo = packageManager.getApplicationInfo(
-                    widgetInfo.provider.getPackageName(), 0);
-        } catch (Exception e) {
-            // if we can't find the package, return 0 padding
-            return p;
-        }
-
-        // TODO: This should be ICE_CREAM_SANDWICH, but since the unbundled apps
-        // may not have updated their targetSdkVersion yet, we've bumped it down for now.
-        if (appInfo.targetSdkVersion >= Build.VERSION_CODES.HONEYCOMB_MR2) {
-            Resources r = getResources();
-            p.left = r.getDimensionPixelSize(R.dimen.app_widget_padding_left);
-            p.right = r.getDimensionPixelSize(R.dimen.app_widget_padding_right);
-            p.top = r.getDimensionPixelSize(R.dimen.app_widget_padding_top);
-            p.bottom = r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom);
-        }
-
-        return p;
-    }
-
     /**
      * Add a widget to the workspace.
      *
@@ -889,11 +857,15 @@
         // Calculate the grid spans needed to fit this widget
         CellLayout layout = getCellLayout(container, screen);
 
-        Padding padding = getPaddingForWidget(appWidgetInfo);
         // We want to account for the extra amount of padding that we are adding to the widget
         // to ensure that it gets the full amount of space that it has requested
-        int requiredWidth = appWidgetInfo.minWidth + padding.left + padding.right;
-        int requiredHeight = appWidgetInfo.minHeight + padding.top + padding.bottom;
+        Resources r = getResources();
+        int requiredWidth = appWidgetInfo.minWidth +
+                r.getDimensionPixelSize(R.dimen.app_widget_padding_left) +
+                r.getDimensionPixelSize(R.dimen.app_widget_padding_right);
+        int requiredHeight = appWidgetInfo.minHeight + 
+                r.getDimensionPixelSize(R.dimen.app_widget_padding_top) +
+                r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom);
         int[] spanXY = layout.rectToCell(requiredWidth, requiredHeight, null);
 
         // Try finding open space on Launcher screen
diff --git a/src/com/android/launcher2/LauncherAppWidgetHostView.java b/src/com/android/launcher2/LauncherAppWidgetHostView.java
index a84ced6..7c3b993 100644
--- a/src/com/android/launcher2/LauncherAppWidgetHostView.java
+++ b/src/com/android/launcher2/LauncherAppWidgetHostView.java
@@ -17,7 +17,6 @@
 package com.android.launcher2;
 
 import android.appwidget.AppWidgetHostView;
-import android.appwidget.AppWidgetProviderInfo;
 import android.content.Context;
 import android.content.res.Resources;
 import android.view.LayoutInflater;
@@ -27,7 +26,6 @@
 import android.view.ViewGroup;
 
 import com.android.launcher.R;
-import com.android.launcher2.Launcher.Padding;
 
 /**
  * {@inheritDoc}
@@ -36,12 +34,17 @@
     private boolean mHasPerformedLongPress;
     private CheckForLongPress mPendingCheckForLongPress;
     private LayoutInflater mInflater;
-    private Launcher mLauncher;
 
     public LauncherAppWidgetHostView(Context context) {
         super(context);
         mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-        mLauncher = (Launcher) context;
+
+        Resources r = context.getResources();
+        // We add necessary padding to the AppWidgetHostView
+        setPadding(r.getDimensionPixelSize(R.dimen.app_widget_padding_left),
+                r.getDimensionPixelSize(R.dimen.app_widget_padding_top),
+                r.getDimensionPixelSize(R.dimen.app_widget_padding_right),
+                r.getDimensionPixelSize(R.dimen.app_widget_padding_bottom));
     }
 
     @Override
@@ -116,14 +119,6 @@
     }
 
     @Override
-    public void setAppWidget(int appWidgetId, AppWidgetProviderInfo info) {
-        super.setAppWidget(appWidgetId, info);
-        // We add necessary padding to the AppWidgetHostView
-        Launcher.Padding padding = mLauncher.getPaddingForWidget(info);
-        setPadding(padding.left, padding.top, padding.right, padding.bottom);
-    }
-
-    @Override
     public int getDescendantFocusability() {
         return ViewGroup.FOCUS_BLOCK_DESCENDANTS;
     }
