diff --git a/java/tests/ImageProcessing/src/com/android/rs/image/WhiteBalance.java b/java/tests/ImageProcessing/src/com/android/rs/image/WhiteBalance.java
index a836067..e8078c2 100644
--- a/java/tests/ImageProcessing/src/com/android/rs/image/WhiteBalance.java
+++ b/java/tests/ImageProcessing/src/com/android/rs/image/WhiteBalance.java
@@ -25,13 +25,14 @@
 
     public void createTest(android.content.res.Resources res) {
         mScript = new ScriptC_wbalance(mRS);
-    }
 
-    public void runTest() {
         mScript.set_histogramSource(mInPixelsAllocation);
         mScript.set_histogramWidth(mInPixelsAllocation.getType().getX());
         mScript.set_histogramHeight(mInPixelsAllocation.getType().getY());
         mScript.invoke_prepareWhiteBalance();
+    }
+
+    public void runTest() {
         mScript.forEach_whiteBalanceKernel(mInPixelsAllocation, mOutPixelsAllocation);
     }
 
diff --git a/java/tests/ImageProcessing/src/com/android/rs/image/contrast.rs b/java/tests/ImageProcessing/src/com/android/rs/image/contrast.rs
index 5b67252..ef6fd63 100644
--- a/java/tests/ImageProcessing/src/com/android/rs/image/contrast.rs
+++ b/java/tests/ImageProcessing/src/com/android/rs/image/contrast.rs
@@ -27,12 +27,6 @@
 
 void contrast(const uchar4 *in, uchar4 *out)
 {
-#if 0
-    out->r = rsClamp((int)(brightM * in->r + brightC), 0, 255);
-    out->g = rsClamp((int)(brightM * in->g + brightC), 0, 255);
-    out->b = rsClamp((int)(brightM * in->b + brightC), 0, 255);
-#else
     float3 v = convert_float3(in->rgb) * brightM + brightC;
     out->rgb = convert_uchar3(clamp(v, 0.f, 255.f));
-#endif
 }
diff --git a/java/tests/ImageProcessing/src/com/android/rs/image/exposure.rs b/java/tests/ImageProcessing/src/com/android/rs/image/exposure.rs
index 9ad4f8d..88bb1d6 100644
--- a/java/tests/ImageProcessing/src/com/android/rs/image/exposure.rs
+++ b/java/tests/ImageProcessing/src/com/android/rs/image/exposure.rs
@@ -26,9 +26,8 @@
 uchar4 __attribute__((kernel)) exposure(uchar4 in)
 {
     uchar4 out = {0, 0, 0, 255};
-    out.r = rsClamp((int)(bright * in.r), 0, 255);
-    out.g = rsClamp((int)(bright * in.g), 0, 255);
-    out.b = rsClamp((int)(bright * in.b), 0, 255);
+    float3 t = convert_float3(in.rgb);
+    out.rgb = convert_uchar3(clamp(convert_int3(t * bright), 0, 255));
     return out;
 }
 
diff --git a/java/tests/ImageProcessing/src/com/android/rs/image/vibrance.rs b/java/tests/ImageProcessing/src/com/android/rs/image/vibrance.rs
index 300be16..b82e1d3 100644
--- a/java/tests/ImageProcessing/src/com/android/rs/image/vibrance.rs
+++ b/java/tests/ImageProcessing/src/com/android/rs/image/vibrance.rs
@@ -32,13 +32,13 @@
     int r = in->r;
     int g = in->g;
     int b = in->b;
-    float red = (r-max(g, b))/256.f;
+    float red = (r-max(g, b)) * (1.f / 256.f);
     float S = (float)(Vib/(1+native_exp(-red*3)))+1;
     float MS = 1.0f - S;
     float Rt = Rf * MS;
     float Gt = Gf * MS;
     float Bt = Bf * MS;
-    int t = (r + g) / 2;
+    int t = (r + g) >> 1;
     R = r;
     G = g;
     B = b;
diff --git a/java/tests/ImageProcessing/src/com/android/rs/image/wbalance.rs b/java/tests/ImageProcessing/src/com/android/rs/image/wbalance.rs
index e643196..fbdd869 100644
--- a/java/tests/ImageProcessing/src/com/android/rs/image/wbalance.rs
+++ b/java/tests/ImageProcessing/src/com/android/rs/image/wbalance.rs
@@ -23,9 +23,7 @@
 uint32_t histogramHeight;
 uint32_t histogramWidth;
 
-static float scaleR;
-static float scaleG;
-static float scaleB;
+static float3 scale;
 
 static uchar4 estimateWhite() {
 
@@ -115,31 +113,18 @@
     int maximum = max(estimation.r, max(estimation.g, estimation.b));
     float avg = (minimum + maximum) / 2.f;
 
-    scaleR =  avg/estimation.r;
-    scaleG =  avg/estimation.g;
-    scaleB =  avg/estimation.b;
-
-}
-
-static unsigned char contrastClamp(int c)
-{
-    int N = 255;
-    c &= ~(c >> 31);
-    c -= N;
-    c &= (c >> 31);
-    c += N;
-    return  (unsigned char) c;
+    scale.r =  avg / estimation.r;
+    scale.g =  avg / estimation.g;
+    scale.b =  avg / estimation.b;
 }
 
 uchar4 __attribute__((kernel)) whiteBalanceKernel(uchar4 in) {
-    float Rc =  in.r*scaleR;
-    float Gc =  in.g*scaleG;
-    float Bc =  in.b*scaleB;
+    float3 t = convert_float3(in.rgb);
+    t *= scale;
+    t = min(t, 255.f);
 
     uchar4 out;
-    out.r = contrastClamp(Rc);
-    out.g = contrastClamp(Gc);
-    out.b = contrastClamp(Bc);
+    out.rgb = convert_uchar3(t);
     out.a = 255;
     return out;
 }
diff --git a/scriptc/rs_cl.rsh b/scriptc/rs_cl.rsh
index 26d0727..6dc971c 100644
--- a/scriptc/rs_cl.rsh
+++ b/scriptc/rs_cl.rsh
@@ -827,9 +827,34 @@
  * @param low Lower bound, must be scalar or matching vector.
  * @param high High bound, must match type of low
  */
+
+#if !defined(RS_VERSION) || (RS_VERSION < 19)
 _RS_RUNTIME float __attribute__((const, overloadable)) clamp(float amount, float low, float high);
 FN_FUNC_FN_FN_FN(clamp)
 FN_FUNC_FN_F_F(clamp)
+#else
+#define _CLAMP(T)                                                                   \
+extern T __attribute__((overloadable)) clamp(T amount, T low, T high);              \
+extern T##2 __attribute__((overloadable)) clamp(T##2 amount, T##2 low, T##2 high);  \
+extern T##3 __attribute__((overloadable)) clamp(T##3 amount, T##3 low, T##3 high);  \
+extern T##4 __attribute__((overloadable)) clamp(T##4 amount, T##4 low, T##4 high);  \
+extern T##2 __attribute__((overloadable)) clamp(T##2 amount, T low, T high);        \
+extern T##3 __attribute__((overloadable)) clamp(T##3 amount, T low, T high);        \
+extern T##4 __attribute__((overloadable)) clamp(T##4 amount, T low, T high)
+
+_CLAMP(float);
+_CLAMP(double);
+_CLAMP(char);
+_CLAMP(uchar);
+_CLAMP(short);
+_CLAMP(ushort);
+_CLAMP(int);
+_CLAMP(uint);
+_CLAMP(long);
+_CLAMP(ulong);
+
+#undef _CLAMP
+#endif
 
 /**
  * Convert from radians to degrees.
