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 f1d66aa32206c7ce8cab44f9734ee9c7f5c3020d..9bead4395cc3ebbd18b7ee3040b3b5a6b517305a 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/BlockWriter.java
@@ -42,8 +42,8 @@ import java.util.Stack;
 import com.amd.aparapi.BranchSet.CompoundLogicalExpressionNode;
 import com.amd.aparapi.BranchSet.LogicalExpressionNode;
 import com.amd.aparapi.BranchSet.SimpleLogicalExpressionNode;
-import com.amd.aparapi.ClassModel.ConstantPool.MethodEntry;
 import com.amd.aparapi.ClassModel.LocalVariableInfo;
+import com.amd.aparapi.ClassModel.ConstantPool.MethodEntry;
 import com.amd.aparapi.InstructionSet.AccessArrayElement;
 import com.amd.aparapi.InstructionSet.AccessField;
 import com.amd.aparapi.InstructionSet.AccessInstanceField;
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/ClassModel.java b/com.amd.aparapi/src/java/com/amd/aparapi/ClassModel.java
index 26a1d05c8a2d04d37c26fd34b12b47fb2f6ec815..41fc4ef07e9e897b20c9164f25353b701346b86d 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/ClassModel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/ClassModel.java
@@ -499,8 +499,8 @@ class ClassModel{
          }
       }
       if (inMethod) {
-         methodDescription = new MethodDescription(className, methodName, stringStack.toArray(new String[0])[0],
-               methodStack.toArray(new String[0]));
+         methodDescription = new MethodDescription(className, methodName, stringStack.toArray(new String[0])[0], methodStack
+               .toArray(new String[0]));
       } else {
          System.out.println("can't convert to a description");
       }
@@ -548,7 +548,8 @@ class ClassModel{
       METHODHANDLE, //15
       METHODTYPE, //16
       UNUSED17,
-      INVOKEDYNAMIC//18
+      INVOKEDYNAMIC
+      //18
    };
 
    enum Access {
@@ -1903,7 +1904,7 @@ class ClassModel{
          }
       }
 
-       class LocalVariableTypeTableEntry extends AttributePoolEntry{
+      class LocalVariableTypeTableEntry extends AttributePoolEntry{
          private byte[] bytes;
 
          LocalVariableTypeTableEntry(ByteReader _byteReader, int _nameIndex, int _length) {
@@ -1920,7 +1921,6 @@ class ClassModel{
          }
       }
 
-
       class SourceFileEntry extends AttributePoolEntry{
          private int sourceFileIndex;
 
@@ -2386,6 +2386,10 @@ class ClassModel{
          return (getAttributePool().codeEntry.codeEntryAttributePool.localVariableTableEntry);
       }
 
+      void setLocalVariableTableEntry(LocalVariableTableEntry _localVariableTableEntry) {
+         getAttributePool().codeEntry.codeEntryAttributePool.localVariableTableEntry = _localVariableTableEntry;
+      }
+
       LocalVariableInfo getLocalVariable(int _pc, int _index) {
          return (getLocalVariableTableEntry().getVariable(_pc, _index));
       }
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/Entrypoint.java b/com.amd.aparapi/src/java/com/amd/aparapi/Entrypoint.java
index e9b7608a49a7bcc5e9f319d6283d2087077107c0..38bdbdf101588b961451ca1ddba493305812f5da 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/Entrypoint.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/Entrypoint.java
@@ -346,8 +346,8 @@ class Entrypoint{
          ArrayList<FieldEntry> structMemberSet = superCandidate.getStructMembers();
          for (FieldEntry f : structMemberSet) {
             if (f.getNameAndTypeEntry().getNameUTF8Entry().getUTF8().equals(accessedFieldName)
-                  && f.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8()
-                        .equals(field.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8())) {
+                  && f.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8().equals(
+                        field.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8())) {
 
                if (logger.isLoggable(Level.FINE)) {
                   logger.fine("Found match: " + accessedFieldName + " class: " + field.getClassEntry().getNameUTF8Entry().getUTF8()
@@ -377,8 +377,8 @@ class Entrypoint{
          ArrayList<FieldEntry> structMemberSet = memberClassModel.getStructMembers();
          for (FieldEntry f : structMemberSet) {
             if (f.getNameAndTypeEntry().getNameUTF8Entry().getUTF8().equals(accessedFieldName)
-                  && f.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8()
-                        .equals(field.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8())) {
+                  && f.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8().equals(
+                        field.getNameAndTypeEntry().getDescriptorUTF8Entry().getUTF8())) {
                found = true;
             }
          }
@@ -467,8 +467,8 @@ class Entrypoint{
                // Look for a intra-object call in a object member
                if (m == null) {
                   for (ClassModel c : allFieldsClasses.values()) {
-                     if (c.getClassWeAreModelling().getName()
-                           .equals(methodEntry.getClassEntry().getNameUTF8Entry().getUTF8().replace('/', '.'))) {
+                     if (c.getClassWeAreModelling().getName().equals(
+                           methodEntry.getClassEntry().getNameUTF8Entry().getUTF8().replace('/', '.'))) {
                         m = c.getMethod(methodEntry, (methodCall instanceof I_INVOKESPECIAL) ? true : false);
                         assert m != null;
                         break;
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java b/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java
index 79a39e4f8db6bbfbcd584e9adb5165456cc8e133..7322f52203373ea27cff1a58cca4cf2a14769799 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java
@@ -758,7 +758,8 @@ class ExpressionList{
             LocalVariableTableEntry<LocalVariableInfo> localVariableTable = methodModel.getMethod().getLocalVariableTableEntry();
             int startPc = Short.MAX_VALUE;
             if (Config.enableAllowMissingLocalVariableTable && localVariableTable == null) {
-               logger.warning("class does not contain a LocalVariableTable - but enableAllowMissingLocalVariableTable is set so we are ignoring");
+               logger
+                     .warning("class does not contain a LocalVariableTable - but enableAllowMissingLocalVariableTable is set so we are ignoring");
             } else {
                for (LocalVariableInfo localVariableInfo : localVariableTable) {
 
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java b/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java
index a9777fa033ae49b47d32989e270febc577a5cdcc..270df2647e112b026f86722e17098c07d8571085 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java
@@ -41,14 +41,34 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 
 import com.amd.aparapi.ClassModel.ConstantPool;
+import com.amd.aparapi.ClassModel.LocalVariableInfo;
+import com.amd.aparapi.ClassModel.LocalVariableTableEntry;
 import com.amd.aparapi.ClassModel.ConstantPool.Entry;
 import com.amd.aparapi.ClassModel.ConstantPool.FieldEntry;
 import com.amd.aparapi.ClassModel.ConstantPool.MethodEntry;
-import com.amd.aparapi.ClassModel.LocalVariableInfo;
-import com.amd.aparapi.ClassModel.LocalVariableTableEntry;
 
 class InstructionSet{
 
+   static enum LoadSpec {
+      NONE, //
+      F, // Float
+      D, // Double
+      I, // Integer
+      L, // Long
+      A, // Array
+      O, // Object
+   }
+
+   static enum StoreSpec {
+      NONE, //
+      F, // Float
+      D, // Double
+      I, // Integer
+      L, // Long
+      A, // Array
+      O, // Object
+   }
+
    static enum TypeSpec {
       NONE("none", "none", 0, 0), //
       Z("Z", "boolean", 4, 1), // Note 'Z' is the java code for 'boolean' type
@@ -314,7 +334,7 @@ class InstructionSet{
 
    static enum ByteCode {
       // name, operation type, immediateOperands, pop operands, push operands
-      NOP(null, ImmediateSpec.NONE, PopSpec.NONE, PushSpec.NONE, Operator.NONE), //
+      NOP(null, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.NONE, PopSpec.NONE, PushSpec.NONE, Operator.NONE), //
       ACONST_NULL(I_ACONST_NULL.class, PushSpec.N), //
       ICONST_M1(I_ICONST_M1.class, PushSpec.I), //
       ICONST_0(I_ICONST_0.class, PushSpec.I), // 
@@ -335,31 +355,31 @@ class InstructionSet{
       LDC(I_LDC.class, ImmediateSpec.Bcpci, PushSpec.IorForS), //
       LDC_W(I_LDC_W.class, ImmediateSpec.Scpci, PushSpec.IorForS), //
       LDC2_W(I_LDC2_W.class, ImmediateSpec.Scpci, PushSpec.LorD), //
-      ILOAD(I_ILOAD.class, ImmediateSpec.Blvti, PushSpec.I), //
-      LLOAD(I_LLOAD.class, ImmediateSpec.Blvti, PushSpec.L), //
-      FLOAD(I_FLOAD.class, ImmediateSpec.Blvti, PushSpec.F), //
-      DLOAD(I_DLOAD.class, ImmediateSpec.Blvti, PushSpec.D), //
-      ALOAD(I_ALOAD.class, ImmediateSpec.Blvti, PushSpec.O), //
-      ILOAD_0(I_ILOAD_0.class, PushSpec.I), //
-      ILOAD_1(I_ILOAD_1.class, PushSpec.I), //
-      ILOAD_2(I_ILOAD_2.class, PushSpec.I), //
-      ILOAD_3(I_ILOAD_3.class, PushSpec.I), //
-      LLOAD_0(I_LLOAD_0.class, PushSpec.L), //
-      LLOAD_1(I_LLOAD_1.class, PushSpec.L), //
-      LLOAD_2(I_LLOAD_2.class, PushSpec.L), //
-      LLOAD_3(I_LLOAD_3.class, PushSpec.L), //
-      FLOAD_0(I_FLOAD_0.class, PushSpec.F), //
-      FLOAD_1(I_FLOAD_1.class, PushSpec.F), //
-      FLOAD_2(I_FLOAD_2.class, PushSpec.F), //
-      FLOAD_3(I_FLOAD_3.class, PushSpec.F), //
-      DLOAD_0(I_DLOAD_0.class, PushSpec.D), //
-      DLOAD_1(I_DLOAD_1.class, PushSpec.D), //
-      DLOAD_2(I_DLOAD_2.class, PushSpec.D), //
-      DLOAD_3(I_DLOAD_3.class, PushSpec.D), //
-      ALOAD_0(I_ALOAD_0.class, PushSpec.O), //
-      ALOAD_1(I_ALOAD_1.class, PushSpec.O), //
-      ALOAD_2(I_ALOAD_2.class, PushSpec.O), //
-      ALOAD_3(I_ALOAD_3.class, PushSpec.O), //
+      ILOAD(I_ILOAD.class, LoadSpec.I, ImmediateSpec.Blvti, PushSpec.I), //
+      LLOAD(I_LLOAD.class, LoadSpec.L, ImmediateSpec.Blvti, PushSpec.L), //
+      FLOAD(I_FLOAD.class, LoadSpec.F, ImmediateSpec.Blvti, PushSpec.F), //
+      DLOAD(I_DLOAD.class, LoadSpec.F, ImmediateSpec.Blvti, PushSpec.D), //
+      ALOAD(I_ALOAD.class, LoadSpec.A, ImmediateSpec.Blvti, PushSpec.O), //
+      ILOAD_0(I_ILOAD_0.class, LoadSpec.I, PushSpec.I), //
+      ILOAD_1(I_ILOAD_1.class, LoadSpec.I, PushSpec.I), //
+      ILOAD_2(I_ILOAD_2.class, LoadSpec.I, PushSpec.I), //
+      ILOAD_3(I_ILOAD_3.class, LoadSpec.I, PushSpec.I), //
+      LLOAD_0(I_LLOAD_0.class, LoadSpec.L, PushSpec.L), //
+      LLOAD_1(I_LLOAD_1.class, LoadSpec.L, PushSpec.L), //
+      LLOAD_2(I_LLOAD_2.class, LoadSpec.L, PushSpec.L), //
+      LLOAD_3(I_LLOAD_3.class, LoadSpec.L, PushSpec.L), //
+      FLOAD_0(I_FLOAD_0.class, LoadSpec.F, PushSpec.F), //
+      FLOAD_1(I_FLOAD_1.class, LoadSpec.F, PushSpec.F), //
+      FLOAD_2(I_FLOAD_2.class, LoadSpec.F, PushSpec.F), //
+      FLOAD_3(I_FLOAD_3.class, LoadSpec.F, PushSpec.F), //
+      DLOAD_0(I_DLOAD_0.class, LoadSpec.D, PushSpec.D), //
+      DLOAD_1(I_DLOAD_1.class, LoadSpec.D, PushSpec.D), //
+      DLOAD_2(I_DLOAD_2.class, LoadSpec.D, PushSpec.D), //
+      DLOAD_3(I_DLOAD_3.class, LoadSpec.D, PushSpec.D), //
+      ALOAD_0(I_ALOAD_0.class, LoadSpec.A, PushSpec.O), //
+      ALOAD_1(I_ALOAD_1.class, LoadSpec.A, PushSpec.O), //
+      ALOAD_2(I_ALOAD_2.class, LoadSpec.A, PushSpec.O), //
+      ALOAD_3(I_ALOAD_3.class, LoadSpec.A, PushSpec.O), //
       IALOAD(I_IALOAD.class, PopSpec.AI, PushSpec.I), //
       LALOAD(I_LALOAD.class, PopSpec.AI, PushSpec.L), //
       FALOAD(I_FALOAD.class, PopSpec.AI, PushSpec.F), //
@@ -368,31 +388,31 @@ class InstructionSet{
       BALOAD(I_BALOAD.class, PopSpec.AI, PushSpec.I), //
       CALOAD(I_CALOAD.class, PopSpec.AI, PushSpec.I), //
       SALOAD(I_SALOAD.class, PopSpec.AI, PushSpec.I), //
-      ISTORE(I_ISTORE.class, ImmediateSpec.Blvti, PopSpec.I), //
-      LSTORE(I_LSTORE.class, ImmediateSpec.Blvti, PopSpec.L), //
-      FSTORE(I_FSTORE.class, ImmediateSpec.Blvti, PopSpec.F), //
-      DSTORE(I_DSTORE.class, ImmediateSpec.Blvti, PopSpec.D), //
-      ASTORE(I_ASTORE.class, ImmediateSpec.Blvti, PopSpec.O), //
-      ISTORE_0(I_ISTORE_0.class, PopSpec.I), //
-      ISTORE_1(I_ISTORE_1.class, PopSpec.I), //
-      ISTORE_2(I_ISTORE_2.class, PopSpec.I), //
-      ISTORE_3(I_ISTORE_3.class, PopSpec.I), //
-      LSTORE_0(I_LSTORE_0.class, PopSpec.L), //
-      LSTORE_1(I_LSTORE_1.class, PopSpec.L), //
-      LSTORE_2(I_LSTORE_2.class, PopSpec.L), //
-      LSTORE_3(I_LSTORE_3.class, PopSpec.L), //
-      FSTORE_0(I_FSTORE_0.class, PopSpec.F), //
-      FSTORE_1(I_FSTORE_1.class, PopSpec.F), //
-      FSTORE_2(I_FSTORE_2.class, PopSpec.F), //
-      FSTORE_3(I_FSTORE_3.class, PopSpec.F), //
-      DSTORE_0(I_DSTORE_0.class, PopSpec.D), //
-      DSTORE_1(I_DSTORE_1.class, PopSpec.D), //
-      DSTORE_2(I_DSTORE_2.class, PopSpec.D), //
-      DSTORE_3(I_DSTORE_3.class, PopSpec.D), //
-      ASTORE_0(I_ASTORE_0.class, PopSpec.O), //
-      ASTORE_1(I_ASTORE_1.class, PopSpec.O), //
-      ASTORE_2(I_ASTORE_2.class, PopSpec.O), //
-      ASTORE_3(I_ASTORE_3.class, PopSpec.O), //
+      ISTORE(I_ISTORE.class, StoreSpec.I, ImmediateSpec.Blvti, PopSpec.I), //
+      LSTORE(I_LSTORE.class, StoreSpec.L, ImmediateSpec.Blvti, PopSpec.L), //
+      FSTORE(I_FSTORE.class, StoreSpec.F, ImmediateSpec.Blvti, PopSpec.F), //
+      DSTORE(I_DSTORE.class, StoreSpec.D, ImmediateSpec.Blvti, PopSpec.D), //
+      ASTORE(I_ASTORE.class, StoreSpec.A, ImmediateSpec.Blvti, PopSpec.O), //
+      ISTORE_0(I_ISTORE_0.class, StoreSpec.I, PopSpec.I), //
+      ISTORE_1(I_ISTORE_1.class, StoreSpec.I, PopSpec.I), //
+      ISTORE_2(I_ISTORE_2.class, StoreSpec.I, PopSpec.I), //
+      ISTORE_3(I_ISTORE_3.class, StoreSpec.I, PopSpec.I), //
+      LSTORE_0(I_LSTORE_0.class, StoreSpec.L, PopSpec.L), //
+      LSTORE_1(I_LSTORE_1.class, StoreSpec.L, PopSpec.L), //
+      LSTORE_2(I_LSTORE_2.class, StoreSpec.L, PopSpec.L), //
+      LSTORE_3(I_LSTORE_3.class, StoreSpec.L, PopSpec.L), //
+      FSTORE_0(I_FSTORE_0.class, StoreSpec.F, PopSpec.F), //
+      FSTORE_1(I_FSTORE_1.class, StoreSpec.F, PopSpec.F), //
+      FSTORE_2(I_FSTORE_2.class, StoreSpec.F, PopSpec.F), //
+      FSTORE_3(I_FSTORE_3.class, StoreSpec.F, PopSpec.F), //
+      DSTORE_0(I_DSTORE_0.class, StoreSpec.D, PopSpec.D), //
+      DSTORE_1(I_DSTORE_1.class, StoreSpec.D, PopSpec.D), //
+      DSTORE_2(I_DSTORE_2.class, StoreSpec.D, PopSpec.D), //
+      DSTORE_3(I_DSTORE_3.class, StoreSpec.D, PopSpec.D), //
+      ASTORE_0(I_ASTORE_0.class, StoreSpec.A, PopSpec.O), //
+      ASTORE_1(I_ASTORE_1.class, StoreSpec.A, PopSpec.O), //
+      ASTORE_2(I_ASTORE_2.class, StoreSpec.A, PopSpec.O), //
+      ASTORE_3(I_ASTORE_3.class, StoreSpec.A, PopSpec.O), //
       IASTORE(I_IASTORE.class, PopSpec.AII), //
       LASTORE(I_LASTORE.class, PopSpec.AIL), //
       FASTORE(I_FASTORE.class, PopSpec.AIF), //
@@ -492,28 +512,34 @@ class InstructionSet{
       FRETURN(I_FRETURN.class, PopSpec.F), //
       DRETURN(I_DRETURN.class, PopSpec.D), //
       ARETURN(I_ARETURN.class, PopSpec.O), //
-      RETURN(I_RETURN.class, ImmediateSpec.NONE, PopSpec.NONE, PushSpec.NONE, Operator.NONE), //
+      RETURN(I_RETURN.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.NONE, PopSpec.NONE, PushSpec.NONE, Operator.NONE), //
       GETSTATIC(I_GETSTATIC.class, ImmediateSpec.Scpfi, PushSpec.UNKNOWN), //
       PUTSTATIC(I_PUTSTATIC.class, ImmediateSpec.Scpfi, PopSpec.UNKNOWN), //
-      GETFIELD(I_GETFIELD.class, ImmediateSpec.Scpfi, PopSpec.O, PushSpec.UNKNOWN, Operator.NONE), //
+      GETFIELD(I_GETFIELD.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Scpfi, PopSpec.O, PushSpec.UNKNOWN, Operator.NONE), //
       PUTFIELD(I_PUTFIELD.class, ImmediateSpec.Scpfi, PopSpec.OUNKNOWN), //
-      INVOKEVIRTUAL(I_INVOKEVIRTUAL.class, ImmediateSpec.Scpmi, PopSpec.OARGS, PushSpec.UNKNOWN, Operator.NONE), //
-      INVOKESPECIAL(I_INVOKESPECIAL.class, ImmediateSpec.Scpmi, PopSpec.OARGS, PushSpec.UNKNOWN, Operator.NONE), //
-      INVOKESTATIC(I_INVOKESTATIC.class, ImmediateSpec.Scpmi, PopSpec.ARGS, PushSpec.UNKNOWN, Operator.NONE), //
-      INVOKEINTERFACE(I_INVOKEINTERFACE.class, ImmediateSpec.ScpmiBB, PopSpec.OARGS, PushSpec.UNKNOWN, Operator.NONE), //
-      INVOKEDYNAMIC(I_INVOKEDYNAMIC.class, ImmediateSpec.ScpmiBB, PopSpec.OARGS, PushSpec.UNKNOWN, Operator.NONE), //
+      INVOKEVIRTUAL(I_INVOKEVIRTUAL.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Scpmi, PopSpec.OARGS, PushSpec.UNKNOWN,
+            Operator.NONE), //
+      INVOKESPECIAL(I_INVOKESPECIAL.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Scpmi, PopSpec.OARGS, PushSpec.UNKNOWN,
+            Operator.NONE), //
+      INVOKESTATIC(I_INVOKESTATIC.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Scpmi, PopSpec.ARGS, PushSpec.UNKNOWN,
+            Operator.NONE), //
+      INVOKEINTERFACE(I_INVOKEINTERFACE.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.ScpmiBB, PopSpec.OARGS,
+            PushSpec.UNKNOWN, Operator.NONE), //
+      INVOKEDYNAMIC(I_INVOKEDYNAMIC.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.ScpmiBB, PopSpec.OARGS, PushSpec.UNKNOWN,
+            Operator.NONE), //
 
       NEW(I_NEW.class, ImmediateSpec.Scpci, PushSpec.O), //
-      NEWARRAY(I_NEWARRAY.class, ImmediateSpec.Bconst, PopSpec.I, PushSpec.A, Operator.NONE), //
-      ANEWARRAY(I_ANEWARRAY.class, ImmediateSpec.Sconst, PopSpec.I, PushSpec.A, Operator.NONE), // 189
+      NEWARRAY(I_NEWARRAY.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Bconst, PopSpec.I, PushSpec.A, Operator.NONE), //
+      ANEWARRAY(I_ANEWARRAY.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Sconst, PopSpec.I, PushSpec.A, Operator.NONE), // 189
       ARRAYLENGTH(I_ARRAYLENGTH.class, PopSpec.A, PushSpec.I), // 190
       ATHROW(I_ATHROW.class, PopSpec.O, PushSpec.O), // 191
-      CHECKCAST(I_CHECKCAST.class, ImmediateSpec.Scpci, PopSpec.O, PushSpec.O, Operator.NONE), // 192
-      INSTANCEOF(I_INSTANCEOF.class, ImmediateSpec.Scpci, PopSpec.O, PushSpec.I, Operator.NONE), // 193
+      CHECKCAST(I_CHECKCAST.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Scpci, PopSpec.O, PushSpec.O, Operator.NONE), // 192
+      INSTANCEOF(I_INSTANCEOF.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.Scpci, PopSpec.O, PushSpec.I, Operator.NONE), // 193
       MONITORENTER(I_MONITORENTER.class, PopSpec.O), // 194
       MONITOREXIT(I_MONITOREXIT.class, PopSpec.O), // 195
-      WIDE(I_WIDE.class, ImmediateSpec.UNKNOWN, PopSpec.UNKNOWN, PushSpec.UNKNOWN, Operator.NONE), // 196
-      MULTIANEWARRAY(I_MULTIANEWARRAY.class, ImmediateSpec.ScpciBdim, PopSpec.UNKNOWN, PushSpec.A, Operator.NONE), // 197
+      WIDE(I_WIDE.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.UNKNOWN, PopSpec.UNKNOWN, PushSpec.UNKNOWN, Operator.NONE), // 196
+      MULTIANEWARRAY(I_MULTIANEWARRAY.class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.ScpciBdim, PopSpec.UNKNOWN, PushSpec.A,
+            Operator.NONE), // 197
       IFNULL(I_IFNULL.class, ImmediateSpec.Spc, PopSpec.O, Operator.EqualNULL), // 198
       IFNONNULL(I_IFNONNULL.class, ImmediateSpec.Spc, PopSpec.O, Operator.NotEqualNULL), // 199
       GOTO_W(I_GOTO_W.class, ImmediateSpec.Ipc), // 200
@@ -599,51 +625,71 @@ class InstructionSet{
 
       private Operator operator;
 
-      private ByteCode(Class<?> _class, ImmediateSpec _immediate, PopSpec _pop, PushSpec _push, Operator _operator) {
+      private LoadSpec loadSpec;
+
+      private StoreSpec storeSpec;
+
+      private ByteCode(Class<?> _class, LoadSpec _loadSpec, StoreSpec _storeSpec, ImmediateSpec _immediate, PopSpec _pop,
+            PushSpec _push, Operator _operator) {
          clazz = _class;
          immediate = _immediate;
          push = _push;
          pop = _pop;
          operator = _operator;
-
-         //    clazz = ByteCode.class.forName("com.amd.javalabs.classparser.InstructionSet$I_"+getName().toUpperCase(), true, ByteCode.class.getClassLoader());
-
+         loadSpec = _loadSpec;
+         storeSpec = _storeSpec;
       }
 
       private ByteCode(Class<?> _class, ImmediateSpec _immediate) {
-         this(_class, _immediate, PopSpec.NONE, PushSpec.NONE, Operator.NONE);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, _immediate, PopSpec.NONE, PushSpec.NONE, Operator.NONE);
       }
 
       private ByteCode(Class<?> _class, PushSpec _push) {
-         this(_class, ImmediateSpec.NONE, PopSpec.NONE, _push, Operator.NONE);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.NONE, PopSpec.NONE, _push, Operator.NONE);
+      }
+
+      private ByteCode(Class<?> _class, StoreSpec _store, ImmediateSpec _immediate, PopSpec _pop) {
+         this(_class, LoadSpec.NONE, _store, _immediate, _pop, PushSpec.NONE, Operator.NONE);
+      }
+
+      private ByteCode(Class<?> _class, StoreSpec _store, PopSpec _pop) {
+         this(_class, LoadSpec.NONE, _store, ImmediateSpec.NONE, _pop, PushSpec.NONE, Operator.NONE);
       }
 
       private ByteCode(Class<?> _class, ImmediateSpec _immediate, PopSpec _pop) {
-         this(_class, _immediate, _pop, PushSpec.NONE, Operator.NONE);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, _immediate, _pop, PushSpec.NONE, Operator.NONE);
       }
 
       private ByteCode(Class<?> _class, ImmediateSpec _immediate, PopSpec _pop, Operator _operator) {
-         this(_class, _immediate, _pop, PushSpec.NONE, _operator);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, _immediate, _pop, PushSpec.NONE, _operator);
+      }
+
+      private ByteCode(Class<?> _class, LoadSpec _load, ImmediateSpec _immediate, PushSpec _push) {
+         this(_class, _load, StoreSpec.NONE, _immediate, PopSpec.NONE, _push, Operator.NONE);
+      }
+
+      private ByteCode(Class<?> _class, LoadSpec _load, PushSpec _push) {
+         this(_class, _load, StoreSpec.NONE, ImmediateSpec.NONE, PopSpec.NONE, _push, Operator.NONE);
       }
 
       private ByteCode(Class<?> _class, ImmediateSpec _immediate, PushSpec _push) {
-         this(_class, _immediate, PopSpec.NONE, _push, Operator.NONE);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, _immediate, PopSpec.NONE, _push, Operator.NONE);
       }
 
       private ByteCode(Class<?> _class, PopSpec _pop, PushSpec _push) {
-         this(_class, ImmediateSpec.NONE, _pop, _push, Operator.NONE);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.NONE, _pop, _push, Operator.NONE);
       }
 
       private ByteCode(Class<?> _class, PopSpec _pop, PushSpec _push, Operator _operator) {
-         this(_class, ImmediateSpec.NONE, _pop, _push, _operator);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.NONE, _pop, _push, _operator);
       }
 
       private ByteCode(Class<?> _class, PopSpec _pop) {
-         this(_class, ImmediateSpec.NONE, _pop, PushSpec.NONE, Operator.NONE);
+         this(_class, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.NONE, _pop, PushSpec.NONE, Operator.NONE);
       }
 
       private ByteCode() {
-         this(null, ImmediateSpec.NONE, PopSpec.NONE, PushSpec.NONE, Operator.NONE);
+         this(null, LoadSpec.NONE, StoreSpec.NONE, ImmediateSpec.NONE, PopSpec.NONE, PushSpec.NONE, Operator.NONE);
       }
 
       int getCode() {
@@ -731,6 +777,14 @@ class InstructionSet{
       Operator getOperator() {
          return (operator);
       }
+
+      public LoadSpec getLoad() {
+         return (loadSpec);
+      }
+
+      public StoreSpec getStore() {
+         return (storeSpec);
+      }
    }
 
    static class CompositeInstruction extends Instruction{
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/InstructionViewer.java b/com.amd.aparapi/src/java/com/amd/aparapi/InstructionViewer.java
index ed9d7b8bf7e96b2275f1b33852da24c3b2a7c295..0f1dd65514238bd6f361a5fc305926bc91b96e3a 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/InstructionViewer.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/InstructionViewer.java
@@ -219,8 +219,8 @@ public class InstructionViewer implements Config.InstructionListener{
                panel.add(newComponent);
                layout.putConstraint(SpringLayout.NORTH, newComponent, INSET, (last == panel) ? SpringLayout.NORTH
                      : SpringLayout.SOUTH, last);
-               layout.putConstraint(SpringLayout.WEST, newComponent, INSET, SpringLayout.EAST,
-                     fieldToLabelMap.get(fieldWithWidestLabel));
+               layout.putConstraint(SpringLayout.WEST, newComponent, INSET, SpringLayout.EAST, fieldToLabelMap
+                     .get(fieldWithWidestLabel));
                layout.putConstraint(SpringLayout.EAST, newComponent, INSET, SpringLayout.EAST, panel);
             }
             last = newComponent;
diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/KernelWriter.java b/com.amd.aparapi/src/java/com/amd/aparapi/KernelWriter.java
index ef9146b62da9fce379f252e658939f72ee1d763e..1abf219bfddd9c356d84740938e88b9bfbcc4194 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/KernelWriter.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/KernelWriter.java
@@ -43,13 +43,13 @@ import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import com.amd.aparapi.ClassModel.ClassModelField;
+import com.amd.aparapi.ClassModel.LocalVariableInfo;
+import com.amd.aparapi.ClassModel.LocalVariableTableEntry;
 import com.amd.aparapi.ClassModel.AttributePool.RuntimeAnnotationsEntry;
 import com.amd.aparapi.ClassModel.AttributePool.RuntimeAnnotationsEntry.AnnotationInfo;
-import com.amd.aparapi.ClassModel.ClassModelField;
 import com.amd.aparapi.ClassModel.ConstantPool.FieldEntry;
 import com.amd.aparapi.ClassModel.ConstantPool.MethodEntry;
-import com.amd.aparapi.ClassModel.LocalVariableInfo;
-import com.amd.aparapi.ClassModel.LocalVariableTableEntry;
 import com.amd.aparapi.InstructionSet.AccessArrayElement;
 import com.amd.aparapi.InstructionSet.AssignToArrayElement;
 import com.amd.aparapi.InstructionSet.AssignToField;
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 a3948c075b560fbe685cc0d4e602ab02fcab55e1..b976eda8d3418a3ed7a671afb91e5678bf65b27a 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
@@ -44,18 +44,19 @@ import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 import java.util.Set;
+import java.util.Map.Entry;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import com.amd.aparapi.ClassModel.ClassModelMethod;
 import com.amd.aparapi.ClassModel.ConstantPool;
+import com.amd.aparapi.ClassModel.LocalVariableInfo;
+import com.amd.aparapi.ClassModel.LocalVariableTableEntry;
+import com.amd.aparapi.ClassModel.AttributePool.CodeEntry;
 import com.amd.aparapi.ClassModel.ConstantPool.FieldEntry;
 import com.amd.aparapi.ClassModel.ConstantPool.MethodReferenceEntry;
 import com.amd.aparapi.ClassModel.ConstantPool.MethodReferenceEntry.Arg;
-import com.amd.aparapi.ClassModel.LocalVariableInfo;
-import com.amd.aparapi.ClassModel.LocalVariableTableEntry;
 import com.amd.aparapi.InstructionPattern.InstructionMatch;
 import com.amd.aparapi.InstructionSet.AccessArrayElement;
 import com.amd.aparapi.InstructionSet.AccessField;
@@ -92,10 +93,12 @@ import com.amd.aparapi.InstructionSet.I_PUTSTATIC;
 import com.amd.aparapi.InstructionSet.I_TABLESWITCH;
 import com.amd.aparapi.InstructionSet.IncrementInstruction;
 import com.amd.aparapi.InstructionSet.InlineAssignInstruction;
+import com.amd.aparapi.InstructionSet.LoadSpec;
 import com.amd.aparapi.InstructionSet.MethodCall;
 import com.amd.aparapi.InstructionSet.MultiAssignInstruction;
 import com.amd.aparapi.InstructionSet.New;
 import com.amd.aparapi.InstructionSet.Return;
+import com.amd.aparapi.InstructionSet.StoreSpec;
 
 class MethodModel{
    static Logger logger = Logger.getLogger(Config.getLoggerName());
@@ -1452,6 +1455,164 @@ class MethodModel{
       init(_method);
    }
 
+   public static class FakeLocalVariableTableEntry implements LocalVariableTableEntry<LocalVariableInfo>{
+
+      public static class FakeLocalVariableInfo implements LocalVariableInfo{
+
+         @Override public int getEnd() {
+            // TODO Auto-generated method stub
+            return 0;
+         }
+
+         @Override public int getStart() {
+            // TODO Auto-generated method stub
+            return 0;
+         }
+
+         @Override public String getVariableDescriptor() {
+            // TODO Auto-generated method stub
+            return null;
+         }
+
+         @Override public int getVariableIndex() {
+            // TODO Auto-generated method stub
+            return 0;
+         }
+
+         @Override public String getVariableName() {
+            // TODO Auto-generated method stub
+            return null;
+         }
+
+         @Override public boolean isArray() {
+            // TODO Auto-generated method stub
+            return false;
+         }
+
+      }
+
+      List<LocalVariableInfo> list = new ArrayList<LocalVariableInfo>();
+
+      public static class SlotTable{
+         Slot[] slots;
+
+         public SlotTable(int _numberOfSlots, int _size) {
+            slots = new Slot[_numberOfSlots];
+            for (int i = 0; i < _numberOfSlots; i++) {
+               slots[i] = new Slot(_size);
+            }
+         }
+
+         public static class Slot{
+            public Slot(int _size) {
+               entries = new Entry[_size];
+               for (int i = 0; i < _size; i++) {
+                  entries[i] = new Entry(i);
+               }
+            }
+
+            int number;
+
+            public static class Entry{
+               int slotNumber;
+
+               public Entry(int _slotNumber) {
+                  slotNumber = _slotNumber;
+               }
+
+               LoadSpec loadSpec = LoadSpec.NONE;
+
+               StoreSpec storeSpec = StoreSpec.NONE;
+
+               public String toString() {
+                  if (loadSpec == LoadSpec.NONE && storeSpec == StoreSpec.NONE) {
+                     return ("  ");
+                  } else if (loadSpec != LoadSpec.NONE) {
+                     return ("L" + loadSpec);
+                  } else {
+                     return ("S" + storeSpec);
+                  }
+               }
+            }
+
+            Entry[] entries;
+
+            public Entry getEntry(int _row) {
+               return entries[_row];
+            }
+
+            public void setLoad(int pc, LoadSpec _loadSpec) {
+               entries[pc].loadSpec = _loadSpec;
+
+            }
+
+            public void setStore(int pc, StoreSpec _storeSpec) {
+               entries[pc].storeSpec = _storeSpec;
+
+            }
+         }
+
+         public String toString() {
+            StringBuilder sb = new StringBuilder();
+            for (int row = 0; row < slots[0].entries.length; row++) {
+               for (Slot slot : slots) {
+                  sb.append(slot.getEntry(row) + "|");
+               }
+               sb.append("\n");
+            }
+
+            return (sb.toString());
+
+         }
+
+         public void setLoad(int slot, int pc, LoadSpec _loadSpec) {
+            slots[slot].setLoad(pc, _loadSpec);
+
+         }
+
+         public void setStore(int slot, int pc, StoreSpec _storeSpec) {
+            slots[slot].setStore(pc, _storeSpec);
+
+         }
+      }
+
+      public FakeLocalVariableTableEntry(Map<Integer, Instruction> _pcMap, CodeEntry _codeEntry) {
+         int numberOfSlots = _codeEntry.getMaxLocals();
+         //  System.out.println("slots= " + numberOfSlots);
+         SlotTable slotTable = new SlotTable(numberOfSlots, _pcMap.size());
+         // System.out.println(slotTable);
+         for (Entry<Integer, Instruction> entry : _pcMap.entrySet()) {
+            int pc = entry.getKey();
+            Instruction instruction = entry.getValue();
+            LoadSpec loadSpec = instruction.getByteCode().getLoad();
+            StoreSpec storeSpec = instruction.getByteCode().getStore();
+            if (loadSpec != LoadSpec.NONE) {
+               slotTable.setLoad(((InstructionSet.LocalVariableTableIndexAccessor) instruction).getLocalVariableTableIndex(), pc,
+                     loadSpec);
+
+            }
+            if (storeSpec != StoreSpec.NONE) {
+               slotTable.setStore(((InstructionSet.LocalVariableTableIndexAccessor) instruction).getLocalVariableTableIndex(), pc,
+                     storeSpec);
+            }
+
+            //  System.out.println(" Instruction " + entry.getValue());
+         }
+         //  System.out.println(slotTable);
+
+      }
+
+      @Override public LocalVariableInfo getVariable(int pc, int index) {
+         // TODO Auto-generated method stub
+         return null;
+      }
+
+      @Override public Iterator<LocalVariableInfo> iterator() {
+         return list.iterator();
+      }
+
+   }
+
    private void init(ClassModelMethod _method) throws AparapiException {
       try {
          method = _method;
@@ -1475,11 +1636,18 @@ class MethodModel{
 
          LocalVariableTableEntry<LocalVariableInfo> localVariableTableEntry = method.getLocalVariableTableEntry();
          if (Config.enableAllowMissingLocalVariableTable && localVariableTableEntry == null) {
-            logger.warning("class does not contain a LocalVariableTable - but enableAllowMissingLocalVariableTable is set so we are ignoring");
+            logger
+                  .warning("class does not contain a LocalVariableTable - but enableAllowMissingLocalVariableTable is set so we are ignoring");
          } else {
             if (localVariableTableEntry == null) {
-               System.out.println("create local variable table");
-               throw new ClassParseException(ClassParseException.TYPE.MISSINGLOCALVARIABLETABLE);
+               //System.out.println("create local variable table");
+               localVariableTableEntry = new FakeLocalVariableTableEntry(pcMap, method.getCodeEntry());
+               method.setLocalVariableTableEntry(localVariableTableEntry);
+               localVariableTableEntry = method.getLocalVariableTableEntry();
+               if (localVariableTableEntry == null) {
+                  System.out.println("damn!");
+               }
+               //throw new ClassParseException(ClassParseException.TYPE.MISSINGLOCALVARIABLETABLE);
             }
             for (LocalVariableInfo localVariableInfo : localVariableTableEntry) {
                // TODO: What was the thinking here?