diff --git a/samplecode/SampleAAClip2.cpp b/samplecode/SampleAAClip2.cpp
index bdb3741..b3d7b6d 100644
--- a/samplecode/SampleAAClip2.cpp
+++ b/samplecode/SampleAAClip2.cpp
@@ -57,22 +57,19 @@
         this->setBGColor(0xFFDDDDDD);
     }
 
-    void build_rgn(SkAAClip* clip, SkRegion::Op op) {
-        clip->setRect(fBase);
-#if 0
-        SkIRect r = fBase;
-        r.offset(75, 20);
-        rgn->op(r, SkRegion::kUnion_Op);
-#endif
-
+    static void setAAClip(SkAAClip* clip, const SkIRect& rect) {
         SkRect r;
-        r.set(fRect);
+        r.set(rect);
         SkPath path;
-        path.addOval(r);
+        path.addRoundRect(r, SkIntToScalar(5), SkIntToScalar(5));
+        clip->setPath(path);
+    }
+
+    void build_rgn(SkAAClip* clip, SkRegion::Op op) {
+        setAAClip(clip, fBase);
+
         SkAAClip clip2;
-        clip2.setPath(path);
-        // hack
-        op = SkRegion::kIntersect_Op;
+        setAAClip(&clip2, fRect);
         clip->op(clip2, op);
     }
 
@@ -101,6 +98,17 @@
         canvas->drawRect(r, paint);
     }
     
+    static void outer_frame(SkCanvas* canvas, const SkIRect& rect) {
+        SkRect r;
+        r.set(rect);
+        r.inset(-SK_ScalarHalf, -SK_ScalarHalf);
+        
+        SkPaint paint;
+        paint.setColor(SK_ColorGRAY);
+        paint.setStyle(SkPaint::kStroke_Style);
+        canvas->drawRect(r, paint);
+    }
+
     void drawRgnOped(SkCanvas* canvas, SkRegion::Op op, SkColor color) {
         SkAAClip clip;
 
@@ -115,6 +123,11 @@
         paint.setStyle(SkPaint::kStroke_Style);
         paint.setColor(color);
         paint_rgn(canvas, clip, paint);
+        
+        SkAAClip clip2(clip);
+        clip2.offset(0, 80);
+        outer_frame(canvas, clip2.getBounds());
+        paint_rgn(canvas, clip2, paint);
     }
     
     virtual void onDrawContent(SkCanvas* canvas) {
@@ -135,10 +148,6 @@
         textPaint.setTextSize(SK_Scalar1*24);
 
         this->drawOrig(canvas, false);
-        canvas->save();
-            canvas->translate(SkIntToScalar(200), 0);
-            this->drawRgnOped(canvas, SkRegion::kUnion_Op, SK_ColorBLACK);
-        canvas->restore();
         
         canvas->translate(0, SkIntToScalar(200));
 
