diff --git a/compiler/src/main/java/org/apache/royale/abc/semantics/ControlFlowGraph.java b/compiler/src/main/java/org/apache/royale/abc/semantics/ControlFlowGraph.java
index 14c9c00..4f2800d 100644
--- a/compiler/src/main/java/org/apache/royale/abc/semantics/ControlFlowGraph.java
+++ b/compiler/src/main/java/org/apache/royale/abc/semantics/ControlFlowGraph.java
@@ -327,55 +327,15 @@
      */
     public void traverseGraph(IFlowGraphVisitor visitor)
     {
-    	boolean diagnostics = false;
-    	if (mbi.getMethodInfo() != null &&
-    			mbi.getMethodInfo().getMethodName() != null &&
-    			mbi.getMethodInfo().getMethodName().contentEquals("dispatchEvent") &&
-    			mbi.getMethodInfo().getParamNames().contains("event1"))
-    	{
-    		Iterator<IBasicBlock> blocks = this.blocksInControlFlowOrder().iterator();
-    		int blockCount = 0;
-    		while (blocks.hasNext())
-    		{
-    			blockCount++;
-    			blocks.next();
-    		}
-    		IBasicBlock[] blocklist = new IBasicBlock[blockCount];
-    		blocks = this.blocksInControlFlowOrder().iterator();
-    		blockCount = 0;
-    		while (blocks.hasNext())
-    		{
-    			blocklist[blockCount++] = blocks.next();
-    		}    		
-    		System.out.println("blockCount is: " + blockCount);
-    		diagnostics = true;
-    	}
-    	int blockIndex = 0;
         for (IBasicBlock b : this.blocksInControlFlowOrder())
         {
-        	if (diagnostics)
-        	{
-        		System.out.println("block " + blockIndex);
-        		System.out.println(b.getInstructions());
-        	}
             if (visitor.visitBlock(b))
             {
-            	if (diagnostics)
-            		System.out.println("visiting block: " + blockIndex);
                 for (Instruction i : b.getInstructions())
                     visitor.visitInstruction(i);
 
                 visitor.visitEnd(b);
-                if (diagnostics)
-                {
-                	if (visitor instanceof FrameCountVisitor)
-                	{
-                		System.out.println("max_scope is now:" + ((FrameCountVisitor)visitor).max_scope);
-                		System.out.println("scpDepth is now:" + ((FrameCountVisitor)visitor).scpdepth);
-                	}
-                }
             }
-    		blockIndex++;
         }
     }
 
diff --git a/compiler/src/main/java/org/apache/royale/abc/semantics/MethodBodyInfo.java b/compiler/src/main/java/org/apache/royale/abc/semantics/MethodBodyInfo.java
index 540c132..fcf53d4 100644
--- a/compiler/src/main/java/org/apache/royale/abc/semantics/MethodBodyInfo.java
+++ b/compiler/src/main/java/org/apache/royale/abc/semantics/MethodBodyInfo.java
@@ -219,13 +219,6 @@
         FrameCountVisitor counts = new FrameCountVisitor(this, diagnosticsVisitor, this.initial_scope);
         getCfg().traverseGraph(counts);
 
-        if (this.getMethodInfo().getMethodName() != null &&
-        		this.getMethodInfo().getMethodName().contentEquals("dispatchEvent") &&
-        		this.getMethodInfo().getParamNames() != null &&
-        		this.getMethodInfo().getParamNames().contains("event1"))
-        {
-        	System.out.println("ComputedFrameCounts: " + counts.max_scope + " " + this.max_scope );
-        }
         // Grrr..  TODO when we tighten up the max_stack,
         // max_scope, etc for code we read out of the flex
         // framework we seem to break that code.
