diff --git a/src/org/apache/xpath/axes/BasicTestIterator.java b/src/org/apache/xpath/axes/BasicTestIterator.java
index c5c12cd..52a3a2e 100644
--- a/src/org/apache/xpath/axes/BasicTestIterator.java
+++ b/src/org/apache/xpath/axes/BasicTestIterator.java
@@ -25,6 +25,7 @@
 import org.apache.xml.dtm.DTMIterator;
 import org.apache.xml.utils.PrefixResolver;
 import org.apache.xpath.compiler.Compiler;
+import org.apache.xpath.compiler.OpMap;
 
 /**
  * Base for iterators that handle predicates.  Does the basic next 
@@ -74,7 +75,7 @@
   {
     super(compiler, opPos, analysis, false);
     
-    int firstStepPos = compiler.getFirstChildPos(opPos);
+    int firstStepPos = OpMap.getFirstChildPos(opPos);
     int whatToShow = compiler.getWhatToShow(firstStepPos);
 
     if ((0 == (whatToShow
diff --git a/src/org/apache/xpath/axes/DescendantIterator.java b/src/org/apache/xpath/axes/DescendantIterator.java
index f3f04c1..4bc3790 100644
--- a/src/org/apache/xpath/axes/DescendantIterator.java
+++ b/src/org/apache/xpath/axes/DescendantIterator.java
@@ -29,6 +29,7 @@
 import org.apache.xpath.XPathContext;
 import org.apache.xpath.compiler.Compiler;
 import org.apache.xpath.compiler.OpCodes;
+import org.apache.xpath.compiler.OpMap;
 import org.apache.xpath.patterns.NodeTest;
 
 /**
@@ -55,7 +56,7 @@
 
     super(compiler, opPos, analysis, false);
 
-    int firstStepPos = compiler.getFirstChildPos(opPos);
+    int firstStepPos = OpMap.getFirstChildPos(opPos);
     int stepType = compiler.getOp(firstStepPos);
 
     boolean orSelf = (OpCodes.FROM_DESCENDANTS_OR_SELF == stepType);
diff --git a/src/org/apache/xpath/axes/MatchPatternIterator.java b/src/org/apache/xpath/axes/MatchPatternIterator.java
index 86310f1..a152205 100644
--- a/src/org/apache/xpath/axes/MatchPatternIterator.java
+++ b/src/org/apache/xpath/axes/MatchPatternIterator.java
@@ -26,6 +26,7 @@
 import org.apache.xml.dtm.DTMIterator;
 import org.apache.xpath.XPathContext;
 import org.apache.xpath.compiler.Compiler;
+import org.apache.xpath.compiler.OpMap;
 import org.apache.xpath.objects.XObject;
 import org.apache.xpath.patterns.NodeTest;
 import org.apache.xpath.patterns.StepPattern;
@@ -76,7 +77,7 @@
 
     super(compiler, opPos, analysis, false);
 
-    int firstStepPos = compiler.getFirstChildPos(opPos);
+    int firstStepPos = OpMap.getFirstChildPos(opPos);
 
     m_pattern = WalkerFactory.loadSteps(this, compiler, firstStepPos, 0); 
 
diff --git a/src/org/apache/xpath/axes/OneStepIterator.java b/src/org/apache/xpath/axes/OneStepIterator.java
index 6d48f42..70c9c56 100644
--- a/src/org/apache/xpath/axes/OneStepIterator.java
+++ b/src/org/apache/xpath/axes/OneStepIterator.java
@@ -27,6 +27,7 @@
 import org.apache.xpath.Expression;
 import org.apache.xpath.XPathContext;
 import org.apache.xpath.compiler.Compiler;
+import org.apache.xpath.compiler.OpMap;
 
 /**
  * This class implements a general iterator for
@@ -56,7 +57,7 @@
           throws javax.xml.transform.TransformerException
   {
     super(compiler, opPos, analysis);
-    int firstStepPos = compiler.getFirstChildPos(opPos);
+    int firstStepPos = OpMap.getFirstChildPos(opPos);
     
     m_axis = WalkerFactory.getAxisFromStep(compiler, firstStepPos);
     
diff --git a/src/org/apache/xpath/axes/OneStepIteratorForward.java b/src/org/apache/xpath/axes/OneStepIteratorForward.java
index 920cd9d..2fe1583 100644
--- a/src/org/apache/xpath/axes/OneStepIteratorForward.java
+++ b/src/org/apache/xpath/axes/OneStepIteratorForward.java
@@ -24,6 +24,7 @@
 import org.apache.xml.dtm.DTMFilter;
 import org.apache.xpath.Expression;
 import org.apache.xpath.compiler.Compiler;
+import org.apache.xpath.compiler.OpMap;
 
 /**
  * This class implements a general iterator for
@@ -52,7 +53,7 @@
           throws javax.xml.transform.TransformerException
   {
     super(compiler, opPos, analysis);
-    int firstStepPos = compiler.getFirstChildPos(opPos);
+    int firstStepPos = OpMap.getFirstChildPos(opPos);
     
     m_axis = WalkerFactory.getAxisFromStep(compiler, firstStepPos);
     
diff --git a/src/org/apache/xpath/axes/UnionPathIterator.java b/src/org/apache/xpath/axes/UnionPathIterator.java
index b6bce33..c356f69 100644
--- a/src/org/apache/xpath/axes/UnionPathIterator.java
+++ b/src/org/apache/xpath/axes/UnionPathIterator.java
@@ -28,6 +28,7 @@
 import org.apache.xpath.XPathVisitor;
 import org.apache.xpath.compiler.Compiler;
 import org.apache.xpath.compiler.OpCodes;
+import org.apache.xpath.compiler.OpMap;
 
 /**
  * This class extends NodeSetDTM, which implements DTMIterator,
@@ -158,7 +159,7 @@
 
     super();
 
-    opPos = compiler.getFirstChildPos(opPos);
+    opPos = OpMap.getFirstChildPos(opPos);
 
     loadLocationPaths(compiler, opPos, 0);
   }
diff --git a/src/org/apache/xpath/axes/WalkerFactory.java b/src/org/apache/xpath/axes/WalkerFactory.java
index 5939b0d..5117d48 100644
--- a/src/org/apache/xpath/axes/WalkerFactory.java
+++ b/src/org/apache/xpath/axes/WalkerFactory.java
@@ -28,6 +28,7 @@
 import org.apache.xpath.compiler.Compiler;
 import org.apache.xpath.compiler.FunctionTable;
 import org.apache.xpath.compiler.OpCodes;
+import org.apache.xpath.compiler.OpMap;
 import org.apache.xpath.objects.XNumber;
 import org.apache.xpath.patterns.ContextMatchStepPattern;
 import org.apache.xpath.patterns.FunctionPattern;
@@ -160,7 +161,7 @@
             throws javax.xml.transform.TransformerException
   {
 
-    int firstStepPos = compiler.getFirstChildPos(opPos);
+    int firstStepPos = OpMap.getFirstChildPos(opPos);
     int analysis = analyze(compiler, firstStepPos, 0);
     boolean isOneStep = isOneStep(analysis);
     DTMIterator iter;
@@ -400,7 +401,7 @@
                                                       int opPos)
   {
     int endFunc = opPos + compiler.getOp(opPos + 1) - 1;
-    opPos = compiler.getFirstChildPos(opPos);
+    opPos = OpMap.getFirstChildPos(opPos);
     int funcID = compiler.getOp(opPos);
     //  System.out.println("funcID: "+funcID);
     //  System.out.println("opPos: "+opPos);
@@ -451,7 +452,7 @@
       case OpCodes.OP_LT:
       case OpCodes.OP_LTE:
       case OpCodes.OP_EQUALS:
-        int leftPos = compiler.getFirstChildPos(op);
+        int leftPos = OpMap.getFirstChildPos(op);
         int rightPos = compiler.getNextOpPos(leftPos);
         isProx = isProximateInnerExpr(compiler, leftPos);
         if(isProx)
@@ -519,7 +520,7 @@
         case OpCodes.OP_LT:
         case OpCodes.OP_LTE:
         case OpCodes.OP_EQUALS:
-          int leftPos = compiler.getFirstChildPos(innerExprOpPos);
+          int leftPos = OpMap.getFirstChildPos(innerExprOpPos);
           int rightPos = compiler.getNextOpPos(leftPos);
           isProx = isProximateInnerExpr(compiler, leftPos);
           if(isProx)
@@ -982,9 +983,7 @@
 
     int stepType = compiler.getOp(opPos);
     boolean simpleInit = false;
-    int totalNumberWalkers = (analysis & BITS_COUNT);
     boolean prevIsOneStepDown = true;
-    int firstStepPos = compiler.getFirstChildPos(opPos);
     
     int whatToShow = compiler.getWhatToShow(opPos);
     StepPattern ai = null;
diff --git a/src/org/apache/xpath/axes/WalkingIterator.java b/src/org/apache/xpath/axes/WalkingIterator.java
index 68a7e57..61d48dc 100644
--- a/src/org/apache/xpath/axes/WalkingIterator.java
+++ b/src/org/apache/xpath/axes/WalkingIterator.java
@@ -27,6 +27,7 @@
 import org.apache.xpath.VariableStack;
 import org.apache.xpath.XPathVisitor;
 import org.apache.xpath.compiler.Compiler;
+import org.apache.xpath.compiler.OpMap;
 
 /**
  * Location path iterator that uses Walkers.
@@ -56,7 +57,7 @@
   {
     super(compiler, opPos, analysis, shouldLoadWalkers);
     
-    int firstStepPos = compiler.getFirstChildPos(opPos);
+    int firstStepPos = OpMap.getFirstChildPos(opPos);
 
     if (shouldLoadWalkers)
     {
