diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp
index 8719e67..0394056 100644
--- a/samplecode/SampleAll.cpp
+++ b/samplecode/SampleAll.cpp
@@ -30,8 +30,6 @@
 #include "SkXfermode.h"
 
 #include <math.h>
-
-extern void Dump();
     
 static inline SkPMColor rgb2gray(SkPMColor c)
 {
@@ -427,7 +425,6 @@
                     break;
             } while (true);
         }
-        Dump();
     }
     
     void drawPicture(SkCanvas* canvas, int spriteOffset)
@@ -710,7 +707,6 @@
     void drawOneRaster(SkCanvas* canvas)
     {        
         canvas->save();
-//        canvas->scale(SK_Scalar1*2, SK_Scalar1*2, 0, 0);
 
         SkScalar    x = SkIntToScalar(20);
         SkScalar    y = SkIntToScalar(40);
@@ -742,31 +738,13 @@
             paint.setStyle(SkPaint::kStroke_Style);
             canvas->drawOval(oval, paint);
             paint.setStyle(SkPaint::kFill_Style);
-            if (0)
-            {
-                SkPath path;
-                paint.getTextPath(str.c_str(), str.size(), x + SkIntToScalar(260), y, &path);
-                canvas->drawPath(path, paint);
-            }
 
             y += paint.getFontSpacing();
         }
 
         canvas->restore();
         
-        if (0)
-        {
-            SkPoint pts[] = { 0, 0, 0, SkIntToScalar(150) };
-            SkColor colors[] = { 0xFFE6E6E6, 0xFFFFFFFF };
-            SkShader* s = SkGradientShader::CreateLinear(pts, colors, NULL, 2, SkShader::kClamp_TileMode);
-
-            paint.reset();
-            paint.setShader(s)->unref();
-            canvas->drawRectCoords(0, 0, SkIntToScalar(120), SkIntToScalar(150), paint);
-        }
-        
-        if (1)
-        {
+        if (1) {
             SkAvoidXfermode   mode(SK_ColorWHITE, 0xFF,
                                    SkAvoidXfermode::kTargetColor_Mode);
             SkPaint paint;
diff --git a/samplecode/SamplePatch.cpp b/samplecode/SamplePatch.cpp
index 919c251..02b6f92 100644
--- a/samplecode/SamplePatch.cpp
+++ b/samplecode/SamplePatch.cpp
@@ -214,11 +214,11 @@
     SkAutoCanvasRestore ar(canvas, true);
 
     patch->draw(canvas, paint, 10, 10, false, false);
-    canvas->translate(SkIntToScalar(300), 0);
+    canvas->translate(SkIntToScalar(180), 0);
     patch->draw(canvas, paint, 10, 10, true, false);
-    canvas->translate(SkIntToScalar(300), 0);
+    canvas->translate(SkIntToScalar(180), 0);
     patch->draw(canvas, paint, 10, 10, false, true);
-    canvas->translate(SkIntToScalar(300), 0);
+    canvas->translate(SkIntToScalar(180), 0);
     patch->draw(canvas, paint, 10, 10, true, true);
 }
 
@@ -237,20 +237,20 @@
         }
         fShader1 = make_shader1(fSize1);
 
-        const SkScalar S = SkIntToScalar(90);
-        const SkScalar T = SkIntToScalar(64);
-        fPts[0].set(S*1, T);
-        fPts[1].set(S*2, T);
-        fPts[2].set(S*3, T);
-        fPts[3].set(S*4, T);
-        fPts[4].set(S*4, T*2);
-        fPts[5].set(S*4, T*3);
-        fPts[6].set(S*4, T*4);
-        fPts[7].set(S*3, T*4);
-        fPts[8].set(S*2, T*4);
-        fPts[9].set(S*1, T*4);
-        fPts[10].set(S*1, T*3);
-        fPts[11].set(S*1, T*2);
+        const SkScalar S = SkIntToScalar(50);
+        const SkScalar T = SkIntToScalar(40);
+        fPts[0].set(S*0, T);
+        fPts[1].set(S*1, T);
+        fPts[2].set(S*2, T);
+        fPts[3].set(S*3, T);
+        fPts[4].set(S*3, T*2);
+        fPts[5].set(S*3, T*3);
+        fPts[6].set(S*3, T*4);
+        fPts[7].set(S*2, T*4);
+        fPts[8].set(S*1, T*4);
+        fPts[9].set(S*0, T*4);
+        fPts[10].set(S*0, T*3);
+        fPts[11].set(S*0, T*2);
     }
     
     virtual ~PatchView() {
@@ -352,6 +352,8 @@
             return;
         }
         
+        canvas->translate(SkIntToScalar(20), 0);
+
         Patch   patch;
         
         paint.setShader(fShader0);
diff --git a/samplecode/SampleText.cpp b/samplecode/SampleText.cpp
index 7b8bcf0..6deb5d0 100644
--- a/samplecode/SampleText.cpp
+++ b/samplecode/SampleText.cpp
@@ -436,7 +436,7 @@
 
         test_breakText();        
         test_typefaceCache();
-        test_poly();
+//        test_poly();
     }
     
     virtual ~TextSpeedView()
