diff --git a/experimental/Debugger/SkDebugDumper.cpp b/experimental/Debugger/SkDebugDumper.cpp
index 2f63462..29b5049 100644
--- a/experimental/Debugger/SkDebugDumper.cpp
+++ b/experimental/Debugger/SkDebugDumper.cpp
@@ -58,9 +58,9 @@
                  SkScalarToFloat(m.get(SkMatrix::kMSkewX)), 
                  SkScalarToFloat(m.get(SkMatrix::kMSkewY)));
     str.appendf("Perspective (%0.4g, %0.4g, %0.4g) ", 
-                 SkScalarToFloat(m.get(SkMatrix::kMPersp0)), 
-                 SkScalarToFloat(m.get(SkMatrix::kMPersp1)),
-                 SkScalarToFloat(m.get(SkMatrix::kMPersp2)));
+                 SkScalarToFloat(SkPerspToScalar(m.get(SkMatrix::kMPersp0))), 
+                 SkScalarToFloat(SkPerspToScalar(m.get(SkMatrix::kMPersp1))),
+                 SkScalarToFloat(SkPerspToScalar(m.get(SkMatrix::kMPersp2))));
     return str;
 }
 
@@ -150,4 +150,4 @@
             state->post();
         }
     }
-}
\ No newline at end of file
+}
diff --git a/gm/filltypespersp.cpp b/gm/filltypespersp.cpp
index 9105473..33f3242 100644
--- a/gm/filltypespersp.cpp
+++ b/gm/filltypespersp.cpp
@@ -90,7 +90,7 @@
             canvas->translate(SkIntToScalar(100), SkIntToScalar(100));
             SkMatrix mat;
             mat.reset();
-            mat.setPerspY(SK_Scalar1 / 1000);
+            mat.setPerspY(SkScalarToPersp(SK_Scalar1 / 1000));
             canvas->concat(mat);
             canvas->drawPaint(bkgnrd);
         canvas->restore();
@@ -98,8 +98,8 @@
         // draw the paths in perspective
         SkMatrix persp;
         persp.reset();
-        persp.setPerspX(-SK_Scalar1 / 1800);
-        persp.setPerspY(SK_Scalar1 / 500);
+        persp.setPerspX(SkScalarToPersp(-SK_Scalar1 / 1800));
+        persp.setPerspY(SkScalarToPersp(SK_Scalar1 / 500));
         canvas->concat(persp);
 
         canvas->translate(SkIntToScalar(20), SkIntToScalar(20));
diff --git a/include/core/SkMatrix.h b/include/core/SkMatrix.h
index 8c7f54b..8fdb818 100644
--- a/include/core/SkMatrix.h
+++ b/include/core/SkMatrix.h
@@ -14,6 +14,16 @@
 
 class SkString;
 
+#ifdef SK_SCALAR_IS_FLOAT
+    typedef SkScalar SkPersp;
+    #define SkScalarToPersp(x) (x)
+    #define SkPerspToScalar(x) (x)
+#else
+    typedef SkFract SkPersp;
+    #define SkScalarToPersp(x) SkFixedToFract(x)
+    #define SkPerspToScalar(x) SkFractToFixed(x)
+#endif
+
 /** \class SkMatrix
 
     The SkMatrix class holds a 3x3 matrix for transforming coordinates.
@@ -114,8 +124,8 @@
     SkScalar getSkewX() const { return fMat[kMSkewX]; }
     SkScalar getTranslateX() const { return fMat[kMTransX]; }
     SkScalar getTranslateY() const { return fMat[kMTransY]; }
-    SkScalar getPerspX() const { return fMat[kMPersp0]; }
-    SkScalar getPerspY() const { return fMat[kMPersp1]; }
+    SkPersp getPerspX() const { return fMat[kMPersp0]; }
+    SkPersp getPerspY() const { return fMat[kMPersp1]; }
 
     SkScalar& operator[](int index) {
         SkASSERT((unsigned)index < 9);
@@ -135,12 +145,12 @@
     void setSkewX(SkScalar v) { this->set(kMSkewX, v); }
     void setTranslateX(SkScalar v) { this->set(kMTransX, v); }
     void setTranslateY(SkScalar v) { this->set(kMTransY, v); }
-    void setPerspX(SkScalar v) { this->set(kMPersp0, v); }
-    void setPerspY(SkScalar v) { this->set(kMPersp1, v); }
+    void setPerspX(SkPersp v) { this->set(kMPersp0, v); }
+    void setPerspY(SkPersp v) { this->set(kMPersp1, v); }
 
     void setAll(SkScalar scaleX, SkScalar skewX, SkScalar transX,
                 SkScalar skewY, SkScalar scaleY, SkScalar transY,
-                SkScalar persp0, SkScalar persp1, SkScalar persp2) {
+                SkPersp persp0, SkPersp persp1, SkPersp persp2) {
         fMat[kMScaleX] = scaleX;
         fMat[kMSkewX]  = skewX;
         fMat[kMTransX] = transX;
diff --git a/src/animator/SkDrawMatrix.cpp b/src/animator/SkDrawMatrix.cpp
index fcf33e3..96e8292 100644
--- a/src/animator/SkDrawMatrix.cpp
+++ b/src/animator/SkDrawMatrix.cpp
@@ -119,10 +119,10 @@
     result = fMatrix.getTranslateY();
     if (result)
         SkDebugf("ty=\"%g\" ", SkScalarToFloat(result));
-    result = fMatrix.getPerspX();
+    result = SkPerspToScalar(fMatrix.getPerspX());
     if (result)
         SkDebugf("perspect-x=\"%g\" ", SkScalarToFloat(result));
-    result = fMatrix.getPerspY();
+    result = SkPerspToScalar(fMatrix.getPerspY());
     if (result)
         SkDebugf("perspect-y=\"%g\" ", SkScalarToFloat(result));
     SkDebugf("/>\n");
@@ -190,14 +190,9 @@
         fMatrix.setSkewY(vals[3]);
         fMatrix.setScaleY(vals[4]);
         fMatrix.setTranslateY(vals[5]);
-#ifdef SK_SCALAR_IS_FIXED
-        fMatrix.setPerspX(SkFixedToFract(vals[6]));
-        fMatrix.setPerspY(SkFixedToFract(vals[7]));
-#else
-        fMatrix.setPerspX(vals[6]);
-        fMatrix.setPerspY(vals[7]);
-#endif
-//      fMatrix.setPerspW(vals[8]);
+        fMatrix.setPerspX(SkScalarToPersp(vals[6]));
+        fMatrix.setPerspY(SkScalarToPersp(vals[7]));
+//      fMatrix.setPerspW(SkScalarToPersp(vals[8]));
         goto setConcat;
     }
     if (fChildHasID == false) {
@@ -229,18 +224,10 @@
             fMatrix.setTranslateY((*scriptValue.fOperand.fArray)[1].fScalar);
             return true;
         case SK_PROPERTY(perspectX):
-#ifdef SK_SCALAR_IS_FIXED
-            fMatrix.setPerspX(SkFixedToFract(number));
-#else
-            fMatrix.setPerspX(number);
-#endif  
+            fMatrix.setPerspX(SkScalarToPersp((number)));
             break;
         case SK_PROPERTY(perspectY):
-#ifdef SK_SCALAR_IS_FIXED
-            fMatrix.setPerspY(SkFixedToFract(number));
-#else
-            fMatrix.setPerspY(number);
-#endif  
+            fMatrix.setPerspY(SkScalarToPersp((number)));
             break;
         case SK_PROPERTY(rotate): {
             SkMatrix temp;
diff --git a/tests/MatrixTest.cpp b/tests/MatrixTest.cpp
index abc0d54..7bad9de 100644
--- a/tests/MatrixTest.cpp
+++ b/tests/MatrixTest.cpp
@@ -81,12 +81,12 @@
 
     SkMatrix perspX;
     perspX.reset();
-    perspX.setPerspX(SK_Scalar1 / 1000);
+    perspX.setPerspX(SkScalarToPersp(SK_Scalar1 / 1000));
     REPORTER_ASSERT(reporter, -SK_Scalar1 == perspX.getMaxStretch());
 
     SkMatrix perspY;
     perspY.reset();
-    perspY.setPerspX(-SK_Scalar1 / 500);
+    perspY.setPerspX(SkScalarToPersp(-SK_Scalar1 / 500));
     REPORTER_ASSERT(reporter, -SK_Scalar1 == perspY.getMaxStretch());
 
     SkMatrix baseMats[] = {scale, rot90Scale, rotate,
@@ -234,7 +234,7 @@
     REPORTER_ASSERT(reporter, affineEqual(TransY));
     #undef affineEqual
 
-    mat.set(SkMatrix::kMPersp1, SkIntToScalar(1));
+    mat.set(SkMatrix::kMPersp1, SkScalarToPersp(SK_Scalar1 / 2));
     REPORTER_ASSERT(reporter, !mat.asAffine(affine));
 
     test_matrix_max_stretch(reporter);
