diff --git a/samplecode/SampleFontScalerTest.cpp b/samplecode/SampleFontScalerTest.cpp
index 380d346..356ab39 100644
--- a/samplecode/SampleFontScalerTest.cpp
+++ b/samplecode/SampleFontScalerTest.cpp
@@ -29,6 +29,14 @@
 
 static const int gFaceCount = SK_ARRAY_COUNT(gFaces);
 
+static const char* gStrings[] = {
+    "HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH",
+    "iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii",
+    "......................................",
+    "11111111111111111111111111111111111111",
+    "00000000000000000000000000000000000000"
+};
+
 class FontScalerTestView : public SkView {
     SkTypeface* fFaces[gFaceCount];
 
@@ -67,16 +75,29 @@
         paint.setAntiAlias(true);
         paint.setTypeface(SkTypeface::CreateFromName("Times Roman", SkTypeface::kNormal))->safeUnref();
         
-        const char* text = "HHHaaammmbbbuuurrrgggeeefffooonnnsss";
-        const size_t textLen = strlen(text);
+//        const char* text = "abcdefghijklmnopqrstuvwxyz";
+        const char* text = "HnHnHnHnHnHnHnHnH";
+        size_t textLen = strlen(text);
 
         SkScalar x = SkIntToScalar(10);
         SkScalar y = SkIntToScalar(20);
 
+        {
+            SkPaint p;
+            p.setColor(SK_ColorRED);
+            SkRect r;
+            r.set(0, 0, x, y*20);
+            canvas->drawRect(r, p);
+        }
+        
+        int index = 0;
         for (int ps = 9; ps <= 24; ps++) {
+         //   text = gStrings[index % SK_ARRAY_COUNT(gStrings)];
+            textLen = strlen(text);
             paint.setTextSize(SkIntToScalar(ps));
             canvas->drawText(text, textLen, x, y, paint);
             y += paint.getFontMetrics(NULL);
+            index += 1;
         }
     }
     
diff --git a/src/ports/SkFontHost_mac.cpp b/src/ports/SkFontHost_mac.cpp
index 56f52f7..6b8f9a3 100755
--- a/src/ports/SkFontHost_mac.cpp
+++ b/src/ports/SkFontHost_mac.cpp
@@ -124,11 +124,32 @@
                                        SkScalarToFloat(m[SkMatrix::kMTransX]),
                                        SkScalarToFloat(m[SkMatrix::kMTransY]));
                                        
-    
-    Fixed fixedSize = SK_Fixed1;    //SkScalarToFixed(fRec.fTextSize);
-    static const ATSUAttributeTag tags[] = { kATSUSizeTag, kATSUFontMatrixTag };
-    static const ByteCount sizes[] = { sizeof(Fixed), sizeof(fTransform) };
-    const ATSUAttributeValuePtr values[] = { &fixedSize, &fTransform };
+    ATSStyleRenderingOptions renderOpts = kATSStyleApplyAntiAliasing;
+    switch (fRec.fHints) {
+        case kNo_Hints:
+            renderOpts |= kATSStyleNoHinting;
+            break;
+        case kSubpixel_Hints:
+            // hmmm, need to support subpixel... from path?
+            renderOpts |= kATSStyleNoHinting;
+            break;
+        case kNormal_Hints:
+            renderOpts |= kATSStyleApplyHints;
+            break;
+    }
+
+    ATSUFontID fontID = FMGetFontFromATSFontRef(fRec.fFontID);
+    // we put everything in the matrix, so our pt size is just 1.0
+    Fixed fixedSize = SK_Fixed1;
+    static const ATSUAttributeTag tags[] = {
+        kATSUFontTag, kATSUSizeTag, kATSUFontMatrixTag, kATSUStyleRenderingOptionsTag
+    };
+    static const ByteCount sizes[] = {
+        sizeof(fontID), sizeof(fixedSize), sizeof(fTransform), sizeof(renderOpts)
+    };
+    const ATSUAttributeValuePtr values[] = {
+        &fontID, &fixedSize, &fTransform, &renderOpts
+    };
     err = ::ATSUSetAttributes(fStyle, SK_ARRAY_COUNT(tags),
                               tags, sizes, values);
     SkASSERT(0 == err);
@@ -199,7 +220,7 @@
         set_glyph_metrics_on_error(glyph);
         return;
     }
-
+    
     if (kNormal_Hints == fRec.fHints) {
         glyph->fAdvanceX = SkFloatToFixed(screenMetrics.deviceAdvance.x);
         glyph->fAdvanceY = -SkFloatToFixed(screenMetrics.deviceAdvance.y);
@@ -234,7 +255,7 @@
     ::CGContextSetGrayFillColor(contextRef, 1.0, 1.0);
     ::CGContextSetTextDrawingMode(contextRef, kCGTextFill);
     
-    CGGlyph glyphID = glyph.getGlyphID();
+    CGGlyph glyphID = glyph.getGlyphID(fBaseGlyphCount);
     CGFontRef fontRef = CGFontCreateWithPlatformFont(&fRec.fFontID);
     CGContextSetFont(contextRef, fontRef);
     CGContextSetFontSize(contextRef, 1);
