diff --git a/com.amd.aparapi/src/java/com/amd/aparapi/Config.java b/com.amd.aparapi/src/java/com/amd/aparapi/Config.java
index f1e479d3c3eb50f0926a6dd8822c330832673396..dad7ffb41ae8c7174cbfd412d26c260230bc4195 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/Config.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/Config.java
@@ -155,9 +155,7 @@ class Config{
 
    static final boolean enableSWITCH = Boolean.getBoolean(propPkgName + ".enable.SWITCH");
 
-   // Lambda testing requires this because static lambda methods currently do not have localvariabletables.  This may change when Java8 if finalized
-   static final boolean enableAllowMissingLocalVariableTable = Boolean.getBoolean(propPkgName
-         + ".enableAllowMissingLocalVariableTable");
+   public static boolean enableShowFakeLocalVariableTable = Boolean.getBoolean(propPkgName + ".enableShowFakeLocalVariableTable");
 
    // Logging setup
    private static final String logPropName = propPkgName + ".logLevel";
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 80437f1904ec563fc3b4002b4569f84e2ca9a10d..01e227303c832c4774df11536fc40453a425daa0 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/ExpressionList.java
@@ -757,21 +757,19 @@ class ExpressionList{
             // might be end of arbitrary scope
             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");
-            } else {
-               for (LocalVariableInfo localVariableInfo : localVariableTable) {
 
-                  if (localVariableInfo.getEnd() == _instruction.getThisPC()) {
-                     logger.fine(localVariableInfo.getVariableName() + "  scope  " + localVariableInfo.getStart() + " ,"
-                           + localVariableInfo.getEnd());
-                     if (localVariableInfo.getStart() < startPc) {
-                        startPc = localVariableInfo.getStart();
-                     }
-                  }
+            for (LocalVariableInfo localVariableInfo : localVariableTable) {
 
+               if (localVariableInfo.getEnd() == _instruction.getThisPC()) {
+                  logger.fine(localVariableInfo.getVariableName() + "  scope  " + localVariableInfo.getStart() + " ,"
+                        + localVariableInfo.getEnd());
+                  if (localVariableInfo.getStart() < startPc) {
+                     startPc = localVariableInfo.getStart();
+                  }
                }
+
             }
+
             if (startPc < Short.MAX_VALUE) {
                logger.fine("Scope block from " + startPc + " to  " + (tail.getThisPC() + tail.getLength()));
                System.out.println("Scope block from " + startPc + " to  " + (tail.getThisPC() + tail.getLength()));
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 c871ace4ac0861b1b3c86612a345a3240211d584..755a45db48ae748f4395be4a3af01e71a50d9904 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/InstructionSet.java
@@ -1283,7 +1283,8 @@ class InstructionSet{
       }
 
       @Override public boolean isDeclaration() {
-         LocalVariableInfo lvi = method.getLocalVariableTableEntry().getVariable(getThisPC() + getLength(), getLocalVariableTableIndex());
+         LocalVariableInfo lvi = method.getLocalVariableTableEntry().getVariable(getThisPC() + getLength(),
+               getLocalVariableTableIndex());
          return (lvi.getStart() == getThisPC() + getLength());
       }
 
@@ -1302,7 +1303,7 @@ class InstructionSet{
       }
 
       @Override public final LocalVariableInfo getLocalVariableInfo() {
-         
+
          return (method.getLocalVariableTableEntry().getVariable(getThisPC() + getLength(), getLocalVariableTableIndex()));
       }
    }
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 b7de1d4264adc6e6fdb2eb96d664106c11868486..e84715fd3bca6ff02ce384416f97d21d90b37790 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
@@ -38,12 +38,11 @@ under those regulations, please refer to the U.S. Bureau of Industry and Securit
 package com.amd.aparapi;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Comparator;
-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;
@@ -96,7 +95,6 @@ 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;
@@ -225,7 +223,7 @@ class MethodModel{
     * @return Map<Integer, Instruction> the returned pc to Instruction map
     */
    Map<Integer, Instruction> createListOfInstructions() throws ClassParseException {
-      Map<Integer, Instruction> pcMap = new HashMap<Integer, Instruction>();
+      Map<Integer, Instruction> pcMap = new LinkedHashMap<Integer, Instruction>();
       byte[] code = method.getCode();
 
       // We create a byteReader for reading the bytes from the code array
@@ -1480,8 +1478,11 @@ class MethodModel{
             startPc = _startPc;
             if (_storeSpec.equals(StoreSpec.A)) {
                name = "arr_" + _slotIndex;
+               descriptor = "/* arg */";
             } else {
                name = _storeSpec.toString().toLowerCase() + "_" + _slotIndex;
+               descriptor = _storeSpec.toString();
+
             }
          }
 
@@ -1534,78 +1535,53 @@ class MethodModel{
          MethodDescription description = ClassModel.getMethodDescription(_method.getDescriptor());
 
          String[] args = description.getArgs();
+
          int thisOffset = _method.isStatic() ? 0 : 1;
+
          Var[] vars = new Var[numberOfSlots + thisOffset];
          StoreSpec[] argsAsStoreSpecs = new StoreSpec[args.length + thisOffset];
          if (thisOffset == 1) {
             argsAsStoreSpecs[0] = StoreSpec.O;
             vars[0] = new Var(argsAsStoreSpecs[0], 0, 0, true, list.size());
             list.add(vars[0]);
+
          }
-         for (int i = thisOffset; i < args.length + thisOffset; i++) {
+         for (int i = 0; i < args.length; i++) {
             if (args[i].startsWith("[")) {
-               argsAsStoreSpecs[i] = StoreSpec.A;
+               argsAsStoreSpecs[i + thisOffset] = StoreSpec.A;
             } else {
-               argsAsStoreSpecs[i] = StoreSpec.valueOf(args[i].substring(0, 1));
+               argsAsStoreSpecs[i + thisOffset] = StoreSpec.valueOf(args[i].substring(0, 1));
             }
-            vars[i] = new Var(argsAsStoreSpecs[i], i, 0, true, list.size());
-            list.add(vars[i]);
+            vars[i + thisOffset] = new Var(argsAsStoreSpecs[i + thisOffset], i + thisOffset, 0, true, list.size());
+            list.add(vars[i + thisOffset]);
          }
          for (int i = args.length + thisOffset; i < numberOfSlots + thisOffset; i++) {
             vars[i] = new Var();
          }
 
-         //  System.out.println("slots= " + numberOfSlots);
-         // slotTable = new SlotTable(argsAsStoreSpecs, numberOfSlots, _pcMap);
-         // System.out.println(slotTable);
-
          int pc = 0;
+         Instruction instruction = null;
          for (Entry<Integer, Instruction> entry : _pcMap.entrySet()) {
             pc = entry.getKey();
-            Instruction instruction = entry.getValue();
-            LoadSpec loadSpec = instruction.getByteCode().getLoad();
+            instruction = entry.getValue();
             StoreSpec storeSpec = instruction.getByteCode().getStore();
 
-            int slotIndex = -1;
-
-            if (loadSpec != LoadSpec.NONE) {
-               slotIndex = ((InstructionSet.LocalVariableTableIndexAccessor) instruction).getLocalVariableTableIndex();
-               //  slotTable.setLoad(slotIndex, pc,
-               //    loadSpec);
-               if (vars[slotIndex].endPc <= pc) {
-                  vars[slotIndex].endPc = pc;
-               }
-
-            }
             if (storeSpec != StoreSpec.NONE) {
-
-               slotIndex = ((InstructionSet.LocalVariableTableIndexAccessor) instruction).getLocalVariableTableIndex();
-               // slotTable.setStore(slotIndex, pc,
-               //    storeSpec);
-               Var var = new Var(storeSpec, slotIndex, pc + 1, false, list.size()); // will get collected 
-               if (!vars[slotIndex].equals(var)) {
+               int slotIndex = ((InstructionSet.LocalVariableTableIndexAccessor) instruction).getLocalVariableTableIndex();
+               Var prevVar = vars[slotIndex];
+               Var var = new Var(storeSpec, slotIndex, pc + instruction.getLength(), false, list.size()); // will get collected 
+               if (!prevVar.equals(var)) {
+                  prevVar.endPc = pc;
                   vars[slotIndex] = var;
                   list.add(vars[slotIndex]);
                }
 
             }
-            // for (int i = 0; i < numberOfSlots; i++) {
-
-            //   System.out.print(vars[i] + "|");
-            // }
 
-            //  System.out.println(" Instruction " + entry.getValue() + " " + slotIndex);
          }
          for (int i = 0; i < numberOfSlots + thisOffset; i++) {
-            vars[i].endPc = pc + 1;
+            vars[i].endPc = pc + instruction.getLength();
          }
-         Arrays.sort(vars, new Comparator<Var>(){
-
-            @Override public int compare(Var o1, Var o2) {
-
-               return o1.startPc - o2.startPc;
-            }
-         });
 
          Collections.sort(list, new Comparator<LocalVariableInfo>(){
 
@@ -1614,29 +1590,31 @@ class MethodModel{
                return o1.getStart() - o2.getStart();
             }
          });
-         System.out.println(" LocalVariableTable:");
-         System.out.println(" Start  Length  Slot  Name   Signature");
+
+         int i = 0;
          for (LocalVariableInfo lvi : list) {
             Var var = (Var) lvi;
-            //  if (var.arg) {
-            //    var.endPc = pc+1;
-            //  }
-
-            System.out.println(String.format("%4d %4d %4d %8s %s", var.startPc, var.getLength(), var.variableIndex, var.name,
-                  var.descriptor));
 
-            // System.out.println(lvi);
+            var.variableIndex = i++;
+         }
+         if (Config.enableShowFakeLocalVariableTable) {
+            System.out.println("FakeLocalVariableTable:");
+            System.out.println(" Start  Length  Slot    Name   Signature");
+            for (LocalVariableInfo lvi : list) {
+               Var var = (Var) lvi;
+               System.out.println(String.format(" %5d   %5d  %4d  %8s     %s", var.startPc, var.getLength(), var.variableIndex,
+                     var.name, var.descriptor));
+            }
          }
-         //  System.out.println(slotTable);
 
       }
 
       @Override public LocalVariableInfo getVariable(int _pc, int _index) {
          LocalVariableInfo returnValue = null;
-         // System.out.println("pc = " + _pc + " index = " + _index);
+         //  System.out.println("pc = " + _pc + " index = " + _index);
          for (LocalVariableInfo localVariableInfo : list) {
-            // System.out.println("   start=" + localVariableInfo.getStart() + " length=" + localVariableInfo.getLength()
-            // + " varidx=" + localVariableInfo.getVariableIndex());
+            //  System.out.println("   start=" + localVariableInfo.getStart() + " length=" + localVariableInfo.getLength()
+            //   + " varidx=" + localVariableInfo.getVariableIndex());
             if (_pc >= localVariableInfo.getStart() - 1 && _pc <= (localVariableInfo.getStart() + localVariableInfo.getLength())
                   && _index == localVariableInfo.getVariableIndex()) {
                returnValue = localVariableInfo;
@@ -1685,25 +1663,15 @@ class MethodModel{
          Map<Integer, Instruction> pcMap = createListOfInstructions();
 
          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");
-         } else {
-            if (localVariableTableEntry == null) {
-               //System.out.println("create local variable table");
-
-               localVariableTableEntry = new FakeLocalVariableTableEntry(pcMap, method);
 
-               method.setLocalVariableTableEntry(localVariableTableEntry);
+         if (localVariableTableEntry == null) {
+            localVariableTableEntry = new FakeLocalVariableTableEntry(pcMap, method);
 
-               //throw new ClassParseException(ClassParseException.TYPE.MISSINGLOCALVARIABLETABLE);
-            }
-            for (LocalVariableInfo localVariableInfo : localVariableTableEntry) {
-               // TODO: What was the thinking here?
-               final boolean DISALLOWARRAYLOCALVAR = false;
-               if (DISALLOWARRAYLOCALVAR && localVariableInfo.isArray()) {
-                  throw new ClassParseException(ClassParseException.TYPE.ARRAYLOCALVARIABLE);
-               }
-            }
+            method.setLocalVariableTableEntry(localVariableTableEntry);
+            logger.warning("Method "
+                  + method.getName()
+                  + method.getDescriptor()
+                  + " does not contain a LocalVariableTable entry (source not compiled with -g) aparapi will attempt to create a synthetic table based on bytecode. This is experimental!!");
          }
 
          // pass #2 build branch graph