Index: src/ControlStruct/MultiLevelExit.cpp
===================================================================
--- src/ControlStruct/MultiLevelExit.cpp	(revision 7ad47dfa113731490dd36a0283b5b751952e827e)
+++ src/ControlStruct/MultiLevelExit.cpp	(revision f75e25bacd14e7d28dac1228e86806938c10a4a1)
@@ -588,15 +588,30 @@
 		}
 
+		ptr<Stmt> else_stmt = nullptr;
+		Stmt * loop_kid = nullptr;
+		// check if loop node and if so add else clause if it exists
+		const WhileDoStmt * whilePtr = dynamic_cast<const WhileDoStmt *>(kid.get());
+		if ( whilePtr && whilePtr->else_) {
+			else_stmt = whilePtr->else_;
+			WhileDoStmt * mutate_ptr = mutate(whilePtr);
+			mutate_ptr->else_ = nullptr;
+			loop_kid = mutate_ptr;
+		}
+		const ForStmt * forPtr = dynamic_cast<const ForStmt *>(kid.get());
+		if ( forPtr && forPtr->else_) {
+			else_stmt = forPtr->else_;
+			ForStmt * mutate_ptr = mutate(forPtr);
+			mutate_ptr->else_ = nullptr;
+			loop_kid = mutate_ptr;
+		}
+
 		try {
-			ret.push_back( kid->accept( *visitor ) );
+			if (else_stmt) ret.push_back( loop_kid->accept( *visitor ) );
+			else ret.push_back( kid->accept( *visitor ) );
 		} catch ( SemanticErrorException & e ) {
 			errors.append( e );
 		}
 
-		// check if loop node and if so add else clause if it exists
-		const WhileDoStmt * whilePtr = dynamic_cast<const WhileDoStmt *>(kid.get());
-		if ( whilePtr && whilePtr->else_) ret.push_back(whilePtr->else_);
-		const ForStmt * forPtr = dynamic_cast<const ForStmt *>(kid.get());
-		if ( forPtr && forPtr->else_) ret.push_back(forPtr->else_);
+		if (else_stmt) ret.push_back(else_stmt);
 
 		if ( ! break_label.empty() ) {
