diff --git a/src/com/android/launcher2/LauncherApplication.java b/src/com/android/launcher2/LauncherApplication.java
index 28362fd..e5f3250 100644
--- a/src/com/android/launcher2/LauncherApplication.java
+++ b/src/com/android/launcher2/LauncherApplication.java
@@ -31,8 +31,9 @@
 import java.lang.ref.WeakReference;
 
 public class LauncherApplication extends Application {
-    public LauncherModel mModel;
-    public IconCache mIconCache;
+    private LauncherModel mModel;
+    private IconCache mIconCache;
+    private WidgetPreviewLoader.CacheDb mWidgetPreviewCacheDb;
     private static boolean sIsScreenLarge;
     private static float sScreenDensity;
     private static int sLongPressTimeout = 300;
@@ -47,6 +48,7 @@
         sIsScreenLarge = getResources().getBoolean(R.bool.is_large_screen);
         sScreenDensity = getResources().getDisplayMetrics().density;
 
+        mWidgetPreviewCacheDb = new WidgetPreviewLoader.CacheDb(this);
         mIconCache = new IconCache(this);
         mModel = new LauncherModel(this, mIconCache);
 
@@ -114,7 +116,11 @@
         return mModel;
     }
 
-    void setLauncherProvider(LauncherProvider provider) {
+    WidgetPreviewLoader.CacheDb getWidgetPreviewCacheDb() {
+        return mWidgetPreviewCacheDb;
+    }
+
+   void setLauncherProvider(LauncherProvider provider) {
         mLauncherProvider = new WeakReference<LauncherProvider>(provider);
     }
 
diff --git a/src/com/android/launcher2/LauncherModel.java b/src/com/android/launcher2/LauncherModel.java
index 9a5bd47..99808a6 100644
--- a/src/com/android/launcher2/LauncherModel.java
+++ b/src/com/android/launcher2/LauncherModel.java
@@ -1988,7 +1988,10 @@
                     for (int i=0; i<N; i++) {
                         if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.updatePackage " + packages[i]);
                         mBgAllAppsList.updatePackage(context, packages[i]);
-                        WidgetPreviewLoader.removeFromDb(context, packages[i]);
+                        LauncherApplication app =
+                                (LauncherApplication) context.getApplicationContext();
+                        WidgetPreviewLoader.removeFromDb(
+                                app.getWidgetPreviewCacheDb(), packages[i]);
                     }
                     break;
                 case OP_REMOVE:
@@ -1996,7 +1999,10 @@
                     for (int i=0; i<N; i++) {
                         if (DEBUG_LOADERS) Log.d(TAG, "mAllAppsList.removePackage " + packages[i]);
                         mBgAllAppsList.removePackage(packages[i]);
-                        WidgetPreviewLoader.removeFromDb(context, packages[i]);
+                        LauncherApplication app =
+                                (LauncherApplication) context.getApplicationContext();
+                        WidgetPreviewLoader.removeFromDb(
+                                app.getWidgetPreviewCacheDb(), packages[i]);
                     }
                     break;
             }
diff --git a/src/com/android/launcher2/PackageChangedReceiver.java b/src/com/android/launcher2/PackageChangedReceiver.java
index ce08b3a..e5e7e94 100644
--- a/src/com/android/launcher2/PackageChangedReceiver.java
+++ b/src/com/android/launcher2/PackageChangedReceiver.java
@@ -13,6 +13,7 @@
             // they sent us a bad intent
             return;
         }
-        WidgetPreviewLoader.removeFromDb(context, packageName);
+        LauncherApplication app = (LauncherApplication) context.getApplicationContext();
+        WidgetPreviewLoader.removeFromDb(app.getWidgetPreviewCacheDb(), packageName);
     }
 }
diff --git a/src/com/android/launcher2/WidgetPreviewLoader.java b/src/com/android/launcher2/WidgetPreviewLoader.java
index 68813d4..5ce3233 100644
--- a/src/com/android/launcher2/WidgetPreviewLoader.java
+++ b/src/com/android/launcher2/WidgetPreviewLoader.java
@@ -129,7 +129,7 @@
 
     private final float sWidgetPreviewIconPaddingPercentage = 0.25f;
 
-    private WidgetPreviewCacheDb mDb;
+    private CacheDb mDb;
 
     private HashMap<String, WeakReference<Bitmap>> mLoadedPreviews;
     private ArrayList<SoftReference<Bitmap>> mUnusedBitmaps;
@@ -143,8 +143,9 @@
         mContext = mLauncher = launcher;
         mPackageManager = mContext.getPackageManager();
         mAppIconSize = mContext.getResources().getDimensionPixelSize(R.dimen.app_icon_size);
-        mIconCache = ((LauncherApplication) launcher.getApplicationContext()).getIconCache();
-        mDb = new WidgetPreviewCacheDb(mContext);
+        LauncherApplication app = (LauncherApplication) launcher.getApplicationContext();
+        mIconCache = app.getIconCache();
+        mDb = app.getWidgetPreviewCacheDb();
         mLoadedPreviews = new HashMap<String, WeakReference<Bitmap>>();
         mUnusedBitmaps = new ArrayList<SoftReference<Bitmap>>();
     }
@@ -253,7 +254,7 @@
         }
     }
 
-    static class WidgetPreviewCacheDb extends SQLiteOpenHelper {
+    static class CacheDb extends SQLiteOpenHelper {
         final static int DB_VERSION = 2;
         final static String DB_NAME = "widgetpreviews.db";
         final static String TABLE_NAME = "shortcut_and_widget_previews";
@@ -262,7 +263,7 @@
         final static String COLUMN_PREVIEW_BITMAP = "preview_bitmap";
         Context mContext;
 
-        public WidgetPreviewCacheDb(Context context) {
+        public CacheDb(Context context) {
             super(context, new File(context.getCacheDir(), DB_NAME).getPath(), null, DB_VERSION);
             // Store the context for later use
             mContext = context;
@@ -325,24 +326,24 @@
         SQLiteDatabase db = mDb.getWritableDatabase();
         ContentValues values = new ContentValues();
 
-        values.put(WidgetPreviewCacheDb.COLUMN_NAME, name);
+        values.put(CacheDb.COLUMN_NAME, name);
         ByteArrayOutputStream stream = new ByteArrayOutputStream();
         preview.compress(Bitmap.CompressFormat.PNG, 100, stream);
-        values.put(WidgetPreviewCacheDb.COLUMN_PREVIEW_BITMAP, stream.toByteArray());
-        values.put(WidgetPreviewCacheDb.COLUMN_SIZE, mSize);
-        db.insert(WidgetPreviewCacheDb.TABLE_NAME, null, values);
+        values.put(CacheDb.COLUMN_PREVIEW_BITMAP, stream.toByteArray());
+        values.put(CacheDb.COLUMN_SIZE, mSize);
+        db.insert(CacheDb.TABLE_NAME, null, values);
     }
 
-    public static void removeFromDb(final Context mContext, final String packageName) {
+    public static void removeFromDb(final CacheDb cacheDb, final String packageName) {
         synchronized(sInvalidPackages) {
             sInvalidPackages.add(packageName);
         }
         new AsyncTask<Void, Void, Void>() {
             public Void doInBackground(Void ... args) {
-                SQLiteDatabase db = new WidgetPreviewCacheDb(mContext).getWritableDatabase();
-                db.delete(WidgetPreviewCacheDb.TABLE_NAME,
-                        WidgetPreviewCacheDb.COLUMN_NAME + " LIKE ? OR " +
-                        WidgetPreviewCacheDb.COLUMN_NAME + " LIKE ?", // SELECT query
+                SQLiteDatabase db = cacheDb.getWritableDatabase();
+                db.delete(CacheDb.TABLE_NAME,
+                        CacheDb.COLUMN_NAME + " LIKE ? OR " +
+                        CacheDb.COLUMN_NAME + " LIKE ?", // SELECT query
                         new String[] {
                             WIDGET_PREFIX + packageName + "/%",
                             SHORTCUT_PREFIX + packageName + "/%"} // args to SELECT query
@@ -364,12 +365,12 @@
 
     private Bitmap readFromDb(String name, Bitmap b) {
         if (mCachedSelectQuery == null) {
-            mCachedSelectQuery = WidgetPreviewCacheDb.COLUMN_NAME + " = ? AND " +
-                    WidgetPreviewCacheDb.COLUMN_SIZE + " = ?";
+            mCachedSelectQuery = CacheDb.COLUMN_NAME + " = ? AND " +
+                    CacheDb.COLUMN_SIZE + " = ?";
         }
         SQLiteDatabase db = mDb.getReadableDatabase();
-        Cursor result = db.query(WidgetPreviewCacheDb.TABLE_NAME,
-                new String[] { WidgetPreviewCacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return
+        Cursor result = db.query(CacheDb.TABLE_NAME,
+                new String[] { CacheDb.COLUMN_PREVIEW_BITMAP }, // cols to return
                 mCachedSelectQuery, // select query
                 new String[] { name, mSize }, // args to select query
                 null,
