diff --git a/Android.mk b/Android.mk
index 6e4917d..eaed350 100644
--- a/Android.mk
+++ b/Android.mk
@@ -117,6 +117,7 @@
 	rsAnimation.cpp \
 	rsComponent.cpp \
 	rsContext.cpp \
+	rsCppUtils.cpp \
 	rsDevice.cpp \
 	rsElement.cpp \
 	rsFBOCache.cpp \
diff --git a/rsCppUtils.cpp b/rsCppUtils.cpp
new file mode 100644
index 0000000..899e7c9
--- /dev/null
+++ b/rsCppUtils.cpp
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2013 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include "rsCppUtils.h"
+
+namespace android {
+namespace renderscript {
+
+const char * rsuCopyString(const char *name) {
+    return rsuCopyString(name, strlen(name));
+}
+
+const char * rsuCopyString(const char *name, size_t len) {
+    char *n = new char[len+1];
+    memcpy(n, name, len);
+    n[len] = 0;
+    return n;
+}
+
+
+}
+}
diff --git a/rsCppUtils.h b/rsCppUtils.h
index f16325f..342baf5 100644
--- a/rsCppUtils.h
+++ b/rsCppUtils.h
@@ -124,6 +124,9 @@
 namespace android {
 namespace renderscript {
 
+const char * rsuCopyString(const char *name);
+const char * rsuCopyString(const char *name, size_t len);
+
 #if 1
 #define rsAssert(v) do {if(!(v)) ALOGE("rsAssert failed: %s, in %s at %i", #v, __FILE__, __LINE__);} while (0)
 #else
diff --git a/rsElement.cpp b/rsElement.cpp
index 712f17d..559d567 100644
--- a/rsElement.cpp
+++ b/rsElement.cpp
@@ -262,10 +262,21 @@
         if (ee->getFieldCount() == count) {
             bool match = true;
             for (uint32_t i=0; i < count; i++) {
+                size_t len;
+                uint32_t asize = 1;
+                if (lengths) {
+                    len = lengths[i];
+                } else {
+                    len = strlen(nin[i]);
+                }
+                if (asin) {
+                    asize = asin[i];
+                }
+
                 if ((ee->mFields[i].e.get() != ein[i]) ||
-                    (ee->mFields[i].name.length() != lengths[i]) ||
+                    (ee->mFields[i].name.length() != len) ||
                     (ee->mFields[i].name != nin[i]) ||
-                    (ee->mFields[i].arraySize != asin[i])) {
+                    (ee->mFields[i].arraySize != asize)) {
                     match = false;
                     break;
                 }
@@ -284,9 +295,20 @@
     e->mFields = new ElementField_t [count];
     e->mFieldCount = count;
     for (size_t ct=0; ct < count; ct++) {
+        size_t len;
+        uint32_t asize = 1;
+        if (lengths) {
+            len = lengths[ct];
+        } else {
+            len = strlen(nin[ct]);
+        }
+        if (asin) {
+            asize = asin[ct];
+        }
+
         e->mFields[ct].e.set(ein[ct]);
-        e->mFields[ct].name.setTo(nin[ct], lengths[ct]);
-        e->mFields[ct].arraySize = asin[ct];
+        e->mFields[ct].name.setTo(nin[ct], len);
+        e->mFields[ct].arraySize = asize;
     }
     e->compute();
 
@@ -341,33 +363,6 @@
     }
 }
 
-Element::Builder::Builder() {
-    const uint32_t initialCapacity = 32;
-    mBuilderElementRefs.setCapacity(initialCapacity);
-    mBuilderElements.setCapacity(initialCapacity);
-    mBuilderNameStrings.setCapacity(initialCapacity);
-    mBuilderNameLengths.setCapacity(initialCapacity);
-    mBuilderArrays.setCapacity(initialCapacity);
-}
-
-void Element::Builder::add(const Element *e, const char *nameStr, uint32_t arraySize) {
-    mBuilderElementRefs.push(ObjectBaseRef<const Element>(e));
-    mBuilderElements.push(e);
-    mBuilderNameStrings.push(nameStr);
-    mBuilderNameLengths.push(strlen(nameStr));
-    mBuilderArrays.push(arraySize);
-
-}
-
-ObjectBaseRef<const Element> Element::Builder::create(Context *rsc) {
-    return Element::createRef(rsc, mBuilderElements.size(),
-                              &(mBuilderElements.editArray()[0]),
-                              &(mBuilderNameStrings.editArray()[0]),
-                              mBuilderNameLengths.editArray(),
-                              mBuilderArrays.editArray());
-}
-
-
 ElementState::ElementState() {
 }
 
diff --git a/rsElement.h b/rsElement.h
index 1eae46d..32cfda1 100644
--- a/rsElement.h
+++ b/rsElement.h
@@ -57,18 +57,6 @@
     };
     Hal mHal;
 
-    class Builder {
-    public:
-        Builder();
-        void add(const Element *e, const char *nameStr, uint32_t arraySize);
-        ObjectBaseRef<const Element> create(Context *rsc);
-    private:
-        Vector<ObjectBaseRef<const Element> > mBuilderElementRefs;
-        Vector<const Element *> mBuilderElements;
-        Vector<const char*> mBuilderNameStrings;
-        Vector<size_t> mBuilderNameLengths;
-        Vector<uint32_t> mBuilderArrays;
-    };
     uint32_t getGLType() const;
     uint32_t getGLFormat() const;
 
@@ -133,8 +121,8 @@
     static const Element* create(Context *rsc, size_t count,
                                  const Element **ein,
                                  const char **nin,
-                                 const size_t * lengths,
-                                 const uint32_t *asin) {
+                                 const size_t * lengths = NULL,
+                                 const uint32_t *asin = NULL) {
         ObjectBaseRef<const Element> elem = createRef(rsc, count, ein, nin, lengths, asin);
         elem->incUserRef();
         return elem.get();
diff --git a/rsFont.cpp b/rsFont.cpp
index 2a2c3b4..a483359 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -508,10 +508,10 @@
                                                                 RS_KIND_USER, false, 4);
     ObjectBaseRef<const Element> gammaElem = Element::createRef(mRSC, RS_TYPE_FLOAT_32,
                                                                 RS_KIND_USER, false, 1);
-    Element::Builder builder;
-    builder.add(colorElem.get(), "Color", 1);
-    builder.add(gammaElem.get(), "Gamma", 1);
-    ObjectBaseRef<const Element> constInput = builder.create(mRSC);
+
+    const char *ebn1[] = { "Color", "Gamma" };
+    const Element *ebe1[] = {colorElem.get(), gammaElem.get()};
+    ObjectBaseRef<const Element> constInput = Element::create(mRSC, 2, ebe1, ebn1);
 
     ObjectBaseRef<Type> inputType = Type::getTypeRef(mRSC, constInput.get(), 1, 0, 0, false, false, 0);
 
@@ -607,10 +607,9 @@
     ObjectBaseRef<const Element> posElem = Element::createRef(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 3);
     ObjectBaseRef<const Element> texElem = Element::createRef(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 2);
 
-    Element::Builder builder;
-    builder.add(posElem.get(), "position", 1);
-    builder.add(texElem.get(), "texture0", 1);
-    ObjectBaseRef<const Element> vertexDataElem = builder.create(mRSC);
+    const char *ebn1[] = { "position", "texture0" };
+    const Element *ebe1[] = {posElem.get(), texElem.get()};
+    ObjectBaseRef<const Element> vertexDataElem = Element::create(mRSC, 2, ebe1, ebn1);
 
     ObjectBaseRef<Type> vertexDataType = Type::getTypeRef(mRSC, vertexDataElem.get(),
                                                           mMaxNumberOfQuads * 4,
diff --git a/rsProgram.cpp b/rsProgram.cpp
index 7114f29..806d1de 100644
--- a/rsProgram.cpp
+++ b/rsProgram.cpp
@@ -77,7 +77,9 @@
         shaderText += internalTokenLen;
         shaderLength -= internalTokenLen;
     }
-    mUserShader.setTo(shaderText, shaderLength);
+
+    mUserShader = rsuCopyString(shaderText, shaderLength);
+    mUserShaderLen = shaderLength;
 }
 
 Program::~Program() {
@@ -98,6 +100,12 @@
     mHal.state.inputElementsCount = 0;
     mHal.state.constantsCount = 0;
     mHal.state.texturesCount = 0;
+
+    if (mUserShader != NULL) {
+        delete[] mUserShader;
+        mUserShader = NULL;
+    }
+    mUserShaderLen = 0;
 }
 
 bool Program::freeChildren() {
@@ -134,6 +142,9 @@
     mConstants = NULL;
 
     mIsInternal = false;
+
+    mUserShader = NULL;
+    mUserShaderLen = 0;
 }
 
 void Program::bindAllocation(Context *rsc, Allocation *alloc, uint32_t slot) {
diff --git a/rsProgram.h b/rsProgram.h
index d032930..be5631f 100644
--- a/rsProgram.h
+++ b/rsProgram.h
@@ -78,7 +78,8 @@
     ObjectBaseRef<Element> *mInputElements;
 
     bool mIsInternal;
-    String8 mUserShader;
+    const char *mUserShader;
+    size_t mUserShaderLen;
     void initMemberVars();
 };
 
diff --git a/rsProgramFragment.cpp b/rsProgramFragment.cpp
index fb00cd1..877b8bd 100644
--- a/rsProgramFragment.cpp
+++ b/rsProgramFragment.cpp
@@ -30,7 +30,7 @@
     mConstantColor[2] = 1.f;
     mConstantColor[3] = 1.f;
 
-    mRSC->mHal.funcs.fragment.init(mRSC, this, mUserShader.string(), mUserShader.length(),
+    mRSC->mHal.funcs.fragment.init(mRSC, this, mUserShader, mUserShaderLen,
                                    textureNames, textureNamesCount, textureNamesLength);
 }
 
@@ -103,9 +103,10 @@
             "}\n";
 
     ObjectBaseRef<const Element> colorElem = Element::createRef(rsc, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 4);
-    Element::Builder builder;
-    builder.add(colorElem.get(), "Color", 1);
-    ObjectBaseRef<const Element> constInput = builder.create(rsc);
+
+    const char *enames[] = { "Color" };
+    const Element *eins[] = {colorElem.get()};
+    ObjectBaseRef<const Element> constInput = Element::create(rsc, 1, eins, enames);
 
     ObjectBaseRef<Type> inputType = Type::getTypeRef(rsc, constInput.get(), 1, 0, 0, false, false, 0);
 
diff --git a/rsProgramVertex.cpp b/rsProgramVertex.cpp
index 30000b0..549dcae 100644
--- a/rsProgramVertex.cpp
+++ b/rsProgramVertex.cpp
@@ -27,7 +27,7 @@
 
                              const uint32_t * params, size_t paramLength)
     : Program(rsc, shaderText, shaderLength, params, paramLength) {
-    mRSC->mHal.funcs.vertex.init(mRSC, this, mUserShader.string(), mUserShader.length(),
+    mRSC->mHal.funcs.vertex.init(mRSC, this, mUserShader, mUserShaderLen,
                                  textureNames, textureNamesCount, textureNamesLength);
 }
 
@@ -174,19 +174,14 @@
     ObjectBaseRef<const Element> f4Elem = Element::createRef(rsc, RS_TYPE_FLOAT_32,
                                                              RS_KIND_USER, false, 4);
 
-    Element::Builder constBuilder;
-    constBuilder.add(matrixElem.get(), "MV", 1);
-    constBuilder.add(matrixElem.get(), "P", 1);
-    constBuilder.add(matrixElem.get(), "TexMatrix", 1);
-    constBuilder.add(matrixElem.get(), "MVP", 1);
-    ObjectBaseRef<const Element> constInput = constBuilder.create(rsc);
+    const char *ebn1[] = { "MV", "P", "TexMatrix", "MVP" };
+    const Element *ebe1[] = {matrixElem.get(), matrixElem.get(),
+            matrixElem.get(), matrixElem.get()};
+    ObjectBaseRef<const Element> constInput = Element::create(rsc, 4, ebe1, ebn1);
 
-    Element::Builder inputBuilder;
-    inputBuilder.add(f4Elem.get(), "position", 1);
-    inputBuilder.add(f4Elem.get(), "color", 1);
-    inputBuilder.add(f3Elem.get(), "normal", 1);
-    inputBuilder.add(f2Elem.get(), "texture0", 1);
-    ObjectBaseRef<const Element> attrElem = inputBuilder.create(rsc);
+    const char *ebn2[] = { "position", "color", "normal", "texture0" };
+    const Element *ebe2[] = {f4Elem.get(), f4Elem.get(), f3Elem.get(), f2Elem.get()};
+    ObjectBaseRef<const Element> attrElem = Element::create(rsc, 4, ebe2, ebn2);
 
     ObjectBaseRef<Type> inputType = Type::getTypeRef(rsc, constInput.get(), 1, 0, 0, false, false, 0);
 
