  
      @Override
      public OperandStack next()
-@@ -44,4 +53,10 @@
+@@ -44,4 +53,16 @@
      {
          return opcode;
      }

+
+    public MethodInvocationOperandStack(final MethodInvocationInstruction instruction, final OperandStack next, final Opcode opcode)
+    {
+        super(popOwnerAndArgs(instruction, next), opcode);
+        this.instruction = instruction;
+    }
+
+    private static OperandStack popOwnerAndArgs(final MethodInvocationInstruction instruction, final OperandStack next)
+    {
+        OperandStack stack = next.next(); // pop owner
+        final int length = instruction.getArgs().length;
+        for (int i=0; i < length; i++)
+        {

+        return 1 + next.depth();
-}
+    }
+
+    @Override
+    public String toString()
+    {
+        return "Stack[" + depth() + "]";
+    }
+}
Index: src/main/org/langera/freud/optional/classfile/parser/asm/AsmMethod.java
===================================================================
--- src/main/org/langera/freud/optional/classfile/parser/asm/AsmMethod.java	(revision 42)
+++ src/main/org/langera/freud/optional/classfile/parser/asm/AsmMethod.java	(revision )
@@ -4,6 +4,7 @@
 import org.langera.freud.optional.classfile.method.ClassFileMethod;
 import org.langera.freud.optional.classfile.method.LocalVariable;
 import org.langera.freud.optional.classfile.method.instruction.AbstractOperandStack;
+import org.langera.freud.optional.classfile.method.instruction.ConstInstruction;
 import org.langera.freud.optional.classfile.method.instruction.FieldInstruction;
 import org.langera.freud.optional.classfile.method.instruction.Instruction;
 import org.langera.freud.optional.classfile.method.instruction.InstructionVisitor;
@@ -14,7 +15,6 @@
 import org.langera.freud.optional.classfile.method.instruction.Opcode;
 import org.langera.freud.optional.classfile.method.instruction.OperandStack;
 import org.langera.freud.optional.classfile.method.instruction.ReferenceOperandInstruction;
-import org.langera.freud.optional.classfile.method.instruction.ConstInstruction;
 import org.langera.freud.optional.classfile.method.instruction.VarInstruction;
 import org.objectweb.asm.AnnotationVisitor;
 import org.objectweb.asm.Attribute;
@@ -76,6 +76,11 @@
         }
         classFile.addMethod(this);
         this.currentLineNumber = -1;
+
+
+System.out.println("========================================================================================");
+System.out.println(name);
+System.out.println("========================================================================================");
     }
 
     @Override
@@ -220,6 +225,8 @@
         final Instruction instruction = new Instruction(this, currentOperandStack, instructionList.size(), OPCODES_ARRAY[opcode], currentLineNumber);
         instructionList.add(instruction);
         currentOperandStack = instruction.getOperandStack();
+System.out.println(instructionList);
+System.out.println("========================================================================================");
     }
 
     public void visitIntInsn(final int opcodeUsed, final int operand)
@@ -236,6 +243,8 @@
         }
         instructionList.add(instruction);
         currentOperandStack = instruction.getOperandStack();
+        System.out.println(instructionList);
+        System.out.println("========================================================================================");
     }
 
     public void visitVarInsn(final int opcodeUsed, final int var)
@@ -243,14 +252,19 @@
         final Instruction instruction = new VarInstruction(this, currentOperandStack, instructionList.size(), OPCODES_ARRAY[opcodeUsed], currentLineNumber, var);
         instructionList.add(instruction);
         currentOperandStack = instruction.getOperandStack();
+        System.out.println(instructionList);
+        System.out.println("========================================================================================");
     }
 
     public void visitTypeInsn(final int opcodeUsed, final String type)
     {
         final Opcode opcode = OPCODES_ARRAY[opcodeUsed];
-        final Instruction instruction = new ReferenceOperandInstruction(this, currentOperandStack, instructionList.size(), opcode, currentLineNumber, type.toString());
+        final String operandType = "L" + type  + ";";
+        final Instruction instruction = new ReferenceOperandInstruction(this, currentOperandStack, instructionList.size(), opcode, currentLineNumber, operandType);
         instructionList.add(instruction);
         currentOperandStack = instruction.getOperandStack();
+        System.out.println(instructionList);
+        System.out.println("========================================================================================");
     }
 
     public void visitFieldInsn(
@@ -262,6 +276,8 @@
         final Instruction instruction = new FieldInstruction(this, currentOperandStack, instructionList.size(), OPCODES_ARRAY[opcode], currentLineNumber, owner, name, desc);
         instructionList.add(instruction);
         currentOperandStack = instruction.getOperandStack();
+        System.out.println(instructionList);
+        System.out.println("========================================================================================");
     }
 
     public void visitMethodInsn(
@@ -273,13 +289,16 @@
         final Matcher matcher = METHOD_DESC_PATTERN.matcher(desc);
         if (matcher.matches())
         {
