diff --git a/src/c/sk_surface.cpp b/src/c/sk_surface.cpp
index 280897b..5b6210d 100644
--- a/src/c/sk_surface.cpp
+++ b/src/c/sk_surface.cpp
@@ -96,6 +96,30 @@
     return true;
 }
 
+const struct {
+    sk_pixelgeometry_t fC;
+    SkPixelGeometry    fSK;
+} gPixelGeometryMap[] = {
+    { UNKNOWN_SK_PIXELGEOMETRY, kUnknown_SkPixelGeometry },
+    { RGB_H_SK_PIXELGEOMETRY,   kRGB_H_SkPixelGeometry   },
+    { BGR_H_SK_PIXELGEOMETRY,   kBGR_H_SkPixelGeometry   },
+    { RGB_V_SK_PIXELGEOMETRY,   kRGB_V_SkPixelGeometry   },
+    { BGR_V_SK_PIXELGEOMETRY,   kBGR_V_SkPixelGeometry   },
+};
+
+
+static bool from_c_pixelgeometry(sk_pixelgeometry_t cGeom, SkPixelGeometry* skGeom) {
+    for (size_t i = 0; i < SK_ARRAY_COUNT(gPixelGeometryMap); ++i) {
+        if (gPixelGeometryMap[i].fC == cGeom) {
+            if (skGeom) {
+                *skGeom = gPixelGeometryMap[i].fSK;
+            }
+            return true;
+        }
+    }
+    return false;
+}
+
 static void from_c_matrix(const sk_matrix_t* cmatrix, SkMatrix* matrix) {
     matrix->setAll(cmatrix->mat[0], cmatrix->mat[1], cmatrix->mat[2],
                    cmatrix->mat[3], cmatrix->mat[4], cmatrix->mat[5],
@@ -391,21 +415,35 @@
 
 ///////////////////////////////////////////////////////////////////////////////////////////
 
-sk_surface_t* sk_surface_new_raster(const sk_imageinfo_t* cinfo) {
+sk_surface_t* sk_surface_new_raster(const sk_imageinfo_t* cinfo,
+                                    const sk_surfaceprops_t* props) {
     SkImageInfo info;
     if (!from_c_info(*cinfo, &info)) {
         return NULL;
     }
-    return (sk_surface_t*)SkSurface::NewRaster(info);
+    SkPixelGeometry geo = kUnknown_SkPixelGeometry;
+    if (props && !from_c_pixelgeometry(props->pixelGeometry, &geo)) {
+        return NULL;
+    }
+
+    SkSurfaceProps surfProps(0, geo);
+    return (sk_surface_t*)SkSurface::NewRaster(info, &surfProps);
 }
 
 sk_surface_t* sk_surface_new_raster_direct(const sk_imageinfo_t* cinfo, void* pixels,
-                                           size_t rowBytes) {
+                                           size_t rowBytes,
+                                           const sk_surfaceprops_t* props) {
     SkImageInfo info;
     if (!from_c_info(*cinfo, &info)) {
         return NULL;
     }
-    return (sk_surface_t*)SkSurface::NewRasterDirect(info, pixels, rowBytes);
+    SkPixelGeometry geo = kUnknown_SkPixelGeometry;
+    if (props && !from_c_pixelgeometry(props->pixelGeometry, &geo)) {
+        return NULL;
+    }
+
+    SkSurfaceProps surfProps(0, geo);
+    return (sk_surface_t*)SkSurface::NewRasterDirect(info, pixels, rowBytes, &surfProps);
 }
 
 void sk_surface_unref(sk_surface_t* csurf) {
@@ -596,7 +634,10 @@
     cinfo.colorType = (sk_colortype_t)kN32_SkColorType;
     cinfo.alphaType = (sk_alphatype_t)kPremul_SkAlphaType;
     
-    sk_surface_t* csurface = sk_surface_new_raster(&cinfo);
+    sk_surfaceprops_t surfaceprops;
+    surfaceprops.pixelGeometry = UNKNOWN_SK_PIXELGEOMETRY;
+
+    sk_surface_t* csurface = sk_surface_new_raster(&cinfo, &surfaceprops);
     sk_canvas_t* ccanvas = sk_surface_get_canvas(csurface);
     
     sk_paint_t* cpaint = sk_paint_new();
diff --git a/src/image/SkSurface_Raster.cpp b/src/image/SkSurface_Raster.cpp
index 28b972b..4e0ba08 100644
--- a/src/image/SkSurface_Raster.cpp
+++ b/src/image/SkSurface_Raster.cpp
@@ -109,7 +109,7 @@
 }
 
 SkSurface* SkSurface_Raster::onNewSurface(const SkImageInfo& info) {
-    return SkSurface::NewRaster(info);
+    return SkSurface::NewRaster(info, &this->props());
 }
 
 void SkSurface_Raster::onDraw(SkCanvas* canvas, SkScalar x, SkScalar y,
diff --git a/src/utils/SkLua.cpp b/src/utils/SkLua.cpp
index cee4d4d..b0e7b8f 100644
--- a/src/utils/SkLua.cpp
+++ b/src/utils/SkLua.cpp
@@ -1993,7 +1993,8 @@
     int width = lua2int_def(L, 1, 0);
     int height = lua2int_def(L, 2, 0);
     SkImageInfo info = SkImageInfo::MakeN32Premul(width, height);
-    SkSurface* surface = SkSurface::NewRaster(info);
+    SkSurfaceProps props(0, kUnknown_SkPixelGeometry);
+    SkSurface* surface = SkSurface::NewRaster(info, &props);
     if (NULL == surface) {
         lua_pushnil(L);
     } else {
