diff --git a/samplecode/SampleShapes.cpp b/samplecode/SampleShapes.cpp
index 131ba9e..77283fe 100644
--- a/samplecode/SampleShapes.cpp
+++ b/samplecode/SampleShapes.cpp
@@ -14,33 +14,26 @@
     return rect;
 }
 
-static SkShape* make_shape0(const SkMatrix* matrix = NULL) {
+static SkShape* make_shape0(bool red) {
     SkRectShape* s = new SkRectShape;
     s->setRect(make_rect(10, 10, 90, 90));
-    if (matrix) {
-        s->setMatrix(*matrix);
+    if (red) {
         s->paint().setColor(SK_ColorRED);
     }
     return s;
 }
 
-static SkShape* make_shape1(const SkMatrix* matrix = NULL) {
+static SkShape* make_shape1() {
     SkRectShape* s = new SkRectShape;
     s->setOval(make_rect(10, 10, 90, 90));
-    if (matrix) {
-        s->setMatrix(*matrix);
-    }
     s->paint().setColor(SK_ColorBLUE);
     return s;
 }
 
-static SkShape* make_shape2(const SkMatrix* matrix = NULL) {
+static SkShape* make_shape2() {
     SkRectShape* s = new SkRectShape;
     s->setRRect(make_rect(10, 10, 90, 90),
                 SkIntToScalar(20), SkIntToScalar(20));
-    if (matrix) {
-        s->setMatrix(*matrix);
-    }
     s->paint().setColor(SK_ColorGREEN);
     return s;
 }
@@ -52,15 +45,15 @@
 public:
 	ShapesView() {
         SkMatrix m;
-        fGroup.appendShape(make_shape0())->unref();
+        fGroup.appendShape(make_shape0(false))->unref();
         m.setRotate(SkIntToScalar(30), SkIntToScalar(50), SkIntToScalar(50));
         m.postTranslate(0, SkIntToScalar(120));
-        fGroup.appendShape(make_shape0(&m))->unref();
+        fGroup.appendShape(make_shape0(true), m)->unref();
 
         m.setTranslate(SkIntToScalar(120), 0);
-        fGroup.appendShape(make_shape1(&m))->unref();
+        fGroup.appendShape(make_shape1(), m)->unref();
         m.postTranslate(0, SkIntToScalar(120));
-        fGroup.appendShape(make_shape2(&m))->unref();
+        fGroup.appendShape(make_shape2(), m)->unref();
     }
     
 protected:
@@ -81,12 +74,20 @@
         this->drawBG(canvas);
         
         SkMatrix matrix;
+#if 1        
+        SkGroupShape gs;
+        gs.appendShape(&fGroup);
+        matrix.setTranslate(0, SkIntToScalar(240));
+        gs.appendShape(&fGroup, matrix);
         matrix.setTranslate(SkIntToScalar(240), 0);
         matrix.preScale(SK_Scalar1*2, SK_Scalar1*2);
-        
+        gs.appendShape(&fGroup, matrix);
+        canvas->drawShape(&gs);
+#else
         fGroup.draw(canvas);
         fGroup.drawXY(canvas, 0, SkIntToScalar(240));
         fGroup.drawMatrix(canvas, matrix);
+#endif
     }
     
 private:
