Index: libcfa/src/bits/queue.hfa
===================================================================
--- libcfa/src/bits/queue.hfa	(revision 4f0c520a5fde365036e37cf8af555db88862d73a)
+++ libcfa/src/bits/queue.hfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
@@ -187,11 +187,11 @@
 		} // 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 );
+				&tp = Curr( qi );
 				T * n = Next( Curr( qi ) );
 				curr = (n == Curr( qi ) ) ? 0p : n;
-			} else tp = 0p;
-			return tp != 0p;
+			} else &tp = 0p;
+			return &tp != 0p;
 		}
 		// post: elts == null & !operator>>(tp) | elts != null & *tp' in elts & elts' == elts - *tp & operator>>(tp)
Index: libcfa/src/bits/queue_example.cfa
===================================================================
--- libcfa/src/bits/queue_example.cfa	(revision 4f0c520a5fde365036e37cf8af555db88862d73a)
+++ libcfa/src/bits/queue_example.cfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
@@ -17,42 +17,41 @@
 	Queue(Fred) fred;
 	QueueIter(Fred) fredIter = { fred };
-	Fred * f;
-	int i;
+	Fred & f;
 
 	sout | nlOff;										// turn off auto newline
 
 	for ( ; fredIter >> f; ) {							// empty list
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | "empty" | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		add( fred, new( 2 * i ) );
 	}
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+	for ( QueueIter(Fred) iter = { fred }; iter >> f; ) {
+		sout | f.i | ' ';
 	}
 	sout | nl;
 
-	for ( i = 0; i < 9; i += 1 ) {
+	for ( i; 9 ) {
 		delete( drop( fred ) );
 	}
 
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		add( fred, new( 2 * i + 1 ) );
 	}
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | nl;
 
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		delete( f );
+		delete( &f );
 	}
 
@@ -71,39 +70,39 @@
 	Queue(Mary) mary;
 	QueueIter(Mary) maryIter = { mary };
-	Mary * m;
+	Mary & m;
 
 	for ( ; maryIter >> m; ) {							// empty list
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | "empty" | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		add( mary, new( 2 * i ) );
 	}
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+	for ( QueueIter(Mary) iter = { mary }; iter >> m; ) {
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 9; i += 1 ) {
+	for ( i; 9 ) {
 		delete( drop( mary ) );
 	}
 
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		add( mary, new( 2 * i + 1 ) );
 	}
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		delete( m );
+		delete( &m );
 	}
 }
Index: libcfa/src/bits/sequence.hfa
===================================================================
--- libcfa/src/bits/sequence.hfa	(revision 4f0c520a5fde365036e37cf8af555db88862d73a)
+++ libcfa/src/bits/sequence.hfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
@@ -116,5 +116,5 @@
 
 		// 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
+		void 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 );
@@ -145,5 +145,5 @@
 		
 		// pre: n->listed() & *n in *s
-		void remove( Sequence(T) & s, T *n ) with( s ) { // O(1)
+		void 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 );
@@ -159,13 +159,13 @@
 
 		// Add an element to the head of the sequence.
-		void addHead( Sequence(T) & s, T *n ) {			// pre: !n->listed(); post: n->listed() & head() == n
+		void addHead( Sequence(T) & s, T * n ) {		// pre: !n->listed(); post: n->listed() & head() == n
 			insertAft( s, 0, 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
+		void addTail( Sequence(T) & s, T * n ) {		// pre: !n->listed(); post: n->listed() & head() == n
 			insertBef( s, n, 0 );
 		}
 		// Add an element to the tail of the sequence.
-		void add( Sequence(T) & s, T *n ) {				// pre: !n->listed(); post: n->listed() & head() == n
+		void add( Sequence(T) & s, T * n ) {			// pre: !n->listed(); post: n->listed() & head() == n
 			addTail( s, n );
 		}
@@ -244,4 +244,5 @@
 			((ColIter &) si){};
 			seq = &s;
+			curr = head( s );
 		} // post: elts = null.
 		
@@ -251,11 +252,11 @@
 		} // post: elts = {e in s}.
 
-		bool ?>>?( SeqIter(T) & si, T *& tp ) with( si ) {
+		bool ?>>?( SeqIter(T) & si, T && tp ) with( si ) {
 			if ( curr ) {
-				tp = Curr( si );
-				T *n = succ( *seq, Curr( si ) );
+				&tp = Curr( si );
+				T * n = succ( *seq, Curr( si ) );
 				curr = n == head( *seq ) ? 0p : n;
-			} else tp = 0p;
-			return tp != 0p;
+			} else &tp = 0p;
+			return &tp != 0p;
 		}
 	} // distribution
@@ -282,4 +283,5 @@
 			((ColIter &) si){};
 			seq = &s;
+			curr = tail( s );
 		} // post: elts = null.
 		
@@ -289,11 +291,11 @@
 		} // post: elts = {e in s}.
 
-		bool ?>>?( SeqIterRev(T) & si, T *&tp ) with( si ) {
+		bool ?>>?( SeqIterRev(T) & si, T && tp ) with( si ) {
 			if ( curr ) {
-				tp = Curr( si );
-				T *n = pred( *seq, Curr( si ) );
+				&tp = Curr( si );
+				T * n = pred( *seq, Curr( si ) );
 				curr = n == tail( *seq ) ? 0p : n;
-			} else tp = 0p;
-			return tp != 0p;
+			} else &tp = 0p;
+			return &tp != 0p;
 		}
 	} // distribution
Index: libcfa/src/bits/sequence_example.cfa
===================================================================
--- libcfa/src/bits/sequence_example.cfa	(revision 4f0c520a5fde365036e37cf8af555db88862d73a)
+++ libcfa/src/bits/sequence_example.cfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
@@ -17,50 +17,49 @@
 	Sequence(Fred) fred;
 	SeqIter(Fred) fredIter = { fred };
-	Fred * f;
-	int i;
+	Fred & f;
 
 	sout | nlOff;										// turn off auto newline
 
 	for ( ; fredIter >> f; ) {							// empty list
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | "empty" | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		add( fred, new( 2 * i ) );
 	}
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+	for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {
+		sout | f.i | ' ';
 	}
 	sout | nl;
 
-	for ( i = 0; i < 9; i += 1 ) {
+	for ( i; 9 ) {
 		delete( dropHead( fred ) );
 	}
 
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		addTail( fred, new( 2 * i + 1 ) );
 	}
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | nl;
 
-	for ( i = 0; i < 9; i += 1 ) {
-		delete( dropTail( fred ) );
+	for ( i; 9 ) {
+		delete( &dropTail( fred ) );
 	}
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | nl;
 
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		delete( f );
+		delete( &f );
 	}
 
@@ -80,43 +79,43 @@
 	Sequence(Mary) baz;
 	SeqIter(Mary) maryIter = { mary };
-	Mary * m;
+	Mary & m;
 
 	for ( ; maryIter >> m; ) {							// empty list
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | "empty" | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		add( mary, new( 2 * i ) );
 		add( baz, new( 2 * i ) );
 	}
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+	for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 9; i += 1 ) {
+	for ( i; 9 ) {
 		delete( dropHead( mary ) );
 	}
 
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		addTail( mary, new( 2 * i + 1 ) );
 	}
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 
-	for ( i = 0; i < 9; i += 1 ) {
-		delete( dropTail( mary ) );
+	for ( i; 9 ) {
+		delete( &dropTail( mary ) );
 	}
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
@@ -125,19 +124,19 @@
 
 	for ( over( maryIter, baz ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | "empty" | nl;
 
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		delete( m );
+		delete( &m );
 	}
 }
 
 // Local Variables: //
-// compile-command: "cfa sequence_example.cc" //
+// compile-command: "cfa sequence_example.cfa" //
 // End: //
Index: libcfa/src/bits/stack.hfa
===================================================================
--- libcfa/src/bits/stack.hfa	(revision 4f0c520a5fde365036e37cf8af555db88862d73a)
+++ libcfa/src/bits/stack.hfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
@@ -99,11 +99,11 @@
 		} // 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 );
+				&tp = Curr( si );
 				T * n = Next( Curr( si ) );
 				curr = (n == Curr( si ) ) ? 0p : n;
-			} else tp = 0p;
-			return tp != 0p;
+			} else &tp = 0p;
+			return &tp != 0p;
 		}
 	} // distribution
Index: libcfa/src/bits/stack_example.cfa
===================================================================
--- libcfa/src/bits/stack_example.cfa	(revision 4f0c520a5fde365036e37cf8af555db88862d73a)
+++ libcfa/src/bits/stack_example.cfa	(revision 3d0560da9b3175b881f54d39d06313da7cdbae35)
@@ -17,42 +17,41 @@
 	Stack(Fred) fred;
 	StackIter(Fred) fredIter = { fred };
-	Fred * f;
-	int i;
+	Fred & f;
 
 	sout | nlOff;										// turn off auto newline
 
 	for ( ; fredIter >> f; ) {							// empty list
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | "empty" | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		push( fred, new( 2 * i ) );
 	}
 
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+	for ( StackIter(Fred) iter = { fred }; iter >> f; ) {
+		sout | f.i | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 9; i += 1 ) {
+	for ( i; 9 ) {
 		delete( pop( fred ) );
 	}
 
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		push( fred, new( 2 * i + 1 ) );
 	}
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f->i | ' ';
+		sout | f.i | ' ';
 	}
 	sout | nl;
 
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		delete( f );
+		delete( &f );
 	}
 
@@ -71,39 +70,39 @@
 	Stack(Mary) mary;
 	StackIter(Mary) maryIter = { mary };
-	Mary * m;
+	Mary & m;
 
 	for ( ; maryIter >> m; ) {							// empty list
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | "empty" | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		push( mary, new( 2 * i ) );
 	}
 
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+	for ( StackIter(Mary) iter = { mary }; iter >> m; ) {
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 9; i += 1 ) {
+	for ( i; 9 ) {
 		delete( pop( mary ) );
 	}
 
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 	
-	for ( i = 0; i < 10; i += 1 ) {
+	for ( i; 10 ) {
 		push( mary, new( 2 * i + 1 ) );
 	}
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m->i | m->j | ' ';
+		sout | m.i | m.j | ' ';
 	}
 	sout | nl;
 
 	for ( over( maryIter, mary ); maryIter >> m; ) {
-		delete( m );
+		delete( &m );
 	}
 }
