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 f16481b08d408316653aa6ce12a90c65186ef23c..b7de1d4264adc6e6fdb2eb96d664106c11868486 100644
--- a/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
+++ b/com.amd.aparapi/src/java/com/amd/aparapi/MethodModel.java
@@ -38,6 +38,9 @@ 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;
@@ -1527,11 +1530,19 @@ class MethodModel{
 
       public FakeLocalVariableTableEntry(Map<Integer, Instruction> _pcMap, ClassModelMethod _method) {
          int numberOfSlots = _method.getCodeEntry().getMaxLocals();
-         Var[] vars = new Var[numberOfSlots];
+
          MethodDescription description = ClassModel.getMethodDescription(_method.getDescriptor());
+
          String[] args = description.getArgs();
-         StoreSpec[] argsAsStoreSpecs = new StoreSpec[args.length];
-         for (int i = 0; i < args.length; i++) {
+         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++) {
             if (args[i].startsWith("[")) {
                argsAsStoreSpecs[i] = StoreSpec.A;
             } else {
@@ -1540,7 +1551,7 @@ class MethodModel{
             vars[i] = new Var(argsAsStoreSpecs[i], i, 0, true, list.size());
             list.add(vars[i]);
          }
-         for (int i = args.length; i < numberOfSlots; i++) {
+         for (int i = args.length + thisOffset; i < numberOfSlots + thisOffset; i++) {
             vars[i] = new Var();
          }
 
@@ -1571,31 +1582,45 @@ class MethodModel{
                slotIndex = ((InstructionSet.LocalVariableTableIndexAccessor) instruction).getLocalVariableTableIndex();
                // slotTable.setStore(slotIndex, pc,
                //    storeSpec);
-               Var var = new Var(storeSpec, slotIndex, pc, false, list.size()); // will get collected 
+               Var var = new Var(storeSpec, slotIndex, pc + 1, false, list.size()); // will get collected 
                if (!vars[slotIndex].equals(var)) {
                   vars[slotIndex] = var;
                   list.add(vars[slotIndex]);
                }
 
             }
-            for (int i = 0; i < numberOfSlots; i++) {
+            // for (int i = 0; i < numberOfSlots; i++) {
 
-               System.out.print(vars[i] + "|");
-            }
+            //   System.out.print(vars[i] + "|");
+            // }
 
-            System.out.println(" Instruction " + entry.getValue() + " " + slotIndex);
+            //  System.out.println(" Instruction " + entry.getValue() + " " + slotIndex);
          }
-         for (int i = 0; i < numberOfSlots; i++) {
-
+         for (int i = 0; i < numberOfSlots + thisOffset; i++) {
             vars[i].endPc = pc + 1;
          }
+         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>(){
+
+            @Override public int compare(LocalVariableInfo o1, LocalVariableInfo o2) {
+
+               return o1.getStart() - o2.getStart();
+            }
+         });
          System.out.println(" LocalVariableTable:");
          System.out.println(" Start  Length  Slot  Name   Signature");
          for (LocalVariableInfo lvi : list) {
             Var var = (Var) lvi;
-            if (var.arg) {
-               var.endPc = pc;
-            }
+            //  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));