Index: libcfa/src/concurrency/locks.cfa
===================================================================
--- libcfa/src/concurrency/locks.cfa	(revision 75226925ba8d48fa7f4541bc0bc34721f53624dc)
+++ libcfa/src/concurrency/locks.cfa	(revision dff1fd1af08a6ae85e2ef95b1104d6058c4419d4)
@@ -17,5 +17,4 @@
 		this.t = t;
 		this.lock = 0p;
-		this.listed = false;
 	}
 
@@ -25,5 +24,4 @@
 		this.info = info;
 		this.lock = 0p;
-		this.listed = false;
 	}
 
@@ -36,8 +34,4 @@
 	info_thread(L) *& Next( info_thread(L) * this ) {
 		return (info_thread(L) *)Next( (Colable *)this );
-	}
-
-	bool listed( info_thread(L) * this ) {
-		return Next( (Colable *)this ) != 0p;
 	}
 }
@@ -194,6 +188,6 @@
     	// This condition_variable member is called from the kernel, and therefore, cannot block, but it can spin.
 	    lock( cond->lock __cfaabi_dbg_ctx2 );
-	    
-	    if ( i->listed ) {			// is thread on queue
+	    if ( listed(i) ) {			// is thread on queue
+	    	i->signalled = false;
 	    	cond->last_thread = i;		// REMOVE THIS AFTER DEBUG
 			remove( cond->blocked_threads, *i );		 //remove this thread O(1)
@@ -227,5 +221,5 @@
 	void process_popped( condition_variable(L) & this, info_thread(L) & popped ) with( this ) {
 		if(&popped != 0p) {
-			popped.listed = false;
+			popped.signalled = true;
 			count--;
 			if (popped.lock) {
@@ -266,5 +260,4 @@
 		addTail( blocked_threads, *i );
 		count++;
-		i->listed = true;
 		size_t recursion_count = 0;
 		if (i->lock) {
@@ -308,22 +301,26 @@
 	}
 	
-	void wait( condition_variable(L) & this, Duration duration ) with(this) {
+	bool wait( condition_variable(L) & this, Duration duration ) with(this) {
 		info_thread( L ) i = { active_thread() };
 		queue_info_thread_timeout(this, i, __kernel_get_time() + duration );
-	}
-
-	void wait( condition_variable(L) & this, uintptr_t info, Duration duration ) with(this) { 
+		return i.signalled;
+	}
+
+	bool wait( condition_variable(L) & this, uintptr_t info, Duration duration ) with(this) { 
 		info_thread( L ) i = { active_thread(), info };
 		queue_info_thread_timeout(this, i, __kernel_get_time() + duration );
-	}
-
-	void wait( condition_variable(L) & this, Time time ) with(this) {
+		return i.signalled;
+	}
+
+	bool wait( condition_variable(L) & this, Time time ) with(this) {
 		info_thread( L ) i = { active_thread() };
 		queue_info_thread_timeout(this, i, time);
-	}
-
-	void wait( condition_variable(L) & this, uintptr_t info, Time time ) with(this) {
+		return i.signalled;
+	}
+
+	bool wait( condition_variable(L) & this, uintptr_t info, Time time ) with(this) {
 		info_thread( L ) i = { active_thread(), info };
 		queue_info_thread_timeout(this, i, time);
+		return i.signalled;
 	}
 
@@ -340,26 +337,30 @@
 	}
 	
-	void wait( condition_variable(L) & this, L & l, Duration duration ) with(this) {
+	bool wait( condition_variable(L) & this, L & l, Duration duration ) with(this) {
 		info_thread(L) i = { active_thread() };
 		i.lock = &l;
 		queue_info_thread_timeout(this, i, __kernel_get_time() + duration );
-	}
-	
-	void wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration ) with(this) {
+		return i.signalled;
+	}
+	
+	bool wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration ) with(this) {
 		info_thread(L) i = { active_thread(), info };
 		i.lock = &l;
 		queue_info_thread_timeout(this, i, __kernel_get_time() + duration );
-	}
-	
-	void wait( condition_variable(L) & this, L & l, Time time ) with(this) {
+		return i.signalled;
+	}
+	
+	bool wait( condition_variable(L) & this, L & l, Time time ) with(this) {
 		info_thread(L) i = { active_thread() };
 		i.lock = &l;
 		queue_info_thread_timeout(this, i, time );
-	}
-	
-	void wait( condition_variable(L) & this, L & l, uintptr_t info, Time time ) with(this) {
+		return i.signalled;
+	}
+	
+	bool wait( condition_variable(L) & this, L & l, uintptr_t info, Time time ) with(this) {
 		info_thread(L) i = { active_thread(), info };
 		i.lock = &l;
 		queue_info_thread_timeout(this, i, time );
-	}
-}
+		return i.signalled;
+	}
+}
Index: libcfa/src/concurrency/locks.hfa
===================================================================
--- libcfa/src/concurrency/locks.hfa	(revision 75226925ba8d48fa7f4541bc0bc34721f53624dc)
+++ libcfa/src/concurrency/locks.hfa	(revision dff1fd1af08a6ae85e2ef95b1104d6058c4419d4)
@@ -36,5 +36,5 @@
 		uintptr_t info;
 		L * lock;
-		bool listed;					// true if info_thread is on queue, false otherwise;
+		bool signalled;					// true when signalled and false when timeout wakes thread
 	};
 
@@ -46,5 +46,4 @@
 	info_thread(L) *& Back( info_thread(L) * this );
 	info_thread(L) *& Next( info_thread(L) * this );
-	bool listed( info_thread(L) * this );
 }
 
@@ -52,14 +51,4 @@
 //// Blocking Locks
 ///////////////////////////////////////////////////////////////////
-
-// struct lock_thread {
-// 	struct $thread * t;
-// 	lock_thread * next;
-// };
-
-// void ?{}( lock_thread & this, struct $thread * thd );
-// void ^?{}( lock_thread & this );
-
-// lock_thread *& get_next( lock_thread & );
 
 struct blocking_lock {
@@ -183,17 +172,16 @@
 	int counter( condition_variable(L) & this );
 
-	// TODO: look into changing timout routines to return bool showing if signalled or woken by kernel
 	void wait( condition_variable(L) & this );
 	void wait( condition_variable(L) & this, uintptr_t info );
-	void wait( condition_variable(L) & this, Duration duration );
-	void wait( condition_variable(L) & this, uintptr_t info, Duration duration );
-	void wait( condition_variable(L) & this, Time time );
-	void wait( condition_variable(L) & this, uintptr_t info, Time time );
+	bool wait( condition_variable(L) & this, Duration duration );
+	bool wait( condition_variable(L) & this, uintptr_t info, Duration duration );
+	bool wait( condition_variable(L) & this, Time time );
+	bool wait( condition_variable(L) & this, uintptr_t info, Time time );
 
 	void wait( condition_variable(L) & this, L & l );
 	void wait( condition_variable(L) & this, L & l, uintptr_t info );
-	void wait( condition_variable(L) & this, L & l, Duration duration );
-	void wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration );
-	void wait( condition_variable(L) & this, L & l, Time time );
-	void wait( condition_variable(L) & this, L & l, uintptr_t info, Time time );
+	bool wait( condition_variable(L) & this, L & l, Duration duration );
+	bool wait( condition_variable(L) & this, L & l, uintptr_t info, Duration duration );
+	bool wait( condition_variable(L) & this, L & l, Time time );
+	bool wait( condition_variable(L) & this, L & l, uintptr_t info, Time time );
 }
