diff --git a/example/main.go b/example/main.go
index 51fc14d..15f8ad3 100644
--- a/example/main.go
+++ b/example/main.go
@@ -21,20 +21,21 @@
 
 	written, read := disruptor.NewCursor(), disruptor.NewCursor()
 
-	consumer := SampleConsumer{}
-	reader := disruptor.NewReader(read, written, written, consumer)
+	// reader := disruptor.NewReader(read, written, written, SampleConsumer{})
 
 	started := time.Now()
 
-	go reader.Start()
-	publish(written, read, reader)
+	// go reader.Start()
+	go consume(written, read)
+	publish(written, read)
+	// reader.Stop()
 	// consume(written, read)
 
 	finished := time.Now()
 	fmt.Println(Iterations, finished.Sub(started))
 }
 
-func publish(written, read *disruptor.Cursor, reader *disruptor.Reader) {
+func publish(written, read *disruptor.Cursor) {
 	previous := disruptor.InitialSequenceValue
 	gate := disruptor.InitialSequenceValue
 
@@ -54,59 +55,56 @@
 		written.Sequence = next
 		previous = next
 	}
-
-	reader.Stop()
 }
 
 // func consume(reader *disruptor.Reader) {
-// 	sleeps := 0
+func consume(written, read *disruptor.Cursor) {
+	sleeps := 0
+	consumer := SampleConsumer{}
 
-// 	// consumer := SampleConsumer{}
+	previous := int64(-1)
+	gate := int64(-1)
+	for previous < Iterations {
+		current := previous + 1
+		gate = written.Sequence
 
-// 	// previous := int64(-1)
-// 	// gate := int64(-1)
-// 	// for previous < Iterations {
-// 	// 	current := previous + 1
-// 	// 	gate = written.Sequence
+		if current <= gate {
 
-// 	// 	if current <= gate {
+			for current < gate {
+				current += consumer.Consume(current, gate)
+			}
+			// for current <= gate {
+			// 	if ringBuffer[current&BufferMask] > 0 {
+			// 	}
 
-// 	// 		for current < gate {
-// 	// 			current += consumer.Consume(current, gate)
-// 	// 		}
-// 	// 		// for current <= gate {
+			// 	current++
+			// }
 
-// 	// 		// 	if ringBuffer[current&BufferMask] > 0 {
-// 	// 		// 	}
+			previous = gate
+			read.Sequence = gate
+		} else {
+			sleeps++
+			time.Sleep(time.Microsecond)
+		}
+	}
 
-// 	// 		// 	current++
-// 	// 		// }
+	fmt.Println("Consumer sleeps:", sleeps)
 
-// 	// 		previous = gate
-// 	// 		read.Sequence = gate
-// 	// 	} else {
-// 	// 		sleeps++
-// 	// 		time.Sleep(time.Microsecond)
-// 	// 	}
-// 	// }
+	// 	// for sequence, gate := int64(0), int64(0); sequence < Iterations; sequence++ {
 
-// 	fmt.Println("Consumer sleeps:", sleeps)
+	// 	// 	// for gate <= sequence {
+	// 	// 	// 	gate = written.Sequence
+	// 	// 	// 	if gate <= sequence {
+	// 	// 	// 		time.Sleep(time.Microsecond)
+	// 	// 	// 	}
+	// 	// 	// }
 
-// 	// for sequence, gate := int64(0), int64(0); sequence < Iterations; sequence++ {
+	// 	// 	// if ringBuffer[sequence&BufferMask] > 0 {
+	// 	// 	// }
 
-// 	// 	// for gate <= sequence {
-// 	// 	// 	gate = written.Sequence
-// 	// 	// 	if gate <= sequence {
-// 	// 	// 		time.Sleep(time.Microsecond)
-// 	// 	// 	}
-// 	// 	// }
-
-// 	// 	// if ringBuffer[sequence&BufferMask] > 0 {
-// 	// 	// }
-
-// 	// 	// read.Sequence = sequence
-// 	// }
-// }
+	// 	// 	// read.Sequence = sequence
+	// 	// }
+}
 
 // // type Consumer interface {
 // // 	Consume(lower, upper int64)
@@ -115,8 +113,8 @@
 type SampleConsumer struct{}
 
 func (this SampleConsumer) Consume(current, gate int64) int64 {
-	// if ringBuffer[current&BufferMask] > 0 {
-	// }
+	if ringBuffer[current&BufferMask] > 0 {
+	}
 
 	return 1
 }
