Index: libcfa/src/concurrency/locks.hfa
===================================================================
--- libcfa/src/concurrency/locks.hfa	(revision e638266cf047054e590f284eaed37617f4069afa)
+++ libcfa/src/concurrency/locks.hfa	(revision c41c2dbeee7cb1fdf1bbdad8a54a92cf7c4dd0f3)
@@ -197,6 +197,5 @@
 static inline $thread * unlock( fast_lock & this ) __attribute__((artificial));
 static inline $thread * unlock( fast_lock & this ) {
-	$thread * thrd = active_thread();
-	/* paranoid */ verify(thrd == this.owner);
+	/* paranoid */ verify(active_thread() == this.owner);
 
 	// open 'owner' before unlocking anyone
Index: libcfa/src/concurrency/ready_queue.cfa
===================================================================
--- libcfa/src/concurrency/ready_queue.cfa	(revision e638266cf047054e590f284eaed37617f4069afa)
+++ libcfa/src/concurrency/ready_queue.cfa	(revision c41c2dbeee7cb1fdf1bbdad8a54a92cf7c4dd0f3)
@@ -413,13 +413,17 @@
 			unsigned it2  = proc->rdq.itr + 1;
 			unsigned idx1 = proc->rdq.id + (it1 % READYQ_SHARD_FACTOR);
-			unsigned idx2 = proc->rdq.id + (it1 % READYQ_SHARD_FACTOR);
+			unsigned idx2 = proc->rdq.id + (it2 % READYQ_SHARD_FACTOR);
 			unsigned long long tsc1 = ts(lanes.data[idx1]);
 			unsigned long long tsc2 = ts(lanes.data[idx2]);
 			proc->rdq.cutoff = min(tsc1, tsc2);
-		}
-		else if(lanes.tscs[proc->rdq.target].tv < proc->rdq.cutoff) {
-			$thread * t = try_pop(cltr, proc->rdq.target __STATS(, __tls_stats()->ready.pop.help));
+			if(proc->rdq.cutoff == 0) proc->rdq.cutoff = -1ull;
+		}
+		else {
+			unsigned target = proc->rdq.target;
 			proc->rdq.target = -1u;
-			if(t) return t;
+			if(lanes.tscs[target].tv < proc->rdq.cutoff) {
+				$thread * t = try_pop(cltr, target __STATS(, __tls_stats()->ready.pop.help));
+				if(t) return t;
+			}
 		}
 
