diff --git a/res/raw/fall.rs b/res/raw/fall.rs
index e04e1ff..af1ed85 100644
--- a/res/raw/fall.rs
+++ b/res/raw/fall.rs
@@ -162,7 +162,7 @@
 
     int* current = loadArrayI32(RSID_RIPPLE_MAP, index * rippleMapSize + origin);
     int *map = loadArrayI32(RSID_REFRACTION_MAP, 0);
-    float *vertices = loadTriangleMeshVerticesF(NAMED_WaterMesh);
+    float *vertices = loadSimpleMeshVerticesF(NAMED_WaterMesh, 0);
     struct vert_s *vert = (struct vert_s *)vertices;
 
     float fw = 1.f / width;
@@ -370,7 +370,7 @@
     float glWidth = State->glWidth;
     float glHeight = State->glHeight;
 
-    float *vertices = loadTriangleMeshVerticesF(NAMED_WaterMesh);
+    float *vertices = loadSimpleMeshVerticesF(NAMED_WaterMesh, 0);
 
     int i = 0;
     for ( ; i < count; i += LEAF_STRUCT_FIELDS_COUNT) {
@@ -385,7 +385,7 @@
 void drawRiverbed() {
     bindTexture(NAMED_PFBackground, 0, NAMED_TRiverbed);
 
-    drawTriangleMesh(NAMED_WaterMesh);
+    drawSimpleMesh(NAMED_WaterMesh);
 }
 
 void drawSky() {
@@ -409,7 +409,7 @@
     matrixLoadTranslate(matrix, x, y, 0.0f);
     vpLoadTextureMatrix(matrix);
 
-    drawTriangleMesh(NAMED_WaterMesh);
+    drawSimpleMesh(NAMED_WaterMesh);
 
     matrixLoadIdentity(matrix);
     vpLoadTextureMatrix(matrix);
@@ -425,14 +425,14 @@
     bindProgramFragment(NAMED_PFLighting);
     bindProgramVertex(NAMED_PVLight);
 
-    drawTriangleMesh(NAMED_WaterMesh);
+    drawSimpleMesh(NAMED_WaterMesh);
 }
 
 void drawNormals() {
     int width = State->meshWidth;
     int height = State->meshHeight;
 
-    float *vertices = loadTriangleMeshVerticesF(NAMED_WaterMesh);
+    float *vertices = loadSimpleMeshVerticesF(NAMED_WaterMesh, 0);
 
     bindProgramVertex(NAMED_PVSky);
     bindProgramFragment(NAMED_PFLighting);
@@ -466,7 +466,7 @@
 
     updateRipples();
     generateRipples();
-    updateTriangleMesh(NAMED_WaterMesh);
+    updateSimpleMesh(NAMED_WaterMesh);
 
     drawRiverbed();
     drawSky();
diff --git a/src/com/android/wallpaper/fall/FallRS.java b/src/com/android/wallpaper/fall/FallRS.java
index e39df3c..1109d0d 100644
--- a/src/com/android/wallpaper/fall/FallRS.java
+++ b/src/com/android/wallpaper/fall/FallRS.java
@@ -26,6 +26,7 @@
 import android.renderscript.Element;
 import android.renderscript.Light;
 import android.renderscript.Type;
+import android.renderscript.SimpleMesh;
 import static android.renderscript.Sampler.Value.LINEAR;
 import static android.renderscript.Sampler.Value.WRAP;
 import static android.renderscript.ProgramStore.DepthFunc.*;
@@ -119,8 +120,8 @@
 
     private int mMeshHeight;
     @SuppressWarnings({"FieldCanBeLocal"})
-    private RenderScript.TriangleMesh mMesh;
-    private WorldState mWorldState;    
+    private SimpleMesh mMesh;
+    private WorldState mWorldState;
 
     private Allocation mRippleMap;
     private Allocation mRefractionMap;
@@ -177,8 +178,7 @@
     }
 
     private void createMesh() {
-        final RenderScript rs = mRS;
-        rs.triangleMeshBegin(Element.NORM_ST_XYZ_F32, Element.INDEX_16);
+        SimpleMesh.TriangleMeshBuilder tmb = new SimpleMesh.TriangleMeshBuilder(mRS, 3, true, true);
 
         int wResolution;
         int hResolution;
@@ -209,12 +209,12 @@
             final float t = 1.0f - y / (float) hResolution;
             for (int x = 0; x <= wResolution; x++) {
                 if (shift) {
-                    rs.triangleMeshAddVertex_XYZ_ST_NORM(
+                    tmb.add_XYZ_ST_NORM(
                             -1.0f + x * quadWidth - quadWidth, yOffset, 0.0f,
                             x / (float) wResolution, t,
                             0.0f, 0.0f, -1.0f);
                 } else {
-                    rs.triangleMeshAddVertex_XYZ_ST_NORM(
+                    tmb.add_XYZ_ST_NORM(
                             -1.0f + x * quadWidth - quadWidth * 0.5f, yOffset, 0.0f,
                             x / (float) wResolution, t,
                             0.0f, 0.0f, -1.0f);
@@ -229,16 +229,16 @@
                 final int index = yOffset + x;
                 final int iWR1 = index + wResolution + 1;
                 if (shift) {
-                    rs.triangleMeshAddTriangle(index, index + 1, iWR1);
-                    rs.triangleMeshAddTriangle(index + 1, iWR1 + 1, iWR1);
+                    tmb.addTriangle(index, index + 1, iWR1);
+                    tmb.addTriangle(index + 1, iWR1 + 1, iWR1);
                 } else {
-                    rs.triangleMeshAddTriangle(index, iWR1 + 1, iWR1);
-                    rs.triangleMeshAddTriangle(index, index + 1, iWR1 + 1);
+                    tmb.addTriangle(index, iWR1 + 1, iWR1);
+                    tmb.addTriangle(index, index + 1, iWR1 + 1);
                 }
             }
         }
 
-        mMesh = rs.triangleMeshCreate();
+        mMesh = tmb.create();
         mMesh.setName("WaterMesh");
 
         mMeshWidth = wResolution + 1;
