diff --git a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
index e985bd18b5af6fbe988c5009ebb9ea263aaa1f6b..a0916bc09544bb6077dcc1ed55da0f22549374e8 100644
--- a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
+++ b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
@@ -252,9 +252,13 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_
 
 JNI_JAVA(void, OpenCLJNI, disposeProgram)
    (JNIEnv *jenv, jobject jobj, jobject programInstance) {
-      fprintf(stderr, "dispose program \n");
+      //fprintf(stderr, "dispose program \n");
       cl_program program = OpenCLProgram::getProgram(jenv, programInstance);
       clReleaseProgram(program);
+      cl_command_queue commandQueue = OpenCLProgram::getCommandQueue(jenv, programInstance);
+      clReleaseCommandQueue(commandQueue);
+      cl_context context = OpenCLProgram::getContext(jenv, programInstance);
+      clReleaseContext(context);
 }
 
 JNI_JAVA(void, OpenCLJNI, disposeKernel)
@@ -267,7 +271,7 @@ JNI_JAVA(void, OpenCLJNI, disposeKernel)
       cl_context context = OpenCLProgram::getContext(jenv, programInstance);
       cl_command_queue commandQueue = OpenCLProgram::getCommandQueue(jenv, programInstance);
       jsize argc = jenv->GetArrayLength(argDefsArray);
-      fprintf(stderr, "dispose! argc = %d\n", argc);
+      //fprintf(stderr, "dispose! argc = %d\n", argc);
       for (jsize argIndex = 0; argIndex < argc; argIndex++){
          jobject argDef = jenv->GetObjectArrayElement(argDefsArray, argIndex);
          jlong argBits = OpenCLArgDescriptor::getBits(jenv, argDef);
@@ -279,7 +283,7 @@ JNI_JAVA(void, OpenCLJNI, disposeKernel)
                cl_mem mem = OpenCLMem::getMem(jenv, memInstance);
                size_t sizeInBytes = OpenCLMem::getSizeInBytes(jenv, memInstance);
                cl_int status = clReleaseMemObject(mem); 
-               fprintf(stderr, "mem instance %d released!\n", sizeInBytes);
+               //fprintf(stderr, "mem instance %d released!\n", sizeInBytes);
             }
          }
       }
@@ -365,6 +369,9 @@ JNI_JAVA(void, OpenCLJNI, invoke)
          getArg(jenv, context, commandQueue, events, &eventc, argIndex, argDef, arg);
       }
       status = clWaitForEvents(eventc, events);
+      for (int i=0;i<eventc; i++){
+        clReleaseEvent(events[i]);
+      }
       if (status != CL_SUCCESS) {
          fprintf(stderr, "error waiting for events !\n");
       }