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 9bead4395cc3ebbd18b7ee3040b3b5a6b517305a..f1d66aa32206c7ce8cab44f9734ee9c7f5c3020d 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.LocalVariableInfo;
 import com.amd.aparapi.ClassModel.ConstantPool.MethodEntry;
+import com.amd.aparapi.ClassModel.LocalVariableInfo;
 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 41fc4ef07e9e897b20c9164f25353b701346b86d..ae756bffa81b7828b2255156e4b8c469af0042f0 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");
       }
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 38bdbdf101588b961451ca1ddba493305812f5da..e9b7608a49a7bcc5e9f319d6283d2087077107c0 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 7322f52203373ea27cff1a58cca4cf2a14769799..79a39e4f8db6bbfbcd584e9adb5165456cc8e133 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java
@@ -758,8 +758,7 @@ 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 270df2647e112b026f86722e17098c07d8571085..4ef003c2ad97c549d14a9e37c188523e363dd68d 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java
@@ -41,11 +41,11 @@ 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{
 
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 0f1dd65514238bd6f361a5fc305926bc91b96e3a..ed9d7b8bf7e96b2275f1b33852da24c3b2a7c295 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 1abf219bfddd9c356d84740938e88b9bfbcc4194..ef9146b62da9fce379f252e658939f72ee1d763e 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 fa7579cfac383664c326ee2626128eae27b81a4b..93ba0e510d319aaae4e007e648909e8ab6bbceec 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
@@ -41,23 +41,23 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
+import java.util.LinkedHashMap;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.Set;
 import java.util.Map.Entry;
+import java.util.Set;
 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.MethodDescription;
-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.ClassModel.MethodDescription;
 import com.amd.aparapi.InstructionPattern.InstructionMatch;
 import com.amd.aparapi.InstructionSet.AccessArrayElement;
 import com.amd.aparapi.InstructionSet.AccessField;
@@ -1460,59 +1460,90 @@ class MethodModel{
 
       public static class FakeLocalVariableInfo implements LocalVariableInfo{
 
+         int start;
+
+         int end;
+
+         String name;
+
+         String descriptor;
+
+         boolean isArray;
+
+         int variableIndex;
+
+         public FakeLocalVariableInfo(int _variableIndex, int _start, int _end, String _variableName, String _variableDescriptor,
+               boolean _isArray) {
+            variableIndex = _variableIndex;
+            start = _start;
+            end = _end;
+            name = _variableName;
+            descriptor = _variableDescriptor;
+            isArray = _isArray;
+         }
+
          @Override public int getEnd() {
-            // TODO Auto-generated method stub
-            return 0;
+            return (end);
          }
 
          @Override public int getStart() {
-            // TODO Auto-generated method stub
-            return 0;
+            return (start);
          }
 
          @Override public String getVariableDescriptor() {
-            // TODO Auto-generated method stub
-            return null;
+            return (descriptor);
          }
 
          @Override public int getVariableIndex() {
-            // TODO Auto-generated method stub
-            return 0;
+            throw new IllegalStateException();
+
          }
 
          @Override public String getVariableName() {
-            // TODO Auto-generated method stub
-            return null;
+
+            return (name);
          }
 
          @Override public boolean isArray() {
-            // TODO Auto-generated method stub
-            return false;
+
+            return (isArray);
          }
 
       }
 
       List<LocalVariableInfo> list = new ArrayList<LocalVariableInfo>();
 
-      public static class SlotTable{
+      public class SlotTable{
          Slot[] slots;
 
+         int slotSize;
+
+         Map.Entry<Integer, Instruction> pcMapEntries[];
+
          StoreSpec[] argsAsStoreSlots;
 
-         public SlotTable(StoreSpec[] _argsAsStoreSlots, int _numberOfSlots, int _size) {
+         public SlotTable(StoreSpec[] _argsAsStoreSlots, int _numberOfSlots, Map<Integer, Instruction> _pcMap) {
+            slotSize = _pcMap.size();
+            pcMapEntries = new Map.Entry[slotSize];
+            int count = 0;
+            for (Map.Entry<Integer, Instruction> entry : _pcMap.entrySet()) {
+               pcMapEntries[count++] = entry;
+            }
+
             argsAsStoreSlots = _argsAsStoreSlots;
             slots = new Slot[_numberOfSlots];
             for (int i = 0; i < _numberOfSlots; i++) {
-               slots[i] = new Slot(i < argsAsStoreSlots.length ? argsAsStoreSlots[i] : StoreSpec.NONE, _size);
+               slots[i] = new Slot(i < argsAsStoreSlots.length ? argsAsStoreSlots[i] : StoreSpec.NONE, slotSize);
             }
          }
 
-         public static class Slot{
+         public class Slot{
+
             public Slot(StoreSpec _defaultStoreSpec, int _size) {
                defaultStoreSpec = _defaultStoreSpec;
-               entries = new Entry[_size];
-               for (int i = 0; i < _size; i++) {
-                  entries[i] = new Entry(i);
+               entries = new LinkedHashMap<Integer, Entry>();
+               for (Map.Entry<Integer, Instruction> pcMapEntry : pcMapEntries) {
+                  entries.put(pcMapEntry.getKey(), new Entry(pcMapEntry.getKey()));
                }
             }
 
@@ -1520,11 +1551,12 @@ class MethodModel{
 
             int number;
 
-            public static class Entry{
+            public class Entry{
                int slotNumber;
 
                public Entry(int _slotNumber) {
                   slotNumber = _slotNumber;
+
                }
 
                LoadSpec loadSpec = LoadSpec.NONE;
@@ -1542,25 +1574,56 @@ class MethodModel{
                }
             }
 
-            Entry[] entries;
+            Map<Integer, Entry> entries;
 
-            public Entry getEntry(int _row) {
-               return entries[_row];
+            public Entry getEntry(int _pc) {
+               return entries.get(_pc);
             }
 
-            public void setLoad(int pc, LoadSpec _loadSpec) {
-               entries[pc].loadSpec = _loadSpec;
+            public void setLoad(int _pc, LoadSpec _loadSpec) {
+               entries.get(_pc).loadSpec = _loadSpec;
 
             }
 
-            public void setStore(int pc, StoreSpec _storeSpec) {
-               entries[pc].storeSpec = _storeSpec;
+            public void setStore(int _pc, StoreSpec _storeSpec) {
+               entries.get(_pc).storeSpec = _storeSpec;
 
             }
 
             public StoreSpec getDefaultStoreSpec() {
                return (defaultStoreSpec);
             }
+
+            public LocalVariableInfo createLocalVariableInfo(int _index) {
+               StoreSpec storeSpec = defaultStoreSpec;
+               int variableIndex = 0;
+               int start = 0;
+               int end = 0;
+               String variableName = null;
+               String variableDescription = null;
+
+               String state = storeSpec == StoreSpec.NONE ? "NONE" : "STARTED";
+
+               int count = 0;
+               for (Map.Entry<Integer, Entry> entry : entries.entrySet()) {
+
+                  if (entry.getValue().storeSpec != StoreSpec.NONE) {
+                     if (state.equals("NONE")) {
+                        storeSpec = entry.getValue().storeSpec;
+                        state = "STARTED";
+                        start = end = entry.getKey();
+                     } else if (storeSpec != entry.getValue().storeSpec) {
+                        storeSpec = entry.getValue().storeSpec;
+                        state = "STARTED";
+                        start = end = entry.getKey();
+                     }
+
+                  }
+                  count++;
+               }
+               return ((LocalVariableInfo) new FakeLocalVariableInfo(variableIndex, start, end, variableName, variableDescription,
+                     false));
+            }
          }
 
          public String toString() {
@@ -1580,10 +1643,12 @@ class MethodModel{
                sb.append("--|");
             }
             sb.append("\n");
-            for (int row = 0; row < slots[0].entries.length; row++) {
+            for (Map.Entry<Integer, Instruction> pcMapEntry : pcMapEntries) {
+
                for (Slot slot : slots) {
-                  sb.append(slot.getEntry(row) + "|");
+                  sb.append(slot.getEntry(pcMapEntry.getKey()) + "|");
                }
+               sb.append(" " + pcMapEntry.getValue());
                sb.append("\n");
             }
 
@@ -1602,6 +1667,8 @@ class MethodModel{
          }
       }
 
+      SlotTable slotTable;
+
       public FakeLocalVariableTableEntry(Map<Integer, Instruction> _pcMap, ClassModelMethod _method) {
          int numberOfSlots = _method.getCodeEntry().getMaxLocals();
 
@@ -1617,7 +1684,7 @@ class MethodModel{
          }
 
          //  System.out.println("slots= " + numberOfSlots);
-         SlotTable slotTable = new SlotTable(argsAsStoreSpecs, numberOfSlots, _pcMap.size());
+         slotTable = new SlotTable(argsAsStoreSpecs, numberOfSlots, _pcMap);
          // System.out.println(slotTable);
          for (Entry<Integer, Instruction> entry : _pcMap.entrySet()) {
             int pc = entry.getKey();
@@ -1635,15 +1702,14 @@ class MethodModel{
                      storeSpec);
             }
 
-            System.out.println(" Instruction " + entry.getValue());
+            // 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 LocalVariableInfo getVariable(int _pc, int _index) {
+         return (slotTable.slots[_index].createLocalVariableInfo(_index));
       }
 
       @Override public Iterator<LocalVariableInfo> iterator() {
@@ -1675,8 +1741,7 @@ 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");