diff --git a/cpp/Allocation.cpp b/cpp/Allocation.cpp
index 121d88d..15df82a 100644
--- a/cpp/Allocation.cpp
+++ b/cpp/Allocation.cpp
@@ -160,8 +160,7 @@
     rsAllocationGenerateMipmaps(mRS->getContext(), getID());
 }
 
-void Allocation::copy1DRangeFrom(uint32_t off, size_t count, const void *data,
-        size_t dataLen) {
+void Allocation::copy1DRangeFrom(uint32_t off, size_t count, const void *data) {
 
     if(count < 1) {
         ALOGE("Count must be >= 1.");
@@ -171,15 +170,12 @@
         ALOGE("Overflow, Available count %zu, got %zu at offset %zu.", mCurrentCount, count, off);
         return;
     }
-    if((count * mType->getElement()->getSizeBytes()) > dataLen) {
-        ALOGE("Array too small for allocation type.");
-        return;
-    }
 
-    rsAllocation1DData(mRS->getContext(), getIDSafe(), off, mSelectedLOD, count, data, dataLen);
+    rsAllocation1DData(mRS->getContext(), getIDSafe(), off, mSelectedLOD, count, data,
+                       count * mType->getElement()->getSizeBytes());
 }
 
-void Allocation::copy1DRangeTo(uint32_t off, size_t count, void *data, size_t dataLen) {
+void Allocation::copy1DRangeTo(uint32_t off, size_t count, void *data) {
     if(count < 1) {
         ALOGE("Count must be >= 1.");
         return;
@@ -188,11 +184,9 @@
         ALOGE("Overflow, Available count %zu, got %zu at offset %zu.", mCurrentCount, count, off);
         return;
     }
-    if((count * mType->getElement()->getSizeBytes()) > dataLen) {
-        ALOGE("Array too small for allocation type.");
-        return;
-    }
-    rsAllocation1DRead(mRS->getContext(), getIDSafe(), off, mSelectedLOD, count, data, dataLen);
+
+    rsAllocation1DRead(mRS->getContext(), getIDSafe(), off, mSelectedLOD, count, data,
+                       count * mType->getElement()->getSizeBytes());
 }
 
 void Allocation::copy1DRangeFrom(uint32_t off, size_t count, sp<const Allocation> data,
@@ -204,6 +198,15 @@
                             data->mSelectedLOD, data->mSelectedFace);
 }
 
+void Allocation::copy1DFrom(const void* data) {
+    copy1DRangeFrom(0, mCurrentCount, data);
+}
+
+void Allocation::copy1DTo(void* data) {
+    copy1DRangeTo(0, mCurrentCount, data);
+}
+
+
 void Allocation::validate2DRange(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h) {
     if (mAdaptedAllocation != NULL) {
 
@@ -215,15 +218,14 @@
 }
 
 void Allocation::copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
-                                 const void *data, size_t dataLen) {
+                                 const void *data) {
     validate2DRange(xoff, yoff, w, h);
     rsAllocation2DData(mRS->getContext(), getIDSafe(), xoff, yoff, mSelectedLOD, mSelectedFace,
-                       w, h, data, dataLen);
+                       w, h, data, w * h * mType->getElement()->getSizeBytes());
 }
 
 void Allocation::copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
-                                 sp<const Allocation> data, size_t dataLen,
-                                 uint32_t dataXoff, uint32_t dataYoff) {
+                                 sp<const Allocation> data, uint32_t dataXoff, uint32_t dataYoff) {
     validate2DRange(xoff, yoff, w, h);
     rsAllocationCopy2DRange(mRS->getContext(), getIDSafe(), xoff, yoff,
                             mSelectedLOD, mSelectedFace,
diff --git a/cpp/rsCppStructs.h b/cpp/rsCppStructs.h
index 3598367..80118f6 100644
--- a/cpp/rsCppStructs.h
+++ b/cpp/rsCppStructs.h
@@ -221,18 +221,18 @@
 
     void generateMipmaps();
 
-    void copy1DRangeFrom(uint32_t off, size_t count, const void *data, size_t dataLen);
-    void copy1DRangeTo(uint32_t off, size_t count, void *data, size_t dataLen);
-
+    void copy1DRangeFrom(uint32_t off, size_t count, const void *data);
     void copy1DRangeFrom(uint32_t off, size_t count, sp<const Allocation> data, uint32_t dataOff);
 
-    void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
-                         const void *data, size_t dataLen);
-    //TODO: add copy2DRangeTo
+    void copy1DRangeTo(uint32_t off, size_t count, void *data);
+
+    void copy1DFrom(const void* data);
+    void copy1DTo(void* data);
 
     void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
-                         sp<const Allocation> data, size_t dataLen,
-                         uint32_t dataXoff, uint32_t dataYoff);
+                         const void *data);
+    void copy2DRangeFrom(uint32_t xoff, uint32_t yoff, uint32_t w, uint32_t h,
+                         sp<const Allocation> data, uint32_t dataXoff, uint32_t dataYoff);
 
     void resize(int dimX);
     void resize(int dimX, int dimY);
diff --git a/tests/cppallocation/compute.cpp b/tests/cppallocation/compute.cpp
index 8439ffb..5407e06 100644
--- a/tests/cppallocation/compute.cpp
+++ b/tests/cppallocation/compute.cpp
@@ -40,11 +40,11 @@
         buf[ct] = (uint32_t)ct;
     }
 
-    ain->copy1DRangeFrom(0, numElems, buf, numElems*sizeof(uint32_t));
+    ain->copy1DRangeFrom(0, numElems, buf);
 
     sc->forEach_multiply(ain, aout);
 
-    aout->copy1DRangeTo(0, numElems, buf, numElems*sizeof(uint32_t));
+    aout->copy1DRangeTo(0, numElems, buf);
 
     for (uint32_t ct=0; ct < numElems; ct++) {
         if (buf[ct] !=  ct * 2) {
diff --git a/tests/cppbasic/compute.cpp b/tests/cppbasic/compute.cpp
index 782410a..471b10a 100644
--- a/tests/cppbasic/compute.cpp
+++ b/tests/cppbasic/compute.cpp
@@ -39,7 +39,7 @@
     for (uint32_t ct=0; ct < t->getCount(); ct++) {
         buf[ct] = ct | (ct << 16);
     }
-    ain->copy1DRangeFrom(0, t->getCount(), buf, t->getCount()*4);
+    ain->copy1DRangeFrom(0, t->getCount(), buf);
 
     sc->forEach_root(ain, aout);
     printf("for each done\n");
diff --git a/tests/latency/latency.cpp b/tests/latency/latency.cpp
index b6a6c47..124fb20 100644
--- a/tests/latency/latency.cpp
+++ b/tests/latency/latency.cpp
@@ -64,8 +64,6 @@
         sc->forEach_root(ain, aout);
     }
 
-    uint32_t temp;
-
     rs->finish();
 
     gettimeofday(&stop, NULL);
