Index: src/Concurrency/Waituntil.cpp
===================================================================
--- src/Concurrency/Waituntil.cpp	(revision bef224516892e07bf860916060c1f2ca5b6870e0)
+++ src/Concurrency/Waituntil.cpp	(revision ded018f9163d1fe78bae1d292d74be5535aeb2cb)
@@ -884,14 +884,4 @@
                 )
             );
-        else // we reuse the when_cond bools later during unregister so init to false if initially unused
-            body->push_back(
-                new DeclStmt( cLoc,
-                    new ObjectDecl( cLoc,
-                        currClause->whenName,
-                        new BasicType( BasicType::Kind::Bool ),
-                        new SingleInit( cLoc, ConstantExpr::from_bool( cLoc, false ) )
-                    )
-                )
-            );
         
         // select_node clause1;
@@ -1306,13 +1296,6 @@
     CompoundStmt * unregisters = new CompoundStmt( loc );
 
-    // Collection of optional statement executions following finally clause
-    // for each clause:
-    // if ( when_cond_i ) clausei->stmt;
-    // when_cond_i is repurposed in the finally to store if any statements need to be run after unregisters
-    // the statements need to be run outside a finally clause since they may contain non-local transfers
-    CompoundStmt * unregisterStmts = new CompoundStmt( loc );
-
-    UntypedExpr * statusExpr; // !__CFA_has_clause_run( clause_statuses[i] )
-    ExprStmt * assignStmt; // when_cond_i = (!__CFA_has_clause_run( clause_statuses[i] )) && unregister_select( ... , clausei );
+
+    Expr * statusExpr; // !__CFA_has_clause_run( clause_statuses[i] )
     for ( int i = 0; i < numClauses; i++ ) {
         const CodeLocation & cLoc = stmt->clauses.at(i)->location;
@@ -1332,35 +1315,37 @@
         
         // Generates:
-        // when_cond_i = (!__CFA_has_clause_run( clause_statuses[i] )) && unregister_select( ... , clausei );
-        assignStmt = new ExprStmt( cLoc, 
-            UntypedExpr::createAssign( cLoc,
-                new NameExpr( cLoc, clauseData.at(i)->whenName ),
-                new LogicalExpr( cLoc,
-                    new CastExpr( cLoc,
-                        statusExpr, 
-                        new BasicType( BasicType::Kind::Bool ), GeneratedFlag::ExplicitCast 
-                    ),
-                    new CastExpr( cLoc,
-                        genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "unregister_select" ),
-                        new BasicType( BasicType::Kind::Bool ), GeneratedFlag::ExplicitCast 
-                    ),
-                    LogicalFlag::AndExpr
-                )
-            )
-        );
-
-        if ( stmt->clauses.at(i)->when_cond ) // if ( when_cond_i ) assignStmt
-            unregisters->push_back( 
-                new IfStmt( cLoc,
-                    new NameExpr( cLoc, clauseData.at(i)->whenName ),
-                    new CompoundStmt( cLoc, { assignStmt } )
-                )
+        // (!__CFA_has_clause_run( clause_statuses[i] )) && unregister_select( ... , clausei );
+        statusExpr = new LogicalExpr( cLoc,
+            new CastExpr( cLoc,
+                statusExpr, 
+                new BasicType( BasicType::Kind::Bool ), GeneratedFlag::ExplicitCast 
+            ),
+            new CastExpr( cLoc,
+                genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "unregister_select" ),
+                new BasicType( BasicType::Kind::Bool ), GeneratedFlag::ExplicitCast 
+            ),
+            LogicalFlag::AndExpr
+        );
+        
+        // if when cond defined generates:
+        // when_cond_i && (!__CFA_has_clause_run( clause_statuses[i] )) && unregister_select( ... , clausei );
+        if ( stmt->clauses.at(i)->when_cond )
+            statusExpr = new LogicalExpr( cLoc,
+                new CastExpr( cLoc,
+                    new NameExpr( cLoc, clauseData.at(i)->whenName ), 
+                    new BasicType( BasicType::Kind::Bool ), GeneratedFlag::ExplicitCast 
+                ),
+                new CastExpr( cLoc,
+                    statusExpr,
+                    new BasicType( BasicType::Kind::Bool ), GeneratedFlag::ExplicitCast 
+                ),
+                LogicalFlag::AndExpr
             );
-        else
-            unregisters->push_back( assignStmt );
-
-        unregisterStmts->push_back(
+
+        // generates:
+        // if ( statusExpr ) { ... clausei stmt ... }
+        unregisters->push_back( 
             new IfStmt( cLoc,
-                new NameExpr( cLoc, clauseData.at(i)->whenName ),
+                statusExpr,
                 genStmtBlock( stmt->clauses.at(i), clauseData.at(i) )
             )
@@ -1376,7 +1361,4 @@
         )
     );
-
-    body->push_back( unregisterStmts );
-    
 
     for ( ClauseData * datum : clauseData )
