diff --git a/datokenizer.go b/datokenizer.go
index 1d5291b..b4a3f36 100644
--- a/datokenizer.go
+++ b/datokenizer.go
@@ -284,6 +284,10 @@
 				nontoken := false
 				tokenend := false
 
+				// ID needs to be > 1
+				inSym++
+				outSym++
+
 				if inSym != outSym {
 
 					if tok.sigmaRev[outSym] == NEWLINE {
@@ -356,7 +360,10 @@
 						string(tok.sigmaRev[inSym]),
 						":",
 						string(tok.sigmaRev[outSym]),
-						")")
+						")",
+						";",
+						"TE:", tokenend,
+						"NT:", nontoken)
 				}
 
 				continue
@@ -368,6 +375,9 @@
 				// Turn string into sigma id
 				number, err := strconv.Atoi(elem[0])
 
+				// ID needs to be > 1
+				number++
+
 				if err != nil {
 					log.Error().Err(err)
 					os.Exit(0)
@@ -497,14 +507,25 @@
 				t1 := dat.getBase(t) + uint32(a)
 				dat.setCheck(t1, t)
 
+				if DEBUG {
+					fmt.Println("Translate transition",
+						s, "->", s1, "(", a, ")", "to", t, "->", t1)
+				}
+
 				// Mark the state as being the target of a nontoken transition
 				if tok.transitions[s][a].nontoken {
 					dat.setNonToken(t1, true)
+					if DEBUG {
+						fmt.Println("Set", t1, "to nontoken")
+					}
 				}
 
 				// Mark the state as being the target of a tokenend transition
 				if tok.transitions[s][a].tokenend {
 					dat.setTokenEnd(t1, true)
+					if DEBUG {
+						fmt.Println("Set", t1, "to tokenend")
+					}
 				}
 
 				// Check for representative states
@@ -1000,7 +1021,6 @@
 	defer writer.Flush()
 
 	t := uint32(1) // Initial state
-	// chars := []rune(input)
 	skip := false
 
 	var char rune
@@ -1036,6 +1056,10 @@
 
 		t = dat.getBase(tu) + uint32(a)
 
+		if DEBUG {
+			fmt.Println("Check", tu, "-", a, "(", string(char), ")", "->", t)
+		}
+
 		// Check if the transition is valid according to the double array
 		if t > dat.getCheck(1) || dat.getCheck(t) != tu {
 
@@ -1067,6 +1091,10 @@
 
 			t = dat.getBase(t)
 
+			if DEBUG {
+				fmt.Println("Representative pointing to", t)
+			}
+
 		} else {
 			nontoken = dat.isNonToken(t)
 			tokenend = dat.isTokenEnd(t)
@@ -1080,6 +1108,10 @@
 			writer.WriteRune(char)
 		}
 
+		if DEBUG {
+			fmt.Println("  --> ok!")
+		}
+
 		/*
 			if nontoken {
 				writer.WriteRune(("<|>")
diff --git a/datokenizer_test.go b/datokenizer_test.go
index e8a32d9..efd1e7c 100644
--- a/datokenizer_test.go
+++ b/datokenizer_test.go
@@ -50,9 +50,10 @@
 	r := strings.NewReader("  wald   gehen Da kann\t man was \"erleben\"!")
 	b := make([]byte, 0, 2048)
 	w := bytes.NewBuffer(b)
-	dat.Transduce(r, w)
+	var tokens []string
 
-	tokens := strings.Split(string(w.Bytes()), "\n")
+	dat.Transduce(r, w)
+	tokens = strings.Split(w.String(), "\n")
 	assert.Equal("wald", tokens[0])
 	assert.Equal("gehen", tokens[1])
 	assert.Equal("Da", tokens[2])
@@ -61,19 +62,28 @@
 	assert.Equal("was", tokens[5])
 	assert.Equal("\"erleben\"", tokens[6])
 
-	/*
-		r = strings.NewReader(" In den Wald gehen? -- Da kann\t man was \"erleben\"!")
-		w.Reset()
-		dat.Transduce(r, w)
+	r = strings.NewReader(" In den Wald gehen? -- Da kann\t man was \"erleben\"!")
+	w.Reset()
+	dat.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])
 
-		tokens = strings.Split(string(w.Bytes()), "\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()
+	dat.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 TestReadWriteTokenizer(t *testing.T) {
@@ -90,7 +100,7 @@
 	buf := bytes.NewBuffer(b)
 	n, err := dat.WriteTo(buf)
 	assert.Nil(err)
-	assert.Equal(int64(208), n)
+	assert.Equal(int64(218), n)
 
 	dat2 := ParseDatok(buf)
 	assert.NotNil(dat2)
