diff --git a/java/Fountain/src/com/android/fountain/FountainRS.java b/java/Fountain/src/com/android/fountain/FountainRS.java
index 0a0b05a..d167b5f 100644
--- a/java/Fountain/src/com/android/fountain/FountainRS.java
+++ b/java/Fountain/src/com/android/fountain/FountainRS.java
@@ -18,12 +18,13 @@
 
 import java.io.Writer;
 
-import android.renderscript.RenderScript;
 import android.content.Context;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.drawable.BitmapDrawable;
 import android.graphics.drawable.Drawable;
+import android.renderscript.RenderScript;
+import android.renderscript.ProgramVertexAlloc;
 import android.util.Log;
 
 public class FountainRS {
@@ -57,8 +58,10 @@
     private RenderScript.ProgramFragmentStore mPFS;
     private RenderScript.ProgramFragment mPF;
     private RenderScript.ProgramFragment mPF2;
+    private RenderScript.ProgramVertex mPV;
     private RenderScript.Allocation mTexture;
     private RenderScript.Sampler mSampler;
+    private ProgramVertexAlloc mPVA;
 
     private Bitmap mBackground;
 
@@ -107,6 +110,16 @@
         mPF2.bindSampler(mSampler, 0);
         mPF2.setName("PgmFragBackground");
 
+        mRS.programVertexBegin(null, null);
+        mPV = mRS.programVertexCreate();
+        mPVA = new ProgramVertexAlloc(mRS);
+        mPV.bindAllocation(0, mPVA.mAlloc);
+        mPVA.setupOrthoWindow(320, 480);
+        mRS.contextBindProgramVertex(mPV);
+
+
+
+
         mParams[0] = 0;
         mParams[1] = partCount;
         mParams[2] = 0;
diff --git a/java/RenderScript/android/renderscript/Matrix.java b/java/RenderScript/android/renderscript/Matrix.java
index 03222aa..91e7b34 100644
--- a/java/RenderScript/android/renderscript/Matrix.java
+++ b/java/RenderScript/android/renderscript/Matrix.java
@@ -139,8 +139,8 @@
         mMat[5] = 2 / (t - b);
         mMat[10]= -2 / (f - n);
         mMat[12]= -(r + l) / (r - l);
-        mMat[12]= -(t + b) / (t - b);
-        mMat[12]= -(f + n) / (f - n);
+        mMat[13]= -(t + b) / (t - b);
+        mMat[14]= -(f + n) / (f - n);
     }
 
     public void loadFrustum(float l, float r, float b, float t, float n, float f) {
diff --git a/java/RenderScript/android/renderscript/RenderScript.java b/java/RenderScript/android/renderscript/RenderScript.java
index afb4ae3..4d5c4a0 100644
--- a/java/RenderScript/android/renderscript/RenderScript.java
+++ b/java/RenderScript/android/renderscript/RenderScript.java
@@ -154,10 +154,7 @@
     native private void nProgramVertexBindAllocation(int pv, int slot, int mID);
     native private void nProgramVertexBegin(int inID, int outID);
     native private void nProgramVertexSetType(int slot, int mID);
-    native private void nProgramVertexSetCameraMode(boolean isOrtho);
     native private void nProgramVertexSetTextureMatrixEnable(boolean enable);
-    native private void nProgramVertexSetModelMatrixEnable(boolean enable);
-    native private void nProgramVertexSetProjectionMatrixEnable(boolean enable);
     native private int  nProgramVertexCreate();
 
 
@@ -733,22 +730,10 @@
         nProgramVertexSetType(slot, t.mID);
     }
 
-    public void programVertexSetCameraMode(boolean isOrtho) {
-        nProgramVertexSetCameraMode(isOrtho);
-    }
-
     public void programVertexSetTextureMatrixEnable(boolean enable) {
         nProgramVertexSetTextureMatrixEnable(enable);
     }
 
-    public void programVertexSetModelMatrixEnable(boolean enable) {
-        nProgramVertexSetModelMatrixEnable(enable);
-    }
-
-    public void programVertexSetProjectionMatrixEnable(boolean enable) {
-        nProgramVertexSetProjectionMatrixEnable(enable);
-    }
-
     public ProgramVertex programVertexCreate() {
         int id = nProgramVertexCreate();
         return new ProgramVertex(id);
diff --git a/java/Rollo/res/raw/rollo.c b/java/Rollo/res/raw/rollo.c
index b81c567..56ee425 100644
--- a/java/Rollo/res/raw/rollo.c
+++ b/java/Rollo/res/raw/rollo.c
@@ -8,6 +8,7 @@
     int x;
 
     renderTriangleMesh(con, NAMED_MeshCard);
+    renderTriangleMesh(con, NAMED_MeshTab);
     return 1;
 }
 
diff --git a/java/Rollo/src/com/android/rollo/RolloMesh.java b/java/Rollo/src/com/android/rollo/RolloMesh.java
index c44a817..d7252fb 100644
--- a/java/Rollo/src/com/android/rollo/RolloMesh.java
+++ b/java/Rollo/src/com/android/rollo/RolloMesh.java
@@ -24,6 +24,11 @@
 
 
 class RolloMesh {
+    static public final float mCardHeight = 1.2f;
+    static public final float mCardWidth = 1.8f;
+    static public final float mTabHeight = 0.2f;
+    static public final float mTabs = 3;
+    static public final float mTabGap = 0.1f;
 
     static RenderScript.TriangleMesh createCard(RenderScript rs) {
         RenderScript.Element vtx = rs.elementGetPredefined(
@@ -31,12 +36,15 @@
         RenderScript.Element idx = rs.elementGetPredefined(
             RenderScript.ElementPredefined.INDEX_16);
 
-        rs.triangleMeshBegin(vtx, idx);
-        rs.triangleMeshAddVertex_XYZ_ST(0, 0, 0,  0, 0);
-        rs.triangleMeshAddVertex_XYZ_ST(0, 1, 0,  0, 1);
-        rs.triangleMeshAddVertex_XYZ_ST(1, 1, 0,  1, 1);
-        rs.triangleMeshAddVertex_XYZ_ST(1, 0, 0,  1, 0);
+        float w = mCardWidth / 2;
+        float h = mCardHeight;
+        float z = 0;
 
+        rs.triangleMeshBegin(vtx, idx);
+        rs.triangleMeshAddVertex_XYZ_ST(-w, 0, z,  0, 0);
+        rs.triangleMeshAddVertex_XYZ_ST(-w, h, z,  0, 1);
+        rs.triangleMeshAddVertex_XYZ_ST( w, h, z,  1, 1);
+        rs.triangleMeshAddVertex_XYZ_ST( w, 0, z,  1, 0);
         rs.triangleMeshAddTriangle(0,1,2);
         rs.triangleMeshAddTriangle(0,2,3);
         return rs.triangleMeshCreate();
@@ -48,11 +56,28 @@
         RenderScript.Element idx = rs.elementGetPredefined(
             RenderScript.ElementPredefined.INDEX_16);
 
+
+        float tabSlope = 0.1f;
+        float num = 0;
+
+        float w = (mCardWidth - ((mTabs - 1) * mTabGap)) / mTabs;
+        float w1 = -(mCardWidth / 2) + ((w + mTabGap) * num);
+        float w2 = w1 + (w * tabSlope);
+        float w3 = w1 + w - (w * tabSlope);
+        float w4 = w1 + w;
+        float h1 = mCardHeight;
+        float h2 = h1 + mTabHeight;
+        float z = 0;
+
+        float stScale = w / mTabHeight / 2;
+        float stScale2 = stScale * (tabSlope / w);
+
+
         rs.triangleMeshBegin(vtx, idx);
-        rs.triangleMeshAddVertex_XYZ_ST(0.0f, 0, 0,  -1.0f, 0);
-        rs.triangleMeshAddVertex_XYZ_ST(0.2f, 1, 0,  -0.8f, 1);
-        rs.triangleMeshAddVertex_XYZ_ST(1.8f, 1, 0,   0.8f, 1);
-        rs.triangleMeshAddVertex_XYZ_ST(2.0f, 0, 0,   1.0f, 0);
+        rs.triangleMeshAddVertex_XYZ_ST(w1, h1, z,  -stScale, 0);
+        rs.triangleMeshAddVertex_XYZ_ST(w2, h2, z,  -stScale2, 1);
+        rs.triangleMeshAddVertex_XYZ_ST(w3, h2, z,   stScale2, 1);
+        rs.triangleMeshAddVertex_XYZ_ST(w4, h1, z,   stScale, 0);
         rs.triangleMeshAddTriangle(0,1,2);
         rs.triangleMeshAddTriangle(0,2,3);
         return rs.triangleMeshCreate();
diff --git a/java/Rollo/src/com/android/rollo/RolloRS.java b/java/Rollo/src/com/android/rollo/RolloRS.java
index aa9f338..da0b146 100644
--- a/java/Rollo/src/com/android/rollo/RolloRS.java
+++ b/java/Rollo/src/com/android/rollo/RolloRS.java
@@ -74,8 +74,8 @@
     //private float[] mBufferPV;
 
     private void initNamed() {
-        //mMeshTab = RolloMesh.createTab(mRS);
-        //mMeshTab.setName("MeshTab");
+        mMeshTab = RolloMesh.createTab(mRS);
+        mMeshTab.setName("MeshTab");
         mMeshCard = RolloMesh.createCard(mRS);
         mMeshCard.setName("MeshCard");
         Log.e("rs", "Done loading strips");
@@ -117,10 +117,7 @@
 
         mPVAlloc = new ProgramVertexAlloc(mRS);
         mRS.programVertexBegin(null, null);
-        mRS.programVertexSetCameraMode(true);
         mRS.programVertexSetTextureMatrixEnable(true);
-        mRS.programVertexSetModelMatrixEnable(true);
-        mRS.programVertexSetProjectionMatrixEnable(true);
         mPV = mRS.programVertexCreate();
         mPV.setName("PV");
         mPV.bindAllocation(0, mPVAlloc.mAlloc);
diff --git a/jni/RenderScript_jni.cpp b/jni/RenderScript_jni.cpp
index 7a3a7af..ab17a4a 100644
--- a/jni/RenderScript_jni.cpp
+++ b/jni/RenderScript_jni.cpp
@@ -791,14 +791,6 @@
 }
 
 static void
-nProgramVertexSetCameraMode(JNIEnv *_env, jobject _this, jboolean isOrtho)
-{
-    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
-    LOG_API("nProgramVertexSetCameraMode, con(%p), isOrtho(%i)", con, isOrtho);
-    rsProgramVertexSetCameraMode(isOrtho);
-}
-
-static void
 nProgramVertexSetTextureMatrixEnable(JNIEnv *_env, jobject _this, jboolean enable)
 {
     RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
@@ -806,22 +798,6 @@
     rsProgramVertexSetTextureMatrixEnable(enable);
 }
 
-static void
-nProgramVertexSetModelMatrixEnable(JNIEnv *_env, jobject _this, jboolean enable)
-{
-    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
-    LOG_API("nProgramVertexSetModelMatrixEnable, con(%p), enable(%i)", con, enable);
-    rsProgramVertexSetModelMatrixEnable(enable);
-}
-
-static void
-nProgramVertexSetProjectionMatrixEnable(JNIEnv *_env, jobject _this, jboolean enable)
-{
-    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
-    LOG_API("nProgramVertexSetProjectionMatrixEnable, con(%p), enable(%i)", con, enable);
-    rsProgramVertexSetProjectionMatrixEnable(enable);
-}
-
 static jint
 nProgramVertexCreate(JNIEnv *_env, jobject _this)
 {
@@ -1000,10 +976,7 @@
 {"nProgramVertexBindAllocation",   "(III)V",                               (void*)nProgramVertexBindAllocation },
 {"nProgramVertexBegin",            "(II)V",                                (void*)nProgramVertexBegin },
 {"nProgramVertexSetType",          "(II)V",                                (void*)nProgramVertexSetType },
-{"nProgramVertexSetCameraMode",    "(Z)V",                                 (void*)nProgramVertexSetCameraMode },
 {"nProgramVertexSetTextureMatrixEnable",   "(Z)V",                         (void*)nProgramVertexSetTextureMatrixEnable },
-{"nProgramVertexSetModelMatrixEnable",  "(Z)V",                            (void*)nProgramVertexSetModelMatrixEnable },
-{"nProgramVertexSetProjectionMatrixEnable",  "(Z)V",                       (void*)nProgramVertexSetProjectionMatrixEnable },
 {"nProgramVertexCreate",           "()I",                                  (void*)nProgramVertexCreate },
 
 {"nContextBindRootScript",         "(I)V",                                 (void*)nContextBindRootScript },
diff --git a/rs.spec b/rs.spec
index 107096f..dd489b8 100644
--- a/rs.spec
+++ b/rs.spec
@@ -286,10 +286,6 @@
 	param bool isRoot
 	}
 
-ScriptCSetOrtho {
-	param bool isOrtho
-	}
-
 ScriptCSetScript {
 	param void * codePtr
 	}
@@ -403,19 +399,7 @@
 	param RsType constants
 	}
 
-ProgramVertexSetCameraMode {
-	param bool ortho
-	}
-
 ProgramVertexSetTextureMatrixEnable {
 	param bool enable
 	}
 
-ProgramVertexSetModelMatrixEnable {
-	param bool enable
-	}
-
-ProgramVertexSetProjectionMatrixEnable {
-	param bool enable
-	}
-
diff --git a/rsContext.cpp b/rsContext.cpp
index 266c455..c466f46 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -81,24 +81,6 @@
     glEnable(GL_LIGHT0);
     glViewport(0, 0, mWidth, mHeight);
 
-    if(mRootScript->mEnviroment.mIsOrtho) {
-        glMatrixMode(GL_PROJECTION);
-        glLoadIdentity();
-        glOrthof(0, mWidth,  mHeight, 0,  0, 1);
-        glMatrixMode(GL_MODELVIEW);
-    } else {
-        float aspectH = ((float)mWidth) / mHeight;
-        glMatrixMode(GL_PROJECTION);
-        glLoadIdentity();
-        glFrustumf(-1, 1,  -aspectH, aspectH,  1, 100);
-        glRotatef(-90, 0,0,1);
-        glTranslatef(0,  0,  -3);
-        glMatrixMode(GL_MODELVIEW);
-    }
-
-    glMatrixMode(GL_MODELVIEW);
-    glLoadIdentity();
-
     glDepthMask(GL_TRUE);
     glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
 
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index fc26ab5..c24f228 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -25,14 +25,21 @@
     Program(in, out)
 {
     mTextureMatrixEnable = false;
-    mProjectionEnable = false;
-    mTransformEnable = false;
 }
 
 ProgramVertex::~ProgramVertex()
 {
 }
 
+static void logMatrix(const char *txt, const float *f)
+{
+    LOGE("Matrix %s, %p", txt, f);
+    LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[0], f[4], f[8], f[12]);
+    LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[1], f[5], f[9], f[13]);
+    LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[2], f[6], f[10], f[14]);
+    LOGE("%6.2f, %6.2f, %6.2f, %6.2f", f[3], f[7], f[11], f[15]);
+}
+
 void ProgramVertex::setupGL()
 {
     const float *f = static_cast<const float *>(mConstants[0]->getPtr());
@@ -44,19 +51,13 @@
         glLoadIdentity();
     }
 
+    //logMatrix("prog", &f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
+    //logMatrix("model", &f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]);
 
     glMatrixMode(GL_PROJECTION);
-    if (mProjectionEnable) {
-        glLoadMatrixf(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
-    } else {
-    }
-
+    glLoadMatrixf(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
     glMatrixMode(GL_MODELVIEW);
-    if (mTransformEnable) {
-        glLoadMatrixf(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]);
-    } else {
-        glLoadIdentity();
-    }
+    glLoadMatrixf(&f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]);
 }
 
 void ProgramVertex::setConstantType(uint32_t slot, const Type *t)
@@ -110,26 +111,11 @@
     rsc->mStateVertex.mPV->setConstantType(slot, static_cast<const Type *>(constants));
 }
 
-void rsi_ProgramVertexSetCameraMode(Context *rsc, bool ortho)
-{
-    rsc->mStateVertex.mPV->setProjectionEnabled(!ortho);
-}
-
 void rsi_ProgramVertexSetTextureMatrixEnable(Context *rsc, bool enable)
 {
     rsc->mStateVertex.mPV->setTextureMatrixEnable(enable);
 }
 
-void rsi_ProgramVertexSetModelMatrixEnable(Context *rsc, bool enable)
-{
-    rsc->mStateVertex.mPV->setTransformEnable(enable);
-}
-
-void rsi_ProgramVertexSetProjectionMatrixEnable(Context *rsc, bool enable)
-{
-    rsc->mStateVertex.mPV->setProjectionEnable(enable);
-}
-
 
 
 }
diff --git a/rsProgramVertex.h b/rsProgramVertex.h
index 677be6e..0b3a3eb 100644
--- a/rsProgramVertex.h
+++ b/rsProgramVertex.h
@@ -38,9 +38,6 @@
     void setConstantType(uint32_t slot, const Type *);
     void bindAllocation(uint32_t slot, Allocation *);
     void setTextureMatrixEnable(bool e) {mTextureMatrixEnable = e;}
-    void setProjectionEnabled(bool e) {mProjectionEnable = e;}
-    void setTransformEnable(bool e) {mTransformEnable = e;}
-    void setProjectionEnable(bool e) {mProjectionEnable = e;}
 
 protected:
     bool mDirty;
@@ -50,8 +47,6 @@
 
     // Hacks to create a program for now
     bool mTextureMatrixEnable;
-    bool mProjectionEnable;
-    bool mTransformEnable;
 
 };
 
diff --git a/rsScript.h b/rsScript.h
index d32f116..7dd2b61 100644
--- a/rsScript.h
+++ b/rsScript.h
@@ -39,7 +39,6 @@
 
     struct Enviroment_t {
         bool mIsRoot;
-        bool mIsOrtho;
         float mClearColor[4];
         float mClearDepth;
         uint32_t mClearStencil;
diff --git a/rsScriptC.cpp b/rsScriptC.cpp
index d29eb9f..2963831 100644
--- a/rsScriptC.cpp
+++ b/rsScriptC.cpp
@@ -428,7 +428,6 @@
     mEnviroment.mClearDepth = 1;
     mEnviroment.mClearStencil = 0;
     mEnviroment.mIsRoot = false;
-    mEnviroment.mIsOrtho = true;
 
     mAccScript = NULL;
 
@@ -556,12 +555,6 @@
     ss->mEnviroment.mIsRoot = isRoot;
 }
 
-void rsi_ScriptCSetOrtho(Context * rsc, bool isOrtho)
-{
-    ScriptCState *ss = &rsc->mScriptC;
-    ss->mEnviroment.mIsOrtho = isOrtho;
-}
-
 void rsi_ScriptCSetText(Context *rsc, const char *text, uint32_t len)
 {
     ScriptCState *ss = &rsc->mScriptC;
