Index: tests/concurrency/waituntil/futures.cfa
===================================================================
--- tests/concurrency/waituntil/futures.cfa	(revision 00483274b9d94d9164a5a6c09e2b2fc5a24831d1)
+++ tests/concurrency/waituntil/futures.cfa	(revision 86b418f5a3b8e6ad924cd5631d76579cecaa3ba5)
@@ -1,3 +1,3 @@
-#include <select.hfa>
+#include <fstream.hfa>
 #include <future.hfa>
 #include <thread.hfa>
@@ -5,57 +5,52 @@
 future(int) A, B, C;
 
-semaphore s{0};
-
-thread Server1 {};
-void main( Server1 & ) {
-    fulfil(B, 3);
-    P( s );
-    fulfil(A, 2);
-    fulfil(C, 4);
-}
-
-thread Server2 {};
-void main( Server2 & ) {
-    fulfil(B, 6);
-    fulfil(A, 5);
-    fulfil(C, 7);
+thread Server {};
+void main( Server & ) {
+	B( 3 ); // fulfil( B, 3 );
+	A( 2 );
+	C( 4 );
 }
 
 int main() {
-    processor proc[1];
-    printf("start\n"); // currently not working
-    {
-        Server1 s1;
-        waituntil( A ) { get(A); }
-        or waituntil( B ) { get(B); V( s ); }
-        and waituntil( C ) { get(C); }
-    }
-    reset(A);
-    reset(B);
-    reset(C);
-    for ( int i = 0; i < 8; i++ ) {
-        {
-            Server2 s2;
-            when( i % 2 == 0 ) waituntil( A ) { get(A); }
-            or when( i % 4 < 2 ) waituntil( B ) { get(B); }
-            and when( i < 4 ) waituntil( C ) { get(C); }
-        }
-        reset(A);
-        reset(B);
-        reset(C);
-        {
-            Server2 s2;
-            (
-                when( i % 2 == 0 ) waituntil( A ) { get(A); }
-                or when( i % 4 < 2 ) waituntil( B ) { get(B); }
-            )
-            and when( i < 4 ) waituntil( C ) { get(C); }
-        }
-        reset(A);
-        reset(B);
-        reset(C);
-    }
-
-    printf("end\n");
-    return 0;
+	processor p;
+    sout | "start";
+	{
+		size_t count = 0;
+		Server s;
+		for ( 3 ) {
+			waituntil( A ) { count += 1; A(); /* get( A ) */ reset( A ); }
+			or waituntil( B ) { count += 1; B(); reset( B ); }
+			or waituntil( C ) { count += 1; C(); reset( C ); }
+		}
+		assert( count == 3 );
+	}
+	{
+		size_t count = 0;
+		Server s;
+		for ( 2 ) {
+			waituntil( A ) { count += 1; A(); /* get( A ) */ reset( A ); }
+			or waituntil( B ) { count += 1; B(); reset( B ); }
+			and waituntil( C ) { count += 1; C(); reset( C ); }
+		}
+		assert( count == 3 );
+	}
+	size_t count = 0;
+	for ( i; 8 ) {
+		{
+			Server s;
+			when( i % 2 == 0 ) waituntil( A ) { count += 1; A(); }
+			or when( i % 4 < 2 ) waituntil( B ) { count += 1; B(); }
+			and when( i < 4 ) waituntil( C ) { count += 1; C(); }
+		}
+		reset( A ); reset( B ); reset( C );
+		{
+			Server s;
+			( when( i % 2 == 0 ) waituntil( A ) { count += 1; A(); }
+			  or when( i % 4 < 2 ) waituntil( B ) { count += 1; B(); }
+			) and when( i < 4 ) waituntil( C ) { count += 1; C(); }
+		}
+		reset( A ); reset( B ); reset( C );
+	} // for
+	assert( count == 19 );
+	sout | "end";
 }
