diff --git a/libs/rs/java/Film/res/raw/filmstrip.c b/libs/rs/java/Film/res/raw/filmstrip.c
index 863b930..6885251 100644
--- a/libs/rs/java/Film/res/raw/filmstrip.c
+++ b/libs/rs/java/Film/res/raw/filmstrip.c
@@ -1,7 +1,7 @@
 // Fountain test script
 
 #pragma version(1)
-#pragma stateVertex(PV)
+#pragma stateVertex(PVBackground)
 #pragma stateFragment(PFBackground)
 #pragma stateFragmentStore(PFSBackground)
 
@@ -43,8 +43,6 @@
     //materialDiffuse(con, 0.0f, 0.0f, 0.0f, 1.0f);
     //materialSpecular(con, 0.5f, 0.5f, 0.5f, 0.5f);
     //materialShininess(intToFloat(20));
-    //lightPosition(con, 0.2f, -0.2f, -2.0f, 0.0f);
-    //enable(con, GL_LIGHTING);
     drawTriangleMesh(NAMED_mesh);
 
 
@@ -53,6 +51,7 @@
 
     bindProgramFragmentStore(NAMED_PFImages);
     bindProgramFragment(NAMED_PFSImages);
+    bindProgramVertex(NAMED_PVImages);
 
     //focusPos = loadF(1, 2);
     //focusID = 0;
diff --git a/libs/rs/java/Film/src/com/android/film/FilmRS.java b/libs/rs/java/Film/src/com/android/film/FilmRS.java
index 2711bf0..fca0818 100644
--- a/libs/rs/java/Film/src/com/android/film/FilmRS.java
+++ b/libs/rs/java/Film/src/com/android/film/FilmRS.java
@@ -45,7 +45,6 @@
     public void init(RenderScript rs, Resources res, int width, int height) {
         mRS = rs;
         mRes = res;
-        initNamed();
         initRS();
     }
 
@@ -77,7 +76,8 @@
     private RenderScript.ProgramFragmentStore mPFSImages;
     private RenderScript.ProgramFragment mPFBackground;
     private RenderScript.ProgramFragment mPFImages;
-    private RenderScript.ProgramVertex mPV;
+    private RenderScript.ProgramVertex mPVBackground;
+    private RenderScript.ProgramVertex mPVImages;
     private ProgramVertexAlloc mPVA;
 
     private RenderScript.Allocation mAllocEnv;
@@ -90,20 +90,7 @@
     private float[] mBufferPos;
     private float[] mBufferPV;
 
-    private void initNamed() {
-        mElementVertex = mRS.elementGetPredefined(
-            RenderScript.ElementPredefined.NORM_ST_XYZ_F32);
-        mElementIndex = mRS.elementGetPredefined(
-            RenderScript.ElementPredefined.INDEX_16);
-
-        mRS.triangleMeshBegin(mElementVertex, mElementIndex);
-        FilmStripMesh fsm = new FilmStripMesh();
-        fsm.init(mRS);
-        mMesh = mRS.triangleMeshCreate();
-        mMesh.setName("mesh");
-        Log.e("rs", "Done loading strips");
-
-
+    private void initSamplers() {
         mRS.samplerBegin();
         mRS.samplerSet(RenderScript.SamplerParam.FILTER_MIN,
                        RenderScript.SamplerValue.LINEAR_MIP_LINEAR);
@@ -112,19 +99,9 @@
         mRS.samplerSet(RenderScript.SamplerParam.WRAP_MODE_T,
                        RenderScript.SamplerValue.CLAMP);
         mSampler = mRS.samplerCreate();
+    }
 
-        mRS.programFragmentBegin(null, null);
-        mPFBackground = mRS.programFragmentCreate();
-        mPFBackground.setName("PFBackground");
-
-        mRS.programFragmentBegin(null, null);
-        mRS.programFragmentSetTexEnable(0, true);
-        //mRS.programFragmentSetEnvMode(0, RS_TEX_ENV_MODE_REPLACE);
-        //rsProgramFragmentSetType(0, gEnv.tex[0]->getType());
-        mPFImages = mRS.programFragmentCreate();
-        mPFImages.setName("PFImages");
-        mPFImages.bindSampler(mSampler, 0);
-
+    private void initPFS() {
         mRS.programFragmentStoreBegin(null, null);
         mRS.programFragmentStoreDepthFunc(RenderScript.DepthFunc.LESS);
         mRS.programFragmentStoreDitherEnable(true);
@@ -139,26 +116,59 @@
                                           RenderScript.BlendDstFunc.ONE);
         mPFSImages = mRS.programFragmentStoreCreate();
         mPFSImages.setName("PFSImages");
+    }
 
-        mRS.programVertexBegin(null, null);
-        mRS.programVertexSetTextureMatrixEnable(true);
-        mPV = mRS.programVertexCreate();
-        mPV.setName("PV");
+    private void initPF() {
+        mRS.programFragmentBegin(null, null);
+        mPFBackground = mRS.programFragmentCreate();
+        mPFBackground.setName("PFBackground");
 
+        mRS.programFragmentBegin(null, null);
+        mRS.programFragmentSetTexEnable(0, true);
+        //mRS.programFragmentSetEnvMode(0, RS_TEX_ENV_MODE_REPLACE);
+        //rsProgramFragmentSetType(0, gEnv.tex[0]->getType());
+        mPFImages = mRS.programFragmentCreate();
+        mPFImages.setName("PFImages");
+    }
+
+    private void initPV() {
         mRS.lightBegin();
         mLight = mRS.lightCreate();
         mLight.setPosition(0, -0.5f, -1.0f);
 
-        Log.e("rs", "Done loading named");
+        mRS.programVertexBegin(null, null);
+        mRS.programVertexSetTextureMatrixEnable(true);
+        mRS.programVertexAddLight(mLight);
+        mPVBackground = mRS.programVertexCreate();
+        mPVBackground.setName("PVBackground");
+
+        mRS.programVertexBegin(null, null);
+        mPVImages = mRS.programVertexCreate();
+        mPVImages.setName("PVImages");
     }
 
 
-    private Bitmap mBackground;
-
     int mParams[] = new int[10];
 
     private void initRS() {
-        int partCount = 1024;
+        mElementVertex = mRS.elementGetPredefined(
+            RenderScript.ElementPredefined.NORM_ST_XYZ_F32);
+        mElementIndex = mRS.elementGetPredefined(
+            RenderScript.ElementPredefined.INDEX_16);
+
+        mRS.triangleMeshBegin(mElementVertex, mElementIndex);
+        FilmStripMesh fsm = new FilmStripMesh();
+        fsm.init(mRS);
+        mMesh = mRS.triangleMeshCreate();
+        mMesh.setName("mesh");
+
+        initPFS();
+        initSamplers();
+        initPF();
+        initPV();
+        mPFImages.bindSampler(mSampler, 0);
+
+        Log.e("rs", "Done loading named");
 
         mRS.scriptCBegin();
         mRS.scriptCSetClearColor(0.0f, 0.0f, 0.0f, 1.0f);
@@ -172,7 +182,8 @@
             mBufferPos.length);
 
         mPVA = new ProgramVertexAlloc(mRS);
-        mPV.bindAllocation(0, mPVA.mAlloc);
+        mPVBackground.bindAllocation(0, mPVA.mAlloc);
+        mPVImages.bindAllocation(0, mPVA.mAlloc);
         mPVA.setupProjectionNormalized(320, 480);
 
 
@@ -181,10 +192,6 @@
         mScriptStrip.bindAllocation(mPVA.mAlloc, 3);
 
 
-        //mIntAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, 10);
-        //mPartAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 3 * 3);
-        //mPartAlloc.setName("PartBuffer");
-        //mVertAlloc = mRS.allocationCreatePredefSized(RenderScript.ElementPredefined.USER_I32, partCount * 5 + 1);
 /*
         {
             Resources res = getResources();
@@ -203,25 +210,6 @@
         mPFS = mRS.programFragmentStoreCreate();
         mPFS.setName("MyBlend");
         mRS.contextBindProgramFragmentStore(mPFS);
-
-        mRS.samplerBegin();
-        mRS.samplerSet(RenderScript.SamplerParam.FILTER_MAG, RenderScript.SamplerValue.LINEAR);
-        mRS.samplerSet(RenderScript.SamplerParam.FILTER_MIN, RenderScript.SamplerValue.LINEAR);
-        mSampler = mRS.samplerCreate();
-
-
-        mParams[0] = 0;
-        mParams[1] = partCount;
-        mParams[2] = 0;
-        mParams[3] = 0;
-        mParams[4] = 0;
-        mIntAlloc.data(mParams);
-
-        int t2[] = new int[partCount * 4*3];
-        for (int ct=0; ct < t2.length; ct++) {
-            t2[ct] = 0;
-        }
-        mPartAlloc.data(t2);
         */
 
         setFilmStripPosition(0, 0);
diff --git a/libs/rs/java/RenderScript/android/renderscript/RenderScript.java b/libs/rs/java/RenderScript/android/renderscript/RenderScript.java
index 733009e..e355635 100644
--- a/libs/rs/java/RenderScript/android/renderscript/RenderScript.java
+++ b/libs/rs/java/RenderScript/android/renderscript/RenderScript.java
@@ -156,6 +156,7 @@
     native private void nProgramVertexBegin(int inID, int outID);
     native private void nProgramVertexSetType(int slot, int mID);
     native private void nProgramVertexSetTextureMatrixEnable(boolean enable);
+    native private void nProgramVertexAddLight(int id);
     native private int  nProgramVertexCreate();
 
     native private void nLightBegin();
@@ -720,7 +721,6 @@
         public void bindAllocation(int slot, Allocation va) {
             nProgramVertexBindAllocation(mID, slot, va.mID);
         }
-
     }
 
     public void programVertexBegin(Element in, Element out) {
@@ -743,6 +743,10 @@
         nProgramVertexSetTextureMatrixEnable(enable);
     }
 
+    public void programVertexAddLight(Light l) {
+        nProgramVertexAddLight(l.mID);
+    }
+
     public ProgramVertex programVertexCreate() {
         int id = nProgramVertexCreate();
         return new ProgramVertex(id);
diff --git a/libs/rs/jni/RenderScript_jni.cpp b/libs/rs/jni/RenderScript_jni.cpp
index 248a6bd..1747673 100644
--- a/libs/rs/jni/RenderScript_jni.cpp
+++ b/libs/rs/jni/RenderScript_jni.cpp
@@ -810,6 +810,14 @@
     rsProgramVertexSetTextureMatrixEnable(enable);
 }
 
+static void
+nProgramVertexAddLight(JNIEnv *_env, jobject _this, jint light)
+{
+    RsContext con = (RsContext)(_env->GetIntField(_this, gContextId));
+    LOG_API("nProgramVertexAddLight, con(%p), light(%p)", con, (RsLight)light);
+    rsProgramVertexAddLight((RsLight)light);
+}
+
 static jint
 nProgramVertexCreate(JNIEnv *_env, jobject _this)
 {
@@ -1048,6 +1056,7 @@
 {"nProgramVertexBegin",            "(II)V",                                (void*)nProgramVertexBegin },
 {"nProgramVertexSetType",          "(II)V",                                (void*)nProgramVertexSetType },
 {"nProgramVertexSetTextureMatrixEnable",   "(Z)V",                         (void*)nProgramVertexSetTextureMatrixEnable },
+{"nProgramVertexAddLight",         "(I)V",                                 (void*)nProgramVertexAddLight },
 {"nProgramVertexCreate",           "()I",                                  (void*)nProgramVertexCreate },
 
 {"nLightBegin",                    "()V",                                  (void*)nLightBegin },
diff --git a/libs/rs/rs.spec b/libs/rs/rs.spec
index 62533af..2f99808 100644
--- a/libs/rs/rs.spec
+++ b/libs/rs/rs.spec
@@ -403,6 +403,10 @@
 	param bool enable
 	}
 
+ProgramVertexAddLight {
+	param RsLight light
+	}
+
 LightBegin {
 	}
 
diff --git a/libs/rs/rsContext.h b/libs/rs/rsContext.h
index 442a920..497dbcf 100644
--- a/libs/rs/rsContext.h
+++ b/libs/rs/rsContext.h
@@ -32,10 +32,10 @@
 #include "rsAllocation.h"
 #include "rsAdapter.h"
 #include "rsSampler.h"
+#include "rsLight.h"
 #include "rsProgramFragment.h"
 #include "rsProgramFragmentStore.h"
 #include "rsProgramVertex.h"
-#include "rsLight.h"
 
 #include "rsgApiStructs.h"
 #include "rsLocklessFifo.h"
diff --git a/libs/rs/rsLight.cpp b/libs/rs/rsLight.cpp
index 67d0095..24b58b6 100644
--- a/libs/rs/rsLight.cpp
+++ b/libs/rs/rsLight.cpp
@@ -16,6 +16,8 @@
 
 #include "rsContext.h"
 
+#include <GLES/gl.h>
+
 using namespace android;
 using namespace android::renderscript;
 
@@ -25,13 +27,15 @@
     mIsLocal = isLocal;
     mIsMono = isMono;
 
-    mX = 0;
-    mY = 0;
-    mZ = 0;
+    mPosition[0] = 0;
+    mPosition[1] = 0;
+    mPosition[2] = 1;
+    mPosition[3] = 0;
 
-    mR = 1.f;
-    mG = 1.f;
-    mB = 1.f;
+    mColor[0] = 1.f;
+    mColor[1] = 1.f;
+    mColor[2] = 1.f;
+    mColor[3] = 1.f;
 }
 
 Light::~Light()
@@ -40,16 +44,23 @@
 
 void Light::setPosition(float x, float y, float z)
 {
-    mX = x;
-    mY = y;
-    mZ = z;
+    mPosition[0] = x;
+    mPosition[1] = y;
+    mPosition[2] = z;
 }
 
 void Light::setColor(float r, float g, float b)
 {
-    mR = r;
-    mG = g;
-    mB = b;
+    mColor[0] = r;
+    mColor[1] = g;
+    mColor[2] = b;
+}
+
+void Light::setupGL(uint32_t num) const
+{
+    glLightfv(GL_LIGHT0 + num, GL_DIFFUSE, mColor);
+    glLightfv(GL_LIGHT0 + num, GL_SPECULAR, mColor);
+    glLightfv(GL_LIGHT0 + num, GL_POSITION, mPosition);
 }
 
 ////////////////////////////////////////////
diff --git a/libs/rs/rsLight.h b/libs/rs/rsLight.h
index 76d1ecc..b0c3386 100644
--- a/libs/rs/rsLight.h
+++ b/libs/rs/rsLight.h
@@ -36,9 +36,11 @@
     void setPosition(float x, float y, float z);
     void setColor(float r, float g, float b);
 
+    void setupGL(uint32_t num) const;
+
 protected:
-    float mR, mG, mB;
-    float mX, mY, mZ;
+    float mColor[4];
+    float mPosition[4];
     bool mIsLocal;
     bool mIsMono;
 };
diff --git a/libs/rs/rsProgramVertex.cpp b/libs/rs/rsProgramVertex.cpp
index 4089507..417ba6a 100644
--- a/libs/rs/rsProgramVertex.cpp
+++ b/libs/rs/rsProgramVertex.cpp
@@ -28,6 +28,7 @@
     Program(in, out)
 {
     mTextureMatrixEnable = false;
+    mLightCount = 0;
 }
 
 ProgramVertex::~ProgramVertex()
@@ -54,8 +55,29 @@
         glLoadIdentity();
     }
 
-    //logMatrix("prog", &f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
-    //logMatrix("model", &f[RS_PROGRAM_VERTEX_MODELVIEW_OFFSET]);
+
+    LOGE("lights %i ", mLightCount);
+    glMatrixMode(GL_MODELVIEW);
+    glLoadIdentity();
+    if (mLightCount) {
+        int v = 1;
+        glEnable(GL_LIGHTING);
+        glLightModelxv(GL_LIGHT_MODEL_TWO_SIDE, &v);
+        for (uint32_t ct = 0; ct < mLightCount; ct++) {
+            const Light *l = mLights[ct].get();
+            glEnable(GL_LIGHT0 + ct);
+            l->setupGL(ct);
+        }
+        for (uint32_t ct = mLightCount; ct < MAX_LIGHTS; ct++) {
+            glDisable(GL_LIGHT0 + ct);
+        }
+    } else {
+        glDisable(GL_LIGHTING);
+    }
+    
+    if (!f) {
+        LOGE("Must bind constants to vertex program");
+    }
 
     glMatrixMode(GL_PROJECTION);
     glLoadMatrixf(&f[RS_PROGRAM_VERTEX_PROJECTION_OFFSET]);
@@ -73,6 +95,14 @@
     mConstants[slot].set(a);
 }
 
+void ProgramVertex::addLight(const Light *l)
+{
+    if (mLightCount < MAX_LIGHTS) {
+        mLights[mLightCount].set(l);
+        mLightCount++;
+    }
+}
+
 
 ProgramVertexState::ProgramVertexState()
 {
@@ -136,6 +166,10 @@
     rsc->mStateVertex.mPV->setTextureMatrixEnable(enable);
 }
 
+void rsi_ProgramVertexAddLight(Context *rsc, RsLight light)
+{
+    rsc->mStateVertex.mPV->addLight(static_cast<const Light *>(light));
+}
 
 
 }
diff --git a/libs/rs/rsProgramVertex.h b/libs/rs/rsProgramVertex.h
index 1a92f01..ac15b70 100644
--- a/libs/rs/rsProgramVertex.h
+++ b/libs/rs/rsProgramVertex.h
@@ -28,6 +28,7 @@
 {
 public:
     const static uint32_t MAX_CONSTANTS = 2;
+    const static uint32_t MAX_LIGHTS = 8;
 
     ProgramVertex(Element *in, Element *out);
     virtual ~ProgramVertex();
@@ -38,12 +39,16 @@
     void setConstantType(uint32_t slot, const Type *);
     void bindAllocation(uint32_t slot, Allocation *);
     void setTextureMatrixEnable(bool e) {mTextureMatrixEnable = e;}
+    void addLight(const Light *);
 
 protected:
     bool mDirty;
+    uint32_t mLightCount;
 
     ObjectBaseRef<Allocation> mConstants[MAX_CONSTANTS];
     ObjectBaseRef<const Type> mConstantTypes[MAX_CONSTANTS];
+    ObjectBaseRef<const Light> mLights[MAX_LIGHTS];
+
 
     // Hacks to create a program for now
     bool mTextureMatrixEnable;
@@ -61,6 +66,8 @@
 
     ObjectBaseRef<ProgramVertex> mDefault;
     ObjectBaseRef<Allocation> mDefaultAlloc;
+    
+
 
     ProgramVertex *mPV;
 
diff --git a/libs/rs/rsScriptC.cpp b/libs/rs/rsScriptC.cpp
index e0928c3..842c836 100644
--- a/libs/rs/rsScriptC.cpp
+++ b/libs/rs/rsScriptC.cpp
@@ -103,14 +103,10 @@
 static ACCvoid* symbolLookup(ACCvoid* pContext, const ACCchar* name) 
 {
     const ScriptCState::SymbolTable_t *sym = ScriptCState::lookupSymbol(name);
-
     if (sym) {
         return sym->mPtr;
     }
-
     LOGE("ScriptC sym lookup failed for %s", name);
-
-    // Default to calling dlsym to allow any global symbol:
     return NULL;
 }
 
@@ -121,7 +117,7 @@
 
     rsc->appendNameDefines(&tmp);
     appendDecls(&tmp);
-    //tmp.append("#line 1\n");
+    tmp.append("#line 1\n");
 
     const char* scriptSource[] = {tmp.string(), mProgram.mScriptText};
     int scriptLength[] = {tmp.length(), mProgram.mScriptTextLength} ;
diff --git a/libs/rs/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp
index 59d8e5f..129b19f 100644
--- a/libs/rs/rsScriptC_Lib.cpp
+++ b/libs/rs/rsScriptC_Lib.cpp
@@ -249,6 +249,12 @@
 
 }
 
+static void SC_bindProgramVertex(RsProgramVertex pv)
+{
+    GET_TLS();
+    rsi_ContextBindProgramVertex(rsc, pv);
+
+}
 
 //////////////////////////////////////////////////////////////////////////////
 // Drawing
@@ -468,6 +474,8 @@
         "void", "(int)" },
     { "bindProgramFragmentStore", (void *)&SC_bindProgramFragmentStore,
         "void", "(int)" },
+    { "bindProgramVertex", (void *)&SC_bindProgramVertex,
+        "void", "(int)" },
     { "bindSampler", (void *)&SC_bindSampler,
         "void", "(int, int, int)" },
     { "bindTexture", (void *)&SC_bindTexture,
