diff --git a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
index a0916bc09544bb6077dcc1ed55da0f22549374e8..7e499fa7255273af374c207a1ddfa7ef5a78e5bc 100644
--- a/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
+++ b/com.amd.aparapi.jni/src/cpp/invoke/OpenCLJNI.cpp
@@ -250,6 +250,16 @@ void getArg(JNIEnv *jenv, cl_context context, cl_command_queue commandQueue, cl_
    }
 }
 
+JNI_JAVA(jobject, OpenCLJNI, getProfileInfo)
+   (JNIEnv *jenv, jobject jobj, jobject programInstance) {
+   jobject returnList = JNIHelper::createInstance(jenv, ArrayListClass, VoidReturn );
+   for (int i=0; i< 5; i++){
+      jobject writeProfileInfo = NULL;
+      JNIHelper::callVoid(jenv, returnList, "add", ArgsBooleanReturn(ObjectClassArg), writeProfileInfo);
+   }
+   return(returnList);
+}
+
 JNI_JAVA(void, OpenCLJNI, disposeProgram)
    (JNIEnv *jenv, jobject jobj, jobject programInstance) {
       //fprintf(stderr, "dispose program \n");
diff --git a/com.amd.aparapi/src/java/com.amd.aparapi.iml b/com.amd.aparapi/src/java/com.amd.aparapi.iml
new file mode 100644
index 0000000000000000000000000000000000000000..d5c074327501eaec3fe451ed56ce5160f1e97e16
--- /dev/null
+++ b/com.amd.aparapi/src/java/com.amd.aparapi.iml
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module type="JAVA_MODULE" version="4">
+  <component name="NewModuleRootManager" inherit-compiler-output="true">
+    <exclude-output />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+  </component>
+</module>
+
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java b/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java
index 9793d4c7db3424f8ac95f3968c071c9429c8d6c9..4ec4cbcfaa81691f510bd996542346c3b3bb83a0 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/device/OpenCLDevice.java
@@ -1,5 +1,6 @@
 package com.amd.aparapi.device;
 
+import com.amd.aparapi.ProfileInfo;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -180,6 +181,12 @@ public class OpenCLDevice extends Device{
                disposed=true;
             } else if (method.getName().equals("end")) {
                System.out.println("end not implemented");
+            }  else if (method.getName().equals("getProfileInfo")){
+                  //  public List<ProfileInfo> getProfileInfo() {
+                  //  return (kernelRunner.getProfileInfo());
+                  // }
+               System.out.println("get profile info");
+               proxy = (Object)program.getProfileInfo();
             }
          }
          return proxy;
@@ -268,7 +275,8 @@ public class OpenCLDevice extends Device{
               || _methods.getName().equals("get")
               || _methods.getName().equals("dispose")
               || _methods.getName().equals("begin")
-              || _methods.getName().equals("end"));
+              || _methods.getName().equals("end")
+              || _methods.getName().equals("getProfileInfo"));
    }
 
    private String streamToString(InputStream _inputStream) {
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java
index a672093fe97114a2e1fe4d5ed1fc63c73bb7e5bf..f8020cdecf2a7bdcae32dfc63521adeedb75e783 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/KernelRunnerJNI.java
@@ -286,12 +286,11 @@ public abstract class KernelRunnerJNI{
     * synchronized to avoid race in clGetPlatformIDs() in OpenCL lib problem should fixed in some future OpenCL version
     * 
     * @param _kernel
+    * @param _device
     * @param _flags
-    * @param numProcessors
-    * @param maxJTPLocalSize
     * @return
     */
-   @DocMe protected native synchronized long initJNI(Kernel _kernel, OpenCLDevice device, int _flags);
+   @DocMe protected native synchronized long initJNI(Kernel _kernel, OpenCLDevice _device, int _flags);
 
    protected native int getJNI(long _jniContextHandle, Object _array);
 
@@ -305,13 +304,5 @@ public abstract class KernelRunnerJNI{
 
    protected native String getExtensionsJNI(long _jniContextHandle);
 
-   // @Deprecated protected native int getMaxWorkGroupSizeJNI(long _jniContextHandle);
-
-   // @Deprecated protected native int getMaxWorkItemSizeJNI(long _jniContextHandle, int _index);
-
-   // @Deprecated protected native int getMaxComputeUnitsJNI(long _jniContextHandle);
-
-   // @Deprecated protected native int getMaxWorkItemDimensionsJNI(long _jniContextHandle);
-
    protected native synchronized List<ProfileInfo> getProfileInfoJNI(long _jniContextHandle);
 }
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java
index b69f5aebbd92d19aa83eb94c2434b4c1c3736d3f..9fa182204030714805caa1872f64ce469b31d9c5 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/jni/OpenCLJNI.java
@@ -1,5 +1,6 @@
 package com.amd.aparapi.internal.jni;
 
+import com.amd.aparapi.ProfileInfo;
 import java.util.List;
 
 import com.amd.aparapi.device.OpenCLDevice;
@@ -26,6 +27,8 @@ public abstract class OpenCLJNI{
 
    protected native void disposeProgram(OpenCLProgram openCLProgram);
 
+   protected native List<ProfileInfo> getProfileInfo(OpenCLProgram openCLProgram);
+
    protected native void remap(OpenCLProgram program, OpenCLMem mem, long address);
 
    protected native byte[] getBytes(String className);
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java
index 26e46c4a376adc23d75a035ed6844a9abd690f12..926546097193c41848212f5fe151811bbb669600 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/kernel/KernelRunner.java
@@ -114,7 +114,7 @@ public class KernelRunner extends KernelRunnerJNI{
    /**
     * <code>Kernel.dispose()</code> delegates to <code>KernelRunner.dispose()</code> which delegates to <code>disposeJNI()</code> to actually close JNI data structures.<br/>
     * 
-    * @see KernelRunner#disposeJNI()
+    * @see KernelRunnerJNI#disposeJNI()
     */
    public void dispose() {
       if (kernel.getExecutionMode().isOpenCL()) {
@@ -218,7 +218,7 @@ public class KernelRunner extends KernelRunnerJNI{
    /**
     * Execute using a Java thread pool. Either because we were explicitly asked to do so, or because we 'fall back' after discovering an OpenCL issue.
     * 
-    * @param _globalSize
+    * @param _range
     *          The globalSize requested by the user (via <code>Kernel.execute(globalSize)</code>)
     * @param _passes
     *          The # of passes requested by the user (via <code>Kernel.execute(globalSize, passes)</code>). Note this is usually defaulted to 1 via <code>Kernel.execute(globalSize)</code>.
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java
index 19c065927c35121d1a93c81e05f97be9d5b881e2..bc464a0115f0994ad18e6c03f36f28824b009333 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLKernel.java
@@ -1,5 +1,7 @@
 package com.amd.aparapi.internal.opencl;
 
+import com.amd.aparapi.ProfileInfo;
+import com.amd.aparapi.internal.kernel.KernelRunner;
 import java.util.List;
 
 import com.amd.aparapi.internal.jni.OpenCLJNI;
@@ -60,4 +62,6 @@ public class OpenCLKernel extends OpenCLJNI{
    public void dispose(){
        disposeKernel(this);
    }
+
+
 }
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java
index 23855513e8921a91d137b19e8c2622fe5f2e7481..91ecff5c7976c50eec64bcc5836bf7c5d2c56192 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/internal/opencl/OpenCLProgram.java
@@ -1,6 +1,8 @@
 package com.amd.aparapi.internal.opencl;
 
+import com.amd.aparapi.ProfileInfo;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import com.amd.aparapi.device.OpenCLDevice;
@@ -88,4 +90,8 @@ public class OpenCLProgram extends OpenCLJNI{
    public void dispose(){
        disposeProgram(this);
    }
+
+   public List<ProfileInfo> getProfileInfo(){
+      return(getProfileInfo(this));
+   }
 }
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java
index 134622506dc755e4c94a5a6aaea24e3ddd639ab4..8fd113c9e529d989281c192df86c51c6a82eed50 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCL.java
@@ -1,9 +1,11 @@
 package com.amd.aparapi.opencl;
 
+import com.amd.aparapi.ProfileInfo;
 import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+import java.util.List;
 
 public interface OpenCL<T> {
 
@@ -106,4 +108,6 @@ public interface OpenCL<T> {
    public T end();
 
    public T dispose();
+
+   public List<ProfileInfo> getProfileInfo();
 }
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java
index 5681b3af86e032f2c8dfccd04cf120810b620b3f..7568fc2ec44a85361c8d4a3f5c1d6bac54e5e8f9 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/opencl/OpenCLAdapter.java
@@ -1,5 +1,9 @@
 package com.amd.aparapi.opencl;
 
+import com.amd.aparapi.ProfileInfo;
+import java.util.ArrayList;
+import java.util.List;
+
 public class OpenCLAdapter<T> implements OpenCL<T>{
 
    @SuppressWarnings("unchecked") public T put(byte[] array) {
@@ -70,4 +74,8 @@ public class OpenCLAdapter<T> implements OpenCL<T>{
       return ((T) this);
    }
 
+   public List<ProfileInfo> getProfileInfo(){
+       return(new ArrayList<ProfileInfo>());
+   }
+
 }
diff --git a/examples/javaonedemo/nbody.sh b/examples/javaonedemo/nbody.sh
index 74160f0deab592118bfcde90b70156b0646c95ac..7505a7dbbf66647752742c7969db171abf601d05 100644
--- a/examples/javaonedemo/nbody.sh
+++ b/examples/javaonedemo/nbody.sh
@@ -1,4 +1,4 @@
-#!/bin/bash 
-java -Djava.library.path=../../com.amd.aparapi.jni/dist:../third-party/jogamp  \
-  -classpath ../third-party/jogamp/gluegen-rt.jar:../third-party/jogamp/jogl-all.jar:../../com.amd.aparapi/dist/aparapi.jar:javaonedemo.jar \
-  com.amd.aparapi.examples.javaonedemo.NBody 
+#!/bin/bash 
+java -Djava.library.path=../../com.amd.aparapi.jni/dist:../third-party/jogamp  \
+  -classpath ../third-party/jogamp/gluegen-rt.jar:../third-party/jogamp/jogl-all.jar:../../com.amd.aparapi/dist/aparapi.jar:javaonedemo.jar \
+  com.amd.aparapi.examples.javaonedemo.NBody 
diff --git a/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java b/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java
index b954226ed50cf3b3f7defa99fd75e63c86e25a62..9c6f2a608b9d9d77ee75ecfc6e104c1f03b7b588 100644
--- a/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java
+++ b/samples/extension/src/com/amd/aparapi/sample/extension/SquareExample.java
@@ -1,11 +1,13 @@
 package com.amd.aparapi.sample.extension;
 
+import com.amd.aparapi.ProfileInfo;
 import com.amd.aparapi.Range;
 import com.amd.aparapi.device.Device;
 import com.amd.aparapi.device.OpenCLDevice;
 import com.amd.aparapi.opencl.OpenCL;
 import com.amd.aparapi.opencl.OpenCL.Resource;
 import com.amd.aparapi.opencl.OpenCL.Source;
+import java.util.List;
 
 public class SquareExample{
 
@@ -57,7 +59,7 @@ public class SquareExample{
       if (device instanceof OpenCLDevice) {
          final OpenCLDevice openclDevice = (OpenCLDevice) device;
 
-         for (int l=0; l<1000; l++){
+         for (int l=0; l<5; l++){
 
          final SquarerWithResource squarer = openclDevice.bind(SquarerWithResource.class);
          squarer.square(range, in, squares);
@@ -71,8 +73,12 @@ public class SquareExample{
          for (int i = 0; i < size; i++) {
             System.out.println(l+" "+ in[i] + " " + squares[i] + " " + quads[i]);
          }
-
+         List<ProfileInfo> profileInfo  =squarer.getProfileInfo();
+            for (ProfileInfo pi:profileInfo){
+               System.out.println("whooo");
+            }
          squarer.dispose();
+
          }
       }
    }