diff --git a/gm/gm.h b/gm/gm.h
new file mode 100644
index 0000000..1ad7240
--- /dev/null
+++ b/gm/gm.h
@@ -0,0 +1,24 @@
+#ifndef skiagm_DEFINED
+#define skiagm_DEFINED
+
+#include "SkRefCnt.h"
+#include "SkString.h"
+#include "SkTRegistry.h"
+
+namespace skiagm {
+
+    class GM {
+    public:
+        GM();
+        virtual ~GM();
+		
+		void draw(SkCanvas*);
+
+	protected:
+		virtual void onDraw(SkCanvas*) {}
+    };
+
+    typedef SkTRegistry<GM*, void*> GMRegistry;
+}
+
+#endif
diff --git a/gm/gmmain.cpp b/gm/gmmain.cpp
new file mode 100644
index 0000000..2234188
--- /dev/null
+++ b/gm/gmmain.cpp
@@ -0,0 +1,86 @@
+#include "SkGraphics.h"
+#include "gm.h"
+
+using namespace skiagm;
+
+// need to explicitly declare this, or we get some weird infinite loop llist
+template GMRegistry* GMRegistry::gHead;
+
+class Iter {
+public:
+    Iter() {
+        fReg = TestRegistry::Head();
+    }
+	
+    Test* next() {
+        if (fReg) {
+            TestRegistry::Factory fact = fReg->factory();
+            fReg = fReg->next();
+            return fact();
+        }
+        return NULL;
+    }
+	
+    static int Count() {
+        const TestRegistry* reg = TestRegistry::Head();
+        int count = 0;
+        while (reg) {
+            count += 1;
+            reg = reg->next();
+        }
+        return count;
+    }
+	
+private:
+    const GMRegistry* fReg;
+};
+
+class SkAutoGraphics {
+public:
+    SkAutoGraphics() {
+        SkGraphics::Init();
+    }
+    ~SkAutoGraphics() {
+        SkGraphics::Term();
+    }
+};
+
+static const struct {
+	SkBitmap::Config	fConfig;
+	bool				fUsePicture;
+	const char*			fName;
+} gRec[] = {
+	{ SkBitmap::kARGB_8888_Config,	false,	"8888" },
+	{ SkBitmap::kARGB_4444_Config,	false,	"4444" },
+	{ SkBitmap::kRGB_565_Config,	false,	"565" },
+	{ SkBitmap::kA8_Config,			false,	"A8" },
+};
+
+int main (int argc, char * const argv[]) {
+    SkAutoGraphics ag;
+    
+    Iter iter;
+    GM* gm;
+
+    while ((gm = iter.next()) != NULL) {
+		SkISize size = gm->getISize();
+		SkBitmap bitmap;
+		for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) {
+			bitmap.setConfig(gRec[i].fConfig, size.width(), size.height());
+			bitmap.allocPixels();
+			bitmap.eraseColor(0);
+			SkCanvas canvas(bitmap);
+
+			gm->draw(&canvas);
+			
+			if (gRec[i].fUsePicture) {
+				SkPicture picture;
+				gm->draw(picture.beginRecording(size.width(), size.height(), 0));
+				canvas.drawPicture(picture);
+			} else {
+			}
+		}
+        SkDELETE(gm);
+    }
+    return 0;
+}
