diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/Kernel.java b/com.amd.aparapi/src/java/com/amd/aparapi/Kernel.java
index eeb2ef7ff13469f3fdb2743caf3c29870f3e8d47..708005ccde41337bd9e23bf26fb84043a632e2db 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/Kernel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/Kernel.java
@@ -970,6 +970,9 @@ public abstract class Kernel implements Cloneable {
     * @see #execute(String, Range, int)
     */
    public void cancelMultiPass() {
+      if (kernelRunner == null) {
+         return;
+      }
       kernelRunner.cancelMultiPass();
    }
 
@@ -982,11 +985,21 @@ public abstract class Kernel implements Cloneable {
     */
    public int getCurrentPass() {
       if (kernelRunner == null) {
-         return KernelRunner.PASS_ID_PREPARING_EXECUTION;
+         return KernelRunner.PASS_ID_COMPLETED_EXECUTION;
       }
       return kernelRunner.getCurrentPass();
    }
 
+   /**
+    * @see KernelRunner#isExecuting()
+    */
+   public boolean isExecuting() {
+      if (kernelRunner == null) {
+         return false;
+      }
+      return kernelRunner.isExecuting();
+   }
+
    /**
     * When using a Java Thread Pool Aparapi uses clone to copy the initial instance to each thread. 
     *  
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 ddf94ea2643f85127847574a2ae3fcc7e8fadb29..c2b69e44f1cb3564fa00d82c632d861c5ae93986 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
@@ -1382,8 +1382,9 @@ public class KernelRunner extends KernelRunnerJNI{
 
    /**
     * Returns the index of the current pass, or one of two special constants with negative values to indicate special progress states. Those constants are
-    * {@link #PASS_ID_PREPARING_EXECUTION} to indicate that the Kernel has not yet started executing, or {@link #PASS_ID_COMPLETED_EXECUTION} to indicate that
-    * execution is complete (possibly due to early termination via {@link #cancelMultiPass()}).
+    * {@link #PASS_ID_PREPARING_EXECUTION} to indicate that the Kernel has started executing but not reached the initial pass, or
+    * {@link #PASS_ID_COMPLETED_EXECUTION} to indicate that execution is complete (possibly due to early termination via {@link #cancelMultiPass()}), i.e. the Kernel
+    * is idle. {@link #PASS_ID_COMPLETED_EXECUTION} is also returned before the first execution has been invoked.
     *
     * <p>This can be used, for instance, to update a visual progress bar.
     *
@@ -1404,6 +1405,13 @@ public class KernelRunner extends KernelRunnerJNI{
       }
    }
 
+   /**
+    * True while any of the {@code execute()} methods are in progress.
+    */
+   public boolean isExecuting() {
+      return executing;
+   }
+
    protected int getCurrentPassRemote() {
       return outBufferRemoteInt.get(0);
    }