diff --git a/src/com/android/launcher/Launcher.java b/src/com/android/launcher/Launcher.java
index af1b0f3..465400b 100644
--- a/src/com/android/launcher/Launcher.java
+++ b/src/com/android/launcher/Launcher.java
@@ -819,7 +819,7 @@
                 .setIcon(android.R.drawable.ic_search_category_default)
                 .setAlphabeticShortcut(SearchManager.MENU_KEY);
         menu.add(0, MENU_NOTIFICATIONS, 0, R.string.menu_notifications)
-                .setIcon(android.R.drawable.ic_menu_notifications)
+                .setIcon(com.android.internal.R.drawable.ic_menu_notifications)
                 .setAlphabeticShortcut('N');
 
         final Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
diff --git a/src/com/android/launcher/WallpaperChooser.java b/src/com/android/launcher/WallpaperChooser.java
index a4e583e..afbe6f3 100644
--- a/src/com/android/launcher/WallpaperChooser.java
+++ b/src/com/android/launcher/WallpaperChooser.java
@@ -32,9 +32,12 @@
 import android.graphics.BitmapFactory;
 import android.graphics.Bitmap;
 import android.graphics.drawable.Drawable;
+import android.content.res.Resources;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Collections;
 
 public class WallpaperChooser extends Activity implements AdapterView.OnItemSelectedListener,
         OnClickListener {
@@ -55,9 +58,6 @@
             R.drawable.wallpaper_grey_small,
             R.drawable.wallpaper_green_small,
             R.drawable.wallpaper_pink_small,
-            R.drawable.wallpaper_dale_chihuly_small,
-            R.drawable.wallpaper_john_maeda_small,
-            R.drawable.wallpaper_marc_ecko_small,
     };
 
     private static final Integer[] IMAGE_IDS = {
@@ -76,9 +76,6 @@
             R.drawable.wallpaper_grey,
             R.drawable.wallpaper_green,
             R.drawable.wallpaper_pink,
-            R.drawable.wallpaper_dale_chihuly,
-            R.drawable.wallpaper_john_maeda,
-            R.drawable.wallpaper_marc_ecko,
     };
 
     private Gallery mGallery;
@@ -88,11 +85,16 @@
     private BitmapFactory.Options mOptions;
     private Bitmap mBitmap;
 
+    private ArrayList<Integer> mThumbs;
+    private ArrayList<Integer> mImages;
+
     @Override
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         requestWindowFeature(Window.FEATURE_NO_TITLE);
 
+        findWallpapers();
+
         setContentView(R.layout.wallpaper_chooser);
 
         mOptions = new BitmapFactory.Options();
@@ -103,13 +105,41 @@
         mGallery.setAdapter(new ImageAdapter(this));
         mGallery.setOnItemSelectedListener(this);
         mGallery.setCallbackDuringFling(false);
-        
+
         Button b = (Button) findViewById(R.id.set);
         b.setOnClickListener(this);
 
         mImageView = (ImageView) findViewById(R.id.wallpaper);
     }
 
+    private void findWallpapers() {
+        mThumbs = new ArrayList<Integer>(THUMB_IDS.length + 4);
+        Collections.addAll(mThumbs, THUMB_IDS);
+
+        mImages = new ArrayList<Integer>(IMAGE_IDS.length + 4);
+        Collections.addAll(mImages, IMAGE_IDS);
+
+        final Resources resources = getResources();
+        final String[] extras = resources.getStringArray(R.array.extra_wallpapers);
+        final String packageName = getApplication().getPackageName();
+
+        final ArrayList<Integer> images = mImages;
+        final ArrayList<Integer> thumbs = mThumbs;
+
+        for (String extra : extras) {
+            int res = resources.getIdentifier(extra, "drawable", packageName);
+            if (res != 0) {
+                final int thumbRes = resources.getIdentifier(extra + "_small",
+                        "drawable", packageName);
+
+                if (thumbRes != 0) {
+                    images.add(res);
+                    thumbs.add(res);
+                }
+            }
+        }
+    }
+
     @Override
     protected void onResume() {
         super.onResume();
@@ -144,7 +174,7 @@
 
         mIsWallpaperSet = true;
         try {
-            InputStream stream = getResources().openRawResource(IMAGE_IDS[position]);
+            InputStream stream = getResources().openRawResource(mImages.get(position));
             setWallpaper(stream);
             setResult(RESULT_OK);
             finish();
@@ -164,7 +194,7 @@
         }
 
         public int getCount() {
-            return THUMB_IDS.length;
+            return mThumbs.size();
         }
 
         public Object getItem(int position) {
@@ -184,7 +214,7 @@
                 image = (ImageView) convertView;
             }
 
-            image.setImageResource(THUMB_IDS[position]);
+            image.setImageResource(mThumbs.get(position));
             image.getDrawable().setDither(true);
             return image;
         }
