diff --git a/src/cpp/runKernel/ArrayBuffer.cpp b/src/cpp/runKernel/ArrayBuffer.cpp
index 55be9ebc517d3a43f2d06b02e43c15ef2afef9f1..895220f2ab466a61c459f2559ba99412ef059de0 100644
--- a/src/cpp/runKernel/ArrayBuffer.cpp
+++ b/src/cpp/runKernel/ArrayBuffer.cpp
@@ -94,10 +94,10 @@ void ArrayBuffer::syncMinimalParams(JNIEnv *jenv, KernelArg *arg) {
 void ArrayBuffer::replaceJavaArray(JNIEnv *jenv, KernelArg *arg, jarray newRef) {
    cl_int status = CL_SUCCESS;
     if (javaArray != NULL) {
-        jenv->DeleteWeakGlobalRef((jweak) javaArray);
         if (config->isVerbose()){
              fprintf(stderr, "DeleteWeakGlobalRef for %s: %p\n", arg->name, javaArray);
         }
+        jenv->DeleteWeakGlobalRef((jweak) javaArray);
         javaArray = 0;
     }
 
@@ -109,6 +109,7 @@ void ArrayBuffer::replaceJavaArray(JNIEnv *jenv, KernelArg *arg, jarray newRef)
         }
         status = clReleaseMemObject((cl_mem)mem);
         //fprintf(stderr, "<--releaseMemObject[%d]\n", i);
+        CLException::checkCLError(status, "clReleaseMemObject()");
         if(status != CL_SUCCESS) throw CLException(status, "clReleaseMemObject()");
         mem = (cl_mem)0;
      }
@@ -131,11 +132,11 @@ void ArrayBuffer::replaceJavaArray(JNIEnv *jenv, KernelArg *arg, jarray newRef)
 void ArrayBuffer::deleteJavaArray(JNIEnv *jenv, KernelArg *arg) {
    cl_int status = CL_SUCCESS;
     if (javaArray != NULL) {
-        jenv->DeleteWeakGlobalRef((jweak) ArrayBuffer::javaArray);
         if (config->isVerbose()){
              fprintf(stderr, "DeleteWeakGlobalRef for %s: %p\n", arg->name, ArrayBuffer::javaArray);
         }
-        javaArray = 0;
+        jenv->DeleteWeakGlobalRef((jweak) ArrayBuffer::javaArray);
+        javaArray=0;
     }
 
     // need to free opencl buffers, run will reallocate later
@@ -146,6 +147,7 @@ void ArrayBuffer::deleteJavaArray(JNIEnv *jenv, KernelArg *arg) {
         }
         status = clReleaseMemObject((cl_mem)mem);
         //fprintf(stderr, "<--releaseMemObject[%d]\n", i);
+        CLException::checkCLError(status, "clReleaseMemObject()");        
         if(status != CL_SUCCESS) throw CLException(status, "clReleaseMemObject()");
         mem = (cl_mem)0;
      }
diff --git a/src/cpp/runKernel/JNIContext.cpp b/src/cpp/runKernel/JNIContext.cpp
index 0056c77c9b632cac5db0c5d6b19f17c3bd446f55..569fc9a6864c90ab812e725f3b73c3e26aa2aa95 100644
--- a/src/cpp/runKernel/JNIContext.cpp
+++ b/src/cpp/runKernel/JNIContext.cpp
@@ -86,18 +86,7 @@ void JNIContext::dispose(JNIEnv *jenv, Config* config) {
          if (!arg->isPrimitive()){
             if (arg->isArray()) {
                if (arg->arrayBuffer != NULL){
-                  if (arg->arrayBuffer->mem != 0){
-                     if (config->isTrackingOpenCLResources()){
-                        memList.remove((cl_mem)arg->arrayBuffer->mem, __LINE__, __FILE__);
-                     }
-                     status = clReleaseMemObject((cl_mem)arg->arrayBuffer->mem);
-                     //fprintf(stdout, "dispose arg %d %0lx\n", i, arg->arrayBuffer->mem);
-                     CLException::checkCLError(status, "clReleaseMemObject()");
-                     arg->arrayBuffer->mem = (cl_mem)0;
-                  }
-                  if (arg->arrayBuffer->javaArray != NULL)  {
-                     jenv->DeleteWeakGlobalRef((jweak) arg->arrayBuffer->javaArray);
-                  }
+                  arg->arrayBuffer->deleteJavaArray(jenv, arg);
                   delete arg->arrayBuffer;
                   arg->arrayBuffer = NULL;
                }