diff --git a/token_writer.go b/token_writer.go
index da4ae4d..11179d3 100644
--- a/token_writer.go
+++ b/token_writer.go
@@ -35,7 +35,17 @@
 
 	tw := &TokenWriter{}
 
-	if flags&TOKEN_POS != 0 {
+	// Collect token positions and maybe tokens
+	if flags&(TOKEN_POS|SENTENCE_POS) != 0 {
+
+		// TODO:
+		//   Split to
+		//   - Token_pos+Tokens+Newline
+		//   - Token_pos+Newline
+		//   - Token_pos|Sentence_pos
+		//   - Sentence_pos
+		//   - Tokens
+
 		tw.Token = func(offset int, buf []rune) {
 
 			// TODO:
@@ -58,23 +68,26 @@
 			posC += len(buf) - offset
 			pos = append(pos, posC)
 
+			// Collect tokens also
 			if flags&TOKENS != 0 {
 				writer.WriteString(string(buf[offset:]))
-				writer.WriteRune('\n')
+				writer.WriteByte('\n')
 			}
 		}
 
-		// Only print one token per line
+		// Collect tokens
 	} else if flags&TOKENS != 0 {
 		tw.Token = func(offset int, buf []rune) {
 			writer.WriteString(string(buf[offset:]))
-			writer.WriteRune('\n')
+			writer.WriteByte('\n')
 		}
+
+		// Ignore tokens
 	} else {
 		tw.Token = func(_ int, _ []rune) {}
 	}
 
-	// Print sentence boundaries
+	// Collect sentence positions and maybe sentence boundaries
 	if flags&SENTENCE_POS != 0 {
 		tw.SentenceEnd = func(offset int) {
 
@@ -83,15 +96,16 @@
 			sent = append(sent, pos[len(pos)-1])
 			sentB = true
 
+			// Collect sentences also
 			if flags&SENTENCES != 0 {
-				writer.WriteRune('\n')
+				writer.WriteByte('\n')
 			}
 		}
 
-		// Print sentence boundaries as newlines
+		// Collect sentence boundaries
 	} else if flags&SENTENCES != 0 {
 		tw.SentenceEnd = func(_ int) {
-			writer.WriteRune('\n')
+			writer.WriteByte('\n')
 		}
 
 		// Ignore sentence boundaries
@@ -99,26 +113,29 @@
 		tw.SentenceEnd = func(_ int) {}
 	}
 
+	// Write token or sentence positions
 	if flags&(TOKEN_POS|SENTENCE_POS) != 0 {
 		tw.TextEnd = func(_ int) {
 			writer.Flush()
 
+			// Write token positions
 			if flags&TOKEN_POS != 0 {
 				writer.WriteString(strconv.Itoa(pos[0]))
 				for _, x := range pos[1:] {
 					writer.WriteByte(' ')
 					writer.WriteString(strconv.Itoa(x))
 				}
-				writer.WriteRune('\n')
+				writer.WriteByte('\n')
 			}
 
+			// Write sentence positions
 			if flags&SENTENCE_POS != 0 {
 				writer.WriteString(strconv.Itoa(sent[0]))
 				for _, x := range sent[1:] {
 					writer.WriteByte(' ')
 					writer.WriteString(strconv.Itoa(x))
 				}
-				writer.WriteRune('\n')
+				writer.WriteByte('\n')
 				sent = sent[:0]
 				sentB = true
 			}
@@ -126,6 +143,8 @@
 			posC = 0
 			pos = pos[:0]
 		}
+
+		// Collect text ends
 	} else {
 		tw.TextEnd = func(_ int) {
 			writer.WriteRune('\n')
@@ -133,6 +152,7 @@
 		}
 	}
 
+	// Flush the writer
 	tw.Flush = func() error {
 		return writer.Flush()
 	}
diff --git a/token_writer_test.go b/token_writer_test.go
index 82baa69..a27ae1c 100644
--- a/token_writer_test.go
+++ b/token_writer_test.go
@@ -84,4 +84,14 @@
 
 	matStr = w.String()
 	assert.Equal("1 5 5 6\n1 6\n0 3 3 4\n0 4\n", matStr)
+
+	//
+	// Write sentence offsets without token offsets
+	tws = NewTokenWriter(w, SENTENCE_POS|NEWLINE_AFTER_EOT)
+
+	w.Reset()
+	mat.TransduceTokenWriter(strings.NewReader("\nThis.\x0a\x04\nAnd.\n\x04\n"), tws)
+
+	matStr = w.String()
+	assert.Equal("1 6\n0 4\n", matStr)
 }
