Fix check on final states
diff --git a/datokenizer.go b/datokenizer.go
index af1e70f..7aea95a 100644
--- a/datokenizer.go
+++ b/datokenizer.go
@@ -1170,6 +1170,7 @@
 	eof := false
 	newchar := true
 
+PARSECHAR:
 	for {
 
 		if newchar {
@@ -1266,7 +1267,7 @@
 			buffo++
 
 			// Transition does not produce a character
-			if dat.isNonToken(t) && buffo == 1 {
+			if buffo == 1 && dat.isNonToken(t) {
 				if DEBUG {
 					fmt.Println("Nontoken forward", showBuffer(buffer, buffo, buffi))
 				}
@@ -1274,19 +1275,22 @@
 			}
 		}
 
-		// Transition marks the end of a token
+		// Transition marks the end of a token - so flush the buffer
 		if dat.isTokenEnd(t) {
 
-			data := []byte(string(buffer[:buffo]))
-			if DEBUG {
-				fmt.Println("-> Flush buffer:", string(data), showBuffer(buffer, buffo, buffi))
+			if buffi > 0 {
+				data := []byte(string(buffer[:buffo]))
+				if DEBUG {
+					fmt.Println("-> Flush buffer: [", string(data), "]", showBuffer(buffer, buffo, buffi))
+					fmt.Println("-> Newline")
+				}
+				writer.Write(data)
+				writer.WriteRune('\n')
+				rewindBuffer = true
 			}
-			writer.Write(data)
-			writer.WriteRune('\n')
-			rewindBuffer = true
 		}
 
-		// Rewind the buffer
+		// Rewind the buffer if necessary
 		if rewindBuffer {
 
 			// TODO: Better as a ring buffer
@@ -1311,9 +1315,14 @@
 			}
 		}
 
+		if eof {
+			break
+		}
+
+		newchar = true
+
 		// TODO:
 		//   Prevent endless epsilon loops!
-		newchar = true
 	}
 
 	// Input reader is not yet finished
@@ -1324,23 +1333,24 @@
 		return false
 	}
 
-FINALCHECK:
-
 	if DEBUG {
 		fmt.Println("Entering final check")
 	}
 
-	// Automaton is in a final state
+	// Automaton is in a final state, so flush the buffer and return
 	if dat.getCheck(dat.getBase(t)+uint32(dat.final)) == t {
 
 		if buffi > 0 {
 			data := []byte(string(buffer[:buffi]))
 			if DEBUG {
-				fmt.Println("-> Flush buffer:", string(data))
+				fmt.Println("-> Flush buffer: [", string(data), "]")
 			}
 			writer.Write(data)
 			if dat.isTokenEnd(t) {
 				writer.WriteRune('\n')
+				if DEBUG {
+					fmt.Println("-> Newline")
+				}
 			}
 		}
 
@@ -1348,45 +1358,24 @@
 		return true
 	}
 
-	// Try again with epsilon symbol, in case everything else failed
-	/*
+	// Check epsilon transitions until a final state is reached
+	t0 = t
+	t = dat.getBase(t0) + uint32(dat.epsilon)
+	if dat.getCheck(t) == t0 {
+		// Remember state for backtracking to last tokenend state
+		a = dat.epsilon
+		newchar = false
+		goto PARSECHAR
+	} else if epsilonState != 0 {
 		t0 = epsilonState
 		epsilonState = 0 // reset
 		buffo = epsilonOffset
 		a = dat.epsilon
-		goto CHECK
-	*/
-
-	// Check epsilon transitions until a final state is reached
-	t0 = t
-	t = dat.getBase(t0) + uint32(dat.epsilon)
-
-	// Epsilon transition failed
-	if t > dat.getCheck(1) || dat.getCheck(t) != t0 {
 		if DEBUG {
-			fmt.Println("Match is not fine!", t, "and", dat.getCheck(t), "vs", t0)
+			fmt.Println("Get from epsilon stack and set buffo!", showBuffer(buffer, buffo, buffi))
 		}
-		return false
+		newchar = false
+		goto PARSECHAR
 	}
-
-	if dat.isSeparate(t) {
-		// Move to representative state
-		t = dat.getBase(t)
-	}
-
-	if dat.isTokenEnd(t) {
-		if buffi > 0 {
-			data := []byte(string(buffer[:buffi]))
-			if DEBUG {
-				fmt.Println("-> Flush buffer:", string(data))
-			}
-			writer.Write(data)
-			buffi = 0
-			buffo = 0
-			epsilonState = 0
-		}
-		writer.WriteRune('\n')
-	}
-
-	goto FINALCHECK
+	return false
 }
diff --git a/datokenizer_test.go b/datokenizer_test.go
index e861b08..08ba132 100644
--- a/datokenizer_test.go
+++ b/datokenizer_test.go
@@ -151,7 +151,7 @@
 	}
 	assert.NotNil(dat)
 
-	r := strings.NewReader("tra. und Du?")
+	r := strings.NewReader("tra. u Du?")
 
 	b := make([]byte, 0, 2048)
 	w := bytes.NewBuffer(b)
@@ -163,12 +163,12 @@
 	assert.Equal("tra", tokens[0])
 	assert.Equal(".", tokens[1])
 	assert.Equal("", tokens[2])
-	assert.Equal("und", tokens[3])
+	assert.Equal("u", tokens[3])
 	assert.Equal("Du", tokens[4])
 	assert.Equal("?", tokens[5])
 	assert.Equal("", tokens[6])
-	assert.Equal("", tokens[7])
-	assert.Equal(8, len(tokens))
+	// assert.Equal("", tokens[7])
+	assert.Equal(7, len(tokens))
 }
 
 func TestFullTokenizerSentenceSplitter(t *testing.T) {