Index: libcfa/src/bits/weakso_locks.cfa
===================================================================
--- libcfa/src/bits/weakso_locks.cfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/bits/weakso_locks.cfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -28,6 +28,6 @@
 void on_wakeup( blocking_lock &, size_t ) {}
 size_t wait_count( blocking_lock & ) { return 0; }
-bool register_select( blocking_lock & this, select_node & node ) { return false; }
-bool unregister_select( blocking_lock & this, select_node & node ) { return false; }
-bool on_selected( blocking_lock & this, select_node & node ) { return true; }
+bool register_select$( blocking_lock & this, select_node & node ) { return false; }
+bool unregister_select$( blocking_lock & this, select_node & node ) { return false; }
+bool on_selected$( blocking_lock & this, select_node & node ) { return true; }
 
Index: libcfa/src/bits/weakso_locks.hfa
===================================================================
--- libcfa/src/bits/weakso_locks.hfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/bits/weakso_locks.hfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -59,7 +59,7 @@
 void on_wakeup( blocking_lock & this, size_t ) OPTIONAL_THREAD;
 size_t wait_count( blocking_lock & this ) OPTIONAL_THREAD;
-bool register_select( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
-bool unregister_select( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
-bool on_selected( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
+bool register_select$( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
+bool unregister_select$( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
+bool on_selected$( blocking_lock & this, select_node & node ) OPTIONAL_THREAD;
 blocking_lock __CFA_select_get_type( blocking_lock this ) OPTIONAL_THREAD;
 
@@ -78,6 +78,6 @@
 static inline void   on_wakeup( multiple_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
 static inline void   on_notify( multiple_acquisition_lock & this, struct thread$ * t ){ on_notify( (blocking_lock &)this, t ); }
-static inline bool   register_select( multiple_acquisition_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
-static inline bool   unregister_select( multiple_acquisition_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
-static inline bool   on_selected( multiple_acquisition_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
+static inline bool   register_select$( multiple_acquisition_lock & this, select_node & node ) { return register_select$( (blocking_lock &)this, node ); }
+static inline bool   unregister_select$( multiple_acquisition_lock & this, select_node & node ) { return unregister_select$( (blocking_lock &)this, node ); }
+static inline bool   on_selected$( multiple_acquisition_lock & this, select_node & node ) { return on_selected$( (blocking_lock &)this, node ); }
 multiple_acquisition_lock __CFA_select_get_type( multiple_acquisition_lock this );
Index: libcfa/src/concurrency/channel.hfa
===================================================================
--- libcfa/src/concurrency/channel.hfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/concurrency/channel.hfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -411,5 +411,5 @@
 	}
 
-	bool register_select( chan_read(T) & this, select_node & node ) with(*this.chan, this) {
+	bool register_select$( chan_read(T) & this, select_node & node ) with(*this.chan, this) {
 	    lock( mutex_lock );
 	    node.extra = ret; // set .extra so that if it == 0p later in on_selected it is due to channel close
@@ -476,6 +476,6 @@
 	    return true;
 	}
-	bool unregister_select( chan_read(T) & this, select_node & node ) { return unregister_chan( *this.chan, node ); }
-	bool on_selected( chan_read(T) & this, select_node & node ) with(this) {
+	bool unregister_select$( chan_read(T) & this, select_node & node ) { return unregister_chan( *this.chan, node ); }
+	bool on_selected$( chan_read(T) & this, select_node & node ) with(this) {
 	    if ( unlikely(node.extra == 0p) ) {
 	        if ( ! exception_in_flight() ) __closed_remove( *chan, *ret ); // check if woken up due to closed channel
@@ -491,10 +491,10 @@
 
 	chan_read_no_ret(T) remove( channel(T) & chan ) { chan_read_no_ret(T) c_read{ chan }; return c_read; }
-	bool register_select( chan_read_no_ret(T) & this, select_node & node ) { 
+	bool register_select$( chan_read_no_ret(T) & this, select_node & node ) { 
 	    this.c_read.ret = &this.retval;
-	    return register_select( this.c_read, node );
-	}
-	bool unregister_select( chan_read_no_ret(T) & this, select_node & node ) { return unregister_select( this.c_read, node ); }
-	bool on_selected( chan_read_no_ret(T) & this, select_node & node ) { return on_selected( this.c_read, node ); }
+	    return register_select$( this.c_read, node );
+	}
+	bool unregister_select$( chan_read_no_ret(T) & this, select_node & node ) { return unregister_select$( this.c_read, node ); }
+	bool on_selected$( chan_read_no_ret(T) & this, select_node & node ) { return on_selected$( this.c_read, node ); }
 
 	void ?{}( chan_write(T) & cw, channel(T) * chan, T elem ) {
@@ -511,5 +511,5 @@
 	}
 
-	bool register_select( chan_write(T) & this, select_node & node ) with(*this.chan, this) {
+	bool register_select$( chan_write(T) & this, select_node & node ) with(*this.chan, this) {
 	    lock( mutex_lock );
 	    node.extra = &elem; // set .extra so that if it == 0p later in on_selected it is due to channel close
@@ -577,7 +577,7 @@
 		return true;
 	}
-	bool unregister_select( chan_write(T) & this, select_node & node ) { return unregister_chan( *this.chan, node ); }
-
-	bool on_selected( chan_write(T) & this, select_node & node ) with(this) { 
+	bool unregister_select$( chan_write(T) & this, select_node & node ) { return unregister_chan( *this.chan, node ); }
+
+	bool on_selected$( chan_write(T) & this, select_node & node ) with(this) { 
 		if ( unlikely(node.extra == 0p) ) {
 			if ( ! exception_in_flight() ) __closed_insert( *chan, elem ); // check if woken up due to closed channel
Index: libcfa/src/concurrency/future.hfa
===================================================================
--- libcfa/src/concurrency/future.hfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/concurrency/future.hfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -10,6 +10,6 @@
 // Created On       : Wed Jan 06 17:33:18 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Wed Nov 19 09:26:38 2025
-// Update Count     : 204
+// Last Modified On : Sun Nov 23 22:48:08 2025
+// Update Count     : 208
 //
 
@@ -55,5 +55,5 @@
 		// PRIVATE
 
-		bool register_select( future(T) & fut, select_node & s ) with( fut ) { // for waituntil statement
+		bool register_select$( future(T) & fut, select_node & s ) with( fut ) { // for waituntil statement
 			lock( lock );
 
@@ -78,5 +78,5 @@
 		}
 
-		bool unregister_select( future(T) & fut, select_node & s ) with( fut ) { // for waituntil statement
+		bool unregister_select$( future(T) & fut, select_node & s ) with( fut ) { // for waituntil statement
 		  if ( ! isListed( s ) ) return false;
 			lock( lock );
@@ -86,5 +86,5 @@
 		}
 
-		bool on_selected( future(T) &, select_node & ) { return true; } // for waituntil statement
+		bool on_selected$( future(T) &, select_node & ) { return true; } // for waituntil statement
 
 		// PUBLIC
@@ -98,5 +98,4 @@
 
  		void ?{}( future(T) & fut ) with( fut ) {
-// 			waiters{};
  			except = 0p;
  			state = FUTURE_EMPTY$;
@@ -260,13 +259,13 @@
 		// PRIVATE
 
-		bool register_select( future_rc(T) & frc, select_node & s ) with( frc ) { // for waituntil statement
-			return register_select( frc.impl->fut, s );
-		}
-
-		bool unregister_select( future_rc(T) & frc, select_node & s ) with( frc ) { // for waituntil statement
-			return unregister_select( frc.impl->fut, s );
-		}
-
-		bool on_selected( future_rc(T) &, select_node & ) { return true; } // for waituntil statement
+		bool register_select$( future_rc(T) & frc, select_node & s ) with( frc ) { // for waituntil statement
+			return register_select$( frc.impl->fut, s );
+		}
+
+		bool unregister_select$( future_rc(T) & frc, select_node & s ) with( frc ) { // for waituntil statement
+			return unregister_select$( frc.impl->fut, s );
+		}
+
+		bool on_selected$( future_rc(T) &, select_node & ) { return true; } // for waituntil statement
 
 		// PUBLIC
Index: libcfa/src/concurrency/locks.cfa
===================================================================
--- libcfa/src/concurrency/locks.cfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/concurrency/locks.cfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -186,5 +186,5 @@
 
 // waituntil() support
-bool register_select( blocking_lock & this, select_node & node ) with(this) {
+bool register_select$( blocking_lock & this, select_node & node ) with(this) {
 	lock( lock __cfaabi_dbg_ctx2 );
 	thread$ * thrd = active_thread();
@@ -218,5 +218,5 @@
 }
 
-bool unregister_select( blocking_lock & this, select_node & node ) with(this) {
+bool unregister_select$( blocking_lock & this, select_node & node ) with(this) {
 	lock( lock __cfaabi_dbg_ctx2 );
 	if ( isListed( node ) ) {
@@ -239,5 +239,5 @@
 }
 
-bool on_selected( blocking_lock & this, select_node & node ) { return true; }
+bool on_selected$( blocking_lock & this, select_node & node ) { return true; }
 
 //-----------------------------------------------------------------------------
Index: libcfa/src/concurrency/locks.hfa
===================================================================
--- libcfa/src/concurrency/locks.hfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/concurrency/locks.hfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -11,6 +11,6 @@
 // Created On       : Thu Jan 21 19:46:50 2021
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Mon Nov 17 20:48:55 2025
-// Update Count     : 63
+// Last Modified On : Sun Nov 23 22:38:45 2025
+// Update Count     : 67
 //
 
@@ -127,7 +127,7 @@
 static inline void on_wakeup( single_acquisition_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
 static inline void on_notify( single_acquisition_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); }
-static inline bool register_select( single_acquisition_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
-static inline bool unregister_select( single_acquisition_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
-static inline bool on_selected( single_acquisition_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
+static inline bool register_select$( single_acquisition_lock & this, select_node & node ) { return register_select$( (blocking_lock &)this, node ); }
+static inline bool unregister_select$( single_acquisition_lock & this, select_node & node ) { return unregister_select$( (blocking_lock &)this, node ); }
+static inline bool on_selected$( single_acquisition_lock & this, select_node & node ) { return on_selected$( (blocking_lock &)this, node ); }
 __CFA_SELECT_GET_TYPE( single_acquisition_lock );
 
@@ -145,7 +145,7 @@
 static inline void on_wakeup( owner_lock & this, size_t v ) { on_wakeup ( (blocking_lock &)this, v ); }
 static inline void on_notify( owner_lock & this, struct thread$ * t ) { on_notify( (blocking_lock &)this, t ); }
-static inline bool register_select( owner_lock & this, select_node & node ) { return register_select( (blocking_lock &)this, node ); }
-static inline bool unregister_select( owner_lock & this, select_node & node ) { return unregister_select( (blocking_lock &)this, node ); }
-static inline bool on_selected( owner_lock & this, select_node & node ) { return on_selected( (blocking_lock &)this, node ); }
+static inline bool register_select$( owner_lock & this, select_node & node ) { return register_select$( (blocking_lock &)this, node ); }
+static inline bool unregister_select$( owner_lock & this, select_node & node ) { return unregister_select$( (blocking_lock &)this, node ); }
+static inline bool on_selected$( owner_lock & this, select_node & node ) { return on_selected$( (blocking_lock &)this, node ); }
 __CFA_SELECT_GET_TYPE( owner_lock );
 
@@ -611,5 +611,5 @@
 
 // waituntil() support
-static inline bool register_select( simple_owner_lock & this, select_node & node ) with( this ) {
+static inline bool register_select$( simple_owner_lock & this, select_node & node ) with( this ) {
 	lock( lock __cfaabi_dbg_ctx2 );
 
@@ -643,5 +643,5 @@
 }
 
-static inline bool unregister_select( simple_owner_lock & this, select_node & node ) with( this ) {
+static inline bool unregister_select$( simple_owner_lock & this, select_node & node ) with( this ) {
 	lock( lock __cfaabi_dbg_ctx2 );
 	if ( isListed( node ) ) {
@@ -661,5 +661,5 @@
 }
 
-static inline bool on_selected( simple_owner_lock & /*this*/, select_node & /*node*/ ) { return true; }
+static inline bool on_selected$( simple_owner_lock & /*this*/, select_node & /*node*/ ) { return true; }
 __CFA_SELECT_GET_TYPE( simple_owner_lock );
 
Index: libcfa/src/concurrency/select.cfa
===================================================================
--- libcfa/src/concurrency/select.cfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/concurrency/select.cfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -10,7 +10,7 @@
 // Author           : Colby Alexander Parsons
 // Created On       : Thu Apr 21 19:46:50 2023
-// Last Modified By : Kyoung Seo
-// Last Modified On : Wed Mar 19 12:00:00 2025
-// Update Count     : 1
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Nov 23 22:38:53 2025
+// Update Count     : 4
 //
 
@@ -39,5 +39,5 @@
 
 // Selectable trait routines
-bool register_select( select_timeout_node & this, select_node & node ) {
+bool register_select$( select_timeout_node & this, select_node & node ) {
     this.s_node = &node;
     node.extra = 0p;
@@ -45,8 +45,8 @@
     return false;
 }
-bool unregister_select( select_timeout_node & this, select_node & node ) {
+bool unregister_select$( select_timeout_node & this, select_node & node ) {
     unregister_self( &this.a_node );
     return false;
 }
-bool on_selected( select_timeout_node & this, select_node & node ) { return true; }
+bool on_selected$( select_timeout_node & this, select_node & node ) { return true; }
 
Index: libcfa/src/concurrency/select.hfa
===================================================================
--- libcfa/src/concurrency/select.hfa	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ libcfa/src/concurrency/select.hfa	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -11,6 +11,6 @@
 // Created On       : Thu Jan 21 19:46:50 2023
 // Last Modified By : Peter A. Buhr
-// Last Modified On : Fri Apr 25 07:31:26 2025
-// Update Count     : 5
+// Last Modified On : Sun Nov 23 22:38:36 2025
+// Update Count     : 8
 //
 
@@ -87,13 +87,13 @@
 	// For registering a select stmt on a selectable concurrency primitive
 	// Returns bool that indicates if operation is already SAT
-	bool register_select( T &, select_node & );
+	bool register_select$( T &, select_node & );
 
 	// For unregistering a select stmt on a selectable concurrency primitive
 	// If true is returned then the corresponding code block is run (only in non-special OR case and only if node status is not RUN)
-	bool unregister_select( T &, select_node & );
+	bool unregister_select$( T &, select_node & );
 
 	// This routine is run on the selecting thread prior to executing the statement corresponding to the select_node
 	//	passed as an arg to this routine. If true is returned proceed as normal, if false is returned the statement is skipped
-	bool on_selected( T &, select_node & );
+	bool on_selected$( T &, select_node & );
 };
 // Used inside the compiler to allow for overloading on return type for operations such as '?<<?' for channels
@@ -209,7 +209,7 @@
 
 // Selectable trait routines
-bool register_select( select_timeout_node & this, select_node & node );
-bool unregister_select( select_timeout_node & this, select_node & node );
-bool on_selected( select_timeout_node & this, select_node & node );
+bool register_select$( select_timeout_node & this, select_node & node );
+bool unregister_select$( select_timeout_node & this, select_node & node );
+bool on_selected$( select_timeout_node & this, select_node & node );
 select_timeout_node __CFA_select_get_type( select_timeout_node this );
 
Index: src/Concurrency/Waituntil.cpp
===================================================================
--- src/Concurrency/Waituntil.cpp	(revision 8ffee9abdf3fe72a98ec14a6a08c693c14a9995e)
+++ src/Concurrency/Waituntil.cpp	(revision fbaea97009f70b67f476a193ca6b049a1100402d)
@@ -9,7 +9,7 @@
 // Author           : Andrew Beach
 // Created On       : Fri May 27 10:31:00 2022
-// Last Modified By : Andrew Beach
-// Last Modified On : Tue Jun 13 13:30:00 2022
-// Update Count     : 0
+// Last Modified By : Peter A. Buhr
+// Last Modified On : Sun Nov 23 22:37:39 2025
+// Update Count     : 3
 //
 
@@ -606,5 +606,5 @@
 
 	// Generates: register_select(A, clause1);
-	currBody->push_back( new ExprStmt( loc, genSelectTraitCall( clause, data, "register_select" ) ) );
+	currBody->push_back( new ExprStmt( loc, genSelectTraitCall( clause, data, "register_select$" ) ) );
 
 	// generates: if ( when_cond ) { ... currBody ... }
@@ -638,5 +638,5 @@
 		{
 			new IfStmt( cLoc,
-				genSelectTraitCall( clause, data, "on_selected" ),
+				genSelectTraitCall( clause, data, "on_selected$" ),
 				ast::deepCopy( clause->stmt )
 			)
@@ -715,5 +715,5 @@
 				                                )
 				                            ),
-				                            new ExprStmt( loc, genSelectTraitCall( clause, clauseData.at(idx), "unregister_select" ) )
+				                            new ExprStmt( loc, genSelectTraitCall( clause, clauseData.at(idx), "unregister_select$" ) )
 				                        }
 				                    )
@@ -1017,5 +1017,5 @@
 	const CodeLocation & cLoc = stmt->clauses.at(idx)->location;
 
-	Expr * baseCond = genSelectTraitCall( stmt->clauses.at(idx), data.at(idx), "register_select" );
+	Expr * baseCond = genSelectTraitCall( stmt->clauses.at(idx), data.at(idx), "register_select$" );
 	Expr * ifCond;
 
@@ -1150,5 +1150,5 @@
 			new IfStmt( cLoc,
 				ifCond,
-				new ExprStmt( cLoc, genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "unregister_select" ) )
+				new ExprStmt( cLoc, genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "unregister_select$" ) )
 			)
 		);
@@ -1343,5 +1343,5 @@
 			),
 			new CastExpr( cLoc,
-				genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "unregister_select" ),
+				genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "unregister_select$" ),
 				new BasicType( BasicKind::Bool ), GeneratedFlag::ExplicitCast
 			),
@@ -1372,5 +1372,5 @@
 				    {
 				        new IfStmt( cLoc,
-				            genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "on_selected" ),
+				            genSelectTraitCall( stmt->clauses.at(i), clauseData.at(i), "on_selected$" ),
 				            ast::deepCopy( stmt->clauses.at(i)->stmt )
 				        )
