diff --git a/src/main/java/teetime/util/concurrent/workstealing/CircularArray.java b/src/main/java/teetime/util/concurrent/workstealing/CircularArray.java
index f48def9d4f23b0cec6585fa6da988e032dc1cd71..60a3991e8e77d36127e070305b0372b71c068a80 100644
--- a/src/main/java/teetime/util/concurrent/workstealing/CircularArray.java
+++ b/src/main/java/teetime/util/concurrent/workstealing/CircularArray.java
@@ -32,6 +32,7 @@ public class CircularArray<T> {
 
 	private final long logSize;
 	private final T[] segment;
+	private final long mask;
 
 	/**
 	 * 
@@ -42,6 +43,7 @@ public class CircularArray<T> {
 	public CircularArray(final long logSize) {
 		this.logSize = logSize;
 		this.segment = (T[]) new Object[1 << this.logSize];
+		this.mask = this.getCapacity() - 1; // mask = 0..01..1
 	}
 
 	public long getCapacity() {
@@ -49,11 +51,11 @@ public class CircularArray<T> {
 	}
 
 	public T get(final long i) {
-		return this.segment[(int) (i % this.getCapacity())]; // risk of overflow
+		return this.segment[(int) (i & this.mask)]; // risk of overflow
 	}
 
 	public void put(final long i, final T o) {
-		this.segment[(int) (i % this.getCapacity())] = o; // risk of overflow
+		this.segment[(int) (i & this.mask)] = o; // risk of overflow
 	}
 
 	public CircularArray<T> grow(final long b, final long t) {