diff --git a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java
index 3cfb457..bff7273 100644
--- a/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java
+++ b/libs/rs/java/Fountain/src/com/android/fountain/FountainRS.java
@@ -22,7 +22,7 @@
 
 
 public class FountainRS {
-    public static final int PART_COUNT = 20000;
+    public static final int PART_COUNT = 50000;
 
     public FountainRS() {
     }
diff --git a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
index 606bfa8..24ef547 100644
--- a/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
+++ b/libs/rs/java/ImageProcessing/src/com/android/rs/image/ImageProcessingActivity.java
@@ -292,12 +292,11 @@
                 mRS.finish();
             } else {
                 javaFilter();
+                mDisplayView.invalidate();
             }
 
             t = java.lang.System.currentTimeMillis() - t;
             android.util.Log.v("Img", "Renderscript frame time core ms " + t);
-
-            mDisplayView.invalidate();
         }
     }
 
diff --git a/libs/rs/rsScriptC_Lib.cpp b/libs/rs/rsScriptC_Lib.cpp
index ccdde00..dc30afc 100644
--- a/libs/rs/rsScriptC_Lib.cpp
+++ b/libs/rs/rsScriptC_Lib.cpp
@@ -184,17 +184,9 @@
     return nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC));
 }
 
-static int64_t SC_startTimeMillis()
+static int64_t SC_uptimeNanos()
 {
-    GET_TLS();
-    return sc->mEnviroment.mStartTimeMillis;
-}
-
-static int64_t SC_elapsedTimeMillis()
-{
-    GET_TLS();
-    return nanoseconds_to_milliseconds(systemTime(SYSTEM_TIME_MONOTONIC))
-            - sc->mEnviroment.mStartTimeMillis;
+    return systemTime(SYSTEM_TIME_MONOTONIC);
 }
 
 static float SC_getDt()
@@ -400,7 +392,6 @@
     { "_Z14rsGetElementAt13rs_allocationjj", (void *)&SC_getElementAtXY },
     { "_Z14rsGetElementAt13rs_allocationjjj", (void *)&SC_getElementAtXYZ },
 
-
     // Debug
     { "_Z7rsDebugPKcf", (void *)&SC_debugF },
     { "_Z7rsDebugPKcDv2_f", (void *)&SC_debugFv2 },
@@ -409,8 +400,6 @@
     { "_Z7rsDebugPKci", (void *)&SC_debugI32 },
     { "_Z7rsDebugPKcj", (void *)&SC_debugU32 },
     { "_Z7rsDebugPKcPKv", (void *)&SC_debugP },
-    //extern void __attribute__((overloadable))rsDebug(const char *, const void *);
-
 
     // RS Math
     { "_Z6rsRandi", (void *)&SC_randi },
@@ -420,27 +409,15 @@
     { "_Z6rsFracf", (void *)&SC_frac },
 
     // time
-    { "_Z8rsSecond", (void *)&SC_second },
-    { "_Z8rsMinute", (void *)&SC_minute },
-    { "_Z6rsHour", (void *)&SC_hour },
-    { "_Z5rsDay", (void *)&SC_day },
-    { "_Z7rsMonth", (void *)&SC_month },
-    { "_Z6rsYear", (void *)&SC_year },
-    { "_Z14rsUptimeMillis", (void*)&SC_uptimeMillis },
-    { "_Z17rsStartTimeMillis", (void*)&SC_startTimeMillis },
-    { "_Z19rsElapsedTimeMillis", (void*)&SC_elapsedTimeMillis },
-    { "_Z7rsGetDt", (void*)&SC_getDt },
-
-    { "rsSecond", (void *)&SC_second },
-    { "rsMinute", (void *)&SC_minute },
-    { "rsHour", (void *)&SC_hour },
-    { "rsDay", (void *)&SC_day },
-    { "rsMonth", (void *)&SC_month },
-    { "rsYear", (void *)&SC_year },
-    { "rsUptimeMillis", (void*)&SC_uptimeMillis },
-    { "rsStartTimeMillis", (void*)&SC_startTimeMillis },
-    { "rsElapsedTimeMillis", (void*)&SC_elapsedTimeMillis },
-    { "rsGetDt", (void*)&SC_getDt },
+    { "_Z8rsSecondv", (void *)&SC_second },
+    { "_Z8rsMinutev", (void *)&SC_minute },
+    { "_Z6rsHourv", (void *)&SC_hour },
+    { "_Z5rsDayv", (void *)&SC_day },
+    { "_Z7rsMonthv", (void *)&SC_month },
+    { "_Z6rsYearv", (void *)&SC_year },
+    { "_Z14rsUptimeMillisv", (void*)&SC_uptimeMillis },
+    { "_Z13rsUptimeNanosv", (void*)&SC_uptimeNanos },
+    { "_Z7rsGetDtv", (void*)&SC_getDt },
 
     { "_Z14rsSendToClienti", (void *)&SC_toClient },
     { "_Z14rsSendToClientiPKvj", (void *)&SC_toClient2 },
diff --git a/libs/rs/rsScriptC_LibGL.cpp b/libs/rs/rsScriptC_LibGL.cpp
index bed0fce..06638ac 100644
--- a/libs/rs/rsScriptC_LibGL.cpp
+++ b/libs/rs/rsScriptC_LibGL.cpp
@@ -354,44 +354,43 @@
 //                 ::= d  # double
 
 static ScriptCState::SymbolTable_t gSyms[] = {
-    { "rsgBindProgramFragment", (void *)&SC_bindProgramFragment },
-    { "rsgBindProgramStore", (void *)&SC_bindProgramStore },
-    { "rsgBindProgramVertex", (void *)&SC_bindProgramVertex },
-    { "rsgBindProgramRaster", (void *)&SC_bindProgramRaster },
-    { "rsgBindSampler", (void *)&SC_bindSampler },
-    { "rsgBindTexture", (void *)&SC_bindTexture },
+    { "_Z22rsgBindProgramFragment19rs_program_fragment", (void *)&SC_bindProgramFragment },
+    { "_Z19rsgBindProgramStore16rs_program_store", (void *)&SC_bindProgramStore },
+    { "_Z20rsgBindProgramVertex17rs_program_vertex", (void *)&SC_bindProgramVertex },
+    { "_Z20rsgBindProgramRaster17rs_program_raster", (void *)&SC_bindProgramRaster },
+    { "_Z14rsgBindSampler19rs_program_fragmentj10rs_sampler", (void *)&SC_bindSampler },
+    { "_Z14rsgBindTexture19rs_program_fragmentj13rs_allocation", (void *)&SC_bindTexture },
 
-    { "rsgProgramVertexLoadProjectionMatrix", (void *)&SC_vpLoadProjectionMatrix },
-    { "rsgProgramVertexLoadModelMatrix", (void *)&SC_vpLoadModelMatrix },
-    { "rsgProgramVertexLoadTextureMatrix", (void *)&SC_vpLoadTextureMatrix },
+    { "_Z36rsgProgramVertexLoadProjectionMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadProjectionMatrix },
+    { "_Z31rsgProgramVertexLoadModelMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadModelMatrix },
+    { "_Z33rsgProgramVertexLoadTextureMatrixPK12rs_matrix4x4", (void *)&SC_vpLoadTextureMatrix },
 
-    { "rsgGetWidth", (void *)&SC_getWidth },
-    { "rsgGetHeight", (void *)&SC_getHeight },
+    { "_Z11rsgGetWidthv", (void *)&SC_getWidth },
+    { "_Z12rsgGetHeightv", (void *)&SC_getHeight },
 
-    { "_Z18rsgUploadToTexture13rs_allocationi", (void *)&SC_uploadToTexture2 },
+    { "_Z18rsgUploadToTexture13rs_allocationj", (void *)&SC_uploadToTexture2 },
     { "_Z18rsgUploadToTexture13rs_allocation", (void *)&SC_uploadToTexture },
-    { "rsgUploadToBufferObject", (void *)&SC_uploadToBufferObject },
+    { "_Z23rsgUploadToBufferObject13rs_allocation", (void *)&SC_uploadToBufferObject },
 
-    { "rsgDrawRect", (void *)&SC_drawRect },
-    { "rsgDrawQuad", (void *)&SC_drawQuad },
-    { "rsgDrawQuadTexCoords", (void *)&SC_drawQuadTexCoords },
-    //{ "drawSprite", (void *)&SC_drawSprite },
-    { "rsgDrawSpriteScreenspace", (void *)&SC_drawSpriteScreenspace },
+    { "_Z11rsgDrawRectfffff", (void *)&SC_drawRect },
+    { "_Z11rsgDrawQuadffffffffffff", (void *)&SC_drawQuad },
+    { "_Z20rsgDrawQuadTexCoordsffffffffffffffffffff", (void *)&SC_drawQuadTexCoords },
+    { "_Z24rsgDrawSpriteScreenspacefffff", (void *)&SC_drawSpriteScreenspace },
 
     { "_Z11rsgDrawMesh7rs_mesh", (void *)&SC_drawMesh },
-    { "_Z11rsgDrawMesh7rs_meshi", (void *)&SC_drawMeshPrimitive },
-    { "_Z11rsgDrawMesh7rs_meshiii", (void *)&SC_drawMeshPrimitiveRange },
+    { "_Z11rsgDrawMesh7rs_meshj", (void *)&SC_drawMeshPrimitive },
+    { "_Z11rsgDrawMesh7rs_meshjjj", (void *)&SC_drawMeshPrimitiveRange },
 
-    { "rsgClearColor", (void *)&SC_ClearColor },
-    { "rsgClearDepth", (void *)&SC_ClearDepth },
+    { "_Z13rsgClearColorffff", (void *)&SC_ClearColor },
+    { "_Z13rsgClearDepthf", (void *)&SC_ClearDepth },
 
     { "_Z11rsgDrawTextPKcii", (void *)&SC_DrawText },
     { "_Z11rsgDrawText13rs_allocationii", (void *)&SC_DrawTextAlloc },
 
-    { "rsgBindFont", (void *)&SC_BindFont },
+    { "_Z11rsgBindFont7rs_font", (void *)&SC_BindFont },
 
     // misc
-    { "color", (void *)&SC_color },
+    { "_Z5colorffff", (void *)&SC_color },
 
     { NULL, NULL }
 };
diff --git a/libs/rs/scriptc/rs_graphics.rsh b/libs/rs/scriptc/rs_graphics.rsh
index d6ef6e9..8f89cba 100644
--- a/libs/rs/scriptc/rs_graphics.rsh
+++ b/libs/rs/scriptc/rs_graphics.rsh
@@ -4,47 +4,78 @@
 #include "rs_math.rsh"
 
 
-// context
-extern void rsgBindProgramFragment(rs_program_fragment);
-extern void rsgBindProgramStore(rs_program_store);
-extern void rsgBindProgramVertex(rs_program_vertex);
-extern void rsgBindProgramRaster(rs_program_raster);
+// Bind a ProgramFragment to the RS context.
+extern void __attribute__((overloadable))
+    rsgBindProgramFragment(rs_program_fragment);
+extern void __attribute__((overloadable))
+    rsgBindProgramStore(rs_program_store);
+extern void __attribute__((overloadable))
+    rsgBindProgramVertex(rs_program_vertex);
+extern void __attribute__((overloadable))
+    rsgBindProgramRaster(rs_program_raster);
 
-extern void rsgBindSampler(rs_program_fragment, int slot, rs_sampler);
-extern void rsgBindTexture(rs_program_fragment, int slot, rs_allocation);
+extern void __attribute__((overloadable))
+    rsgBindSampler(rs_program_fragment, uint slot, rs_sampler);
+extern void __attribute__((overloadable))
+    rsgBindTexture(rs_program_fragment, uint slot, rs_allocation);
 
-extern void rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *);
-extern void rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *);
-extern void rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *);
+extern void __attribute__((overloadable))
+    rsgProgramVertexLoadProjectionMatrix(const rs_matrix4x4 *);
+extern void __attribute__((overloadable))
+    rsgProgramVertexLoadModelMatrix(const rs_matrix4x4 *);
+extern void __attribute__((overloadable))
+    rsgProgramVertexLoadTextureMatrix(const rs_matrix4x4 *);
 
-extern int rsgGetWidth();
-extern int rsgGetHeight();
+extern uint __attribute__((overloadable))
+    rsgGetWidth(void);
+extern uint __attribute__((overloadable))
+    rsgGetHeight(void);
 
-extern void __attribute__((overloadable)) rsgUploadToTexture(rs_allocation);
-extern void __attribute__((overloadable)) rsgUploadToTexture(rs_allocation, int mipLevel);
-extern void rsgUploadToBufferObject(rs_allocation);
-//extern void rsgUploadMesh(rs_mesh);
+extern void __attribute__((overloadable))
+    rsgUploadToTexture(rs_allocation);
+extern void __attribute__((overloadable))
+    rsgUploadToTexture(rs_allocation, uint mipLevel);
+extern void __attribute__((overloadable))
+    rsgUploadToBufferObject(rs_allocation);
 
-extern void rsgDrawRect(float x1, float y1, float x2, float y2, float z);
-extern void rsgDrawQuad(float x1, float y1, float z1, float x2, float y2, float z2, float x3, float y3, float z3, float x4, float y4, float z4);
-extern void rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1, float x2, float y2, float z2, float u2, float v2, float x3, float y3, float z3, float u3, float v3, float x4, float y4, float z4, float u4, float v4);
-//extern void rsgDrawSprite(float x, float y, float z, float w, float h);
-extern void rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
+extern void __attribute__((overloadable))
+    rsgDrawRect(float x1, float y1, float x2, float y2, float z);
+extern void __attribute__((overloadable))
+    rsgDrawQuad(float x1, float y1, float z1,
+                float x2, float y2, float z2,
+                float x3, float y3, float z3,
+                float x4, float y4, float z4);
+extern void __attribute__((overloadable))
+    rsgDrawQuadTexCoords(float x1, float y1, float z1, float u1, float v1,
+                         float x2, float y2, float z2, float u2, float v2,
+                         float x3, float y3, float z3, float u3, float v3,
+                         float x4, float y4, float z4, float u4, float v4);
+extern void __attribute__((overloadable))
+    rsgDrawSpriteScreenspace(float x, float y, float z, float w, float h);
 
-extern void __attribute__((overloadable)) rsgDrawMesh(rs_mesh ism);
-extern void __attribute__((overloadable)) rsgDrawMesh(rs_mesh ism, int primitiveIndex);
-extern void __attribute__((overloadable)) rsgDrawMesh(rs_mesh ism, int primitiveIndex, int start, int len);
+extern void __attribute__((overloadable))
+    rsgDrawMesh(rs_mesh ism);
+extern void __attribute__((overloadable))
+    rsgDrawMesh(rs_mesh ism, uint primitiveIndex);
+extern void __attribute__((overloadable))
+    rsgDrawMesh(rs_mesh ism, uint primitiveIndex, uint start, uint len);
 
-extern void rsgClearColor(float, float, float, float);
-extern void rsgClearDepth(float);
+extern void __attribute__((overloadable))
+    rsgClearColor(float, float, float, float);
+extern void __attribute__((overloadable))
+    rsgClearDepth(float);
 
-extern void __attribute__((overloadable)) rsgDrawText(const char *, int x, int y);
-extern void __attribute__((overloadable)) rsgDrawText(rs_allocation, int x, int y);
-extern void rsgBindFont(rs_font);
+extern void __attribute__((overloadable))
+    rsgDrawText(const char *, int x, int y);
+extern void __attribute__((overloadable))
+    rsgDrawText(rs_allocation, int x, int y);
+extern void __attribute__((overloadable))
+    rsgBindFont(rs_font);
 
 ///////////////////////////////////////////////////////
 // misc
-extern void color(float, float, float, float);
+extern void __attribute__((overloadable))
+    color(float, float, float, float);
 
 #endif
 
diff --git a/libs/rs/scriptc/rs_math.rsh b/libs/rs/scriptc/rs_math.rsh
index 309a952..66171d8 100644
--- a/libs/rs/scriptc/rs_math.rsh
+++ b/libs/rs/scriptc/rs_math.rsh
@@ -4,11 +4,14 @@
 #include "rs_cl.rsh"
 #include "rs_core.rsh"
 
-
-
 // Allocations
+
+// Return the rs_allocation associated with a bound data
+// pointer.
 extern rs_allocation __attribute__((overloadable))
     rsGetAllocation(const void *);
+
+// Return the dimensions associated with an allocation.
 extern uint32_t __attribute__((overloadable))
     rsAllocationGetDimX(rs_allocation);
 extern uint32_t __attribute__((overloadable))
@@ -20,6 +23,7 @@
 extern uint32_t __attribute__((overloadable))
     rsAllocationGetDimFaces(rs_allocation);
 
+// Extract a single element from an allocation.
 extern const void * __attribute__((overloadable))
     rsGetElementAt(rs_allocation, uint32_t x);
 extern const void * __attribute__((overloadable))
@@ -28,41 +32,79 @@
     rsGetElementAt(rs_allocation, uint32_t x, uint32_t y, uint32_t z);
 
 
-// Debugging
-extern void __attribute__((overloadable))rsDebug(const char *, float);
-extern void __attribute__((overloadable))rsDebug(const char *, float2);
-extern void __attribute__((overloadable))rsDebug(const char *, float3);
-extern void __attribute__((overloadable))rsDebug(const char *, float4);
-extern void __attribute__((overloadable))rsDebug(const char *, int);
-extern void __attribute__((overloadable))rsDebug(const char *, uint);
-extern void __attribute__((overloadable))rsDebug(const char *, const void *);
+// Debugging, print to the LOG a description string and a value.
+extern void __attribute__((overloadable))
+    rsDebug(const char *, float);
+extern void __attribute__((overloadable))
+    rsDebug(const char *, float2);
+extern void __attribute__((overloadable))
+    rsDebug(const char *, float3);
+extern void __attribute__((overloadable))
+    rsDebug(const char *, float4);
+extern void __attribute__((overloadable))
+    rsDebug(const char *, int);
+extern void __attribute__((overloadable))
+    rsDebug(const char *, uint);
+extern void __attribute__((overloadable))
+    rsDebug(const char *, const void *);
 #define RS_DEBUG(a) rsDebug(#a, a)
 #define RS_DEBUG_MARKER rsDebug(__FILE__, __LINE__)
 
-// RS Math
-extern int __attribute__((overloadable))rsRand(int);
-extern int __attribute__((overloadable))rsRand(int, int);
-extern float __attribute__((overloadable))rsRand(float);
-extern float __attribute__((overloadable))rsRand(float, float);
+// Return a random value between 0 (or min_value) and max_malue.
+extern int __attribute__((overloadable))
+    rsRand(int max_value);
+extern int __attribute__((overloadable))
+    rsRand(int min_value, int max_value);
+extern float __attribute__((overloadable))
+    rsRand(float max_value);
+extern float __attribute__((overloadable))
+    rsRand(float min_value, float max_value);
 
-extern float __attribute__((overloadable)) rsFrac(float);
+// return the fractional part of a float
+// min(v - ((int)floor(v)), 0x1.fffffep-1f);
+extern float __attribute__((overloadable))
+    rsFrac(float);
 
 // time
-extern int32_t /*__attribute__((overloadable))*/rsSecond();
-extern int32_t /*__attribute__((overloadable))*/rsMinute();
-extern int32_t /*__attribute__((overloadable))*/rsHour();
-extern int32_t /*__attribute__((overloadable))*/rsDay();
-extern int32_t /*__attribute__((overloadable))*/rsMonth();
-extern int32_t /*__attribute__((overloadable))*/rsYear();
-extern int64_t /*__attribute__((overloadable))*/rsUptimeMillis();
-extern int64_t /*__attribute__((overloadable))*/rsStartTimeMillis();
-extern int64_t /*__attribute__((overloadable))*/rsElapsedTimeMillis();
-extern float /*__attribute__((overloadable))*/rsGetDt();
+extern int32_t __attribute__((overloadable))
+    rsSecond(void);
+extern int32_t __attribute__((overloadable))
+    rsMinute(void);
+extern int32_t __attribute__((overloadable))
+    rsHour(void);
+extern int32_t __attribute__((overloadable))
+    rsDay(void);
+extern int32_t __attribute__((overloadable))
+    rsMonth(void);
+extern int32_t __attribute__((overloadable))
+    rsYear(void);
 
-extern bool __attribute__((overloadable))rsSendToClient(int cmdID);
-extern bool __attribute__((overloadable))rsSendToClient(int cmdID, const void *data, uint len);
-extern void __attribute__((overloadable))rsSendToClientBlocking(int cmdID);
-extern void __attribute__((overloadable))rsSendToClientBlocking(int cmdID, const void *data, uint len);
+// Return the current system clock in milliseconds
+extern int64_t __attribute__((overloadable))
+    rsUptimeMillis(void);
+
+// Return the current system clock in nanoseconds
+extern int64_t __attribute__((overloadable))
+    rsUptimeNanos(void);
+
+// Return the time in seconds since function was last called in this script.
+extern float __attribute__((overloadable))
+    rsGetDt(void);
+
+// Send a message back to the client.  Will not block and returns true
+// if the message was sendable and false if the fifo was full.
+// A message ID is required.  Data payload is optional.
+extern bool __attribute__((overloadable))
+    rsSendToClient(int cmdID);
+extern bool __attribute__((overloadable))
+    rsSendToClient(int cmdID, const void *data, uint len);
+
+// Send a message back to the client, blocking until the message is queued.
+// A message ID is required.  Data payload is optional.
+extern void __attribute__((overloadable))
+    rsSendToClientBlocking(int cmdID);
+extern void __attribute__((overloadable))
+    rsSendToClientBlocking(int cmdID, const void *data, uint len);
 
 // Script to Script
 typedef struct rs_script_call {
@@ -77,15 +119,13 @@
 
 } rs_script_call_t;
 
-extern void __attribute__((overloadable))rsForEach(rs_script script,
-                                                   rs_allocation input,
-                                                   rs_allocation output,
-                                                   const void * usrData);
+extern void __attribute__((overloadable))
+    rsForEach(rs_script script, rs_allocation input,
+              rs_allocation output, const void * usrData);
 
-extern void __attribute__((overloadable))rsForEach(rs_script script,
-                                                   rs_allocation input,
-                                                   rs_allocation output,
-                                                   const void * usrData,
-                                                   const rs_script_call_t *);
+extern void __attribute__((overloadable))
+    rsForEach(rs_script script, rs_allocation input,
+              rs_allocation output, const void * usrData,
+              const rs_script_call_t *);
 
 #endif
