Index: libcfa/src/concurrency/ready_queue.cfa
===================================================================
--- libcfa/src/concurrency/ready_queue.cfa	(revision cf85f96e20bb883330a745c3e349efa48f6756e8)
+++ libcfa/src/concurrency/ready_queue.cfa	(revision df7597e0e577b1353d3b59151ae805f0e71041c2)
@@ -256,5 +256,10 @@
 		/* paranoid */ verify(cpu * READYQ_SHARD_FACTOR < lanes.count);
 
-		const int start = cpu * READYQ_SHARD_FACTOR;
+		const cpu_map_entry_t & map = cpu_info.llc_map[cpu];
+		/* paranoid */ verify(map.start * READYQ_SHARD_FACTOR < lanes.count);
+		/* paranoid */ verify(map.self * READYQ_SHARD_FACTOR < lanes.count);
+		/* paranoid */ verifyf((map.start + map.count) * READYQ_SHARD_FACTOR <= lanes.count, "have %u lanes but map can go up to %u", lanes.count, (map.start + map.count) * READYQ_SHARD_FACTOR);
+
+		const int start = map.self * READYQ_SHARD_FACTOR;
 		unsigned i;
 		do {
@@ -288,9 +293,14 @@
 		const int cpu = __kernel_getcpu();
 		/* paranoid */ verify(cpu >= 0);
+		/* paranoid */ verify(cpu < cpu_info.hthrd_count);
 		/* paranoid */ verify(cpu * READYQ_SHARD_FACTOR < lanes.count);
-		/* paranoid */ verify(cpu < cpu_info.hthrd_count);
+
+		const cpu_map_entry_t & map = cpu_info.llc_map[cpu];
+		/* paranoid */ verify(map.start * READYQ_SHARD_FACTOR < lanes.count);
+		/* paranoid */ verify(map.self * READYQ_SHARD_FACTOR < lanes.count);
+		/* paranoid */ verifyf((map.start + map.count) * READYQ_SHARD_FACTOR <= lanes.count, "have %u lanes but map can go up to %u", lanes.count, (map.start + map.count) * READYQ_SHARD_FACTOR);
 
 		processor * const proc = kernelTLS().this_processor;
-		const int start = cpu * READYQ_SHARD_FACTOR;
+		const int start = map.self * READYQ_SHARD_FACTOR;
 
 		// Did we already have a help target
@@ -303,5 +313,5 @@
 			}
 			proc->rdq.cutoff = min;
-			proc->rdq.target = __tls_rand() % lanes.count;
+			proc->rdq.target = (map.start * READYQ_SHARD_FACTOR) + (__tls_rand() % (map.count* READYQ_SHARD_FACTOR));
 		}
 		else {
