Index: libcfa/src/bits/collection.hfa
===================================================================
--- libcfa/src/bits/collection.hfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ libcfa/src/bits/collection.hfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -68,5 +68,5 @@
 
 struct ColIter {
-	void * curr;										// element to be returned by >>
+	void * curr;										// element returned by |
 };
 
Index: libcfa/src/bits/queue.hfa
===================================================================
--- libcfa/src/bits/queue.hfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ libcfa/src/bits/queue.hfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -2,4 +2,10 @@
 
 #include "bits/collection.hfa"
+
+// A Queue(T) is a Collection(T) defining the ordering that nodes are returned by drop() in the same order from those
+// added by add(). T must be a public descendant of uColable.
+
+// The implementation is a typical singly-linked list, except the next field of the last element points to itself
+// instead of being null.
 
 forall( dtype T | { T *& Next ( T * ); } ) {
@@ -108,5 +114,5 @@
 		} // post: ! listed( n )
 
-		T & dropTail( Queue(T) & q ) with( q ) { // O(n)
+		T & dropTail( Queue(T) & q ) with( q ) {		// O(n)
 			T & n = tail( q );
 			return &n ? remove( q, n ), n : *0p;
@@ -155,5 +161,5 @@
 		} // post: curr == 0p
 
-		// create an iterator active in Queue q
+		// create an iterator active in queue q
 		void ?{}( QueueIter(T) & qi, Queue(T) & q ) with( qi ) {
 			curr = &head( q );
@@ -164,10 +170,10 @@
 		} // post: curr = {e in q}
 
-		// make existing iterator active in Queue q
+		// make existing iterator active in queue q
 		void over( QueueIter(T) & qi, Queue(T) & q ) with( qi ) {
 			curr = &head( q );
 		} // post: curr = {e in q}
 
-		bool ?>>?( QueueIter(T) & qi, T && tp ) with( qi ) {
+		bool ?|?( QueueIter(T) & qi, T && tp ) with( qi ) {
 			if ( curr ) {
 				&tp = Curr( qi );
@@ -177,5 +183,5 @@
 			return &tp != 0p;
 		}
-		// post: elts == null & !operator>>(tp) | elts != null & *tp' in elts & elts' == elts - *tp & operator>>(tp)
+		// post: elts == null & !operator|(tp) | elts != null & *tp' in elts & elts' == elts - *tp & operator|(tp)
 	} // distribution
 } // distribution
Index: libcfa/src/bits/sequence.hfa
===================================================================
--- libcfa/src/bits/sequence.hfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ libcfa/src/bits/sequence.hfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -36,4 +36,11 @@
 } // distribution
 
+
+// A Sequence(T) is a Collection(T) defining the ordering of a uStack and uQueue, and to insert and remove elements
+// anywhere in the sequence. T must be a public descendant of uSeqable.
+
+// The implementation is a typical doubly-linked list, except the next field of the last node points at the first node
+// and the back field of the last node points at the first node (circular).
+
 forall( dtype T | { T *& Back ( T * ); T *& Next ( T * ); } ) {
 	struct Sequence {
@@ -52,7 +59,7 @@
 		void ?{}( Sequence(T) & s ) with( s ) {	
 			((Collection &)s){};
-		}	// post: isEmpty().
-
-		// Return a pointer to the last sequence element, without removing it.	
+		}	// post: isEmpty()
+
+		// Return a pointer to the last sequence element, without removing it.
 		T & tail( Sequence(T) & s ) with( s ) {
 			return root ? (T &)*Back( &head( s ) ) : *0p;
@@ -67,5 +74,5 @@
 		} // post: n == tail() & succ(n) == 0 | n != tail() & *succ(n) in *s
 
-		// Return a pointer to the element before *n, or 0p if there isn't one.
+		// Return a pointer to the element before *n, or 0p if list empty.
 		T * pred( Sequence(T) & s, T * n ) with( s ) {	// pre: *n in *s
 			#ifdef __CFA_DEBUG__
@@ -73,8 +80,8 @@
 			#endif // __CFA_DEBUG__
 			return n == &head( s ) ? 0p : Back( n );
-		}	// post: n == head() & head(n) == 0 | n != head() & *pred(n) in *s
-
-
-		// Insert *n into the sequence before *bef, or at the end if bef == 0.
+		} // post: n == head() & head(n) == 0 | n != head() & *pred(n) in *s
+
+
+		// Insert *n into the sequence before *bef, or at the end if bef == 0p.
 		T & insertBef( Sequence(T) & s, T & n, T & bef ) with( s ) { // pre: !n->listed() & *bef in *s
 			#ifdef __CFA_DEBUG__
@@ -137,5 +144,5 @@
 			} // if
 			return n;
-		}	  // post: n->listed() & *n in *s & succ(n) == bef
+		} // post: n->listed() & *n in *s & succ(n) == bef
 		
 		// pre: n->listed() & *n in *s
@@ -152,5 +159,5 @@
 			Next( &n ) = Back( &n ) = 0p;
 			return n;
-		}							// post: !n->listed().
+		} // post: !n->listed()
 
 		// Add an element to the head of the sequence.
@@ -158,12 +165,15 @@
 			return insertAft( s, *0p, n );
 		}
+
 		// Add an element to the tail of the sequence.
 		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.
 		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.
 		T & dropHead( Sequence(T) & s ) {
@@ -171,8 +181,10 @@
 			return &n ? remove( s, n ), n : *0p;
 		}
+
 		// Remove and return the head element in the sequence.
 		T & drop( Sequence(T) & s ) {
 			return dropHead( s );
 		}
+
 		// Remove and return the tail element in the sequence.
 		T & dropTail( Sequence(T) & s ) {
@@ -233,11 +245,12 @@
 			((ColIter &)si){};
 			seq = 0p;
-		} // post: elts = null.
-
+		} // post: elts = null
+
+		// Create a iterator active in sequence s.
 		void ?{}( SeqIter(T) & si, Sequence(T) & s ) with( si ) {
 			((ColIter &)si){};
 			seq = &s;
 			curr = &head( s );
-		} // post: elts = null.
+		} // post: elts = null
 
 		void ?{}( SeqIter(T) & si, Sequence(T) & s, T & start ) with( si ) {
@@ -245,12 +258,13 @@
 			seq = &s;
 			curr = &start;
-		} // post: elts = null.
-
+		} // post: elts = null
+
+		// Make the iterator active in sequence s.
 		void over( SeqIter(T) & si, Sequence(T) & s ) with( si ) {
 			seq = &s;
 			curr = &head( s );
-		} // post: elts = {e in s}.
-
-		bool ?>>?( SeqIter(T) & si, T && tp ) with( si ) {
+		} // post: elts = {e in s}
+
+		bool ?|?( SeqIter(T) & si, T && tp ) with( si ) {
 			if ( curr ) {
 				&tp = Curr( si );
@@ -274,11 +288,12 @@
 			((ColIter &)si){};
 			seq = 0p;
-		} // post: elts = null.
-
+		} // post: elts = null
+
+		// Create a iterator active in sequence s.
 		void ?{}( SeqIterRev(T) & si, Sequence(T) & s ) with( si ) {	
 			((ColIter &)si){};
 			seq = &s;
 			curr = &tail( s );
-		} // post: elts = null.
+		} // post: elts = null
 
 		void ?{}( SeqIterRev(T) & si, Sequence(T) & s, T & start ) with( si ) {	
@@ -286,12 +301,13 @@
 			seq = &s;
 			curr = &start;
-		} // post: elts = null.
-
+		} // post: elts = null
+
+		// Make the iterator active in sequence s.
 		void over( SeqIterRev(T) & si, Sequence(T) & s ) with( si ) {
 			seq = &s;
 			curr = &tail( s );
-		} // post: elts = {e in s}.
-
-		bool ?>>?( SeqIterRev(T) & si, T && tp ) with( si ) {
+		} // post: elts = {e in s}
+
+		bool ?|?( SeqIterRev(T) & si, T && tp ) with( si ) {
 			if ( curr ) {
 				&tp = Curr( si );
Index: libcfa/src/bits/stack.hfa
===================================================================
--- libcfa/src/bits/stack.hfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ libcfa/src/bits/stack.hfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -2,4 +2,10 @@
 
 #include "bits/collection.hfa"
+
+// A Stack(T) is a Collection(T) defining the ordering that nodes are returned by drop() in the reverse order from those
+// added by add(). T must be a public descendant of uColable.
+
+// The implementation is a typical singly-linked list, except the next field of the last element points to itself
+// instead of being null.
 
 forall( dtype T | { T *& Next ( T * ); } ) {
@@ -58,4 +64,6 @@
 } // distribution
 
+// A StackIter(T) is a subclass of ColIter(T) that generates the elements of a Stack(T).  It returns the elements in the
+// order returned by drop().
 
 forall( dtype T | { T *& Next ( T * ); } ) {
@@ -69,5 +77,5 @@
 		} // post: curr == 0p
 
-		// create an iterator active in Stack s
+		// create an iterator active in stack s
 		void ?{}( StackIter(T) & si, Stack(T) & s ) with( si ) {
 			curr = &head( s );
@@ -78,10 +86,10 @@
 		} // post: curr = {e in s}
 
-		// make existing iterator active in Stack q
+		// make existing iterator active in stack s
 		void over( StackIter(T) & si, Stack(T) & s ) with( si ) {
 			curr = &head( s );
 		} // post: curr = {e in s}
 
-		bool ?>>?( StackIter(T) & si, T && tp ) with( si ) {
+		bool ?|?( StackIter(T) & si, T && tp ) with( si ) {
 			if ( curr ) {
 				&tp = Curr( si );
Index: tests/collections/.expect/queue.txt
===================================================================
--- tests/collections/.expect/queue.txt	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ tests/collections/.expect/queue.txt	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -16,6 +16,9 @@
 0 0 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 
 18 18 
--1 18 -1
+-1 18 -2
+-1 -1 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 19 -2 -2 
 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 
+18 18 1 1 3 3 5 5 7 7 
+empty
 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 
 5 5 6 6 7 7 8 8 9 9 
Index: tests/collections/.expect/sequence.txt
===================================================================
--- tests/collections/.expect/sequence.txt	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ tests/collections/.expect/sequence.txt	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -19,6 +19,9 @@
 0 0 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 
 18 18 
--1 18 -1
+-1 18 -2
+-1 -1 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 19 -2 -2 
 18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 
+18 18 1 1 3 3 5 5 7 7 
+empty
 0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 
 5 5 6 6 7 7 8 8 9 9 
Index: tests/collections/multi_list.cfa
===================================================================
--- tests/collections/multi_list.cfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ tests/collections/multi_list.cfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -73,15 +73,15 @@
 
 	sout | nlOff;
-	for ( over( sqiter, clustList ); sqiter >> dl; ) {	// print lists
+	for ( over( sqiter, clustList ); sqiter | dl; ) {	// print lists
 		Task & tmp = task( dl ); sout | tmp.id;
 		// sout | task( dl ).id;
 	}
 	sout | nl;
-	for ( over( sqiter, readyList ); sqiter >> dl; ) {
+	for ( over( sqiter, readyList ); sqiter | dl; ) {
 		Task & tmp = task( dl ); sout | tmp.id;
 		// sout | task( dl ).id;
 	}
 	sout | nl;
-	for ( QueueIter(TaskSL) qiter = { mutexList }; qiter >> sl; ) {	// print lists
+	for ( QueueIter(TaskSL) qiter = { mutexList }; qiter | sl; ) {	// print lists
 		Task & tmp = task( sl ); sout | tmp.id;
 		// sout | task( sl ).id;
@@ -103,5 +103,5 @@
 		push( mutexStack, task.clusterRef );			// insert on lists in opposite directions
 	}
-	for ( StackIter(TaskDL) stiter = { mutexStack }; stiter >> dl; ) {
+	for ( StackIter(TaskDL) stiter = { mutexStack }; stiter | dl; ) {
 		Task & tmp = task( dl ); sout | tmp.id;
 		// sout | task( dl ).id;
Index: tests/collections/queue.cfa
===================================================================
--- tests/collections/queue.cfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ tests/collections/queue.cfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -19,10 +19,10 @@
 
 	Queue(Fred) fred;
-	QueueIter(Fred) fredIter = { fred };
+	QueueIter(Fred) iter = { fred };
 	Fred & f;
 
 	sout | nlOff;										// turn off auto newline
 
-	for ( ; fredIter >> f; ) {							// empty list
+	for ( ; iter | f; ) {							// empty list
 		sout | f.i | ' ';
 	}
@@ -35,5 +35,5 @@
 	sout | head( fred ).i | tail( fred ).i | nl;
 
-	for ( QueueIter(Fred) iter = { fred }; iter >> f; ) {
+	for ( QueueIter(Fred) iter = { fred }; iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -44,5 +44,5 @@
 	}
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -58,5 +58,6 @@
 
 	sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -68,5 +69,5 @@
 	delete( &dropTail( fred ) );
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -76,13 +77,13 @@
 		delete( &dropTail( fred ) );
 	}
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, fred ); iter | f; ) {
 		delete( &remove( fred, f ) );
 	}
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -96,5 +97,5 @@
 		}
 	}
-	for ( QueueIter(Fred) iter = { fred }; iter >> f; ) {
+	for ( QueueIter(Fred) iter = { fred }; iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -105,10 +106,10 @@
 	split( fred2, fred, middle );
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred2 ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, fred2 ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -117,10 +118,10 @@
 	transfer( fred, fred2 );
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, fred ); iter | f; ) {
 		delete( &f );
 	}
@@ -142,8 +143,8 @@
 
 	Queue(Mary) mary;
-	QueueIter(Mary) maryIter = { mary };
+	QueueIter(Mary) iter = { mary };
 	Mary & m;
 
-	for ( ; maryIter >> m; ) {							// empty list
+	for ( ; iter | m; ) {							// empty list
 		sout | m.i | m.j | ' ';
 	}
@@ -156,5 +157,5 @@
 	sout | head( mary ).i | tail( mary ).i | nl;
 
-	for ( QueueIter(Mary) iter = { mary }; iter >> m; ) {
+	for ( QueueIter(Mary) iter = { mary }; iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -165,5 +166,5 @@
 	}
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -174,8 +175,15 @@
 	}
 
-	Mary * head = new( -1 ), tail = { -1 };
+	Mary * head = new( -1 ), tail = { -2 };
 	addHead( mary, *head );
 	addTail( mary, tail );
+
 	sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl;
+
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
 	remove( mary, *head );
 	remove( mary, tail );
@@ -183,12 +191,24 @@
 	delete( &dropTail( mary ) );
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( i; 5 ) {
+		delete( &dropTail( mary ) );
+	}
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, mary ); iter | m; ) {
 		delete( &remove( mary, m ) );
 	}
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | "empty" | nl;
 
 	Mary & middle;
@@ -199,5 +219,5 @@
 		}
 	}
-	for ( QueueIter(Mary) iter = { mary }; iter >> m; ) {
+	for ( QueueIter(Mary) iter = { mary }; iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -208,9 +228,9 @@
 	split( mary2, mary, middle );
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-	for ( over( maryIter, mary2 ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+	for ( over( iter, mary2 ); iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -219,9 +239,10 @@
 	transfer( mary, mary2 );
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, mary ); iter | m; ) {
 		delete( &m );
 	}
Index: tests/collections/sequence.cfa
===================================================================
--- tests/collections/sequence.cfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ tests/collections/sequence.cfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -22,10 +22,10 @@
 
 	Sequence(Fred) fred;
-	SeqIter(Fred) fredIter = { fred };
+	SeqIter(Fred) iter = { fred };
 	Fred & f;
 
 	sout | nlOff;										// turn off auto newline
 
-	for ( ; fredIter >> f; ) {							// empty list
+	for ( ; iter | f; ) {							// empty list
 		sout | f.i | ' ';
 	}
@@ -38,5 +38,5 @@
 	sout | head( fred ).i | tail( fred ).i | nl;
 
-	for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {
+	for ( SeqIter(Fred) iter = { fred }; iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -47,5 +47,5 @@
 	}
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -61,5 +61,6 @@
 
 	sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -71,5 +72,5 @@
 	delete( &dropTail( fred ) );
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -79,13 +80,13 @@
 		delete( &dropTail( fred ) );
 	}
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, fred ); iter | f; ) {
 		delete( &remove( fred, f ) );
 	}
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -94,10 +95,10 @@
 	Fred & middle;
 	for ( i; 10 ) {
-		addHead( fred, *new( i ) );						// reverse oder
+		addHead( fred, *new( i ) );						// reverse order
 		if ( i == 5 ) {
 			&middle = &head( fred );
 		}
 	}
-	for ( SeqIterRev(Fred) iter = { fred }; iter >> f; ) {
+	for ( SeqIterRev(Fred) riter = { fred }; riter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -109,5 +110,5 @@
 
 	sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -119,5 +120,5 @@
 	delete( &dropTail( fred ) );
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -128,10 +129,10 @@
 	split( fred2, fred, middle );
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred2 ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, fred2 ); iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -140,10 +141,10 @@
 	transfer( fred, fred2 );
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( iter, fred ); iter | f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, fred ); iter | f; ) {
 		delete( &f );
 	}
@@ -168,8 +169,8 @@
 
 	Sequence(Mary) mary;
-	SeqIter(Mary) maryIter = { mary };
+	SeqIter(Mary) iter = { mary };
 	Mary & m;
 
-	for ( ; maryIter >> m; ) {							// empty list
+	for ( ; iter | m; ) {							// empty list
 		sout | m.i | m.j | ' ';
 	}
@@ -182,5 +183,5 @@
 	sout | head( mary ).i | tail( mary ).i | nl;
 
-	for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
+	for ( SeqIter(Mary) iter = { mary }; iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -191,5 +192,5 @@
 	}
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -200,8 +201,15 @@
 	}
 
-	Mary * head = new( -1 ), tail = { -1 };
+	Mary * head = new( -1 ), tail = { -2 };
 	addHead( mary, *head );
 	addTail( mary, tail );
+
 	sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl;
+
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
 	remove( mary, *head );
 	remove( mary, tail );
@@ -209,12 +217,24 @@
 	delete( &dropTail( mary ) );
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( i; 5 ) {
+		delete( &dropTail( mary ) );
+	}
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, mary ); iter | m; ) {
 		delete( &remove( mary, m ) );
 	}
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | "empty" | nl;
 
 	Mary & middle;
@@ -225,5 +245,5 @@
 		}
 	}
-	for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
+	for ( SeqIter(Mary) iter = { mary }; iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -234,9 +254,9 @@
 	split( mary2, mary, middle );
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-	for ( over( maryIter, mary2 ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+	for ( over( iter, mary2 ); iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -245,9 +265,10 @@
 	transfer( mary, mary2 );
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( iter, mary ); iter | m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( over( iter, mary ); iter | m; ) {
 		delete( &m );
 	}
Index: tests/collections/stack.cfa
===================================================================
--- tests/collections/stack.cfa	(revision b6460bfa54ce852d257710855d08250e61ae24d7)
+++ tests/collections/stack.cfa	(revision 3e36f220446a0d1e743455b46dfab6d5d0e40c19)
@@ -19,10 +19,10 @@
 
 	Stack(Fred) fred;
-	StackIter(Fred) fredIter = { fred };
+	StackIter(Fred) inter = { fred };
 	Fred & f;
 
 	sout | nlOff;										// turn off auto newline
 
-	for ( ; fredIter >> f; ) {							// empty list
+	for ( ; inter | f; ) {							// empty list
 		sout | f.i | ' ';
 	}
@@ -33,5 +33,5 @@
 	}
 
-	for ( StackIter(Fred) iter = { fred }; iter >> f; ) {
+	for ( StackIter(Fred) iter = { fred }; iter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -44,5 +44,5 @@
 	}
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( inter, fred ); inter | f; ) {
 		sout | f.i | ' ';
 	}
@@ -52,10 +52,10 @@
 		push( fred, *new( 2 * i + 1 ) );
 	}
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( inter, fred ); inter | f; ) {
 		sout | f.i | ' ';
 	}
 	sout | nl;
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
+	for ( over( inter, fred ); inter | f; ) {
 		delete( &f );
 	}
@@ -81,5 +81,5 @@
 	Mary & m;
 
-	for ( ; maryIter >> m; ) {							// empty list
+	for ( ; maryIter | m; ) {							// empty list
 		sout | m.i | m.j | ' ';
 	}
@@ -90,5 +90,5 @@
 	}
 
-	for ( StackIter(Mary) iter = { mary }; iter >> m; ) {
+	for ( StackIter(Mary) iter = { mary }; iter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -99,5 +99,5 @@
 	}
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( maryIter, mary ); maryIter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
@@ -107,10 +107,10 @@
 		push( mary, *new( 2 * i + 1 ) );
 	}
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( maryIter, mary ); maryIter | m; ) {
 		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
+	for ( over( maryIter, mary ); maryIter | m; ) {
 		delete( &m );
 	}
