Index: benchmark/plot.py
===================================================================
--- benchmark/plot.py	(revision 1f4fde519bbe6197a3f6fe393905008c67c0688e)
+++ benchmark/plot.py	(revision c899175e2bb59329871a483b7bc347d87d7e05bc)
@@ -46,4 +46,5 @@
 	"Median Update Latency" : Field('us'    , 0, True),
 	"Tail Update Latency"   : Field('us'    , 0, True),
+	"Update Ratio"          : Field('%'     , 0, False),
 }
 
Index: benchmark/process-mutilate.py
===================================================================
--- benchmark/process-mutilate.py	(revision 1f4fde519bbe6197a3f6fe393905008c67c0688e)
+++ benchmark/process-mutilate.py	(revision c899175e2bb59329871a483b7bc347d87d7e05bc)
@@ -14,4 +14,5 @@
 parser = argparse.ArgumentParser(description='Python Script to convert output from mutilate to rmit like output')
 parser.add_argument('--out', nargs='?', type=argparse.FileType('w'), default=sys.stdout)
+parser.add_argument('--var', nargs='?', type=str, default='Target QPS')
 try:
 	options =  parser.parse_args()
@@ -112,5 +113,5 @@
 			continue
 
-		d = { 'Target QPS': int(rate) }
+		d = { options.var : int(rate) }
 
 		w = extract( f, d )
Index: src/ControlStruct/MultiLevelExit.cpp
===================================================================
--- src/ControlStruct/MultiLevelExit.cpp	(revision 1f4fde519bbe6197a3f6fe393905008c67c0688e)
+++ src/ControlStruct/MultiLevelExit.cpp	(revision c899175e2bb59329871a483b7bc347d87d7e05bc)
@@ -594,4 +594,10 @@
 		}
 
+		// 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 ( ! break_label.empty() ) {
 			ret.push_back( labelledNullStmt( ret.back()->location, break_label ) );
