diff --git a/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueFairTest.java b/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueFairTest.java
new file mode 100644
index 0000000..d6ed081
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueFairTest.java
@@ -0,0 +1,25 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+
+// In the upstream sources this class was nested inside ArrayBlockingQueueTests.
+// It was extracted to the top level because the CTS runner does not support
+// nested test classes. The same transformation was applied to all similar
+// classes from the jsr166 suite (see the parent CL for the complete list). This
+// should be reverted after CTS runner is fixed.
+public class ArrayBlockingQueueFairTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new ArrayBlockingQueue(SIZE, true);
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueNotFairTest.java b/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueNotFairTest.java
new file mode 100644
index 0000000..ddb1c5d
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueNotFairTest.java
@@ -0,0 +1,20 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.ArrayBlockingQueue;
+import java.util.concurrent.BlockingQueue;
+
+public class ArrayBlockingQueueNotFairTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new ArrayBlockingQueue(SIZE, false);
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueTest.java b/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueTest.java
index ce417ad..b999496 100644
--- a/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueTest.java
+++ b/jsr166-tests/src/test/java/jsr166/ArrayBlockingQueueTest.java
@@ -24,18 +24,6 @@
 
 public class ArrayBlockingQueueTest extends JSR166TestCase {
 
-    public static class Fair extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new ArrayBlockingQueue(SIZE, true);
-        }
-    }
-
-    public static class NonFair extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new ArrayBlockingQueue(SIZE, false);
-        }
-    }
-
     /**
      * Returns a new queue of given size containing consecutive
      * Integers 0 ... n.
diff --git a/jsr166-tests/src/test/java/jsr166/DelayQueueTest.java b/jsr166-tests/src/test/java/jsr166/DelayQueueTest.java
index 5d48c18..dc221ab 100644
--- a/jsr166-tests/src/test/java/jsr166/DelayQueueTest.java
+++ b/jsr166-tests/src/test/java/jsr166/DelayQueueTest.java
@@ -22,15 +22,14 @@
 import java.util.concurrent.TimeUnit;
 import static java.util.concurrent.TimeUnit.MILLISECONDS;
 
-public class DelayQueueTest extends JSR166TestCase {
+public class DelayQueueTest extends BlockingQueueTest {
 
-    public static class Generic extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new DelayQueue();
-        }
-        protected PDelay makeElement(int i) {
-            return new PDelay(i);
-        }
+    protected BlockingQueue emptyCollection() {
+        return new DelayQueue();
+    }
+
+    protected PDelay makeElement(int i) {
+        return new PDelay(i);
     }
 
     private static final int NOCAP = Integer.MAX_VALUE;
diff --git a/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeBoundedTest.java b/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeBoundedTest.java
new file mode 100644
index 0000000..7b43583
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeBoundedTest.java
@@ -0,0 +1,18 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingDeque;
+
+public class LinkedBlockingDequeBoundedTest extends JSR166TestCase {
+
+    protected BlockingQueue emptyCollection() {
+        return new LinkedBlockingDeque(SIZE);
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeTest.java b/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeTest.java
index 638a7ac..4016f6d 100644
--- a/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeTest.java
+++ b/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeTest.java
@@ -23,18 +23,6 @@
 
 public class LinkedBlockingDequeTest extends JSR166TestCase {
 
-    public static class Unbounded extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new LinkedBlockingDeque();
-        }
-    }
-
-    public static class Bounded extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new LinkedBlockingDeque(SIZE);
-        }
-    }
-
     /**
      * Returns a new deque of given size containing consecutive
      * Integers 0 ... n.
diff --git a/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeUnboundedTest.java b/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeUnboundedTest.java
new file mode 100644
index 0000000..4302f45
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/LinkedBlockingDequeUnboundedTest.java
@@ -0,0 +1,18 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingDeque;
+
+public class LinkedBlockingDequeUnboundedTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new LinkedBlockingDeque();
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueBoundedTest.java b/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueBoundedTest.java
new file mode 100644
index 0000000..67984b2
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueBoundedTest.java
@@ -0,0 +1,20 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+public class LinkedBlockingQueueBoundedTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new LinkedBlockingQueue(SIZE);
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueTest.java b/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueTest.java
index 5628040..fe0b871 100644
--- a/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueTest.java
+++ b/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueTest.java
@@ -24,18 +24,6 @@
 
 public class LinkedBlockingQueueTest extends JSR166TestCase {
 
-    public static class Unbounded extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new LinkedBlockingQueue();
-        }
-    }
-
-    public static class Bounded extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new LinkedBlockingQueue(SIZE);
-        }
-    }
-
     /**
      * Returns a new queue of given size containing consecutive
      * Integers 0 ... n.
diff --git a/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueUnboundedTest.java b/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueUnboundedTest.java
new file mode 100644
index 0000000..b1fcdd9
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/LinkedBlockingQueueUnboundedTest.java
@@ -0,0 +1,20 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.LinkedBlockingQueue;
+
+public class LinkedBlockingQueueUnboundedTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new LinkedBlockingQueue();
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/LinkedTransferQueueTest.java b/jsr166-tests/src/test/java/jsr166/LinkedTransferQueueTest.java
index a14f303..94427df 100644
--- a/jsr166-tests/src/test/java/jsr166/LinkedTransferQueueTest.java
+++ b/jsr166-tests/src/test/java/jsr166/LinkedTransferQueueTest.java
@@ -24,12 +24,10 @@
 import static java.util.concurrent.TimeUnit.NANOSECONDS;
 
 @SuppressWarnings({"unchecked", "rawtypes"})
-public class LinkedTransferQueueTest extends JSR166TestCase {
+public class LinkedTransferQueueTest extends BlockingQueueTest {
 
-    public static class Generic extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new LinkedTransferQueue();
-        }
+    protected BlockingQueue emptyCollection() {
+        return new LinkedTransferQueue();
     }
 
     /**
diff --git a/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueGenericTest.java b/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueGenericTest.java
new file mode 100644
index 0000000..8c5da7b
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueGenericTest.java
@@ -0,0 +1,20 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.PriorityBlockingQueue;
+
+public class PriorityBlockingQueueGenericTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new PriorityBlockingQueue();
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueInitialCapacityTest.java b/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueInitialCapacityTest.java
new file mode 100644
index 0000000..7dee1fe
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueInitialCapacityTest.java
@@ -0,0 +1,20 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.PriorityBlockingQueue;
+
+public class PriorityBlockingQueueInitialCapacityTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new PriorityBlockingQueue(SIZE);
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueTest.java b/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueTest.java
index 908910b..89d6d24 100644
--- a/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueTest.java
+++ b/jsr166-tests/src/test/java/jsr166/PriorityBlockingQueueTest.java
@@ -25,18 +25,6 @@
 
 public class PriorityBlockingQueueTest extends JSR166TestCase {
 
-    public static class Generic extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new PriorityBlockingQueue();
-        }
-    }
-
-    public static class InitialCapacity extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new PriorityBlockingQueue(SIZE);
-        }
-    }
-
     private static final int NOCAP = Integer.MAX_VALUE;
 
     /** Sample Comparator */
diff --git a/jsr166-tests/src/test/java/jsr166/SynchronousQueueFairTest.java b/jsr166-tests/src/test/java/jsr166/SynchronousQueueFairTest.java
new file mode 100644
index 0000000..fb4634f
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/SynchronousQueueFairTest.java
@@ -0,0 +1,20 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.SynchronousQueue;
+
+public class SynchronousQueueFairTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new SynchronousQueue(true);
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/SynchronousQueueNotFairTest.java b/jsr166-tests/src/test/java/jsr166/SynchronousQueueNotFairTest.java
new file mode 100644
index 0000000..be15341
--- /dev/null
+++ b/jsr166-tests/src/test/java/jsr166/SynchronousQueueNotFairTest.java
@@ -0,0 +1,20 @@
+/*
+ * Written by Doug Lea with assistance from members of JCP JSR-166
+ * Expert Group and released to the public domain, as explained at
+ * http://creativecommons.org/publicdomain/zero/1.0/
+ * Other contributors include Andrew Wright, Jeffrey Hayes,
+ * Pat Fisher, Mike Judd.
+ */
+
+package jsr166;
+
+import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.SynchronousQueue;
+
+public class SynchronousQueueNotFairTest extends BlockingQueueTest {
+
+    protected BlockingQueue emptyCollection() {
+        return new SynchronousQueue(true);
+    }
+
+}
diff --git a/jsr166-tests/src/test/java/jsr166/SynchronousQueueTest.java b/jsr166-tests/src/test/java/jsr166/SynchronousQueueTest.java
index 711b47b..bd030cf 100644
--- a/jsr166-tests/src/test/java/jsr166/SynchronousQueueTest.java
+++ b/jsr166-tests/src/test/java/jsr166/SynchronousQueueTest.java
@@ -24,18 +24,6 @@
 
 public class SynchronousQueueTest extends JSR166TestCase {
 
-    public static class Fair extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new SynchronousQueue(true);
-        }
-    }
-
-    public static class NonFair extends BlockingQueueTest {
-        protected BlockingQueue emptyCollection() {
-            return new SynchronousQueue(false);
-        }
-    }
-
     /**
      * Any SynchronousQueue is both empty and full
      */
