Index: libcfa/src/bits/multi_list.cfa
===================================================================
--- libcfa/src/bits/multi_list.cfa	(revision 1ac1f0b69be2ed920648b84d46d43ef8c0701c26)
+++ libcfa/src/bits/multi_list.cfa	(revision f7386f7759dcaa4f6b5caf6d7abd1ae31a4c8a97)
@@ -2,4 +2,5 @@
 #include <stdlib.hfa>
 #include "sequence.hfa"
+#include "queue.hfa"
 #include "stack.hfa"
 
@@ -8,12 +9,24 @@
 struct TaskDL {
 	inline Seqable;
-	Task & task_;
+	Task & node;
 };
 void ?{}( TaskDL & this, Task & task ) with( this ) {
 	((Seqable &)this){};
-	&task_ = &task;										// pointer to containing node
+	&node = &task;										// pointer to containing node
 }
 Task & task( TaskDL & this ) with( this ) {				// getter routine for containing node
-	return task_;
+	return node;
+}
+
+struct TaskSL {
+	inline Colable;
+	Task & node;
+};
+void ?{}( TaskSL & this, Task & task ) with( this ) {
+	((Colable &)this){};
+	&node = &task;										// pointer to containing node
+}
+Task & task( TaskSL & this ) with( this ) {				// getter routine for containing node
+	return node;
 }
 
@@ -21,35 +34,48 @@
 	TaskDL clusterRef;									// list of tasks on cluster
 	TaskDL readyRef;									// list of tasks on ready queue
-	// other stuff
+	TaskSL mutexRef;									// list of tasks on mutex queue
+	int id;
 };
-void ?{}( Task & this ) with( this ) {
+void ?{}( Task & this, int id ) with( this ) {
 	((TaskDL &)clusterRef){ this };
 	((TaskDL &)readyRef){ this };
+	((TaskSL &)mutexRef){ this };
+	this.id = id;
 }
 
 int main() {
 	Sequence(TaskDL) clustList, readyList;				// task lists
+	Queue(TaskSL) mutexList;
 	enum { Lnth = 10 };
 
-	for ( Lnth ) {
-		Task & task = *new();							// create task node
+	for ( id; Lnth ) {
+		Task & task = *new( id );						// create task node
 		addHead( clustList, task.clusterRef );			// insert on lists in opposite directions
 		addTail( readyList, task.readyRef );
+		addHead( mutexList, task.mutexRef );
 	}
 
 	SeqIter(TaskDL) sqiter;
 	TaskDL & dl;
+	TaskSL & sl;
 
 	sout | nlOff;
-	for ( over( sqiter, clustList ); sqiter >> dl; ) {		// print lists
+	for ( over( sqiter, clustList ); sqiter >> dl; ) {	// print lists
+		Task & fred = task( dl );
+		sout | fred.id;									// works
+		sout | task( dl ).id;							// does not work
+	}
+	sout | nl;
+	for ( over( sqiter, readyList ); sqiter >> dl; ) {
 		sout | &task( dl );
 	}
 	sout | nl;
-	for ( SeqIter(TaskDL) iter = { readyList }; iter >> dl; ) {
-		sout | &task( dl );
+	for ( QueueIter(TaskSL) qiter = { mutexList }; qiter >> sl; ) {	// print lists
+		sout | &task( sl );
 	}
 	sout | nl;
 	for ( Lnth ) {										// remove nodes from clustList
 		dropHead( clustList );
+		drop( mutexList );
 	}
 	for ( Lnth ) {										// remove nodes from readyList and safe to delete nodes
@@ -59,6 +85,6 @@
 	// Re-purpose Seqable as Colable
 	Stack(TaskDL) mutexStack;
-	for ( Lnth ) {
-		Task & task = *new();							// create task node
+	for ( id; Lnth ) {
+		Task & task = *new( id );						// create task node
 		push( mutexStack, task.clusterRef );			// insert on lists in opposite directions
 	}
