diff --git a/datokenizer.go b/datokenizer.go
index fe57dde..e1f55dc 100644
--- a/datokenizer.go
+++ b/datokenizer.go
@@ -519,6 +519,7 @@
 }
 
 // Based on Mizobuchi et al (2000), p. 129
+// Added support for IDENTITY, UNKNOWN and EPSILON
 func (tok *Tokenizer) match(input string) bool {
 	t := 1 // Start position
 	chars := []rune(input)
@@ -528,13 +529,15 @@
 	var ok bool
 
 	//	fmt.Println("Length of string is", len(chars))
-	for ; i < len(chars); i++ {
+	for i < len(chars) {
 		a, ok = tok.sigma[chars[i]]
 
 		// Support identity symbol if char not in sigma
 		if !ok && IDENTITY != -1 {
-			fmt.Println("IDENTITY symbol", chars[i], "->", IDENTITY)
+			fmt.Println("IDENTITY symbol", string(chars[i]), "->", IDENTITY)
 			a = IDENTITY
+		} else {
+			fmt.Println("Sigma transition is okay for [", string(chars[i]), "]")
 		}
 		tu = t
 	CHECK:
@@ -543,22 +546,33 @@
 			fmt.Println("Match is not fine!", t, "and", tok.get_check(t), "vs", tu)
 
 			// Try again with unknown symbol, in case identity failed
-			if ok {
+			if !ok {
 				if a == IDENTITY {
-					fmt.Println("UNKNOWN symbol", chars[i], "->", UNKNOWN)
+					fmt.Println("UNKNOWN symbol", string(chars[i]), "->", UNKNOWN)
 					a = UNKNOWN
 					goto CHECK
 				} else if a == UNKNOWN {
-					fmt.Println("EPSILON symbol", chars[i], "->", EPSILON)
+					fmt.Println("aEPSILON symbol", string(chars[i]), "->", EPSILON)
 					a = EPSILON
+					// In the worst case, this checks epsilon twice at the same state -
+					// here and at the end
 					goto CHECK
 				}
+			} else if a != EPSILON {
+				fmt.Println("bEPSILON symbol", string(chars[i]), "->", EPSILON)
+				a = EPSILON
+				// In the worst case, this checks epsilon twice at the same state -
+				// here and at the end
+				goto CHECK
 			}
 			break
 		} else if tok.get_base(t) < 0 {
 			// Move to representative state
 			t = -1 * tok.get_base(t)
 		}
+		if a != EPSILON {
+			i++
+		}
 	}
 
 	if i == len(chars) {
@@ -575,8 +589,6 @@
 		return true
 	}
 
-	//	if a != EPSILON {
-	// EPSILONCHECK:
 	tu = t
 	a = EPSILON
 
@@ -590,12 +602,6 @@
 		goto FINALCHECK
 	}
 	goto FINALCHECK
-	// return true
-	/*
-		}
-
-			return false
-	*/
 }
 
 // In the final realization, the states can only have 30 bits:
