diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java b/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
index d37ea95b79b166d9f5b9d5ffead4a5f2820de904..7a9a63d3d2314f9e80c51478779ecc0654c53e7c 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
@@ -449,7 +449,7 @@ abstract class BlockWriter{
             if (f.isNaN()) {
                write("NAN");
             } else if (f.isInfinite()) {
-               if (f < 0){
+               if (f < 0) {
                   write("-");
                }
                write("INFINITY");
@@ -463,7 +463,7 @@ abstract class BlockWriter{
             if (d.isNaN()) {
                write("NAN");
             } else if (d.isInfinite()) {
-               if (d < 0){
+               if (d < 0) {
                   write("-");
                }
                write("INFINITY");
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/ClassParseException.java b/com.amd.aparapi/src/java/com/amd/aparapi/ClassParseException.java
index 25420161d5416c1be614e1af5fe413a6474ed5ce..72812b94265004265d558faffb75261adf72792a 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/ClassParseException.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/ClassParseException.java
@@ -81,7 +81,9 @@ package com.amd.aparapi;
       ACCESSEDOBJECTNONFINAL("Kernel array object member class must be final."), //
       ACCESSEDOBJECTFIELDNAMECONFLICT("Conflicting fields found in class hierarchy"), //
       ACCESSEDOBJECTONLYSUPPORTSSIMPLEPUTFIELD("We don't support putfield instructions beyond simple setters"), //
-      ACCESSEDOBJECTSETTERARRAY("Passing array arguments to Intrinsics in expression form is not supported");
+      ACCESSEDOBJECTSETTERARRAY("Passing array arguments to Intrinsics in expression form is not supported"), //
+      MULTIDIMENSIONARRAYASSIGN("Can't assign to two dimension array"), //
+      MULTIDIMENSIONARRAYACCESS("Can't access through a two dimensional array");
       private String description;
 
       TYPE(String _description) {
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java b/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
index bf400ef2a874e874f8e244c1b47b2614bf994588..9f82ffa02dd0adcf66ba900df8e4362cbab61f60 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
@@ -45,6 +45,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -280,6 +281,7 @@ class MethodModel{
          if ((!Config.enableSWITCH) && (instruction instanceof I_LOOKUPSWITCH || instruction instanceof I_TABLESWITCH)) {
             throw new ClassParseException(instruction, ClassParseException.TYPE.SWITCH);
          }
+
          if (!Config.enableMETHODARRAYPASSING) {
             if (instruction instanceof MethodCall) {
                MethodCall methodCall = (MethodCall) instruction;
@@ -1502,6 +1504,30 @@ class MethodModel{
 
          foldExpressions();
 
+         // Attempt to detect accesses through multi-dimension arrays. 
+         // This was issue 10 in open source release http://code.google.com/p/aparapi/issues/detail?id=10
+         for (Entry<Integer, Instruction> instructionEntry : pcMap.entrySet()) {
+            Instruction instruction = instructionEntry.getValue();
+            if (instruction instanceof AccessArrayElement) {
+               AccessArrayElement accessArrayElement = (AccessArrayElement) instruction;
+               Instruction accessed = accessArrayElement.getArrayRef();
+               // System.out.println("accessed "+accessed);
+               if (accessed instanceof AccessArrayElement) {
+                  throw new ClassParseException(ClassParseException.TYPE.MULTIDIMENSIONARRAYACCESS);
+               }
+
+            }
+            if (instruction instanceof AssignToArrayElement) {
+               AssignToArrayElement assignToArrayElement = (AssignToArrayElement) instruction;
+               Instruction assigned = assignToArrayElement.getArrayRef();
+
+               // System.out.println("assigned "+assigned);
+               if (assigned instanceof AccessArrayElement) {
+                  throw new ClassParseException(ClassParseException.TYPE.MULTIDIMENSIONARRAYASSIGN);
+               }
+
+            }
+         }
          // Accessor conversion only works on member object arrays
          if (entrypoint != null && _method.getClassModel() != entrypoint.getClassModel()) {
             if (logger.isLoggable(Level.FINE)) {