Index: libcfa/src/bits/sequence.hfa
===================================================================
--- libcfa/src/bits/sequence.hfa	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
+++ libcfa/src/bits/sequence.hfa	(revision b37515b1c02ee9d9ba7d60b5f6bee246234cde78)
@@ -62,6 +62,6 @@
 
 		// Return a pointer to the last sequence element, without removing it.	
-		T * tail( Sequence(T) & s ) with( s ) {
-			return root ? (T *)Back( Root( s ) ) : 0p;	// needs cast?
+		T & tail( Sequence(T) & s ) with( s ) {
+			return root ? (T &)Back( Root( s ) ) : *0p;	// needs cast?
 		}	// post: empty() & tail() == 0 | !empty() & tail() in *s
 
@@ -84,31 +84,31 @@
 
 		// 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
-#ifdef __CFA_DEBUG__
-			if ( listed( n ) ) abort( "(Sequence &)%p.insertBef( %p, %p ) : Node is already on another list.", &s, n, bef );
-#endif // __CFA_DEBUG__
-			if ( bef == Root( s ) ) {					// must change root
+		void 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 );
+#endif // __CFA_DEBUG__
+			if ( &bef == Root( s ) ) {					// must change root
 				if ( root ) {
-					Next( n ) = Root( s );
-					Back( n ) = Back( Root( s ) );
+					Next( &n ) = Root( s );
+					Back( &n ) = Back( Root( s ) );
 					// inserted node must be consistent before it is seen
 					asm( "" : : : "memory" );			// prevent code movement across barrier
-					Back( Root( s ) ) = n;
-					Next( Back( n ) ) = n;
+					Back( Root( s ) ) = &n;
+					Next( Back( &n ) ) = &n;
 				} else {
-					Next( n ) = n;
-					Back( n ) = n;
+					Next( &n ) = &n;
+					Back( &n ) = &n;
 				} // if
 				// inserted node must be consistent before it is seen
 				asm( "" : : : "memory" );				// prevent code movement across barrier
-				root = n;
+				root = &n;
 			} else {
-				if ( ! bef ) bef = Root( s );
-				Next( n ) = bef;
-				Back( n ) = Back( bef );
+				if ( ! &bef ) &bef = Root( s );
+				Next( &n ) = &bef;
+				Back( &n ) = Back( &bef );
 				// inserted node must be consistent before it is seen
 				asm( "" : : : "memory" );				// prevent code movement across barrier
-				Back( bef ) = n;
-				Next( Back( n ) ) = n;
+				Back( &bef ) = &n;
+				Next( Back( &n ) ) = &n;
 			} // if
 		}	// post: n->listed() & *n in *s & succ(n) == bef
@@ -116,71 +116,71 @@
 
 		// 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
-#ifdef __CFA_DEBUG__
-			if ( listed( n ) ) abort( "(Sequence &)%p.insertAft( %p, %p ) : Node is already on another list.", &s, aft, n );
-#endif // __CFA_DEBUG__
-			if ( ! aft ) {								// must change root
+		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 );
+#endif // __CFA_DEBUG__
+			if ( ! &aft ) {								// must change root
 				if ( root ) {
-					Next( n ) = Root( s );
-					Back( n ) = Back( Root( s ) );
+					Next( &n ) = Root( s );
+					Back( &n ) = Back( Root( s ) );
 					// inserted node must be consistent before it is seen
 					asm( "" : : : "memory" );			// prevent code movement across barrier
-					Back( Root( s ) ) = n;
-					Next( Back( n ) ) = n;
+					Back( Root( s ) ) = &n;
+					Next( Back( &n ) ) = &n;
 				} else {
-					Next( n ) = n;
-					Back( n ) = n;
+					Next( &n ) = &n;
+					Back( &n ) = &n;
 				} // if
 				asm( "" : : : "memory" );				// prevent code movement across barrier
-				root = n;
+				root = &n;
 			} else {
-				Next( n ) = Next( aft );
-				Back( n ) = aft;
+				Next( &n ) = Next( &aft );
+				Back( &n ) = &aft;
 				// inserted node must be consistent before it is seen
 				asm( "" : : : "memory" );				// prevent code movement across barrier
-				Back( Next( n ) ) = n;
-				Next( aft ) = n;
+				Back( Next( &n ) ) = &n;
+				Next( &aft ) = &n;
 			} // if
 		}	  // 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)
-#ifdef __CFA_DEBUG__
-			if ( ! listed( n ) ) abort( "(Sequence &)%p.remove( %p ) : Node is not on a list.", &s, n );
-#endif // __CFA_DEBUG__
-			if ( n == Root( s ) ) {
+		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 );
+#endif // __CFA_DEBUG__
+			if ( &n == Root( s ) ) {
 				if ( Next( Root( s ) ) == Root( s ) ) root = 0p;
 				else root = Next( Root(s ) );
 			} // if
-			Back( Next( n ) ) = Back( n );
-			Next( Back( n ) ) = Next( n );
-			Next( n ) = Back( n ) = 0p;
+			Back( Next( &n ) ) = Back( &n );
+			Next( Back( &n ) ) = Next( &n );
+			Next( &n ) = Back( &n ) = 0p;
 		}							// 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, 0, n );
+		void addHead( Sequence(T) & s, T & n ) {		// pre: !n->listed(); post: n->listed() & head() == n
+			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, 0 );
+		void addTail( Sequence(T) & s, T & n ) {		// pre: !n->listed(); post: n->listed() & head() == n
+			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
+		void add( Sequence(T) & s, T & n ) {			// pre: !n->listed(); post: n->listed() & head() == n
 			addTail( s, n );
 		}
 		// Remove and return the head element in the sequence.
-		T * dropHead( Sequence(T) & s ) {
+		T & dropHead( Sequence(T) & s ) {
 			T * n = head( s );
-			return n ? remove( s, n ), n : 0p;
+			return n ? remove( s, *n ), *n : *0p;
 		}
 		// Remove and return the head element in the sequence.
-		T * drop( Sequence(T) & s ) {
+		T & drop( Sequence(T) & s ) {
 			return dropHead( s );
 		}
 		// Remove and return the tail element in the sequence.
-		T * dropTail( Sequence(T) & s ) {
-			T * n = tail( s );
-			return n ? remove( s, n ), n : 0p;
+		T & dropTail( Sequence(T) & s ) {
+			T & n = tail( s );
+			return &n ? remove( s, n ), n : *0p;
 		}
 
@@ -283,10 +283,10 @@
 			((ColIter &) si){};
 			seq = &s;
-			curr = tail( s );
+			curr = &tail( s );
 		} // post: elts = null.
 		
 		void over( SeqIterRev(T) & si, Sequence(T) & s ) with( si ) {
 			seq = &s;
-			curr = tail( s );
+			curr = &tail( s );
 		} // post: elts = {e in s}.
 
@@ -295,5 +295,5 @@
 				&tp = Curr( si );
 				T * n = pred( *seq, Curr( si ) );
-				curr = n == tail( *seq ) ? 0p : n;
+				curr = n == &tail( *seq ) ? 0p : n;
 			} else &tp = 0p;
 			return &tp != 0p;
Index: libcfa/src/bits/sequence_example.cfa
===================================================================
--- libcfa/src/bits/sequence_example.cfa	(revision 833ba1303fbedf161abb0734b0b75b53f0b46999)
+++ libcfa/src/bits/sequence_example.cfa	(revision b37515b1c02ee9d9ba7d60b5f6bee246234cde78)
@@ -27,5 +27,5 @@
 	
 	for ( i; 10 ) {
-		add( fred, new( 2 * i ) );
+		add( fred, *new( 2 * i ) );
 	}
 
@@ -36,5 +36,5 @@
 
 	for ( i; 9 ) {
-		delete( dropHead( fred ) );
+		delete( &dropHead( fred ) );
 	}
 
@@ -45,5 +45,5 @@
 	
 	for ( i; 10 ) {
-		addTail( fred, new( 2 * i + 1 ) );
+		addTail( fred, *new( 2 * i + 1 ) );
 	}
 	for ( over( fredIter, fred ); fredIter >> f; ) {
@@ -87,6 +87,6 @@
 	
 	for ( i; 10 ) {
-		add( mary, new( 2 * i ) );
-		add( baz, new( 2 * i ) );
+		add( mary, *new( 2 * i ) );
+		add( baz, *new( 2 * i ) );
 	}
 
@@ -97,5 +97,5 @@
 	
 	for ( i; 9 ) {
-		delete( dropHead( mary ) );
+		delete( &dropHead( mary ) );
 	}
 
@@ -106,5 +106,5 @@
 	
 	for ( i; 10 ) {
-		addTail( mary, new( 2 * i + 1 ) );
+		addTail( mary, *new( 2 * i + 1 ) );
 	}
 	for ( over( maryIter, mary ); maryIter >> m; ) {
