diff --git a/samplecode/SampleApp.cpp b/samplecode/SampleApp.cpp
index 254d209..25a0e87 100644
--- a/samplecode/SampleApp.cpp
+++ b/samplecode/SampleApp.cpp
@@ -795,6 +795,7 @@
     fRequestGrabImage = false;
     fPipeState = SkOSMenu::kOffState;
     fTilingState = SkOSMenu::kOffState;
+    fTileCount.set(1, 1);
     fMeasureFPS = false;
     fLCDState = SkOSMenu::kMixedState;
     fAAState = SkOSMenu::kMixedState;
@@ -1090,7 +1091,27 @@
         if (bitmap_diff(canvas, orig, &diff)) {
         }
     } else {
-        this->INHERITED::draw(canvas);
+        const SkScalar cw = SkScalarDiv(this->width(), SkIntToScalar(fTileCount.width()));
+        const SkScalar ch = SkScalarDiv(this->height(), SkIntToScalar(fTileCount.height()));
+        
+        for (int y = 0; y < fTileCount.height(); ++y) {
+            for (int x = 0; x < fTileCount.width(); ++x) {
+                SkAutoCanvasRestore acr(canvas, true);
+                canvas->clipRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch));
+                this->INHERITED::draw(canvas);
+            }
+        }
+        
+        if (!fTileCount.equals(1, 1)) {
+            SkPaint paint;
+            paint.setColor(0x60FF00FF);
+            paint.setStyle(SkPaint::kStroke_Style);
+            for (int y = 0; y < fTileCount.height(); ++y) {
+                for (int x = 0; x < fTileCount.width(); ++x) {
+                    canvas->drawRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch), paint);
+                }
+            }
+        }
     }
     if (fShowZoomer && !fSaveToPdf) {
         showZoomer(canvas);
@@ -1633,8 +1654,7 @@
             case SkOSMenu::kMixedState: nx = 1; ny = 16; break;
             case SkOSMenu::kOnState:    nx = 4; ny = 4; break;
         }
-        (void)SampleView::SetTileCount(curr_view(this), nx, ny);
-        this->updateTitle();
+        fTileCount.set(nx, ny);
         this->inval(NULL);
         return true;
     }
@@ -2174,7 +2194,6 @@
 static const char is_sample_view_tag[] = "sample-is-sample-view";
 static const char repeat_count_tag[] = "sample-set-repeat-count";
 static const char set_use_pipe_tag[] = "sample-set-use-pipe";
-static const char set_tile_count_tag[] = "sample-set-tile-count";
 
 bool SampleView::IsSampleView(SkView* view) {
     SkEvent evt(is_sample_view_tag);
@@ -2193,22 +2212,11 @@
     return view->doEvent(evt);
 }
 
-bool SampleView::SetTileCount(SkView* view, int nx, int ny) {
-    SkEvent evt(set_tile_count_tag);
-    evt.setFast32((ny << 16) | nx);
-    return view->doEvent(evt);
-}
-
 bool SampleView::onEvent(const SkEvent& evt) {
     if (evt.isType(repeat_count_tag)) {
         fRepeatCount = evt.getFast32();
         return true;
     }
-    if (evt.isType(set_tile_count_tag)) {
-        unsigned packed = evt.getFast32();
-        fTileCount.set(packed & 0xFFFF, packed >> 16);
-        return true;
-    }
     int32_t pipeHolder;
     if (evt.findS32(set_use_pipe_tag, &pipeHolder)) {
         fPipeState = static_cast<SkOSMenu::TriState>(pipeHolder);
@@ -2325,28 +2333,9 @@
 void SampleView::onDraw(SkCanvas* canvas) {
     this->onDrawBackground(canvas);
 
-    const SkScalar cw = this->width() / fTileCount.width();
-    const SkScalar ch = this->height() / fTileCount.height();
-
     for (int i = 0; i < fRepeatCount; i++) {
-        for (int y = 0; y < fTileCount.height(); ++y) {
-            for (int x = 0; x < fTileCount.width(); ++x) {
-                SkAutoCanvasRestore acr(canvas, true);
-                canvas->clipRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch));
-                this->onDrawContent(canvas);
-            }
-        }
-    }
-
-    if (!fTileCount.equals(1, 1)) {
-        SkPaint paint;
-        paint.setColor(0x60FF00FF);
-        paint.setStyle(SkPaint::kStroke_Style);
-        for (int y = 0; y < fTileCount.height(); ++y) {
-            for (int x = 0; x < fTileCount.width(); ++x) {
-                canvas->drawRect(SkRect::MakeXYWH(x * cw, y * ch, cw, ch), paint);
-            }
-        }
+        SkAutoCanvasRestore acr(canvas, true);
+        this->onDrawContent(canvas);
     }
 }
 
diff --git a/samplecode/SampleApp.h b/samplecode/SampleApp.h
index cb4446f..202fe21a 100644
--- a/samplecode/SampleApp.h
+++ b/samplecode/SampleApp.h
@@ -164,6 +164,7 @@
     bool fMeasureFPS;
     SkMSec fMeasureFPS_Time;
     bool fMagnify;
+    SkISize fTileCount;
 
 
     SkOSMenu::TriState fPipeState;  // Mixed uses a tiled pipe
diff --git a/samplecode/SampleCode.h b/samplecode/SampleCode.h
index 6b32185..e86ddd6 100644
--- a/samplecode/SampleCode.h
+++ b/samplecode/SampleCode.h
@@ -109,7 +109,6 @@
 public:
     SampleView() : fPipeState(SkOSMenu::kOffState), 
             fBGColor(SK_ColorWHITE), fRepeatCount(1) {
-        fTileCount.set(1, 1);
     }
 
     void setBGColor(SkColor color) { fBGColor = color; }
@@ -117,7 +116,6 @@
     static bool IsSampleView(SkView*);
     static bool SetRepeatDraw(SkView*, int count);
     static bool SetUsePipe(SkView*, SkOSMenu::TriState);
-    static bool SetTileCount(SkView*, int nx, int ny);
     
     /**
      *  Call this to request menu items from a SampleView.
@@ -143,7 +141,6 @@
     
 private:
     int fRepeatCount;
-    SkISize fTileCount;
 
     typedef SkView INHERITED;
 };
