diff --git a/matrix_test.go b/matrix_test.go
index 18ed3a2..49a1523 100644
--- a/matrix_test.go
+++ b/matrix_test.go
@@ -21,7 +21,7 @@
 	var tokens []string
 	mat.Transduce(r, w)
 	tokens = strings.Split(w.String(), "\n")
-	assert.Equal(len(tokens), 9)
+	assert.Equal(len(tokens), 10)
 	assert.Equal("wald", tokens[0])
 	assert.Equal("gehen", tokens[1])
 	assert.Equal("Da", tokens[2])
@@ -30,4 +30,121 @@
 	assert.Equal("was", tokens[5])
 	assert.Equal("\"erleben\"", tokens[6])
 	assert.Equal("!", tokens[7])
+
+	r = strings.NewReader(" In den Wald gehen? -- Da kann\t man was \"erleben\"!")
+	w.Reset()
+	mat.Transduce(r, w)
+	tokens = strings.Split(w.String(), "\n")
+	assert.Equal("In", tokens[0])
+	assert.Equal("den", tokens[1])
+	assert.Equal("Wald", tokens[2])
+	assert.Equal("gehen", tokens[3])
+	assert.Equal("?", tokens[4])
+	assert.Equal("--", tokens[5])
+
+	r = strings.NewReader(" g? -- D")
+	w.Reset()
+	mat.Transduce(r, w)
+	tokens = strings.Split(w.String(), "\n")
+	assert.Equal("g", tokens[0])
+	assert.Equal("?", tokens[1])
+	assert.Equal("--", tokens[2])
+	assert.Equal("D", tokens[3])
+	assert.Equal("", tokens[4])
+	assert.Equal("", tokens[5])
+	assert.Equal(6, len(tokens))
+}
+
+func TestFullTokenizerMatrixSentenceSplitter(t *testing.T) {
+	assert := assert.New(t)
+	foma := LoadFomaFile("testdata/tokenizer.fst")
+	assert.NotNil(foma)
+
+	mat := foma.ToMatrix()
+
+	b := make([]byte, 0, 2048)
+	w := bytes.NewBuffer(b)
+	var sentences []string
+
+	// testSentSplitterSimple
+	assert.True(mat.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(mat.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(mat.Transduce(strings.NewReader(""), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 1)
+		assert.Equal("\n", sentences[0])
+
+		w.Reset()
+		assert.True(mat.Transduce(strings.NewReader("Gefunden auf wikipedia.org."), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 2)
+
+		w.Reset()
+		assert.True(mat.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(mat.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", sentences[0])
+		assert.Equal("", sentences[1])
+		assert.Equal(len(sentences), 2)
+
+		w.Reset()
+		assert.True(mat.Transduce(strings.NewReader("Unser Server ist 10.0.10.51."), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal("", sentences[1])
+		assert.Equal(len(sentences), 2)
+
+		w.Reset()
+		assert.True(mat.Transduce(strings.NewReader("Zu 50.4% ist es sicher"), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 2)
+
+		w.Reset()
+		assert.True(mat.Transduce(strings.NewReader("Der Termin ist am 5.9.2018"), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 2)
+
+		w.Reset()
+		assert.True(mat.Transduce(strings.NewReader("Ich habe die readme.txt heruntergeladen"), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 2)
+		assert.Equal("Ich\nhabe\ndie\nreadme.txt\nheruntergeladen", sentences[0])
+		assert.Equal("", sentences[1])
+
+		w.Reset()
+		assert.True(mat.Transduce(strings.NewReader("Ausschalten!!! Hast Du nicht gehört???"), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 3)
+		assert.Equal("Ausschalten\n!!!", sentences[0])
+		assert.Equal("Hast\nDu\nnicht\ngehört\n???", sentences[1])
+		assert.Equal("", sentences[2])
+
+		w.Reset()
+		assert.True(mat.Transduce(strings.NewReader("Ich wohne in der Weststr. und Du?"), w))
+		sentences = strings.Split(w.String(), "\n\n")
+		assert.Equal(len(sentences), 2)
+	*/
+	/*
+		Test:
+		"\"Ausschalten!!!\", sagte er. \"Hast Du nicht gehört???\""), w))
+	*/
 }
