diff --git a/datokenizer.go b/datokenizer.go
index 7aea95a..d862164 100644
--- a/datokenizer.go
+++ b/datokenizer.go
@@ -1176,6 +1176,9 @@
 		if newchar {
 			// Get from reader if buffer is empty
 			if buffo >= buffi {
+				if eof {
+					break
+				}
 				char, _, err = reader.ReadRune()
 
 				// No more runes to read
@@ -1282,12 +1285,14 @@
 				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
 			}
+			if DEBUG {
+				fmt.Println("-> Newline")
+			}
+			writer.WriteRune('\n')
 		}
 
 		// Rewind the buffer if necessary
@@ -1315,10 +1320,6 @@
 			}
 		}
 
-		if eof {
-			break
-		}
-
 		newchar = true
 
 		// TODO:
diff --git a/datokenizer_test.go b/datokenizer_test.go
index 08ba132..05847b2 100644
--- a/datokenizer_test.go
+++ b/datokenizer_test.go
@@ -160,6 +160,7 @@
 	assert.True(dat.Transduce(r, w))
 
 	tokens = strings.Split(w.String(), "\n")
+	assert.Equal("tra\n.\n\nu\nDu\n?\n\n", w.String())
 	assert.Equal("tra", tokens[0])
 	assert.Equal(".", tokens[1])
 	assert.Equal("", tokens[2])
@@ -167,8 +168,8 @@
 	assert.Equal("Du", tokens[4])
 	assert.Equal("?", tokens[5])
 	assert.Equal("", tokens[6])
-	// assert.Equal("", tokens[7])
-	assert.Equal(7, len(tokens))
+	assert.Equal("", tokens[7])
+	assert.Equal(8, len(tokens))
 }
 
 func TestFullTokenizerSentenceSplitter(t *testing.T) {
@@ -181,8 +182,82 @@
 	var sentences []string
 
 	// testSentSplitterSimple
-	r := strings.NewReader("Mann.")
-	assert.True(dat.Transduce(r, w))
+	assert.True(dat.Transduce(strings.NewReader("Der alte Mann."), w))
+	sentences = strings.Split(w.String(), "\n\n")
+
+	assert.Equal("Der\nalte\nMann\n.\n\n", w.String())
+	assert.Equal("Der\nalte\nMann\n.", sentences[0])
+	assert.Equal("", sentences[1])
+	assert.Equal(len(sentences), 2)
+
+	w.Reset()
+	assert.True(dat.Transduce(strings.NewReader("Der Vorsitzende der Abk. hat gewählt."), w))
+	sentences = strings.Split(w.String(), "\n\n")
+	assert.Equal(len(sentences), 2)
+	assert.Equal("Der\nVorsitzende\nder\nAbk.\nhat\ngewählt\n.", sentences[0])
+	assert.Equal("", sentences[1])
+
+	w.Reset()
+	assert.True(dat.Transduce(strings.NewReader(""), w))
 	sentences = strings.Split(w.String(), "\n\n")
 	assert.Equal(len(sentences), 1)
+	assert.Equal("", sentences[0])
+
+	w.Reset()
+	assert.True(dat.Transduce(strings.NewReader("Gefunden auf wikipedia.org."), w))
+	sentences = strings.Split(w.String(), "\n\n")
+	assert.Equal(len(sentences), 2)
+
+	w.Reset()
+	assert.True(dat.Transduce(strings.NewReader("Ich bin unter korap@ids-mannheim.de erreichbar."), w))
+	sentences = strings.Split(w.String(), "\n\n")
+	assert.Equal(len(sentences), 2)
+
+	/*
+		w.Reset()
+		assert.True(dat.Transduce(strings.NewReader("Unsere Website ist https://korap.ids-mannheim.de/?q=Baum"), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal("Unsere\nWebsite\nist\nhttps://korap.ids-mannheim.de/?q=Baum\n", sentences[0])
+		assert.Equal(len(sentences), 1)
+
+			w.Reset()
+			assert.True(dat.Transduce(strings.NewReader("Unser Server ist 10.0.10.51."), w))
+			sentences = strings.Split(w.String(), "\n\n")
+			assert.Equal(len(sentences), 1)
+
+			w.Reset()
+			assert.True(dat.Transduce(strings.NewReader("Zu 50.4% ist es sicher"), w))
+			sentences = strings.Split(w.String(), "\n\n")
+			assert.Equal(len(sentences), 1)
+
+			w.Reset()
+			assert.True(dat.Transduce(strings.NewReader("Der Termin ist am 5.9.2018"), w))
+			sentences = strings.Split(w.String(), "\n\n")
+			assert.Equal(len(sentences), 1)
+
+			w.Reset()
+			assert.True(dat.Transduce(strings.NewReader("Ich habe die readme.txt heruntergeladen"), w))
+			sentences = strings.Split(w.String(), "\n\n")
+			assert.Equal(len(sentences), 1)
+			assert.Equal("Ich\nhabe\ndie\nreadme.txt\nheruntergeladen\n", sentences[0])
+
+			w.Reset()
+			assert.True(dat.Transduce(strings.NewReader("Ausschalten!!! Hast Du nicht gehört???"), w))
+			sentences = strings.Split(w.String(), "\n\n")
+			assert.Equal(len(sentences), 2)
+			assert.Equal("Ausschalten\n!!!", sentences[0])
+			assert.Equal("Hast\nDu\nnicht\ngehört\n???\n", sentences[1])
+	*/
+
+	/*
+		w.Reset()
+		assert.True(dat.Transduce(strings.NewReader("Ich wohne in der Weststr. und Du?"), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 1)
+	*/
+
+	/*
+		Test:
+		"\"Ausschalten!!!\", sagte er. \"Hast Du nicht gehört???\""), w))
+	*/
 }
