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 7bceefb406741d309060d695b9471641f4191569..17a2a8d888a4ed79ae502835f3e9c46f93c332a1 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
@@ -118,6 +118,7 @@ public class OpenCLDevice extends Device{
             }
          } else {
             if (method.getName().equals("put")) {
+               System.out.println("put not implemented");
 
                /*
                for (Object arg : args) {
@@ -141,6 +142,7 @@ public class OpenCLDevice extends Device{
                }
                */
             } else if (method.getName().equals("get")) {
+               System.out.println("get not implemented");
                /*
                for (Object arg : args) {
                   Class<?> argClass = arg.getClass();
@@ -163,7 +165,11 @@ public class OpenCLDevice extends Device{
                }
                */
             } else if (method.getName().equals("begin")) {
+               System.out.println("begin not implemented");
+            } else if (method.getName().equals("dispose")) {
+               System.out.println("dispose not implemented");
             } else if (method.getName().equals("end")) {
+               System.out.println("end not implemented");
             }
          }
          return proxy;
@@ -248,8 +254,11 @@ public class OpenCLDevice extends Device{
    }
 
    private static boolean isReservedInterfaceMethod(Method _methods) {
-      return (_methods.getName().equals("put") || _methods.getName().equals("get") || _methods.getName().equals("begin") || _methods
-            .getName().equals("begin"));
+      return (   _methods.getName().equals("put")
+              || _methods.getName().equals("get")
+              || _methods.getName().equals("dispose")
+              || _methods.getName().equals("begin")
+              || _methods.getName().equals("end"));
    }
 
    private String streamToString(InputStream _inputStream) {
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 bde08e55ffc94f5bf9f76d43e3405f2dbd9f804b..134622506dc755e4c94a5a6aaea24e3ddd639ab4 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
@@ -104,4 +104,6 @@ public interface OpenCL<T> {
    public T begin();
 
    public T end();
+
+   public T dispose();
 }
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 be7c21b5af7276a20538ba5edc43c6eb83d33443..5681b3af86e032f2c8dfccd04cf120810b620b3f 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
@@ -66,4 +66,8 @@ public class OpenCLAdapter<T> implements OpenCL<T>{
       return ((T) this);
    }
 
+   @SuppressWarnings("unchecked") public T dispose() {
+      return ((T) this);
+   }
+
 }
diff --git a/samples/extension/square.sh b/samples/extension/square.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5fe1266a2360acddce7e0d313ced499c183653c4
--- /dev/null
+++ b/samples/extension/square.sh
@@ -0,0 +1,5 @@
+java\
+ -Djava.library.path=../../com.amd.aparapi.jni/dist\
+ -Dcom.amd.aparapi.executionMode=$1\
+ -classpath ../../com.amd.aparapi/dist/aparapi.jar:extension.jar\
+ com.amd.aparapi.sample.extension.SquareExample