diff --git a/src/main/java/org/sablecc/sablecc/parser/Parser.java b/src/main/java/org/sablecc/sablecc/parser/Parser.java
index b44a61ba034208cdc4c6030e5a91aead98a1092c..57fa0e13e2fd01b8dc804004d05abb96d726abc6 100644
--- a/src/main/java/org/sablecc/sablecc/parser/Parser.java
+++ b/src/main/java/org/sablecc/sablecc/parser/Parser.java
@@ -123,25 +123,26 @@ public class Parser implements IParser
     private int goTo(int index)
     {
         int state = state();
+        int[][] table = gotoTable[index];
         int low = 1;
-        int high = gotoTable[index].length - 1;
-        int value = gotoTable[index][0][1];
+        int high = table.length - 1;
+        int value = table[0][1];
 
         while(low <= high)
         {
             int middle = (low + high) >>> 1;
 
-            if(state < gotoTable[index][middle][0])
+            if(state < table[middle][0])
             {
                 high = middle - 1;
             }
-            else if(state > gotoTable[index][middle][0])
+            else if(state > table[middle][0])
             {
                 low = middle + 1;
             }
             else
             {
-                value = gotoTable[index][middle][1];
+                value = table[middle][1];
                 break;
             }
         }
@@ -185,28 +186,29 @@ public class Parser implements IParser
             }
 
             int state = state();
-            int action = Parser.actionTable[state][0][1];
-            int destination = Parser.actionTable[state][0][2];
+            int[][] table = actionTable[state];
+            int action = table[0][1];
+            int destination = table[0][2];
 
             int low = 1;
-            int high = Parser.actionTable[state].length - 1;
+            int high = table.length - 1;
 
             while(low <= high)
             {
                 int middle = (low + high) >>> 1;
 
-                if(index < Parser.actionTable[state][middle][0])
+                if(index < table[middle][0])
                 {
                     high = middle - 1;
                 }
-                else if(index > Parser.actionTable[state][middle][0])
+                else if(index > table[middle][0])
                 {
                     low = middle + 1;
                 }
                 else
                 {
-                    action = Parser.actionTable[state][middle][1];
-                    destination = Parser.actionTable[state][middle][2];
+                    action = table[middle][1];
+                    destination = table[middle][2];
                     break;
                 }
             }
diff --git a/src/main/resources/org/sablecc/sablecc/parser.txt b/src/main/resources/org/sablecc/sablecc/parser.txt
index 3d1db583d18ae18a1798d6fdd519869911b80ede..f87cb07cc4cd10112f9b6cdd5ed7f2cd911ceab2 100644
--- a/src/main/resources/org/sablecc/sablecc/parser.txt
+++ b/src/main/resources/org/sablecc/sablecc/parser.txt
@@ -155,25 +155,26 @@ Macro:ParserCommon
     private int goTo(int index)
     {
         int state = state();
+        int[][] table = gotoTable[index];
         int low = 1;
-        int high = gotoTable[index].length - 1;
-        int value = gotoTable[index][0][1];
+        int high = table.length - 1;
+        int value = table[0][1];
 
         while(low <= high)
         {
             int middle = (low + high) >>> 1;
 
-            if(state < gotoTable[index][middle][0])
+            if(state < table[middle][0])
             {
                 high = middle - 1;
             }
-            else if(state > gotoTable[index][middle][0])
+            else if(state > table[middle][0])
             {
                 low = middle + 1;
             }
             else
             {
-                value = gotoTable[index][middle][1];
+                value = table[middle][1];
                 break;
             }
         }
@@ -217,28 +218,29 @@ Macro:ParserCommon
             }
 
             int state = state();
-            int action = Parser.actionTable[state][0][1];
-            int destination = Parser.actionTable[state][0][2];
+            int[][] table = actionTable[state];
+            int action = table[0][1];
+            int destination = table[0][2];
 
             int low = 1;
-            int high = Parser.actionTable[state].length - 1;
+            int high = table.length - 1;
 
             while(low <= high)
             {
                 int middle = (low + high) >>> 1;
 
-                if(index < Parser.actionTable[state][middle][0])
+                if(index < table[middle][0])
                 {
                     high = middle - 1;
                 }
-                else if(index > Parser.actionTable[state][middle][0])
+                else if(index > table[middle][0])
                 {
                     low = middle + 1;
                 }
                 else
                 {
-                    action = Parser.actionTable[state][middle][1];
-                    destination = Parser.actionTable[state][middle][2];
+                    action = table[middle][1];
+                    destination = table[middle][2];
                     break;
                 }
             }