diff --git a/samplecode/SampleAll.cpp b/samplecode/SampleAll.cpp
index 24fbc20..133b653 100644
--- a/samplecode/SampleAll.cpp
+++ b/samplecode/SampleAll.cpp
@@ -6,6 +6,7 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
+#include "SkBlurMask.h"
 #include "SkCanvas.h"
 #include "SkView.h"
 #include "Sk1DPathEffect.h"
@@ -79,8 +80,8 @@
 ///////////////////////////////////////////////////////////
 
 static void r0(SkLayerRasterizer* rast, SkPaint& p) {
-    p.setMaskFilter(SkBlurMaskFilter::Create(SkIntToScalar(3),
-                                             SkBlurMaskFilter::kNormal_BlurStyle,
+    p.setMaskFilter(SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle,
+                                             SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3)),
                                              SkBlurMaskFilter::kNone_BlurFlag))->unref();
     rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3));
 
@@ -255,10 +256,9 @@
 
 #if 1
     SkScalar dir[] = { SK_Scalar1, SK_Scalar1, SK_Scalar1 };
-    paint->setMaskFilter(SkBlurMaskFilter::CreateEmboss(dir,
-                                                        SK_Scalar1/4,
-                                                        SkIntToScalar(4),
-                                                        SkIntToScalar(3)))->unref();
+    paint->setMaskFilter(SkBlurMaskFilter::CreateEmboss(
+                SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3)), dir,
+                SK_Scalar1/4, SkIntToScalar(4)))->unref();
     paint->setColor(SK_ColorBLUE);
 #endif
 }
@@ -386,8 +386,8 @@
         light.fDirection[2] = SK_Scalar1/3;
         light.fAmbient        = 0x48;
         light.fSpecular        = 0x80;
-        SkScalar radius = SkIntToScalar(12)/5;
-        SkEmbossMaskFilter* embossFilter = new SkEmbossMaskFilter(light, radius);
+        SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(12)/5);
+        SkEmbossMaskFilter* embossFilter = new SkEmbossMaskFilter(sigma, light);
 
         SkXfermode* xfermode = SkXfermode::Create(SkXfermode::kXor_Mode);
         SkColorFilter* lightingFilter = SkColorFilter::CreateLightingFilter(
diff --git a/samplecode/SampleAnimBlur.cpp b/samplecode/SampleAnimBlur.cpp
index 98c9814..5d6638a 100644
--- a/samplecode/SampleAnimBlur.cpp
+++ b/samplecode/SampleAnimBlur.cpp
@@ -28,9 +28,9 @@
 
     virtual void onDrawContent(SkCanvas* canvas) {
 
-        SkScalar blurRadius = SampleCode::GetAnimSinScalar(100 * SK_Scalar1,
-                                                           4 * SK_Scalar1,
-                                                           5 * SK_Scalar1);
+        SkScalar blurSigma = SampleCode::GetAnimSinScalar(100 * SK_Scalar1,
+                                                          4 * SK_Scalar1,
+                                                          5 * SK_Scalar1);
 
         SkScalar circleRadius = 3 * SK_Scalar1 +
                                 SampleCode::GetAnimSinScalar(150 * SK_Scalar1,
@@ -46,8 +46,9 @@
         SkRandom random;
 
         for (size_t i = 0; i < SK_ARRAY_COUNT(gStyles); ++i) {
-            SkMaskFilter* mf = SkBlurMaskFilter::Create(blurRadius,
+            SkMaskFilter* mf = SkBlurMaskFilter::Create(
                                        gStyles[i],
+                                       blurSigma,
                                        SkBlurMaskFilter::kHighQuality_BlurFlag);
             SkPaint paint;
             SkSafeUnref(paint.setMaskFilter(mf));
diff --git a/samplecode/SampleBigBlur.cpp b/samplecode/SampleBigBlur.cpp
index de49c4e..928fc6f 100644
--- a/samplecode/SampleBigBlur.cpp
+++ b/samplecode/SampleBigBlur.cpp
@@ -6,9 +6,10 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
+#include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
-#include "SkView.h"
 #include "SkCanvas.h"
+#include "SkView.h"
 
 class BigBlurView : public SampleView {
 public:
@@ -30,8 +31,8 @@
         canvas->save();
         paint.setColor(SK_ColorBLUE);
         SkMaskFilter* mf = SkBlurMaskFilter::Create(
-            128,
             SkBlurMaskFilter::kNormal_BlurStyle,
+            SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(128)),
             SkBlurMaskFilter::kHighQuality_BlurFlag);
         paint.setMaskFilter(mf)->unref();
         canvas->translate(200, 200);
diff --git a/samplecode/SampleBlur.cpp b/samplecode/SampleBlur.cpp
index 4a743cc..e8e9772 100644
--- a/samplecode/SampleBlur.cpp
+++ b/samplecode/SampleBlur.cpp
@@ -6,12 +6,13 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
+#include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
+#include "SkCanvas.h"
 #include "SkColorPriv.h"
 #include "SkGradientShader.h"
-#include "SkView.h"
-#include "SkCanvas.h"
 #include "SkUtils.h"
+#include "SkView.h"
 
 static SkBitmap make_bitmap() {
     SkBitmap bm;
@@ -97,9 +98,9 @@
             paint.setColor(SK_ColorBLUE);
             for (size_t i = 0; i < SK_ARRAY_COUNT(gRecs); i++) {
                 if (gRecs[i].fStyle != NONE) {
-                    SkMaskFilter* mf = SkBlurMaskFilter::Create(20,
-                                                                gRecs[i].fStyle,
-                                                                flags);
+                    SkMaskFilter* mf = SkBlurMaskFilter::Create(gRecs[i].fStyle,
+                                      SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(20)),
+                                      flags);
                     paint.setMaskFilter(mf)->unref();
                 } else {
                     paint.setMaskFilter(NULL);
@@ -109,9 +110,9 @@
             }
             // draw text
             {
-                SkMaskFilter* mf = SkBlurMaskFilter::Create(4,
-                                                            SkBlurMaskFilter::kNormal_BlurStyle,
-                                                            flags);
+                SkMaskFilter* mf = SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle,
+                                      SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(4)),
+                                      flags);
                 paint.setMaskFilter(mf)->unref();
                 SkScalar x = SkIntToScalar(70);
                 SkScalar y = SkIntToScalar(400);
diff --git a/samplecode/SampleEffects.cpp b/samplecode/SampleEffects.cpp
index 1169725..fd1c248 100644
--- a/samplecode/SampleEffects.cpp
+++ b/samplecode/SampleEffects.cpp
@@ -6,14 +6,15 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
-#include "SkCanvas.h"
-#include "SkPaint.h"
-#include "SkView.h"
-
+#include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
+#include "SkCanvas.h"
 #include "SkColorMatrixFilter.h"
 #include "SkDiscretePathEffect.h"
 #include "SkGradientShader.h"
+#include "SkPaint.h"
+#include "SkView.h"
+
 
 //#define COLOR 0xFFFF8844
 #define COLOR 0xFF888888
@@ -22,14 +23,18 @@
 }
 
 static void paint_proc1(SkPaint* paint) {
-    paint->setMaskFilter(SkBlurMaskFilter::Create(2,
-                                SkBlurMaskFilter::kNormal_BlurStyle))->unref();
+    paint->setMaskFilter(SkBlurMaskFilter::Create(
+                                SkBlurMaskFilter::kNormal_BlurStyle,
+                                SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(2))))->unref();
 }
 
 static void paint_proc2(SkPaint* paint) {
     SkScalar dir[3] = { 1, 1, 1};
     paint->setMaskFilter(
-                     SkBlurMaskFilter::CreateEmboss(dir, 0.1f, 0.05f, 1))->unref();
+            SkBlurMaskFilter::CreateEmboss(SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(1)), 
+                                           dir,
+                                           SkFloatToScalar(0.1f),
+                                           SkFloatToScalar(0.05f)))->unref();
 }
 
 static void paint_proc3(SkPaint* paint) {
diff --git a/samplecode/SampleEmboss.cpp b/samplecode/SampleEmboss.cpp
index faf7027..b9bb691 100644
--- a/samplecode/SampleEmboss.cpp
+++ b/samplecode/SampleEmboss.cpp
@@ -6,6 +6,7 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
+#include "SkBlurMask.h"
 #include "SkView.h"
 #include "SkCanvas.h"
 #include "Sk64.h"
@@ -53,7 +54,8 @@
         paint.setAntiAlias(true);
         paint.setStyle(SkPaint::kStroke_Style);
         paint.setStrokeWidth(SkIntToScalar(10));
-        paint.setMaskFilter(new SkEmbossMaskFilter(fLight, SkIntToScalar(4)))->unref();
+        paint.setMaskFilter(new SkEmbossMaskFilter(
+            SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(4)), fLight))->unref();
         paint.setShader(new SkColorShader(SK_ColorBLUE))->unref();
         paint.setDither(true);
 
diff --git a/samplecode/SampleFuzz.cpp b/samplecode/SampleFuzz.cpp
index a5d8917..a72e4dc 100644
--- a/samplecode/SampleFuzz.cpp
+++ b/samplecode/SampleFuzz.cpp
@@ -59,21 +59,35 @@
   float v = 0;
   int sel;
 
-  if (return_large == true && R(3) == 1) sel = R(6); else  sel = R(4);
-  if (return_undef == false && sel == 0) sel = 1;
-
-  if (R(2) == 1) v = (float)R(100); else
-
-  switch (sel) {
-    case 0: break;
-    case 1: v = 0; break;
-    case 2: v = 0.000001f; break;
-    case 3: v = 10000; break;
-    case 4: v = 2000000000; break;
-    case 5: v = huge(); break;
+  if (return_large == true && R(3) == 1) {
+      sel = R(6); 
+  } else {
+      sel = R(4);
   }
 
-  if (R(4) == 1) v = -v;
+  if (return_undef == false && sel == 0) {
+      sel = 1;
+  }
+
+  if (R(2) == 1) {
+      v = (float)R(100); 
+  } else {
+
+      switch (sel) {
+        case 0: break;
+        case 1: v = 0; break;
+        case 2: v = 0.000001f; break;
+        case 3: v = 10000; break;
+        case 4: v = 2000000000; break;
+        case 5: v = huge(); break;
+      }
+
+  }
+
+  if (R(4) == 1) { 
+      v = -v;
+  }
+
   return v;
 }
 
@@ -176,7 +190,9 @@
 
     case 7:
       if (quick == true) break;
-          SkSafeUnref(paint.setMaskFilter(SkBlurMaskFilter::Create(make_number(), SkBlurMaskFilter::kNormal_BlurStyle)));
+          SkSafeUnref(paint.setMaskFilter(SkBlurMaskFilter::Create(
+                                                  SkBlurMaskFilter::kNormal_BlurStyle,
+                                                  make_number())));
       break;
 
     case 8:
diff --git a/samplecode/SampleSlides.cpp b/samplecode/SampleSlides.cpp
index fa948f8..98e4e72 100644
--- a/samplecode/SampleSlides.cpp
+++ b/samplecode/SampleSlides.cpp
@@ -6,11 +6,15 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
-#include "SkView.h"
+#include "SkBlurMask.h"
+#include "SkBlurMaskFilter.h"
 #include "SkCanvas.h"
 #include "SkDevice.h"
 #include "SkFlattenableBuffers.h"
+#include "SkGradientShader.h"
+#include "SkLayerRasterizer.h"
 #include "SkPaint.h"
+#include "SkView.h"
 
 #define BG_COLOR    0xFFDDDDDD
 
@@ -471,14 +475,10 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
-#include "SkGradientShader.h"
-#include "SkLayerRasterizer.h"
-#include "SkBlurMaskFilter.h"
-
 static void r0(SkLayerRasterizer* rast, SkPaint& p)
 {
-    p.setMaskFilter(SkBlurMaskFilter::Create(SkIntToScalar(3),
-                                             SkBlurMaskFilter::kNormal_BlurStyle))->unref();
+    p.setMaskFilter(SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle,
+                                             SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3))))->unref();
     rast->addLayer(p, SkIntToScalar(3), SkIntToScalar(3));
 
     p.setMaskFilter(NULL);
diff --git a/samplecode/SampleStrokePath.cpp b/samplecode/SampleStrokePath.cpp
index d289cc6..ce6a010 100644
--- a/samplecode/SampleStrokePath.cpp
+++ b/samplecode/SampleStrokePath.cpp
@@ -6,13 +6,14 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
+#include "SkBlurMask.h"
+#include "SkBlurMaskFilter.h"
 #include "SkCanvas.h"
 #include "SkParsePath.h"
 #include "SkPath.h"
 #include "SkRandom.h"
 #include "SkView.h"
 
-#include "SkBlurMaskFilter.h"
 
 static void test_huge_stroke(SkCanvas* canvas) {
     SkRect srcR = { 0, 0, 72000, 54000 };
@@ -41,7 +42,6 @@
 }
 
 #if 0
-#include "SkBlurMask.h"
 static void test_blur() {
     uint8_t cell[9];
     memset(cell, 0xFF, sizeof(cell));
@@ -168,14 +168,14 @@
             };
             for (int x = 0; x < 5; x++) {
                 SkMaskFilter* mf;
-                SkScalar radius = 4;
+                SkScalar sigma = SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(4));
                 for (int y = 0; y < 10; y++) {
                     if (x) {
-                        mf = SkBlurMaskFilter::Create(radius, gStyle[x - 1]);
+                        mf = SkBlurMaskFilter::Create(gStyle[x - 1], sigma);
                         paint.setMaskFilter(mf)->unref();
                     }
                     canvas->drawText("Title Bar", 9, x*SkIntToScalar(100), y*SkIntToScalar(30), paint);
-                    radius *= 0.75f;
+                    sigma *= 0.75f;
                 }
 
             }
diff --git a/samplecode/SampleTextAlpha.cpp b/samplecode/SampleTextAlpha.cpp
index 59ce186..83616f4 100644
--- a/samplecode/SampleTextAlpha.cpp
+++ b/samplecode/SampleTextAlpha.cpp
@@ -6,7 +6,7 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
-#include "SkView.h"
+#include "SkBlurMask.h"
 #include "SkBlurMaskFilter.h"
 #include "SkCanvas.h"
 #include "SkDevice.h"
@@ -23,6 +23,7 @@
 #include "SkColorFilter.h"
 #include "SkTime.h"
 #include "SkTypeface.h"
+#include "SkView.h"
 
 #include "SkOSFile.h"
 #include "SkStream.h"
@@ -69,8 +70,8 @@
 
         paint.setARGB(fByte, 0xFF, 0xFF, 0xFF);
 
-        paint.setMaskFilter(SkBlurMaskFilter::Create(SkIntToScalar(3),
-                                        SkBlurMaskFilter::kNormal_BlurStyle));
+        paint.setMaskFilter(SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle,
+                                    SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(3))));
         paint.getMaskFilter()->unref();
 
         SkRandom rand;
diff --git a/samplecode/SampleTextOnPath.cpp b/samplecode/SampleTextOnPath.cpp
index 2337a08..bfb35f8 100644
--- a/samplecode/SampleTextOnPath.cpp
+++ b/samplecode/SampleTextOnPath.cpp
@@ -6,6 +6,7 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
+#include "SkBlurMask.h"
 #include "SkBlurDrawLooper.h"
 #include "SkCanvas.h"
 #include "SkPath.h"
@@ -34,10 +35,10 @@
 
     canvas->drawPath(path, paint);
 
-    paint.setLooper(new SkBlurDrawLooper(SkFloatToScalar(0.002f),
-                                          SkFloatToScalar(0.0f),
-                                          SkFloatToScalar(0.0f),
-                                          (SkColor)0xFF000000))->unref();
+    paint.setLooper(new SkBlurDrawLooper(SK_ColorBLACK,
+                                         SkBlurMask::ConvertRadiusToSigma(SkFloatToScalar(0.002f)),
+                                         SkFloatToScalar(0.0f),
+                                         SkFloatToScalar(0.0f)))->unref();
 
     const char* text = "DRAWING STROKED TEXT WITH A BLUR ON A PATH";
     size_t      len = strlen(text);
diff --git a/samplecode/SampleTextureDomain.cpp b/samplecode/SampleTextureDomain.cpp
index 5928f3c..995937a 100644
--- a/samplecode/SampleTextureDomain.cpp
+++ b/samplecode/SampleTextureDomain.cpp
@@ -6,9 +6,10 @@
  * found in the LICENSE file.
  */
 #include "SampleCode.h"
+#include "SkBlurMask.h"
+#include "SkBlurMaskFilter.h"
 #include "SkCanvas.h"
 #include "SkDevice.h"
-#include "SkBlurMaskFilter.h"
 
 namespace {
 SkBitmap make_bitmap() {
@@ -80,8 +81,8 @@
         srcRect.setXYWH(1, 1, 3, 3);
         dstRect.setXYWH(5.0f, 405.0f, 305.0f, 305.0f);
         SkMaskFilter* mf = SkBlurMaskFilter::Create(
-            5,
             SkBlurMaskFilter::kNormal_BlurStyle,
+            SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
             SkBlurMaskFilter::kHighQuality_BlurFlag |
             SkBlurMaskFilter::kIgnoreTransform_BlurFlag);
         paint.setMaskFilter(mf)->unref();
@@ -93,8 +94,8 @@
         // that handles blurs with rects transformed to non-
         // orthogonal rects. It also tests the NULL src rect handling
     mf = SkBlurMaskFilter::Create(
-            5,
             SkBlurMaskFilter::kNormal_BlurStyle,
+            SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
             SkBlurMaskFilter::kHighQuality_BlurFlag);
         paint.setMaskFilter(mf)->unref();
 
diff --git a/samplecode/SampleTiling.cpp b/samplecode/SampleTiling.cpp
index 69c7710..7b62507 100644
--- a/samplecode/SampleTiling.cpp
+++ b/samplecode/SampleTiling.cpp
@@ -21,6 +21,7 @@
 // effects
 #include "SkGradientShader.h"
 #include "SkUnitMappers.h"
+#include "SkBlurMask.h"
 #include "SkBlurDrawLooper.h"
 
 static void makebm(SkBitmap* bm, SkBitmap::Config config, int w, int h) {
@@ -66,8 +67,9 @@
     SkBlurDrawLooper    fLooper;
 public:
     TilingView()
-            : fLooper(SkIntToScalar(1), SkIntToScalar(2), SkIntToScalar(2),
-                      0x88000000) {
+            : fLooper(0x88000000, 
+                      SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(1)),
+                      SkIntToScalar(2), SkIntToScalar(2)) {
         fTextPicture = new SkPicture();
         for (size_t i = 0; i < SK_ARRAY_COUNT(gConfigs); i++) {
             makebm(&fTexture[i], gConfigs[i], gWidth, gHeight);
diff --git a/samplecode/SampleUnpremul.cpp b/samplecode/SampleUnpremul.cpp
index dfdd2ac..58d8ec2 100644
--- a/samplecode/SampleUnpremul.cpp
+++ b/samplecode/SampleUnpremul.cpp
@@ -6,6 +6,7 @@
  */
 #include "gm.h"
 #include "SampleCode.h"
+#include "SkBlurMask.h"
 #include "SkBlurDrawLooper.h"
 #include "SkCanvas.h"
 #include "SkColorPriv.h"
@@ -85,7 +86,9 @@
         paint.setAntiAlias(true);
         paint.setTextSize(SkIntToScalar(24));
         SkAutoTUnref<SkBlurDrawLooper> looper(SkNEW_ARGS(SkBlurDrawLooper,
-                                              (SkIntToScalar(2), 0, 0, SK_ColorBLUE)));
+                                              (SK_ColorBLUE,
+                                               SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(2)),
+                                               0, 0)));
         paint.setLooper(looper);
         SkScalar height = paint.getFontMetrics(NULL);
         if (!fDecodeSucceeded) {
diff --git a/samplecode/SampleXfermodesBlur.cpp b/samplecode/SampleXfermodesBlur.cpp
index 8411281..59aa87e 100644
--- a/samplecode/SampleXfermodesBlur.cpp
+++ b/samplecode/SampleXfermodesBlur.cpp
@@ -7,6 +7,7 @@
  */
 #include "SampleCode.h"
 #include "SkView.h"
+#include "SkBlurMask.h"
 #include "SkCanvas.h"
 #include "Sk64.h"
 #include "SkCornerPathEffect.h"
@@ -46,8 +47,9 @@
     void draw_mode(SkCanvas* canvas, SkXfermode* mode, int alpha,
                    SkScalar x, SkScalar y) {
         SkPaint p;
-        SkMaskFilter* mf = SkBlurMaskFilter::Create(5, SkBlurMaskFilter::kNormal_BlurStyle,
-                                                    SkBlurMaskFilter::kNone_BlurFlag);
+        SkMaskFilter* mf = SkBlurMaskFilter::Create(SkBlurMaskFilter::kNormal_BlurStyle,
+                                       SkBlurMask::ConvertRadiusToSigma(SkIntToScalar(5)),
+                                       SkBlurMaskFilter::kNone_BlurFlag);
         p.setMaskFilter(mf)->unref();
 
         SkScalar ww = SkIntToScalar(W);
