diff --git a/src/com/android/launcher2/WallpaperChooser.java b/src/com/android/launcher2/WallpaperChooser.java
index 386ae97..a5cce06 100644
--- a/src/com/android/launcher2/WallpaperChooser.java
+++ b/src/com/android/launcher2/WallpaperChooser.java
@@ -49,7 +49,7 @@
 
     private ArrayList<Integer> mThumbs;
     private ArrayList<Integer> mImages;
-    private AsyncTask<Integer,Void,Bitmap> mLoader;
+    private WallpaperLoader mLoader;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -115,9 +115,9 @@
 
     public void onItemSelected(AdapterView parent, View v, int position, long id) {
         if (mLoader != null && mLoader.getStatus() != WallpaperLoader.Status.FINISHED) {
-            mLoader.cancel(true);
+            mLoader.cancel();
         }
-        mLoader = new WallpaperLoader().execute(position);
+        mLoader = (WallpaperLoader) new WallpaperLoader().execute(position);
     }
 
     /*
@@ -183,16 +183,29 @@
     }
 
     class WallpaperLoader extends AsyncTask<Integer, Void, Bitmap> {
+        BitmapFactory.Options mOptions;
+
+        WallpaperLoader() {
+            mOptions = new BitmapFactory.Options();
+            mOptions.inDither = false;
+            mOptions.inPreferredConfig = Bitmap.Config.ARGB_8888;            
+        }
+        
         protected Bitmap doInBackground(Integer... params) {
             if (isCancelled()) return null;
-            return BitmapFactory.decodeResource(getResources(), mImages.get(params[0]), null);
+            try {
+                return BitmapFactory.decodeResource(getResources(),
+                        mImages.get(params[0]), mOptions);
+            } catch (OutOfMemoryError e) {
+                return null;
+            }
         }
 
         @Override
         protected void onPostExecute(Bitmap b) {
             if (b == null) return;
 
-            if (!isCancelled()) {
+            if (!isCancelled() && !mOptions.mCancel) {
                 // Help the GC
                 if (mBitmap != null) {
                     mBitmap.recycle();
@@ -214,5 +227,10 @@
                b.recycle(); 
             }
         }
+
+        void cancel() {
+            mOptions.requestCancelDecode();
+            super.cancel(true);
+        }
     }
 }
