Index: tests/collections/.expect/queue.txt
===================================================================
--- tests/collections/.expect/queue.txt	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
+++ tests/collections/.expect/queue.txt	(revision 62a7cc0ac31873baa3923dd92c537b60b4a3eac1)
@@ -1,15 +1,23 @@
 empty
-0
-18
+0 18
 0 2 4 6 8 10 12 14 16 18 
 18 
-18
+-1 18 -2
+-1 18 1 3 5 7 9 11 13 15 17 19 -2 
 18 1 3 5 7 9 11 13 15 17 
+18 1 3 5 7 
+empty
 0 1 2 3 4 5 6 7 8 9 
-6 7 8 9 
-0 1 2 3 4 5 
-6 7 8 9 0 1 2 3 4 5 
+5 6 7 8 9 
+0 1 2 3 4 
+5 6 7 8 9 0 1 2 3 4 
 empty
+0 18
 0 0 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 
 18 18 
-18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 19 
+-1 18 -1
+18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 
+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 
+0 0 1 1 2 2 3 3 4 4 
+5 5 6 6 7 7 8 8 9 9 0 0 1 1 2 2 3 3 4 4 
Index: tests/collections/.expect/sequence.txt
===================================================================
--- tests/collections/.expect/sequence.txt	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
+++ tests/collections/.expect/sequence.txt	(revision 62a7cc0ac31873baa3923dd92c537b60b4a3eac1)
@@ -1,18 +1,26 @@
 empty
+0 18
 0 2 4 6 8 10 12 14 16 18 
 18 
-18 1 3 5 7 9 11 13 15 17 19 
-18 1 
+-1 18 -2
+-1 18 1 3 5 7 9 11 13 15 17 19 -2 
+18 1 3 5 7 9 11 13 15 17 
+18 1 3 5 7 
+empty
 0 1 2 3 4 5 6 7 8 9 
-9
-9 8 7 6 5 4 3 1 -2 0 
-4 3 1 -2 0 
+-1 -2 0
+-1 -2 9 8 7 6 5 4 3 2 1 0 
+9 8 7 6 5 4 3 2 1 
+4 3 2 1 
 9 8 7 6 5 
-4 3 1 -2 0 9 8 7 6 5 
+4 3 2 1 9 8 7 6 5 
 empty
+0 18
 0 0 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 
 18 18 
-18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 19 19 
-18 18 1 1 
-empty
-18 18 1 1 0 0 2 2 4 4 6 6 8 8 10 10 12 12 14 14 16 16 18 18 
+-1 18 -1
+18 18 1 1 3 3 5 5 7 7 9 9 11 11 13 13 15 15 17 17 
+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 
+0 0 1 1 2 2 3 3 4 4 
+5 5 6 6 7 7 8 8 9 9 0 0 1 1 2 2 3 3 4 4 
Index: tests/collections/queue.cfa
===================================================================
--- tests/collections/queue.cfa	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
+++ tests/collections/queue.cfa	(revision 62a7cc0ac31873baa3923dd92c537b60b4a3eac1)
@@ -33,6 +33,5 @@
 	}
 
-	sout | head(fred).i | nl;
-	sout | tail(fred).i | nl;
+	sout | head( fred ).i | tail( fred ).i | nl;
 
 	for ( QueueIter(Fred) iter = { fred }; iter >> f; ) {
@@ -54,34 +53,48 @@
 	}
 
-	Fred * front = new( -1 );
-	addHead( fred, *front );
-	sout | succ( fred, front )->i | nl;
-	remove( fred, *front );
-	delete( front );
-
-	Fred & end = dropTail( fred );
-	delete( &end );
-
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		delete( &f );
-	}
-
-	Queue(Fred) fred0;
-	Fred * middle;
-	for ( i; 10 ) {
-		if( i == 5) {
-			middle = new( i );
-			add( fred0, *middle );
-			continue;
+	Fred * head = new( -1 ), tail = { -2 };
+	addHead( fred, *head );
+	addTail( fred, tail );
+
+	sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	remove( fred, *head );
+	remove( fred, tail );
+	delete( head );
+	delete( &dropTail( fred ) );
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( i; 5 ) {
+		delete( &dropTail( fred ) );
+	}
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		delete( &remove( fred, f ) );
+	}
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | "empty" | nl;
+
+	Fred & middle;
+	for ( i; 10 ) {
+		add( fred, *new( i ) );
+		if ( i == 4 ) {
+			&middle = &tail( fred );
 		}
-		add( fred0, *new( i ) );
-	}
-
-	for ( QueueIter(Fred) iter = { fred0 }; iter >> f; ) {
+	}
+	for ( QueueIter(Fred) iter = { fred }; iter >> f; ) {
 		sout | f.i | ' ';
 	}
@@ -90,7 +103,7 @@
 	Queue(Fred) fred2;
 
-	split( fred2, fred0, *middle);
-
-	for ( over( fredIter, fred0 ); fredIter >> f; ) {
+	split( fred2, fred, middle );
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
 		sout | f.i | ' ';
 	}
@@ -102,12 +115,12 @@
 	sout | nl;
 
-	transfer( fred0, fred2);
-
-	for ( over( fredIter, fred0 ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred0 ); fredIter >> f; ) {
+	transfer( fred, fred2 );
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
 		delete( &f );
 	}
@@ -122,7 +135,6 @@
 	void ?{}( Mary & mary, int p ) with( mary ) {
 		((Fred &)mary){ p };
-		j = i = p;
-	}
-
+		j = p;
+	}
 	Mary *& Next( Mary * n ) {
 		return (Mary *)Next( (Fred *)n );
@@ -142,4 +154,6 @@
 	}
 
+	sout | head( mary ).i | tail( mary ).i | nl;
+
 	for ( QueueIter(Mary) iter = { mary }; iter >> m; ) {
 		sout | m.i | m.j | ' ';
@@ -159,9 +173,54 @@
 		add( mary, *new( 2 * i + 1 ) );
 	}
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-
+
+	Mary * head = new( -1 ), tail = { -1 };
+	addHead( mary, *head );
+	addTail( mary, tail );
+	sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl;
+	remove( mary, *head );
+	remove( mary, tail );
+	delete( (Mary *)head );
+	delete( &dropTail( mary ) );
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		delete( &remove( mary, m ) );
+	}
+
+	Mary & middle;
+	for ( i; 10 ) {
+		add( mary, *new( i ) );
+		if ( i == 4 ) {
+			&middle = &tail( mary );
+		}
+	}
+	for ( QueueIter(Mary) iter = { mary }; iter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	Queue(Mary) mary2;
+
+	split( mary2, mary, middle );
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+	for ( over( maryIter, mary2 ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	transfer( mary, mary2 );
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
 	for ( over( maryIter, mary ); maryIter >> m; ) {
 		delete( &m );
Index: tests/collections/sequence.cfa
===================================================================
--- tests/collections/sequence.cfa	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
+++ tests/collections/sequence.cfa	(revision 62a7cc0ac31873baa3923dd92c537b60b4a3eac1)
@@ -14,9 +14,7 @@
 		i = p;
 	}
-
 	Fred *& Back( Fred * n ) {
 		return (Fred *)Back( (Seqable *)n );
 	}
-
 	Fred *& Next( Fred * n ) {
 		return (Fred *)Next( (Colable *)n );
@@ -38,4 +36,6 @@
 	}
 
+	sout | head( fred ).i | tail( fred ).i | nl;
+
 	for ( SeqIter(Fred) iter = { fred }; iter >> f; ) {
 		sout | f.i | ' ';
@@ -55,10 +55,26 @@
 		addTail( fred, *new( 2 * i + 1 ) );
 	}
-	for ( over( fredIter, fred ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( i; 9 ) {
+
+	Fred * head = new( -1 ), tail = { -2 };
+	addHead( fred, *head );
+	addTail( fred, tail );
+
+	sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	remove( fred, *head );
+	remove( fred, tail );
+	delete( head );
+	delete( &dropTail( fred ) );
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( i; 5 ) {
 		delete( &dropTail( fred ) );
 	}
@@ -69,34 +85,39 @@
 
 	for ( over( fredIter, fred ); fredIter >> f; ) {
-		delete( &f );
-	}
-
-	Sequence(Fred) fred0;
-	Fred * middle;
-	for ( i; 10 ) {
-		if( i == 5) {
-			middle = new( i );
-			addHead( fred0, *middle );
-			continue;
+		delete( &remove( fred, f ) );
+	}
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | "empty" | nl;
+
+	Fred & middle;
+	for ( i; 10 ) {
+		addHead( fred, *new( i ) );						// reverse oder
+		if ( i == 5 ) {
+			&middle = &head( fred );
 		}
-		addHead( fred0, *new( i ) );
-	}
-
-	for ( SeqIterRev(Fred) iter = { fred0 }; iter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	Fred * front = new( -1 );
-	insertBef( fred0, *front, tail(fred0));
-	insertAft( fred0, *front, *new( -2 ) );
-	remove( fred0, *front );
-	delete( front );
-
-	sout | head(fred0).i | nl;
-	Fred & end = dropTail( fred );
-	delete( &end );
-
-	for ( over( fredIter, fred0 ); fredIter >> f; ) {
+	}
+	for ( SeqIterRev(Fred) iter = { fred }; iter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	head = new( -1 );
+	insertBef( fred, *head, head( fred ) );
+	insertAft( fred, *head, tail );
+
+	sout | head( fred ).i | succ( fred, head )->i | tail( fred ).i | nl;
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	remove( fred, *head );
+	remove( fred, tail );
+	delete( head );
+	delete( &dropTail( fred ) );
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
 		sout | f.i | ' ';
 	}
@@ -105,7 +126,7 @@
 	Sequence(Fred) fred2;
 
-	split( fred2, fred0, *middle);
-
-	for ( over( fredIter, fred0 ); fredIter >> f; ) {
+	split( fred2, fred, middle );
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
 		sout | f.i | ' ';
 	}
@@ -117,12 +138,12 @@
 	sout | nl;
 
-	transfer( fred0, fred2);
-
-	for ( over( fredIter, fred0 ); fredIter >> f; ) {
-		sout | f.i | ' ';
-	}
-	sout | nl;
-
-	for ( over( fredIter, fred0 ); fredIter >> f; ) {
+	transfer( fred, fred2 );
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
+		sout | f.i | ' ';
+	}
+	sout | nl;
+
+	for ( over( fredIter, fred ); fredIter >> f; ) {
 		delete( &f );
 	}
@@ -139,9 +160,7 @@
 		j = p;
 	}
-
 	Mary *& Back( Mary * n ) {
 		return (Mary *)Back( (Fred *)n );
 	}
-
 	Mary *& Next( Mary * n ) {
 		return (Mary *)Next( (Fred *)n );
@@ -149,5 +168,4 @@
 
 	Sequence(Mary) mary;
-	Sequence(Mary) baz;
 	SeqIter(Mary) maryIter = { mary };
 	Mary & m;
@@ -160,6 +178,7 @@
 	for ( i; 10 ) {
 		add( mary, *new( 2 * i ) );
-		add( baz, *new( 2 * i ) );
-	}
+	}
+
+	sout | head( mary ).i | tail( mary ).i | nl;
 
 	for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
@@ -180,29 +199,54 @@
 		addTail( mary, *new( 2 * i + 1 ) );
 	}
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-
-	for ( i; 9 ) {
-		delete( &dropTail( mary ) );
-	}
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-
-	transfer( mary, baz );
-
-	for ( over( maryIter, baz ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | "empty" | nl;
-
-	for ( over( maryIter, mary ); maryIter >> m; ) {
-		sout | m.i | m.j | ' ';
-	}
-	sout | nl;
-
+
+	Mary * head = new( -1 ), tail = { -1 };
+	addHead( mary, *head );
+	addTail( mary, tail );
+	sout | head( mary ).i | succ( mary, head )->i | tail( mary ).i | nl;
+	remove( mary, *head );
+	remove( mary, tail );
+	delete( (Mary *)head );
+	delete( &dropTail( mary ) );
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		delete( &remove( mary, m ) );
+	}
+
+	Mary & middle;
+	for ( i; 10 ) {
+		add( mary, *new( i ) );
+		if ( i == 4 ) {
+			&middle = &tail( mary );
+		}
+	}
+	for ( SeqIter(Mary) iter = { mary }; iter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	Sequence(Mary) mary2;
+
+	split( mary2, mary, middle );
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+	for ( over( maryIter, mary2 ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
+
+	transfer( mary, mary2 );
+
+	for ( over( maryIter, mary ); maryIter >> m; ) {
+		sout | m.i | m.j | ' ';
+	}
+	sout | nl;
 	for ( over( maryIter, mary ); maryIter >> m; ) {
 		delete( &m );
Index: tests/collections/stack.cfa
===================================================================
--- tests/collections/stack.cfa	(revision a3a76ea84bbeedad8793c2d636acb8d3e26f4729)
+++ tests/collections/stack.cfa	(revision 62a7cc0ac31873baa3923dd92c537b60b4a3eac1)
@@ -38,5 +38,5 @@
 	sout | nl;
 
-	sout | head(fred).i | nl;
+	sout | head( fred ).i | nl;
 	
 	for ( i; 9 ) {
@@ -70,5 +70,5 @@
 	void ?{}( Mary & mary, int p ) with( mary ) {
 		((Fred &)mary){ p };
-		j = i = p;
+		j = p;
 	}
 
