diff --git a/benchmark-disruptor/multi_writer_test.go b/benchmark-disruptor/multi_writer_test.go
new file mode 100644
index 0000000..a71a941
--- /dev/null
+++ b/benchmark-disruptor/multi_writer_test.go
@@ -0,0 +1,55 @@
+package benchmarks
+
+import (
+	"testing"
+
+	"github.com/smartystreets/go-disruptor"
+)
+
+func BenchmarkDisruptorSharedWriterReserveOne(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()
+
+	iterations := int64(b.N)
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	sequence := disruptor.InitialSequenceValue
+	for sequence < iterations {
+		sequence = writer.Reserve(ReserveOne)
+		ringBuffer[sequence&RingBufferMask] = sequence
+		writer.Commit(sequence, sequence)
+	}
+
+	reader.Stop()
+}
+
+// func BenchmarkDisruptorSharedWriterReserveMany(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()
+
+// 	iterations := int64(b.N)
+// 	b.ReportAllocs()
+// 	b.ResetTimer()
+
+// 	sequence := disruptor.InitialSequenceValue
+// 	for sequence < iterations {
+// 		sequence = writer.Reserve(ReserveMany)
+
+// 		for i := sequence - ReserveManyDelta; i <= sequence; i++ {
+// 			ringBuffer[i&RingBufferMask] = i
+// 		}
+
+// 		writer.Commit(sequence-ReserveMany, sequence)
+// 	}
+
+// 	reader.Stop()
+// }
diff --git a/benchmark-disruptor/sample_consumer_test.go b/benchmark-disruptor/sample_consumer_test.go
new file mode 100644
index 0000000..15835b8
--- /dev/null
+++ b/benchmark-disruptor/sample_consumer_test.go
@@ -0,0 +1,17 @@
+package benchmarks
+
+import "fmt"
+
+type SampleConsumer struct {
+	ringBuffer *[RingBufferSize]int64
+}
+
+func (this SampleConsumer) Consume(lower, upper int64) {
+	for lower <= upper {
+		message := this.ringBuffer[lower&RingBufferMask]
+		if message != lower {
+			panic(fmt.Sprintf("\nRace condition %d %d\n", lower, message))
+		}
+		lower++
+	}
+}
diff --git a/benchmark-disruptor/single_writer_await_test.go b/benchmark-disruptor/single_writer_await_test.go
new file mode 100644
index 0000000..d73b194
--- /dev/null
+++ b/benchmark-disruptor/single_writer_await_test.go
@@ -0,0 +1,54 @@
+package benchmarks
+
+import (
+	"testing"
+
+	"github.com/smartystreets/go-disruptor"
+)
+
+func BenchmarkDisruptorWriterAwaitOne(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()
+
+	iterations := int64(b.N)
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	sequence := disruptor.InitialSequenceValue
+	for sequence < iterations {
+		sequence += ReserveOne
+		writer.Await(sequence)
+		ringBuffer[sequence&RingBufferMask] = sequence
+		writer.Commit(sequence, sequence)
+	}
+
+	reader.Stop()
+}
+func BenchmarkDisruptorWriterAwaitMany(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()
+
+	iterations := int64(b.N)
+	b.ReportAllocs()
+	b.ResetTimer()
+
+	sequence := disruptor.InitialSequenceValue
+	for sequence < iterations {
+		sequence += ReserveMany
+		writer.Await(sequence)
+
+		for i := sequence - ReserveManyDelta; i <= sequence; i++ {
+			ringBuffer[i&RingBufferMask] = i
+		}
+
+		writer.Commit(sequence, sequence)
+	}
+
+	reader.Stop()
+}
diff --git a/benchmark-disruptor/single_writer_test.go b/benchmark-disruptor/single_writer_reservation_test.go
similarity index 64%
rename from benchmark-disruptor/single_writer_test.go
rename to benchmark-disruptor/single_writer_reservation_test.go
index 9213392..2f23cd7 100644
--- a/benchmark-disruptor/single_writer_test.go
+++ b/benchmark-disruptor/single_writer_reservation_test.go
@@ -1,16 +1,15 @@
 package benchmarks
 
 import (
-	"fmt"
 	"testing"
 
 	"github.com/smartystreets/go-disruptor"
 )
 
-func BenchmarkDisruptorWriterReserveSingle(b *testing.B) {
+func BenchmarkDisruptorWriterReserveOne(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
 	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, Consumer{&ringBuffer})
+	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
 	writer := disruptor.NewWriter(written, read, RingBufferSize)
 	reader.Start()
 
@@ -27,10 +26,10 @@
 
 	reader.Stop()
 }
-func BenchmarkDisruptorWriterReserveMultiple(b *testing.B) {
+func BenchmarkDisruptorWriterReserveMany(b *testing.B) {
 	ringBuffer := [RingBufferSize]int64{}
 	written, read := disruptor.NewCursor(), disruptor.NewCursor()
-	reader := disruptor.NewReader(read, written, written, Consumer{&ringBuffer})
+	reader := disruptor.NewReader(read, written, written, SampleConsumer{&ringBuffer})
 	writer := disruptor.NewWriter(written, read, RingBufferSize)
 	reader.Start()
 
@@ -51,17 +50,3 @@
 
 	reader.Stop()
 }
-
-type Consumer struct {
-	ringBuffer *[RingBufferSize]int64
-}
-
-func (this Consumer) Consume(lower, upper int64) {
-	for lower <= upper {
-		message := this.ringBuffer[lower&RingBufferMask]
-		if message != lower {
-			panic(fmt.Sprintf("\nRace condition %d %d\n", lower, message))
-		}
-		lower++
-	}
-}
diff --git a/readme.md b/readme.md
index d4186fb..b8b7294 100644
--- a/readme.md
+++ b/readme.md
@@ -16,12 +16,17 @@
 
 Scenario | Per Operation Time
 -------- | ------------------ 
-Channel: Non-blocking | 681 ns/op
-Channel: Blocking | 86.6 ns/op|
-Disruptor: SharedWriter (single claim)	| nn.n ns/op
-Disruptor: SharedWriter (multi claim)	| nn.n ns/op
-Disruptor: Writer (single claim) | 4.3 ns/op
-Disruptor: Writer (multi claim) | 1.1 ns/op
+Channel (GOMAXPROCS=2): Non-blocking | 681 ns/op
+Channel (GOMAXPROCS=2): Blocking | 86.6 ns/op
+
+Disruptor: SharedWriter (Reserve One)	| 15.4 ns/op
+Disruptor: SharedWriter (Reserve Many)	| nn.n ns/op
+
+Disruptor: Writer (Reserve One) | 4.3 ns/op
+Disruptor: Writer (Reserve Many) | 1.1 ns/op
+
+Disruptor: Writer (Await One) | 3.5 ns/op
+Disruptor: Writer (Await Many) | 1.0 ns/op
 
 
 When In Doubt, Use Channels
