Index: libcfa/src/bits/queue.hfa
===================================================================
--- libcfa/src/bits/queue.hfa	(revision 83c7e3cf99240bd5d12e36be832622fd64f9f9a4)
+++ libcfa/src/bits/queue.hfa	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
@@ -34,5 +34,5 @@
 		} // post: n == tail() & succ(n) == 0 | n != tail() & *succ(n) in *q
 
-		void addHead( Queue(T) & q, T & n ) with( q ) {
+		T & addHead( Queue(T) & q, T & n ) with( q ) {
 			#ifdef __CFA_DEBUG__
 			if ( listed( &n ) ) abort( "(Queue &)%p.addHead( %p ) : Node is already on another list.", &q, &n );
@@ -45,7 +45,8 @@
 				Next( &n ) = &n;						// last node points to itself
 			}
+			return n;
 		}
 
-		void addTail( Queue(T) & q, T & n ) with( q ) {
+		T & addTail( Queue(T) & q, T & n ) with( q ) {
 			#ifdef __CFA_DEBUG__
 			if ( listed( &n ) ) abort( "(Queue &)%p.addTail( %p ) : Node is already on another list.", &q, &n );
@@ -55,8 +56,9 @@
 			last = &n;
 			Next( &n ) = &n;							// last node points to itself
+			return n;
 		}
 
-		void add( Queue(T) & q, T & n ) with( q ) {
-			addTail( q, n );
+		T & add( Queue(T) & q, T & n ) with( q ) {
+			return addTail( q, n );
 		}
 
@@ -77,5 +79,5 @@
 		}
 
-		void remove( Queue(T) & q, T & n ) with( q ) {	// O(n)
+		T & remove( Queue(T) & q, T & n ) with( q ) {	// O(n)
 			#ifdef __CFA_DEBUG__
 			if ( ! listed( (Colable &)n ) ) abort( "(Queue &)%p.remove( %p ) : Node is not on a list.", &q, &n );
@@ -103,4 +105,5 @@
 				curr = Next( curr );
 			}
+			return n;
 		} // post: ! listed( n )
 
Index: libcfa/src/bits/sequence.hfa
===================================================================
--- libcfa/src/bits/sequence.hfa	(revision 83c7e3cf99240bd5d12e36be832622fd64f9f9a4)
+++ libcfa/src/bits/sequence.hfa	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
@@ -77,5 +77,5 @@
 
 		// Insert *n into the sequence before *bef, or at the end if bef == 0.
-		void insertBef( Sequence(T) & s, T & n, T & bef ) with( s ) { // pre: !n->listed() & *bef in *s
+		T & insertBef( Sequence(T) & s, T & n, T & bef ) with( s ) { // pre: !n->listed() & *bef in *s
 			#ifdef __CFA_DEBUG__
 			if ( listed( &n ) ) abort( "(Sequence &)%p.insertBef( %p, %p ) : Node is already on another list.", &s, n, &bef );
@@ -105,9 +105,10 @@
 				Next( Back( &n ) ) = &n;
 			} // if
+			return n;
 		}	// post: n->listed() & *n in *s & succ(n) == bef
 
 
 		// Insert *n into the sequence after *aft, or at the beginning if aft == 0.
-		void insertAft( Sequence(T) & s, T & aft, T & n ) with( s ) {	// pre: !n->listed() & *aft in *s
+		T & insertAft( Sequence(T) & s, T & aft, T & n ) with( s ) {	// pre: !n->listed() & *aft in *s
 			#ifdef __CFA_DEBUG__
 			if ( listed( &n ) ) abort( "(Sequence &)%p.insertAft( %p, %p ) : Node is already on another list.", &s, &aft, &n );
@@ -135,8 +136,9 @@
 				Next( &aft ) = &n;
 			} // if
+			return n;
 		}	  // post: n->listed() & *n in *s & succ(n) == bef
 		
 		// pre: n->listed() & *n in *s
-		void remove( Sequence(T) & s, T & n ) with( s ) { // O(1)
+		T & remove( Sequence(T) & s, T & n ) with( s ) { // O(1)
 			#ifdef __CFA_DEBUG__
 			if ( ! listed( &n ) ) abort( "(Sequence &)%p.remove( %p ) : Node is not on a list.", &s, &n );
@@ -149,17 +151,18 @@
 			Next( Back( &n ) ) = Next( &n );
 			Next( &n ) = Back( &n ) = 0p;
+			return n;
 		}							// post: !n->listed().
 
 		// Add an element to the head of the sequence.
-		void addHead( Sequence(T) & s, T & n ) {		// pre: !n->listed(); post: n->listed() & head() == n
-			insertAft( s, *0p, n );
+		T & addHead( Sequence(T) & s, T & n ) {			// pre: !n->listed(); post: n->listed() & head() == n
+			return insertAft( s, *0p, n );
 		}
 		// Add an element to the tail of the sequence.
-		void addTail( Sequence(T) & s, T & n ) {		// pre: !n->listed(); post: n->listed() & head() == n
-			insertBef( s, n, *0p );
+		T & addTail( Sequence(T) & s, T & n ) {			// pre: !n->listed(); post: n->listed() & head() == n
+			return insertBef( s, n, *0p );
 		}
 		// Add an element to the tail of the sequence.
-		void add( Sequence(T) & s, T & n ) {			// pre: !n->listed(); post: n->listed() & head() == n
-			addTail( s, n );
+		T & add( Sequence(T) & s, T & n ) {				// pre: !n->listed(); post: n->listed() & head() == n
+			return addTail( s, n );
 		}
 		// Remove and return the head element in the sequence.
Index: libcfa/src/bits/stack.hfa
===================================================================
--- libcfa/src/bits/stack.hfa	(revision 83c7e3cf99240bd5d12e36be832622fd64f9f9a4)
+++ libcfa/src/bits/stack.hfa	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
@@ -25,5 +25,5 @@
 		}
 
-		void addHead( Stack(T) & s, T & n ) with( s ) {
+		T & addHead( Stack(T) & s, T & n ) with( s ) {
 			#ifdef __CFA_DEBUG__
 			if ( listed( (Colable &)(n) ) ) abort( "(Stack &)%p.addHead( %p ) : Node is already on another list.", &s, n );
@@ -31,12 +31,13 @@
 			Next( &n ) = &head( s ) ? &head( s ) : &n;
 			root = &n;
+			return n;
 		}
 
-		void add( Stack(T) & s, T & n ) with( s ) {
-			addHead( s, n );
+		T & add( Stack(T) & s, T & n ) with( s ) {
+			return addHead( s, n );
 		}
 
-		void push( Stack(T) & s, T & n ) with( s ) {
-			addHead( s, n );
+		T & push( Stack(T) & s, T & n ) with( s ) {
+			return addHead( s, n );
 		}
 
