Index: src/ControlStruct/MultiLevelExit.cpp
===================================================================
--- src/ControlStruct/MultiLevelExit.cpp	(revision cef743061e12a0e8ef990b5a52212149bc0ebc93)
+++ src/ControlStruct/MultiLevelExit.cpp	(revision 3e5db5b4130e8f655563072771bcc8b389ad7681)
@@ -72,4 +72,5 @@
 	bool isFallDefaultTarget() const { return SwitchStmt == kind; }
 
+	// These routines set a target as being "used" by a BranchStmt
 	ast::Label useContExit() { assert( kind <= WhileStmt ); return useTarget(secondTarget); }
 	ast::Label useBreakExit() { assert( CaseStmt != kind ); return useTarget(firstTarget); }
@@ -77,4 +78,5 @@
 	ast::Label useFallDefaultExit() { assert( SwitchStmt == kind ); return useTarget(secondTarget); }
 
+	// These routines check if a specific label for a statement is used by a BranchStmt
 	bool isContUsed() const { assert( kind <= WhileStmt ); return secondTarget.used; }
 	bool isBreakUsed() const { assert( CaseStmt != kind ); return firstTarget.used; }
@@ -165,4 +167,6 @@
 		const ast::CompoundStmt * stmt ) {
 	visit_children = false;
+
+	// if the stmt is labelled then generate a label to check in postvisit if the label is used
 	bool isLabeled = !stmt->labels.empty();
 	if ( isLabeled ) {
@@ -218,7 +222,11 @@
 }
 
+// This routine updates targets on enclosing control structures to indicate which
+//     label is used by the BranchStmt that is passed
 const ast::BranchStmt * MultiLevelExitCore::postvisit( const ast::BranchStmt * stmt ) {
 	std::vector<Entry>::reverse_iterator targetEntry =
 		enclosing_control_structures.rend();
+
+	// Labels on different stmts require different approaches to access
 	switch ( stmt->kind ) {
 	case ast::BranchStmt::Goto:
@@ -257,4 +265,5 @@
 		break;
 	}
+	// handle fallthrough in case/switch stmts
 	case ast::BranchStmt::FallThrough: {
 		targetEntry = findEnclosingControlStructure( isFallthroughTarget );
@@ -534,9 +543,18 @@
 	}
 
+	// if continue is used insert a continue label into the back of the body of the loop
 	if ( entry.isContUsed() ) {
 		ast::CompoundStmt * new_body = new ast::CompoundStmt( body->location );
+		// {}
 		new_body->kids.push_back( body );
+		// {
+		//  body
+		// }
 		new_body->kids.push_back(
 			labelledNullStmt( body->location, entry.useContExit() ) );
+		// {
+		//  body
+		//  ContinueLabel: {}
+		// }
 		return new_body;
 	}
@@ -552,4 +570,8 @@
 	ast::Label contLabel = LabelGenerator::newLabel( "loopContinue", loopStmt );
 	enclosing_control_structures.emplace_back( loopStmt, breakLabel, contLabel );
+	// labels are added temporarily to see if they are used and then added permanently in postvisit if ther are used
+	// children will tag labels as being used during their traversal which occurs before postvisit
+
+	// GuardAction calls the lambda after the node is done being visited
 	GuardAction( [this](){ enclosing_control_structures.pop_back(); } );
 }
@@ -564,4 +586,7 @@
 	return ast::mutate_field(
 		loopStmt, &LoopNode::body, mutateLoop( loopStmt->body, entry ) );
+	// this call to mutate_field compares loopStmt->body and the result of mutateLoop
+	// 		if they are the same the node isn't mutated, if they differ then the new mutated node is returned
+	// 		the stmts will only differ if a label is used
 }
 
