diff --git a/samplecode/SampleLua.cpp b/samplecode/SampleLua.cpp
index 1ad89f9..fb40087 100644
--- a/samplecode/SampleLua.cpp
+++ b/samplecode/SampleLua.cpp
@@ -49,6 +49,11 @@
     "       path:quadTo(rndX(), rndY(), rndX(), rndY());"
     "   end "
     "   canvas:drawPath(path, path_paint);"
+    ""
+    "   paint:setTypeface(Sk.newTypeface('Times', 1));"
+    "   paint:setColor{a = 1, r=0, g=0, b = 1};"
+    "   paint:setTextSize(70);"
+    "   canvas:drawText('Hamburgefons', 50, 200, paint);"
     "end "
     ""
     "function onDrawContent(canvas) "
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index bd453e3..e56e585 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -32,6 +32,7 @@
 DEF_MTNAME(SkRRect)
 DEF_MTNAME(SkPath)
 DEF_MTNAME(SkPaint)
+DEF_MTNAME(SkTypeface)
 
 template <typename T> T* push_new(lua_State* L) {
     T* addr = (T*)lua_newuserdata(L, sizeof(T));
@@ -286,6 +287,21 @@
     return 0;
 }
 
+static int lcanvas_drawText(lua_State* L) {
+    if (lua_gettop(L) < 5) {
+        return 0;
+    }
+
+    if (lua_isstring(L, 2) && lua_isnumber(L, 3) && lua_isnumber(L, 4)) {
+        size_t len;
+        const char* text = lua_tolstring(L, 2, &len);
+        get_ref<SkCanvas>(L, 1)->drawText(text, len,
+                                          lua2scalar(L, 3), lua2scalar(L, 4),
+                                          *get_obj<SkPaint>(L, 5));
+    }
+    return 0;
+}
+
 static int lcanvas_getSaveCount(lua_State* L) {
     lua_pushnumber(L, get_ref<SkCanvas>(L, 1)->getSaveCount());
     return 1;
@@ -312,6 +328,7 @@
     { "drawOval", lcanvas_drawOval },
     { "drawCircle", lcanvas_drawCircle },
     { "drawPath", lcanvas_drawPath },
+    { "drawText", lcanvas_drawText },
     { "getSaveCount", lcanvas_getSaveCount },
     { "getTotalMatrix", lcanvas_getTotalMatrix },
     { "translate", lcanvas_translate },
@@ -351,6 +368,16 @@
     return 0;
 }
 
+static int lpaint_getTypeface(lua_State* L) {
+    push_ref(L, get_obj<SkPaint>(L, 1)->getTypeface());
+    return 1;
+}
+
+static int lpaint_setTypeface(lua_State* L) {
+    get_obj<SkPaint>(L, 1)->setTypeface(get_ref<SkTypeface>(L, 2));
+    return 0;
+}
+
 static int lpaint_getFontID(lua_State* L) {
     SkTypeface* face = get_obj<SkPaint>(L, 1)->getTypeface();
     SkLua(L).pushU32(SkTypeface::UniqueID(face));
@@ -369,6 +396,8 @@
     { "setColor", lpaint_setColor },
     { "getTextSize", lpaint_getTextSize },
     { "setTextSize", lpaint_setTextSize },
+    { "getTypeface", lpaint_getTypeface },
+    { "setTypeface", lpaint_setTypeface },
     { "getFontID", lpaint_getFontID },
     { "__gc", lpaint_gc },
     { NULL, NULL }
@@ -530,6 +559,18 @@
 
 ///////////////////////////////////////////////////////////////////////////////
 
+static int ltypeface_gc(lua_State* L) {
+    get_ref<SkTypeface>(L, 1)->unref();
+    return 0;
+}
+
+static const struct luaL_Reg gSkTypeface_Methods[] = {
+    { "__gc", ltypeface_gc },
+    { NULL, NULL }
+};
+
+///////////////////////////////////////////////////////////////////////////////
+
 class AutoCallLua {
 public:
     AutoCallLua(lua_State* L, const char func[], const char verb[]) : fL(L) {
@@ -574,12 +615,28 @@
     return 1;
 }
 
-static const struct luaL_Reg gSk_Functions[] = {
-    { "newPaint", lsk_newPaint },
-    { "newPath", lsk_newPath },
-    { "newRRect", lsk_newRRect },
-    { NULL, NULL }
-};
+static int lsk_newTypeface(lua_State* L) {
+    const char* name = NULL;
+    int style = SkTypeface::kNormal;
+    
+    int count = lua_gettop(L);
+    if (count > 0 && lua_isstring(L, 1)) {
+        name = lua_tolstring(L, 1, NULL);
+        if (count > 1 && lua_isnumber(L, 2)) {
+            style = lua_tointegerx(L, 2, NULL) & SkTypeface::kBoldItalic;
+        }
+    }
+
+    SkTypeface* face = SkTypeface::CreateFromName(name,
+                                                  (SkTypeface::Style)style);
+//    SkDebugf("---- name <%s> style=%d, face=%p ref=%d\n", name, style, face, face->getRefCnt());
+    if (NULL == face) {
+        face = SkTypeface::RefDefault();
+    }
+    push_ref(L, face);
+    face->unref();
+    return 1;
+}
 
 static void register_Sk(lua_State* L) {
     lua_newtable(L);
@@ -590,6 +647,7 @@
     setfield_function(L, "newPaint", lsk_newPaint);
     setfield_function(L, "newPath", lsk_newPath);
     setfield_function(L, "newRRect", lsk_newRRect);
+    setfield_function(L, "newTypeface", lsk_newTypeface);
     lua_pop(L, 1);  // pop off the Sk table
 }
 
@@ -608,4 +666,5 @@
     REG_CLASS(L, SkPath);
     REG_CLASS(L, SkPaint);
     REG_CLASS(L, SkRRect);
+    REG_CLASS(L, SkTypeface);
 }
