diff --git a/example/example_consumer.go b/example/example_consumer.go
index 6cbe712..2732579 100644
--- a/example/example_consumer.go
+++ b/example/example_consumer.go
@@ -8,17 +8,21 @@
 )
 
 func consume0(reader *disruptor.SimpleReader) {
+	sequence := int64(0)
 	for {
-		reader.Receive()
+		if upper := reader.Receive(sequence); upper > sequence {
+			sequence = upper
+		}
 	}
 }
 func consume1(reader *disruptor.Reader) {
 	started := time.Now()
+	sequence := int64(0)
 
 	for {
-		lower, upper := reader.Receive()
-		if lower <= upper {
-			for sequence := lower; sequence <= upper; sequence++ {
+		upper := reader.Receive(sequence)
+		if sequence <= upper {
+			for ; sequence <= upper; sequence++ {
 				if sequence%ReportingFrequency == 0 {
 					finished := time.Now()
 					fmt.Println(sequence, finished.Sub(started))
@@ -32,20 +36,21 @@
 					panic(alert)
 				}
 
-				ringBuffer[sequence&RingMask] = sequence % 2
+				// ringBuffer[sequence&RingMask] = sequence % 2
 			}
 
-			reader.Commit(lower, upper)
+			reader.Commit(upper)
 		}
 	}
 }
 
 func consume2(reader *disruptor.Reader) {
+	sequence := int64(0)
 	for {
-		lower, upper := reader.Receive()
+		upper := reader.Receive(sequence)
 
-		if lower <= upper {
-			for sequence := lower; sequence <= upper; sequence++ {
+		if sequence <= upper {
+			for ; sequence <= upper; sequence++ {
 				message := ringBuffer[sequence&RingMask]
 				if message != sequence%2 {
 					alert := fmt.Sprintf("Race Condition (Layer 2)::Sequence: %d, Message %d\n", sequence, message)
@@ -53,7 +58,7 @@
 					panic(alert)
 				}
 			}
-			reader.Commit(lower, upper)
+			reader.Commit(upper)
 		}
 	}
 }
diff --git a/example/example_consumer_handler.go b/example/example_consumer_handler.go
index 7823b58..abd1f80 100644
--- a/example/example_consumer_handler.go
+++ b/example/example_consumer_handler.go
@@ -22,10 +22,10 @@
 		this.started = time.Now()
 	}
 
-	if sequence != ringBuffer[sequence&RingMask] {
-		message := ringBuffer[sequence&RingMask]
-		alert := fmt.Sprintf("Race Condition::Sequence: %d, Message %d\n", sequence, message)
-		fmt.Print(alert)
-		panic(alert)
-	}
+	// if sequence != ringBuffer[sequence&RingMask] {
+	// 	message := ringBuffer[sequence&RingMask]
+	// 	alert := fmt.Sprintf("Race Condition::Sequence: %d, Message %d\n", sequence, message)
+	// 	fmt.Print(alert)
+	// 	panic(alert)
+	// }
 }
diff --git a/example/example_producer.go b/example/example_producer.go
index ac85259..1599fdb 100644
--- a/example/example_producer.go
+++ b/example/example_producer.go
@@ -2,13 +2,15 @@
 
 import "github.com/smartystreets/go-disruptor"
 
-func publish(writer *disruptor.SharedWriter) {
+func publish(writer *disruptor.Writer) {
 
 	for {
 		if lower, upper := writer.Reserve(ItemsToPublish); upper != disruptor.Gating {
-			for sequence := lower; sequence <= upper; sequence++ {
-				ringBuffer[sequence&RingMask] = sequence
-			}
+
+			ringBuffer[lower&RingMask] = lower
+			// for sequence := lower; sequence <= upper; sequence++ {
+			// 	ringBuffer[sequence&RingMask] = sequence
+			// }
 			writer.Commit(lower, upper)
 		}
 	}
diff --git a/example/main.go b/example/main.go
index 6a991af..b976aad 100644
--- a/example/main.go
+++ b/example/main.go
@@ -8,9 +8,9 @@
 
 const (
 	MaxConsumersPerGroup = 1
-	MaxConsumerGroups    = 2
-	MaxProducers         = 2
-	ItemsToPublish       = 2
+	MaxConsumerGroups    = 1
+	MaxProducers         = 1
+	ItemsToPublish       = 1
 	ReportingFrequency   = 1000000 * 10 // 1 million * N
 	RingSize             = 1024 * 16
 	RingMask             = RingSize - 1
@@ -22,26 +22,29 @@
 	runtime.GOMAXPROCS(MaxConsumerGroups*MaxConsumersPerGroup + MaxProducers)
 
 	written := disruptor.NewCursor()
-	shared := disruptor.NewSharedWriterBarrier(written, RingSize)
-	upstream := startConsumerGroups(shared, written)
-	writer := disruptor.NewSharedWriter(shared, upstream)
-	// writer := disruptor.NewWriter(written, upstream, RingSize)
-	// startExclusiveProducer(writer)
-	startSharedProducers(writer)
+	upstream := startConsumerGroups(written, written)
+	writer := disruptor.NewWriter(written, upstream, RingSize)
+	startExclusiveProducer(writer)
+
+	// written := disruptor.NewCursor()
+	// shared := disruptor.NewSharedWriterBarrier(written, RingSize)
+	// upstream := startConsumerGroups(shared, written)
+	// writer := disruptor.NewSharedWriter(shared, upstream)
+	// startSharedProducers(writer)
 }
 
-// func startExclusiveProducer(writer *disruptor.Writer) {
-//publish(writer)
-// }
-
-func startSharedProducers(writer *disruptor.SharedWriter) {
-	for i := 0; i < MaxProducers-1; i++ {
-		go publish(writer)
-	}
-
+func startExclusiveProducer(writer *disruptor.Writer) {
 	publish(writer)
 }
 
+// func startSharedProducers(writer *disruptor.SharedWriter) {
+// 	for i := 0; i < MaxProducers-1; i++ {
+// 		go publish(writer)
+// 	}
+
+// 	publish(writer)
+// }
+
 func startConsumerGroups(upstream disruptor.Barrier, written *disruptor.Cursor) disruptor.Barrier {
 	for i := 0; i < MaxConsumerGroups; i++ {
 		upstream = startConsumerGroup(i, upstream, written)
@@ -58,19 +61,19 @@
 		reader := disruptor.NewReader(read, written, upstream)
 
 		// constant time regardless of the number of items
-		// go consume0(disruptor.NewSimpleReader(reader, NewExampleConsumerHandler()))
+		go consume0(disruptor.NewSimpleReader(reader, NewExampleConsumerHandler()))
 
 		// TODO: wildly sporadic latency for single-item publish, e.g. 2 seconds, 65 ms, etc.
 		// faster for 2-3+ items per publish
 		// go consume1(reader)
 
-		if group == 0 {
-			go consume1(reader)
-		} else if group == 1 {
-			go consume2(reader)
-		} else {
-			panic("only two consumer groups currently supported.")
-		}
+		// if group == 0 {
+		// 	go consume1(reader)
+		// } else if group == 1 {
+		// 	go consume2(reader)
+		// } else {
+		// 	panic("only two consumer groups currently supported.")
+		// }
 	}
 
 	return disruptor.NewCompositeBarrier(cursors...)
diff --git a/reader.go b/reader.go
index e60ff31..8a723aa 100644
--- a/reader.go
+++ b/reader.go
@@ -14,15 +14,14 @@
 	}
 }
 
-func (this *Reader) Receive() (int64, int64) {
-	lower := this.read.Load() + 1
+func (this *Reader) Receive(lower int64) int64 {
 	upper := this.upstream.LoadBarrier(lower)
 
 	if lower <= upper {
-		return lower, upper
+		return upper
 	} else if gate := this.written.Load(); lower <= gate {
-		return InitialSequenceValue, Gating
+		return Gating
 	} else {
-		return InitialSequenceValue, Idling
+		return Idling
 	}
 }
diff --git a/reader_386.go b/reader_386.go
index 833c272..491bb61 100644
--- a/reader_386.go
+++ b/reader_386.go
@@ -1,5 +1,5 @@
 package disruptor
 
-func (this *Reader) Commit(lower, upper int64) {
+func (this *Reader) Commit(upper int64) {
 	this.read.Store(upper)
 }
diff --git a/reader_amd64.go b/reader_amd64.go
index 9ef8bf3..36236b2 100644
--- a/reader_amd64.go
+++ b/reader_amd64.go
@@ -1,5 +1,5 @@
 package disruptor
 
-func (this *Reader) Commit(lower, upper int64) {
-	this.read.sequence = upper
+func (this *Reader) Commit(sequence int64) {
+	this.read.sequence = sequence
 }
diff --git a/reader_arm.go b/reader_arm.go
index 833c272..f1df97c 100644
--- a/reader_arm.go
+++ b/reader_arm.go
@@ -1,5 +1,5 @@
 package disruptor
 
-func (this *Reader) Commit(lower, upper int64) {
-	this.read.Store(upper)
+func (this *Reader) Commit(sequence int64) {
+	this.read.Store(sequence)
 }
diff --git a/simple_reader.go b/simple_reader.go
index fe781b7..2a619c0 100644
--- a/simple_reader.go
+++ b/simple_reader.go
@@ -9,17 +9,16 @@
 	return &SimpleReader{reader: reader, callback: callback}
 }
 
-func (this *SimpleReader) Receive() (int64, int64) {
-	lower, upper := this.reader.Receive()
+func (this *SimpleReader) Receive(lower int64) int64 {
+	upper := this.reader.Receive(lower)
 
 	if lower <= upper {
 		for sequence := lower; sequence <= upper; sequence++ {
 			this.callback.Consume(sequence, upper-sequence)
 		}
 
-		this.reader.Commit(lower, upper)
-		return lower, upper
-	} else {
-		return InitialSequenceValue, upper // Idling, Gating
+		this.reader.Commit(upper)
 	}
+
+	return upper
 }
