diff --git a/src/core/SkScalerContext.cpp b/src/core/SkScalerContext.cpp
index 20413a7..b7409ff 100644
--- a/src/core/SkScalerContext.cpp
+++ b/src/core/SkScalerContext.cpp
@@ -700,6 +700,10 @@
     SkPaint::SetTextMatrix(m, fTextSize, fPreScaleX, fPreSkewX);
 }
 
+void SkScalerContextRec::getLocalMatrixWithoutTextSize(SkMatrix* m) const {
+    SkPaint::SetTextMatrix(m, SK_Scalar1, fPreScaleX, fPreSkewX);
+}
+
 void SkScalerContextRec::getSingleMatrix(SkMatrix* m) const {
     this->getLocalMatrix(m);
 
@@ -709,6 +713,15 @@
     m->postConcat(deviceMatrix);
 }
 
+void SkScalerContextRec::getSingleMatrixWithoutTextSize(SkMatrix* m) const {
+    this->getLocalMatrixWithoutTextSize(m);
+
+    //  now concat the device matrix
+    SkMatrix    deviceMatrix;
+    this->getMatrixFrom2x2(&deviceMatrix);
+    m->postConcat(deviceMatrix);
+}
+
 SkAxisAlignment SkComputeAxisAlignmentForHText(const SkMatrix& matrix) {
     SkASSERT(!matrix.hasPerspective());
 
diff --git a/src/core/SkScalerContext.h b/src/core/SkScalerContext.h
index 3ebaa59..b78efef 100644
--- a/src/core/SkScalerContext.h
+++ b/src/core/SkScalerContext.h
@@ -82,7 +82,9 @@
 
     void    getMatrixFrom2x2(SkMatrix*) const;
     void    getLocalMatrix(SkMatrix*) const;
+    void    getLocalMatrixWithoutTextSize(SkMatrix*) const;
     void    getSingleMatrix(SkMatrix*) const;
+    void    getSingleMatrixWithoutTextSize(SkMatrix*) const;
 
     inline SkPaint::Hinting getHinting() const;
     inline void setHinting(SkPaint::Hinting);
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
index 7fd645b..dea72c7 100755
--- a/src/ports/SkFontHost_mac.cpp
+++ b/src/ports/SkFontHost_mac.cpp
@@ -717,8 +717,9 @@
     SkASSERT(numGlyphs >= 1 && numGlyphs <= 0xFFFF);
     fGlyphCount = SkToU16(numGlyphs);
 
-    fRec.getSingleMatrix(&fFUnitMatrix);
-    CGAffineTransform transform = MatrixToCGAffineTransform(fFUnitMatrix);
+    SkMatrix skTransform;
+    fRec.getSingleMatrixWithoutTextSize(&skTransform);
+    CGAffineTransform transform = MatrixToCGAffineTransform(skTransform);
 
     AutoCFRelease<CTFontDescriptorRef> ctFontDesc;
     if (fVertical) {
@@ -734,15 +735,27 @@
             ctFontDesc.reset(CTFontDescriptorCreateWithAttributes(cfAttributes));
         }
     }
-    // Since our matrix includes everything, we pass 1 for size.
-    fCTFont.reset(CTFontCreateCopyWithAttributes(ctFont, 1, &transform, ctFontDesc));
+
+    // The transform contains everything except the requested text size.
+    // Some properties, like 'trak', are based on the text size (before applying the matrix).
+    CGFloat textSize = ScalarToCG(fRec.fTextSize);
+
+    // If a text size of 0 is requested, CoreGraphics will use 12 instead.
+    // If the text size is 0, set it to something tiny.
+    if (textSize < CGFLOAT_MIN) {
+        textSize = CGFLOAT_MIN;
+    }
+
+    fCTFont.reset(CTFontCreateCopyWithAttributes(ctFont, textSize, &transform, ctFontDesc));
     fCGFont.reset(CTFontCopyGraphicsFont(fCTFont, NULL));
     if (fVertical) {
         CGAffineTransform rotateLeft = CGAffineTransformMake(0, -1, 1, 0, 0, 0);
         transform = CGAffineTransformConcat(rotateLeft, transform);
-        fCTVerticalFont.reset(CTFontCreateCopyWithAttributes(ctFont, 1, &transform, NULL));
+        fCTVerticalFont.reset(CTFontCreateCopyWithAttributes(ctFont, textSize, &transform, NULL));
     }
 
+    // The fUnitMatrix includes the text size (and em) as it is used to scale the raw font data.
+    fRec.getSingleMatrix(&fFUnitMatrix);
     SkScalar emPerFUnit = SkScalarInvert(SkIntToScalar(CGFontGetUnitsPerEm(fCGFont)));
     fFUnitMatrix.preScale(emPerFUnit, -emPerFUnit);
 }
@@ -793,7 +806,7 @@
 
         CGContextSetTextDrawingMode(fCG, kCGTextFill);
         CGContextSetFont(fCG, context.fCGFont);
-        CGContextSetFontSize(fCG, 1 /*CTFontGetSize(context.fCTFont)*/);
+        CGContextSetFontSize(fCG, CTFontGetSize(context.fCTFont));
         CGContextSetTextMatrix(fCG, CTFontGetMatrix(context.fCTFont));
 
         // Because CG always draws from the horizontal baseline,
