diff --git a/rsAllocation.cpp b/rsAllocation.cpp
index 775fdf7..6748bb4 100644
--- a/rsAllocation.cpp
+++ b/rsAllocation.cpp
@@ -824,34 +824,6 @@
     return texAlloc;
 }
 
-RsAllocation rsi_AllocationCreateFromBitmapBoxed(Context *rsc, uint32_t w, uint32_t h, RsElement _dst, RsElement _src, bool genMips, const void *data)
-{
-    const Element *srcE = static_cast<const Element *>(_src);
-    const Element *dstE = static_cast<const Element *>(_dst);
-    uint32_t w2 = rsHigherPow2(w);
-    uint32_t h2 = rsHigherPow2(h);
-
-    if ((w2 == w) && (h2 == h)) {
-        return rsi_AllocationCreateFromBitmap(rsc, w, h, _dst, _src, genMips, data);
-    }
-
-    uint32_t bpp = srcE->getSizeBytes();
-    size_t size = w2 * h2 * bpp;
-    uint8_t *tmp = static_cast<uint8_t *>(malloc(size));
-    memset(tmp, 0, size);
-
-    const uint8_t * src = static_cast<const uint8_t *>(data);
-    for (uint32_t y = 0; y < h; y++) {
-        uint8_t * ydst = &tmp[(y + ((h2 - h) >> 1)) * w2 * bpp];
-        memcpy(&ydst[((w2 - w) >> 1) * bpp], src, w * bpp);
-        src += w * bpp;
-    }
-
-    RsAllocation ret = rsi_AllocationCreateFromBitmap(rsc, w2, h2, _dst, _src, genMips, tmp);
-    free(tmp);
-    return ret;
-}
-
 void rsi_AllocationData(Context *rsc, RsAllocation va, const void *data, uint32_t sizeBytes)
 {
     Allocation *a = static_cast<Allocation *>(va);
diff --git a/rsContext.cpp b/rsContext.cpp
index 4dd074e..944cd86 100644
--- a/rsContext.cpp
+++ b/rsContext.cpp
@@ -348,7 +348,7 @@
 
 
     if (props.mLogTimes) {
-        LOGV("RS: Frame (%i),   Script %2.1f (%i),  Clear & Swap %2.1f (%i),  Idle %2.1f (%lli),  Internal %2.1f (%lli), Avg fps: %u",
+        LOGV("RS: Frame (%i),   Script %2.1f%% (%i),  Swap %2.1f%% (%i),  Idle %2.1f%% (%lli),  Internal %2.1f%% (%lli), Avg fps: %u",
              mTimeMSLastFrame,
              100.0 * mTimers[RS_TIMER_SCRIPT] / total, mTimeMSLastScript,
              100.0 * mTimers[RS_TIMER_CLEAR_SWAP] / total, mTimeMSLastSwap,
diff --git a/rsContextHostStub.h b/rsContextHostStub.h
index aa0205d..f3e9dab 100644
--- a/rsContextHostStub.h
+++ b/rsContextHostStub.h
@@ -72,6 +72,7 @@
     //ScriptCState mScriptC;
     ShaderCache mShaderCache;
 
+    RsSurfaceConfig mUserSurfaceConfig;
 
     //bool setupCheck();
     bool checkDriver() const {return false;}
diff --git a/rsFont.cpp b/rsFont.cpp
index 8756f82..633129a 100644
--- a/rsFont.cpp
+++ b/rsFont.cpp
@@ -609,22 +609,10 @@
     const Element *posElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 3);
     const Element *texElem = Element::create(mRSC, RS_TYPE_FLOAT_32, RS_KIND_USER, false, 2);
 
-    const Element *elemArray[2];
-    elemArray[0] = posElem;
-    elemArray[1] = texElem;
-
-    String8 posName("position");
-    String8 texName("texture0");
-
-    const char *nameArray[2];
-    nameArray[0] = posName.string();
-    nameArray[1] = texName.string();
-    size_t lengths[2];
-    lengths[0] = posName.size();
-    lengths[1] = texName.size();
-    uint32_t arraySizes[2] = {1, 1};
-
-    const Element *vertexDataElem = Element::create(mRSC, 2, elemArray, nameArray, lengths, arraySizes);
+    mRSC->mStateElement.elementBuilderBegin();
+    mRSC->mStateElement.elementBuilderAdd(posElem, "position", 1);
+    mRSC->mStateElement.elementBuilderAdd(texElem, "texture0", 1);
+    const Element *vertexDataElem = mRSC->mStateElement.elementBuilderCreate(mRSC);
 
     Type *vertexDataType = new Type(mRSC);
     vertexDataType->setDimX(mMaxNumberOfQuads * 4);
