diff --git a/README.md b/README.md
index 1dfce31..9a688da 100644
--- a/README.md
+++ b/README.md
@@ -28,7 +28,7 @@
 Disruptor: Writer, Reserve Many | 1.1 ns/op
 Disruptor: Writer, Await One | 3.5 ns/op
 Disruptor: Writer, Await Many | 1.0 ns/op
-Disruptor: SharedWriter, Reserve One | 14.5 ns/op
+Disruptor: SharedWriter, Reserve One | 13.6 ns/op
 Disruptor: SharedWriter, Reserve Many | 2.5 ns/op
 Disruptor: SharedWriter, Reserve One, Contended Write | nn.n ns/op
 Disruptor: SharedWriter, Reserve Many, Contended Write | nn.n ns/op
diff --git a/benchmark-disruptor/shared_writer_test.go b/benchmark-disruptor/shared_writer_test.go
index fcd7122..2232478 100644
--- a/benchmark-disruptor/shared_writer_test.go
+++ b/benchmark-disruptor/shared_writer_test.go
@@ -8,35 +8,41 @@
 
 func BenchmarkSharedWriterReserveOne(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	shared := disruptor.NewSharedWriterBarrier(written, RingBufferSize)
-	reader := disruptor.NewReader(read, written, shared, SampleConsumer{&ringBuffer})
-	writer := disruptor.NewSharedWriter(shared, read)
-	reader.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}).
+		BuildShared()
+	controller.Start()
+	defer controller.Stop()
+	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()
 }
 
 func BenchmarkSharedWriterReserveMany(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
-	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	shared := disruptor.NewSharedWriterBarrier(written, RingBufferSize)
-	reader := disruptor.NewReader(read, written, shared, SampleConsumer{&ringBuffer})
-	writer := disruptor.NewSharedWriter(shared, read)
-	reader.Start()
+	controller := disruptor.
+		Configure(RingBufferSize).
+		WithConsumerGroup(SampleConsumer{&ringBuffer}).
+		BuildShared()
+	controller.Start()
+	defer controller.Stop()
+	writer := controller.Writer()
 
 	iterations := int64(b.N)
+
 	b.ReportAllocs()
 	b.ResetTimer()
 
@@ -52,5 +58,5 @@
 		previous = current
 	}
 
-	reader.Stop()
+	b.StopTimer()
 }
diff --git a/shared_disruptor.go b/shared_disruptor.go
new file mode 100644
index 0000000..7d7b63b
--- /dev/null
+++ b/shared_disruptor.go
@@ -0,0 +1,22 @@
+package disruptor
+
+type SharedDisruptor struct {
+	writer  *SharedWriter
+	readers []*Reader
+}
+
+func (this SharedDisruptor) Writer() *SharedWriter {
+	return this.writer
+}
+
+func (this SharedDisruptor) Start() {
+	for _, item := range this.readers {
+		item.Start()
+	}
+}
+
+func (this SharedDisruptor) Stop() {
+	for _, item := range this.readers {
+		item.Stop()
+	}
+}
diff --git a/wireup.go b/wireup.go
index b3a6f76..4c31308 100644
--- a/wireup.go
+++ b/wireup.go
@@ -52,6 +52,27 @@
 	writer := NewWriter(written, upstream, this.capacity)
 	return Disruptor{writer: writer, readers: allReaders}
 }
+
+func (this Wireup) BuildShared() SharedDisruptor {
+	allReaders := []*Reader{}
+	written := this.cursors[0]
+	writerBarrier := NewSharedWriterBarrier(written, this.capacity)
+	var upstream Barrier = writerBarrier
+	cursorIndex := 1 // 0 index is reserved for the writer Cursor
+
+	for groupIndex, group := range this.groups {
+		groupReaders, groupBarrier := this.buildReaders(groupIndex, cursorIndex, written, upstream)
+		for _, item := range groupReaders {
+			allReaders = append(allReaders, item)
+		}
+		upstream = groupBarrier
+		cursorIndex += len(group)
+	}
+
+	writer := NewSharedWriter(writerBarrier, upstream)
+	return SharedDisruptor{writer: writer, readers: allReaders}
+}
+
 func (this Wireup) buildReaders(consumerIndex, cursorIndex int, written *Cursor, upstream Barrier) ([]*Reader, Barrier) {
 	barrierCursors := []*Cursor{}
 	readers := []*Reader{}
