diff --git a/docs/jni-tips.html b/docs/jni-tips.html
index 881f534..002fcb7 100644
--- a/docs/jni-tips.html
+++ b/docs/jni-tips.html
@@ -344,7 +344,7 @@
     <li>MonitorExit
     <li>PopLocalFrame
     <li>PushLocalFrame
-    <li>Release<PrimitiveType>ArrayElements
+    <li>Release&lt;PrimitiveType&gt;ArrayElements
     <li>ReleasePrimitiveArrayCritical
     <li>ReleaseStringChars
     <li>ReleaseStringCritical
diff --git a/libcore/archive/src/main/native/java_util_zip_Deflater.c b/libcore/archive/src/main/native/java_util_zip_Deflater.c
index 2e0e268..47347e6 100644
--- a/libcore/archive/src/main/native/java_util_zip_Deflater.c
+++ b/libcore/archive/src/main/native/java_util_zip_Deflater.c
@@ -162,29 +162,19 @@
 {
   PORT_ACCESS_FROM_ENV (env);
 
-  jbyte *in;
-  JCLZipStream *stream;
-
-  stream = (JCLZipStream *) ((IDATA) handle);
-  if (stream->inaddr != NULL)	/*Input has already been provided, free the old buffer */
+  JCLZipStream* stream = (JCLZipStream *) ((IDATA) handle);
+  if (stream->inaddr != NULL) {
+    /* Input has already been provided, free the old buffer. */
     jclmem_free_memory (env, stream->inaddr);
+  }
   stream->inaddr = jclmem_allocate_memory (env, len);
-  if (stream->inaddr == NULL)
-    {
-      throwNewOutOfMemoryError (env, "");
-      return;
-    }
-  in = ((*env)->GetPrimitiveArrayCritical (env, buf, 0));
-  if (in == NULL) {
-    throwNewOutOfMemoryError(env, "");
+  if (stream->inaddr == NULL) {
+    throwNewOutOfMemoryError (env, "");
     return;
   }
-  memcpy (stream->inaddr, (in + off), len);
-  ((*env)->ReleasePrimitiveArrayCritical (env, buf, in, JNI_ABORT));
+  (*env)->GetByteArrayRegion(env, buf, off, len, (jbyte*) stream->inaddr);
   stream->stream->next_in = (Bytef *) stream->inaddr;
   stream->stream->avail_in = len;
-
-  return;
 }
 
 JNIEXPORT jint JNICALL
diff --git a/libcore/archive/src/main/native/java_util_zip_Inflater.c b/libcore/archive/src/main/native/java_util_zip_Inflater.c
index 4b30d4e..c04a223 100644
--- a/libcore/archive/src/main/native/java_util_zip_Inflater.c
+++ b/libcore/archive/src/main/native/java_util_zip_Inflater.c
@@ -104,29 +104,20 @@
 {
   PORT_ACCESS_FROM_ENV (env);
 
-  jbyte *in;
-  U_8 *baseAddr;
   JCLZipStream *stream = (JCLZipStream *) ((IDATA) handle);
-
-  if (stream->inaddr != NULL)   /*Input has already been provided, free the old buffer */
+  if (stream->inaddr != NULL) {
+    /* Input has already been provided, free the old buffer. */
     jclmem_free_memory (env, stream->inaddr);
-  baseAddr = jclmem_allocate_memory (env, len);
-  if (baseAddr == NULL)
-    {
-      throwNewOutOfMemoryError (env, "");
-      return;
-    }
+  }
+  U_8* baseAddr = jclmem_allocate_memory (env, len);
+  if (baseAddr == NULL) {
+    throwNewOutOfMemoryError (env, "");
+    return;
+  }
   stream->inaddr = baseAddr;
   stream->stream->next_in = (Bytef *) baseAddr;
   stream->stream->avail_in = len;
-  in = ((*env)->GetPrimitiveArrayCritical (env, buf, 0));
-  if (in == NULL) {
-    throwNewOutOfMemoryError(env, "");
-    return;
-  }
-  memcpy (baseAddr, (in + off), len);
-  ((*env)->ReleasePrimitiveArrayCritical (env, buf, in, JNI_ABORT));
-  return;
+  (*env)->GetByteArrayRegion(env, buf, off, len, (jbyte*) baseAddr);
 }
 
 JNIEXPORT jint JNICALL
diff --git a/libcore/luni/src/main/native/org_apache_harmony_luni_platform_OSMemory.cpp b/libcore/luni/src/main/native/org_apache_harmony_luni_platform_OSMemory.cpp
index 2e814cc..b1493f8 100644
--- a/libcore/luni/src/main/native/org_apache_harmony_luni_platform_OSMemory.cpp
+++ b/libcore/luni/src/main/native/org_apache_harmony_luni_platform_OSMemory.cpp
@@ -144,9 +144,8 @@
  */
 static void harmony_nio_getBytesImpl(JNIEnv *_env, jobject _this, jint pointer, 
         jbyteArray dst, jint offset, jint length) {
-    jbyte *dst_ = (jbyte *)_env->GetPrimitiveArrayCritical(dst, (jboolean *)0);
-    memcpy(dst_ + offset, (jbyte *)pointer, length);
-    _env->ReleasePrimitiveArrayCritical(dst, dst_, 0);
+    jbyte* src = reinterpret_cast<jbyte*>(static_cast<uintptr_t>(pointer));
+    _env->SetByteArrayRegion(dst, offset, length, src);
 }
 
 /*
@@ -166,9 +165,8 @@
  */
 static void harmony_nio_putBytesImpl(JNIEnv *_env, jobject _this,
         jint pointer, jbyteArray src, jint offset, jint length) {
-    jbyte *src_ = (jbyte *)_env->GetPrimitiveArrayCritical(src, (jboolean *)0);
-    memcpy((jbyte *)pointer, src_ + offset, length);
-    _env->ReleasePrimitiveArrayCritical(src, src_, JNI_ABORT);
+    jbyte* dst = reinterpret_cast<jbyte*>(static_cast<uintptr_t>(pointer));
+    _env->GetByteArrayRegion(src, offset, length, dst);
 }
 
 static void
