diff --git a/gm/gm_files.mk b/gm/gm_files.mk
index f5c9deb..2f7769e 100644
--- a/gm/gm_files.mk
+++ b/gm/gm_files.mk
@@ -3,7 +3,8 @@
 	blurs.cpp \
 	filltypes.cpp \
 	gradients.cpp \
-    poly2poly.cpp \
+	points.cpp \
+	poly2poly.cpp \
 	shapes.cpp \
 	tilemodes.cpp \
 	xfermodes.cpp \
diff --git a/gm/points.cpp b/gm/points.cpp
new file mode 100644
index 0000000..48d8fec
--- /dev/null
+++ b/gm/points.cpp
@@ -0,0 +1,67 @@
+#include "gm.h"
+#include "SkRandom.h"
+
+namespace skiagm {
+
+class PointsGM : public GM {
+public:
+	PointsGM() {}
+
+protected:
+    virtual SkString onShortName() {
+        return SkString("points");
+    }
+
+	virtual SkISize onISize() {
+        return make_isize(640, 490);
+    }
+
+    void drawBG(SkCanvas* canvas) {
+        canvas->drawColor(SK_ColorWHITE);
+    }
+
+    static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) {
+        for (size_t i = 0; i < n; i++)
+            pts[i].set(rand->nextUScalar1() * 640, rand->nextUScalar1() * 480);
+    }
+
+    virtual void onDraw(SkCanvas* canvas) {
+        this->drawBG(canvas);
+
+        canvas->translate(SK_Scalar1, SK_Scalar1);
+
+        SkRandom rand;
+        SkPaint  p0, p1, p2, p3;
+        const size_t n = 99;
+
+        p0.setColor(SK_ColorRED);
+        p1.setColor(SK_ColorGREEN);
+        p2.setColor(SK_ColorBLUE);
+        p3.setColor(SK_ColorWHITE);
+
+        p0.setStrokeWidth(SkIntToScalar(4));
+        p2.setStrokeCap(SkPaint::kRound_Cap);
+        p2.setStrokeWidth(SkIntToScalar(6));
+
+        SkPoint* pts = new SkPoint[n];
+        fill_pts(pts, n, &rand);
+
+        canvas->drawPoints(SkCanvas::kPolygon_PointMode, n, pts, p0);
+        canvas->drawPoints(SkCanvas::kLines_PointMode, n, pts, p1);
+        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p2);
+        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p3);
+
+        delete[] pts;
+    }
+
+private:
+    typedef GM INHERITED;
+};
+
+//////////////////////////////////////////////////////////////////////////////
+
+static GM* MyFactory(void*) { return new PointsGM; }
+static GMRegistry reg(MyFactory);
+
+}
+
diff --git a/samplecode/SamplePoints.cpp b/samplecode/SamplePoints.cpp
index db2e6b7..416dc8d 100644
--- a/samplecode/SamplePoints.cpp
+++ b/samplecode/SamplePoints.cpp
@@ -20,77 +20,43 @@
 #include "SkStream.h"
 #include "SkXMLParser.h"
 
-static SkRandom gRand;
-
-static const struct {
-    const char* fName;
-    uint32_t    fFlags;
-    bool        fFlushCache;
-} gHints[] = {
-    { "Linear", SkPaint::kLinearText_Flag,     false },
-    { "Normal",   0,                           true },
-    { "Subpixel", SkPaint::kSubpixelText_Flag, true }
-};
-
-#ifdef SK_DEBUG
-    #define REPEAT_COUNT    1
-#else
-    #define REPEAT_COUNT    5000
-#endif
-
 class PointsView : public SkView {
-    bool fAA;
 public:
-	PointsView() : fAA(false) {}
-    
+	PointsView() {}
+
 protected:
     // overrides from SkEventSink
-    virtual bool onQuery(SkEvent* evt)
-    {
-        if (SampleCode::TitleQ(*evt))
-        {
+    virtual bool onQuery(SkEvent* evt) {
+        if (SampleCode::TitleQ(*evt)) {
             SampleCode::TitleR(evt, "Points");
             return true;
         }
         return this->INHERITED::onQuery(evt);
     }
 
-    void drawBG(SkCanvas* canvas)
-    {
-//        canvas->drawColor(0xFFDDDDDD);
+    void drawBG(SkCanvas* canvas) {
         canvas->drawColor(SK_ColorWHITE);
-   //     canvas->drawColor(SK_ColorBLACK);
     }
-    
-    static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand)
-    {
+
+    static void fill_pts(SkPoint pts[], size_t n, SkRandom* rand) {
         for (size_t i = 0; i < n; i++)
             pts[i].set(rand->nextUScalar1() * 640, rand->nextUScalar1() * 480);
     }
-    
-    virtual void onDraw(SkCanvas* canvas)
-    {
+
+    virtual void onDraw(SkCanvas* canvas) {
         this->drawBG(canvas);
-        
+
         canvas->translate(SK_Scalar1, SK_Scalar1);
-        
+
         SkRandom rand;
         SkPaint  p0, p1, p2, p3;
         const size_t n = 99;
-        const int TIMES = 1;
-        
+
         p0.setColor(SK_ColorRED);
         p1.setColor(SK_ColorGREEN);
         p2.setColor(SK_ColorBLUE);
         p3.setColor(SK_ColorWHITE);
-        
-     //   fAA = !fAA;
-        fAA = false;
-        p0.setAntiAlias(fAA);
-        p1.setAntiAlias(fAA);
-        p2.setAntiAlias(fAA);
-        p3.setAntiAlias(fAA);
-        
+
         p0.setStrokeWidth(SkIntToScalar(4));
         p2.setStrokeCap(SkPaint::kRound_Cap);
         p2.setStrokeWidth(SkIntToScalar(6));
@@ -98,18 +64,14 @@
         SkPoint* pts = new SkPoint[n];
         fill_pts(pts, n, &rand);
 
-//        SkMSec now = SkTime::GetMSecs();
-        for (int times = 0; times < TIMES; times++)
-        {
-            canvas->drawPoints(SkCanvas::kPolygon_PointMode, n, pts, p0);
-            canvas->drawPoints(SkCanvas::kLines_PointMode, n, pts, p1);
-            canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p2);
-            canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p3);
-        }
-  //      printf("----- msecs %d\n", SkTime::GetMSecs() - now);
+        canvas->drawPoints(SkCanvas::kPolygon_PointMode, n, pts, p0);
+        canvas->drawPoints(SkCanvas::kLines_PointMode, n, pts, p1);
+        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p2);
+        canvas->drawPoints(SkCanvas::kPoints_PointMode, n, pts, p3);
+
         delete[] pts;
     }
-    
+
 private:
 
     typedef SkView INHERITED;
