diff --git a/termmapper.go b/termmapper.go
index 5ddb6b8..16ff596 100644
--- a/termmapper.go
+++ b/termmapper.go
@@ -200,10 +200,6 @@
 	Key     string
 }
 
-func Hui() string {
-	return "test"
-}
-
 func Map2(json []byte) string {
 	/*
 		result := gjson.GetBytes(json, "query")
@@ -254,30 +250,18 @@
 }
 
 // token writes a token to the string builder
-func token(strBuilder *strings.Builder, foundry string, layer string, keys []string) {
+func token(strBuilder *strings.Builder, terms []Term, positive bool) {
 	strBuilder.WriteString(`{"@type":"koral:token","wrap":`)
-	if len(keys) > 1 {
-		termGroup(strBuilder, foundry, layer, keys)
+	if len(terms) > 1 {
+		termGroup(strBuilder, terms, positive)
 	} else {
-		term(strBuilder, foundry, layer, keys[0], true)
+		term(strBuilder, terms[0], positive)
 	}
 	strBuilder.WriteString(`}`)
 }
 
 // termGroup writes a termGroup to the string builder
-func termGroup(strBuilder *strings.Builder, foundry string, layer string, keys []string) {
-	strBuilder.WriteString(`{"@type":"koral:termGroup","relation":"relation:and","operation":"operation:and","operands":[`)
-	for i, key := range keys {
-		term(strBuilder, foundry, layer, key, true) // temporary
-		if i < len(keys)-1 {
-			strBuilder.WriteString(",")
-		}
-	}
-	strBuilder.WriteString(`]}`)
-}
-
-// termGroup2 writes a termGroup to the string builder
-func termGroup2(strBuilder *strings.Builder, terms []Term, positive bool) {
+func termGroup(strBuilder *strings.Builder, terms []Term, positive bool) {
 	strBuilder.WriteString(`{"@type":"koral:termGroup",`)
 
 	if positive {
@@ -287,8 +271,8 @@
 	}
 
 	strBuilder.WriteString(`"operands":[`)
-	for i, term := range terms {
-		term2(strBuilder, term, positive)
+	for i, t := range terms {
+		term(strBuilder, t, positive)
 		if i < len(terms)-1 {
 			strBuilder.WriteString(",")
 		}
@@ -297,28 +281,8 @@
 }
 
 // term writes a term to the string builder
-func term(strBuilder *strings.Builder, foundry string, layer string, key string, match bool) {
+func term(strBuilder *strings.Builder, term Term, match bool) {
 
-	// TODO: May have ne!!!!
-	strBuilder.WriteString(`{"@type":"koral:term","match":"match:`)
-	if match {
-		strBuilder.WriteString("eq")
-	} else {
-		strBuilder.WriteString("ne")
-	}
-	strBuilder.WriteString(`","foundry":"`)
-	strBuilder.WriteString(foundry)
-	strBuilder.WriteString(`","layer":"`)
-	strBuilder.WriteString(layer)
-	strBuilder.WriteString(`","key":"`)
-	strBuilder.WriteString(key)
-	strBuilder.WriteString(`"}`)
-}
-
-// term writes a term to the string builder
-func term2(strBuilder *strings.Builder, term Term, match bool) {
-
-	// TODO: May have ne!!!!
 	strBuilder.WriteString(`{"@type":"koral:term","match":"match:`)
 	if match {
 		strBuilder.WriteString("eq")
@@ -376,9 +340,9 @@
 
 	var strBuilder strings.Builder
 	if matchop == "match:ne" {
-		termGroup2(&strBuilder, terms, false)
+		termGroup(&strBuilder, terms, false)
 	} else {
-		termGroup2(&strBuilder, terms, true)
+		termGroup(&strBuilder, terms, true)
 	}
 
 	return strBuilder.String()
diff --git a/termmapper_test.go b/termmapper_test.go
index 679ac25..259e08b 100644
--- a/termmapper_test.go
+++ b/termmapper_test.go
@@ -7,11 +7,6 @@
 	"github.com/stretchr/testify/assert"
 )
 
-func TestConstants(t *testing.T) {
-	assert := assert.New(t)
-	assert.Equal(Hui(), "test")
-}
-
 // KoralPipe-TermMapping
 
 func TestTokenBuilder(t *testing.T) {
@@ -19,15 +14,15 @@
 	assert := assert.New(t)
 
 	var strBuilder strings.Builder
-	term(&strBuilder, "myfoundry", "mylayer", "mykey1", true)
+	term(&strBuilder, Term{"myfoundry", "mylayer", "mykey1"}, true)
 	assert.Equal(strBuilder.String(), `{"@type":"koral:term","match":"match:eq","foundry":"myfoundry","layer":"mylayer","key":"mykey1"}`)
 	strBuilder.Reset()
 
-	token(&strBuilder, "myfoundry", "mylayer", []string{"mykey1", "mykey2"})
+	token(&strBuilder, []Term{{"myfoundry", "mylayer", "mykey1"}, {"myfoundry", "mylayer", "mykey2"}}, true)
 	assert.Equal(strBuilder.String(), "{\"@type\":\"koral:token\",\"wrap\":{\"@type\":\"koral:termGroup\",\"relation\":\"relation:and\",\"operation\":\"operation:and\",\"operands\":[{\"@type\":\"koral:term\",\"match\":\"match:eq\",\"foundry\":\"myfoundry\",\"layer\":\"mylayer\",\"key\":\"mykey1\"},{\"@type\":\"koral:term\",\"match\":\"match:eq\",\"foundry\":\"myfoundry\",\"layer\":\"mylayer\",\"key\":\"mykey2\"}]}}")
 	strBuilder.Reset()
 
-	token(&strBuilder, "myfoundry", "mylayer", []string{"mykey2"})
+	token(&strBuilder, []Term{{"myfoundry", "mylayer", "mykey2"}}, true)
 	assert.Equal(strBuilder.String(), "{\"@type\":\"koral:token\",\"wrap\":{\"@type\":\"koral:term\",\"match\":\"match:eq\",\"foundry\":\"myfoundry\",\"layer\":\"mylayer\",\"key\":\"mykey2\"}}")
 	strBuilder.Reset()
 }
