diff --git a/cmd/datok.go b/cmd/datok.go
index bd797bf..66bc7e9 100644
--- a/cmd/datok.go
+++ b/cmd/datok.go
@@ -95,7 +95,7 @@
 	}
 
 	// Create token writer based on the options defined
-	tw := datok.NewTokenWriterFromOptions(os.Stdout, flags)
+	tw := datok.NewTokenWriter(os.Stdout, flags)
 
 	// Program is running in a pipe
 	fileInfo, _ := os.Stdin.Stat()
diff --git a/datok.go b/datok.go
index 7e5a36d..5bd54e9 100644
--- a/datok.go
+++ b/datok.go
@@ -746,7 +746,7 @@
 
 // Transduce input to ouutput
 func (dat *DaTokenizer) Transduce(r io.Reader, w io.Writer) bool {
-	return dat.TransduceTokenWriter(r, NewTokenWriter(w))
+	return dat.TransduceTokenWriter(r, NewTokenWriter(w, SIMPLE))
 }
 
 // TransduceTokenWriter transduces an input string against
diff --git a/matrix.go b/matrix.go
index 3a06951..021c191 100644
--- a/matrix.go
+++ b/matrix.go
@@ -315,7 +315,7 @@
 
 // Transduce input to ouutput
 func (mat *MatrixTokenizer) Transduce(r io.Reader, w io.Writer) bool {
-	return mat.TransduceTokenWriter(r, NewTokenWriter(w))
+	return mat.TransduceTokenWriter(r, NewTokenWriter(w, SIMPLE))
 }
 
 // TransduceTokenWriter transduces an input string against
diff --git a/token_writer.go b/token_writer.go
index aa9c32d..da4ae4d 100644
--- a/token_writer.go
+++ b/token_writer.go
@@ -14,6 +14,8 @@
 	TOKEN_POS
 	SENTENCE_POS
 	NEWLINE_AFTER_EOT
+
+	SIMPLE = TOKENS | SENTENCES
 )
 
 type TokenWriter struct {
@@ -23,29 +25,8 @@
 	Token       func(int, []rune)
 }
 
-func NewTokenWriter(w io.Writer) *TokenWriter {
-	writer := bufio.NewWriter(w)
-
-	return &TokenWriter{
-		SentenceEnd: func(_ int) {
-			writer.WriteRune('\n')
-		},
-		TextEnd: func(_ int) {
-			writer.WriteRune('\n')
-			writer.Flush()
-		},
-		Token: func(offset int, buf []rune) {
-			writer.WriteString(string(buf[offset:]))
-			writer.WriteRune('\n')
-		},
-		Flush: func() error {
-			return writer.Flush()
-		},
-	}
-}
-
 // Create a new token writer based on the options
-func NewTokenWriterFromOptions(w io.Writer, flags Bits) *TokenWriter {
+func NewTokenWriter(w io.Writer, flags Bits) *TokenWriter {
 	writer := bufio.NewWriter(w)
 	posC := 0
 	pos := make([]int, 0, 1024)
@@ -84,15 +65,17 @@
 		}
 
 		// Only print one token per line
-	} else {
+	} else if flags&TOKENS != 0 {
 		tw.Token = func(offset int, buf []rune) {
 			writer.WriteString(string(buf[offset:]))
 			writer.WriteRune('\n')
 		}
+	} else {
+		tw.Token = func(_ int, _ []rune) {}
 	}
 
 	// Print sentence boundaries
-	if flags&(SENTENCES|SENTENCE_POS) != 0 {
+	if flags&SENTENCE_POS != 0 {
 		tw.SentenceEnd = func(offset int) {
 
 			// Add end position of last token to sentence boundary
@@ -148,7 +131,6 @@
 			writer.WriteRune('\n')
 			writer.Flush()
 		}
-
 	}
 
 	tw.Flush = func() error {
diff --git a/token_writer_test.go b/token_writer_test.go
index e724212..82baa69 100644
--- a/token_writer_test.go
+++ b/token_writer_test.go
@@ -14,7 +14,7 @@
 	b := make([]byte, 0, 2048)
 	w := bytes.NewBuffer(b)
 
-	tws := NewTokenWriter(w)
+	tws := NewTokenWriter(w, SIMPLE)
 
 	assert.NotNil(tws)
 
@@ -40,7 +40,7 @@
 	b := make([]byte, 0, 2048)
 	w := bytes.NewBuffer(b)
 
-	tws := NewTokenWriterFromOptions(w, TOKENS|SENTENCES|TOKEN_POS)
+	tws := NewTokenWriter(w, TOKENS|SENTENCES|TOKEN_POS)
 
 	assert.True(mat.TransduceTokenWriter(
 		strings.NewReader("This.\x0a\x04And.\n\x04\n"), tws),
@@ -57,7 +57,7 @@
 
 	//
 	// Accept newline after EOT
-	tws = NewTokenWriterFromOptions(w, TOKENS|SENTENCES|TOKEN_POS|NEWLINE_AFTER_EOT)
+	tws = NewTokenWriter(w, TOKENS|SENTENCES|TOKEN_POS|NEWLINE_AFTER_EOT)
 
 	w.Reset()
 	mat.TransduceTokenWriter(strings.NewReader("\nThis.\x0a\x04\nAnd.\n\x04\n"), tws)
@@ -67,7 +67,7 @@
 
 	//
 	// Write no tokens
-	tws = NewTokenWriterFromOptions(w, SENTENCES|TOKEN_POS|NEWLINE_AFTER_EOT)
+	tws = NewTokenWriter(w, SENTENCES|TOKEN_POS|NEWLINE_AFTER_EOT)
 
 	w.Reset()
 	mat.TransduceTokenWriter(strings.NewReader("\nThis.\x0a\x04\nAnd.\n\x04\n"), tws)
@@ -77,7 +77,7 @@
 
 	//
 	// Write sentence offsets
-	tws = NewTokenWriterFromOptions(w, TOKEN_POS|SENTENCE_POS|NEWLINE_AFTER_EOT)
+	tws = NewTokenWriter(w, TOKEN_POS|SENTENCE_POS|NEWLINE_AFTER_EOT)
 
 	w.Reset()
 	mat.TransduceTokenWriter(strings.NewReader("\nThis.\x0a\x04\nAnd.\n\x04\n"), tws)
