diff --git a/core/java/android/view/GLES20Canvas.java b/core/java/android/view/GLES20Canvas.java
index 56c2aac..d8fa850 100644
--- a/core/java/android/view/GLES20Canvas.java
+++ b/core/java/android/view/GLES20Canvas.java
@@ -332,7 +332,7 @@
 
     @Override
     public void drawARGB(int a, int r, int g, int b) {
-        // TODO: Implement
+        drawColor((a & 0xFF) << 24 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF));
     }
 
     @Override
@@ -383,13 +383,15 @@
 
     @Override
     public void drawColor(int color) {
-        // TODO: Implement
+        drawColor(color, PorterDuff.Mode.SRC_OVER);
     }
 
     @Override
     public void drawColor(int color, PorterDuff.Mode mode) {
-        // TODO: Implement
+        nDrawColor(mRenderer, color, mode.nativeInt);
     }
+    
+    private native void nDrawColor(int renderer, int color, int mode);
 
     @Override
     public void drawLine(float startX, float startY, float stopX, float stopY, Paint paint) {
@@ -478,7 +480,7 @@
 
     @Override
     public void drawRGB(int r, int g, int b) {
-        // TODO: Implement
+        drawColor(0xFF000000 | (r & 0xFF) << 16 | (g & 0xFF) << 8 | (b & 0xFF));
     }
 
     @Override
diff --git a/core/jni/android_view_GLES20Canvas.cpp b/core/jni/android_view_GLES20Canvas.cpp
index cd4c936..5766083 100644
--- a/core/jni/android_view_GLES20Canvas.cpp
+++ b/core/jni/android_view_GLES20Canvas.cpp
@@ -18,9 +18,11 @@
 #include <nativehelper/JNIHelp.h>
 #include <android_runtime/AndroidRuntime.h>
 
-#include <UIOpenGLRenderer.h>
+#include <SkXfermode.h>
 
-#define UI ((UIOpenGLRenderer*) renderer)
+#include <OpenGLRenderer.h>
+
+#define UI ((OpenGLRenderer*) renderer)
 
 namespace android {
 
@@ -28,8 +30,8 @@
 // Constructors
 // ----------------------------------------------------------------------------
 
-static UIOpenGLRenderer* android_view_GLES20Renderer_createRenderer(JNIEnv* env, jobject canvas) {
-    return new UIOpenGLRenderer;
+static OpenGLRenderer* android_view_GLES20Renderer_createRenderer(JNIEnv* env, jobject canvas) {
+    return new OpenGLRenderer;
 }
 
 static void android_view_GLES20Renderer_destroyRenderer(JNIEnv* env, jobject canvas, jint renderer) {
@@ -52,6 +54,16 @@
 }
 
 // ----------------------------------------------------------------------------
+// Draw color
+// ----------------------------------------------------------------------------
+
+static void android_view_GLES20Renderer_drawColor(JNIEnv* env, jobject canvas, jint renderer,
+        jint color, jint mode) {
+
+    UI->drawColor(color, (SkXfermode::Mode) mode);
+}
+
+// ----------------------------------------------------------------------------
 // JNI Glue
 // ----------------------------------------------------------------------------
 
@@ -62,6 +74,8 @@
     {   "nDestroyRenderer",   "(I)V",    (void*) android_view_GLES20Renderer_destroyRenderer },
     {   "nSetViewport",       "(III)V",  (void*) android_view_GLES20Renderer_setViewport },
     {   "nPrepare",           "(I)V",    (void*) android_view_GLES20Renderer_prepare },
+
+    {   "nDrawColor",         "(III)V",  (void*) android_view_GLES20Renderer_drawColor },
 };
 
 int register_android_view_GLES20Canvas(JNIEnv* env) {
diff --git a/graphics/java/android/graphics/PorterDuff.java b/graphics/java/android/graphics/PorterDuff.java
index 0e405c2..2ef1662 100644
--- a/graphics/java/android/graphics/PorterDuff.java
+++ b/graphics/java/android/graphics/PorterDuff.java
@@ -61,6 +61,10 @@
         Mode(int nativeInt) {
             this.nativeInt = nativeInt;
         }
-        final int nativeInt;
+
+        /**
+         * @hide
+         */
+        public final int nativeInt;
     }
 }
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 9544fe6..a2fcc41 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -1,13 +1,27 @@
+# Does not build for the simulator
+ifneq ($(TARGET_SIMULATOR), true)
+
 LOCAL_PATH:= $(call my-dir)
 include $(CLEAR_VARS)
 
 LOCAL_SRC_FILES:= \
-	UIMatrix.cpp \
-	UIOpenGLRenderer.cpp
+	Matrix.cpp \
+	OpenGLRenderer.cpp
+
+LOCAL_C_INCLUDES += \
+	$(JNI_H_INCLUDE) \
+	$(LOCAL_PATH)/../../include/utils \
+	external/skia/include/core \
+	external/skia/include/effects \
+	external/skia/include/images \
+	external/skia/src/ports \
+	external/skia/include/utils
 
 LOCAL_MODULE_CLASS := SHARED_LIBRARIES
-LOCAL_SHARED_LIBRARIES := libcutils libutils libGLESv2
+LOCAL_SHARED_LIBRARIES := libcutils libutils libGLESv2 libskia
 LOCAL_MODULE:= libhwui
 LOCAL_PRELINK_MODULE := false
 
 include $(BUILD_SHARED_LIBRARY)
+
+endif #simulator
diff --git a/libs/hwui/UIMatrix.cpp b/libs/hwui/Matrix.cpp
similarity index 99%
rename from libs/hwui/UIMatrix.cpp
rename to libs/hwui/Matrix.cpp
index 954a525..b1eb701 100644
--- a/libs/hwui/UIMatrix.cpp
+++ b/libs/hwui/Matrix.cpp
@@ -21,7 +21,7 @@
 
 #include <utils/Log.h>
 
-#include "UIMatrix.h"
+#include "Matrix.h"
 
 namespace android {
 
diff --git a/libs/hwui/UIMatrix.h b/libs/hwui/Matrix.h
similarity index 96%
rename from libs/hwui/UIMatrix.h
rename to libs/hwui/Matrix.h
index 55d7c07..51014a9 100644
--- a/libs/hwui/UIMatrix.h
+++ b/libs/hwui/Matrix.h
@@ -14,8 +14,8 @@
  * limitations under the License.
  */
 
-#ifndef ANDROID_UI_MATRIX_H
-#define ANDROID_UI_MATRIX_H
+#ifndef ANDROID_MATRIX_H
+#define ANDROID_MATRIX_H
 
 namespace android {
 
@@ -97,4 +97,4 @@
 
 }; // namespace android
 
-#endif // ANDROID_UI_MATRIX_H
+#endif // ANDROID_MATRIX_H
diff --git a/libs/hwui/UIOpenGLRenderer.cpp b/libs/hwui/OpenGLRenderer.cpp
similarity index 72%
rename from libs/hwui/UIOpenGLRenderer.cpp
rename to libs/hwui/OpenGLRenderer.cpp
index b6113da..35825d2 100644
--- a/libs/hwui/UIOpenGLRenderer.cpp
+++ b/libs/hwui/OpenGLRenderer.cpp
@@ -14,7 +14,7 @@
  * limitations under the License.
  */
 
-#define LOG_TAG "UIOpenGLRenderer"
+#define LOG_TAG "OpenGLRenderer"
 
 #include <stdlib.h>
 #include <stdint.h>
@@ -26,20 +26,22 @@
 #include <GLES2/gl2.h>
 #include <GLES2/gl2ext.h>
 
-#include "UIOpenGLRenderer.h"
-#include "UIMatrix.h"
+#include <SkXfermode.h>
+
+#include "OpenGLRenderer.h"
+#include "Matrix.h"
 
 namespace android {
 
-UIOpenGLRenderer::UIOpenGLRenderer() {
-    LOGD("Create UIOpenGLRenderer");
+OpenGLRenderer::OpenGLRenderer() {
+    LOGD("Create OpenGLRenderer");
 }
 
-UIOpenGLRenderer::~UIOpenGLRenderer() {
-    LOGD("Destroy UIOpenGLRenderer");
+OpenGLRenderer::~OpenGLRenderer() {
+    LOGD("Destroy OpenGLRenderer");
 }
 
-void UIOpenGLRenderer::setViewport(int width, int height) {
+void OpenGLRenderer::setViewport(int width, int height) {
     glViewport(0, 0, width, height);
 
     mat4 ortho;
@@ -47,11 +49,15 @@
     ortho.copyTo(mOrthoMatrix);
 }
 
-void UIOpenGLRenderer::prepare() {
+void OpenGLRenderer::prepare() {
     glDisable(GL_SCISSOR_TEST);
     glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
     glClear(GL_COLOR_BUFFER_BIT);
     glEnable(GL_SCISSOR_TEST);
 }
 
+void OpenGLRenderer::drawColor(int color, SkXfermode::Mode mode) {
+	LOGD("Drawing color");
+}
+
 }; // namespace android
diff --git a/libs/hwui/UIOpenGLRenderer.h b/libs/hwui/OpenGLRenderer.h
similarity index 72%
rename from libs/hwui/UIOpenGLRenderer.h
rename to libs/hwui/OpenGLRenderer.h
index 3b95e6a..1236336 100644
--- a/libs/hwui/UIOpenGLRenderer.h
+++ b/libs/hwui/OpenGLRenderer.h
@@ -14,24 +14,28 @@
  * limitations under the License.
  */
 
-#ifndef ANDROID_UI_OPENGL_RENDERER_H
-#define ANDROID_UI_OPENGL_RENDERER_H
+#ifndef ANDROID_OPENGL_RENDERER_H
+#define ANDROID_OPENGL_RENDERER_H
+
+#include <SkXfermode.h>
 
 namespace android {
 
-class UIOpenGLRenderer {
+class OpenGLRenderer {
 public:
-    UIOpenGLRenderer();
-    ~UIOpenGLRenderer();
+    OpenGLRenderer();
+    ~OpenGLRenderer();
 
     void setViewport(int width, int height);
     void prepare();
 
-private:
-    float mOrthoMatrix[16];
+    void drawColor(int color, SkXfermode::Mode mode);
 
+private:
+    // Matrix used for ortho projection in shaders
+    float mOrthoMatrix[16];
 };
 
 }; // namespace android
 
-#endif // ANDROID_UI_OPENGL_RENDERER_H
+#endif // ANDROID_OPENGL_RENDERER_H
diff --git a/tests/HwAccelerationTest/src/com/google/android/test/hwui/HwUiActivity.java b/tests/HwAccelerationTest/src/com/google/android/test/hwui/HwUiActivity.java
index 1ee2dc1..d24f027 100644
--- a/tests/HwAccelerationTest/src/com/google/android/test/hwui/HwUiActivity.java
+++ b/tests/HwAccelerationTest/src/com/google/android/test/hwui/HwUiActivity.java
@@ -36,46 +36,21 @@
         setContentView(new DirtyBitmapView(this));
     }
     
+    @SuppressWarnings({"UnusedDeclaration"})
     static int dipToPx(Context c, int dip) {
         return (int) (c.getResources().getDisplayMetrics().density * dip + 0.5f);
     }
 
     static class DirtyBitmapView extends View {
-        private Bitmap mCache;
-
         DirtyBitmapView(Context c) {
             super(c);
-
-            final int width = dipToPx(c, 100);
-            final int height = dipToPx(c, 100);
-
-            mCache = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
-            logGenerationId("Dirty cache created", mCache);
-
-            Canvas canvas = new Canvas(mCache);
-            logGenerationId("Canvas cache created", mCache);
-
-            canvas.drawColor(0xffff0000);
-            logGenerationId("Cache filled", mCache);
-            
-            Paint p = new Paint();
-            p.setColor(0xff0000ff);
-
-            canvas.drawRect(width / 2.0f, height / 2.0f, width, height, p);
-            logGenerationId("Cache modified", mCache);
-        }
-
-        private static void logGenerationId(String message, Bitmap b) {
-            d(LOG_TAG, message);
-            d(LOG_TAG, "  bitmap id=" + b.getGenerationId());
         }
 
         @Override
         protected void onDraw(Canvas canvas) {
             super.onDraw(canvas);
-            
-            canvas.drawBitmap(mCache, 0, 0, null);
-            logGenerationId("Cache drawn", mCache);
+
+            canvas.drawRGB(255, 0, 0);
         }
     }
 }
