diff --git a/benchmark-disruptor/writer_await_test.go b/benchmark-disruptor/writer_await_test.go
index 81f453e..f782ac1 100644
--- a/benchmark-disruptor/writer_await_test.go
+++ b/benchmark-disruptor/writer_await_test.go
@@ -8,16 +8,19 @@
 
 func BenchmarkWriterAwaitOne(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
-	writer := disruptor.NewWriter(written, read, RingBufferSize)
-	reader.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}).
+		Build()
+	controller.Start()
+	writer := controller.Writer()
 
 	iterations := int64(b.N)
+	sequence := disruptor.InitialSequenceValue
+
 	b.ReportAllocs()
 	b.ResetTimer()
 
-	sequence := disruptor.InitialSequenceValue
 	for sequence < iterations {
 		sequence += ReserveOne
 		writer.Await(sequence)
@@ -25,20 +28,24 @@
 		writer.Commit(sequence, sequence)
 	}
 
-	reader.Stop()
+	b.StopTimer()
+	controller.Stop()
 }
 func BenchmarkWriterAwaitMany(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
-	writer := disruptor.NewWriter(written, read, RingBufferSize)
-	reader.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}).
+		Build()
+	controller.Start()
+	writer := controller.Writer()
 
 	iterations := int64(b.N)
+	sequence := disruptor.InitialSequenceValue
+
 	b.ReportAllocs()
 	b.ResetTimer()
 
-	sequence := disruptor.InitialSequenceValue
 	for sequence < iterations {
 		sequence += ReserveMany
 		writer.Await(sequence)
@@ -50,5 +57,6 @@
 		writer.Commit(sequence, sequence)
 	}
 
-	reader.Stop()
+	b.StopTimer()
+	controller.Stop()
 }
diff --git a/benchmark-disruptor/writer_reservation_multiple_readers_test.go b/benchmark-disruptor/writer_reservation_multiple_readers_test.go
index 2bd8775..27c97d0 100644
--- a/benchmark-disruptor/writer_reservation_multiple_readers_test.go
+++ b/benchmark-disruptor/writer_reservation_multiple_readers_test.go
@@ -8,45 +8,43 @@
 
 func BenchmarkWriterReserveOneMultipleReaders(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read1, read2 := disruptor.NewCursor(), disruptor.NewCursor(), disruptor.NewCursor()
-	reader1 := disruptor.NewReader(read1, written, written, SampleConsumer{&ringBuffer})
-	reader2 := disruptor.NewReader(read2, written, written, SampleConsumer{&ringBuffer})
-	barrier := disruptor.NewCompositeBarrier(read1, read2)
-	writer := disruptor.NewWriter(written, barrier, RingBufferSize)
-
-	reader1.Start()
-	reader2.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}, SampleConsumer{&ringBuffer}).
+		Build()
+	controller.Start()
+	writer := controller.Writer()
 
 	iterations := int64(b.N)
+	sequence := disruptor.InitialSequenceValue
+
 	b.ReportAllocs()
 	b.ResetTimer()
 
-	sequence := disruptor.InitialSequenceValue
 	for sequence < iterations {
 		sequence = writer.Reserve(ReserveOne)
 		ringBuffer[sequence&RingBufferMask] = sequence
 		writer.Commit(sequence, sequence)
 	}
 
-	reader1.Stop()
-	reader2.Stop()
+	b.StopTimer()
+	controller.Stop()
 }
 func BenchmarkWriterReserveManyMultipleReaders(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read1, read2 := disruptor.NewCursor(), disruptor.NewCursor(), disruptor.NewCursor()
-	reader1 := disruptor.NewReader(read1, written, written, SampleConsumer{&ringBuffer})
-	reader2 := disruptor.NewReader(read2, written, written, SampleConsumer{&ringBuffer})
-	barrier := disruptor.NewCompositeBarrier(read1, read2)
-	writer := disruptor.NewWriter(written, barrier, RingBufferSize)
-
-	reader1.Start()
-	reader2.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}, SampleConsumer{&ringBuffer}).
+		Build()
+	controller.Start()
+	writer := controller.Writer()
 
 	iterations := int64(b.N)
+	sequence := disruptor.InitialSequenceValue
+
 	b.ReportAllocs()
 	b.ResetTimer()
 
-	sequence := disruptor.InitialSequenceValue
 	for sequence < iterations {
 		sequence = writer.Reserve(ReserveMany)
 
@@ -57,6 +55,6 @@
 		writer.Commit(sequence, sequence)
 	}
 
-	reader1.Stop()
-	reader2.Stop()
+	b.StopTimer()
+	controller.Stop()
 }
diff --git a/benchmark-disruptor/writer_reservation_test.go b/benchmark-disruptor/writer_reservation_test.go
index 4be4238..98745e7 100644
--- a/benchmark-disruptor/writer_reservation_test.go
+++ b/benchmark-disruptor/writer_reservation_test.go
@@ -8,36 +8,43 @@
 
 func BenchmarkWriterReserveOne(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
-	writer := disruptor.NewWriter(written, read, RingBufferSize)
-	reader.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}).
+		Build()
+	controller.Start()
+	writer := controller.Writer()
 
 	iterations := int64(b.N)
+	sequence := disruptor.InitialSequenceValue
+
 	b.ReportAllocs()
 	b.ResetTimer()
 
-	sequence := disruptor.InitialSequenceValue
 	for sequence < iterations {
 		sequence = writer.Reserve(ReserveOne)
 		ringBuffer[sequence&RingBufferMask] = sequence
 		writer.Commit(sequence, sequence)
 	}
 
-	reader.Stop()
+	b.StopTimer()
+	controller.Stop()
 }
 func BenchmarkWriterReserveMany(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
-	writer := disruptor.NewWriter(written, read, RingBufferSize)
-	reader.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}).
+		Build()
+	controller.Start()
+	writer := controller.Writer()
 
 	iterations := int64(b.N)
+	sequence := disruptor.InitialSequenceValue
+
 	b.ReportAllocs()
 	b.ResetTimer()
 
-	sequence := disruptor.InitialSequenceValue
 	for sequence < iterations {
 		sequence = writer.Reserve(ReserveMany)
 
@@ -48,5 +55,6 @@
 		writer.Commit(sequence, sequence)
 	}
 
-	reader.Stop()
+	b.StopTimer()
+	controller.Stop()
 }
