diff --git a/guththila/tests/Makefile.am b/guththila/tests/Makefile.am
index ac32c34..d180486 100644
--- a/guththila/tests/Makefile.am
+++ b/guththila/tests/Makefile.am
@@ -4,17 +4,17 @@
 # The ASF licenses this file to You under the Apache License, Version 2.0
 # (the "License"); you may not use this file except in compliance with
 # the License.  You may obtain a copy of the License at
-# 
+#
 #   http://www.apache.org/licenses/LICENSE-2.0
-# 
+#
 # Unless required by applicable law or agreed to in writing, software
 # distributed under the License is distributed on an "AS IS" BASIS,
 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 # See the License for the specific language governing permissions and
 # limitations under the License.
-TESTS = test_guththila test_attribute test_stack
-noinst_PROGRAMS = test_guththila test_attribute test_stack
-check_PROGRAMS = test_guththila test_attribute test_stack
+TESTS = test_guththila test_attribute test_stack test_token
+noinst_PROGRAMS = test_guththila test_attribute test_stack test_token
+check_PROGRAMS = test_guththila test_attribute test_stack test_token
 SUBDIRS =
 
 test_guththila_SOURCES = test_guththila.cc
@@ -44,3 +44,11 @@
 				 ../../util/src/libaxutil.la \
 				 $(top_builddir)/$(GTEST)/libgtest.a \
 				 $(top_builddir)/$(GTEST)/libgtest_main.a
+
+test_token_SOURCES = test_token.cc
+
+test_token_LDADD = \
+				 $(top_builddir)/src/libguththila.la \
+				 ../../util/src/libaxutil.la \
+				 $(top_builddir)/$(GTEST)/libgtest.a \
+				 $(top_builddir)/$(GTEST)/libgtest_main.a
diff --git a/guththila/tests/test_token.cc b/guththila/tests/test_token.cc
new file mode 100644
index 0000000..7d21e0c
--- /dev/null
+++ b/guththila/tests/test_token.cc
@@ -0,0 +1,95 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one or more
+* contributor license agreements.  See the NOTICE file distributed with
+* this work for additional information regarding copyright ownership.
+* The ASF licenses this file to You under the Apache License, Version 2.0
+* (the "License"); you may not use this file except in compliance with
+* the License.  You may obtain a copy of the License at
+*
+*      http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*/
+
+#include <gtest/gtest.h>
+
+#include <guththila.h>
+
+
+class TestToken: public ::testing::Test
+{
+
+    protected:
+        void SetUp()
+        {
+            m_allocator = axutil_allocator_init(NULL);
+            ASSERT_NE(m_allocator, nullptr);
+            m_env = axutil_env_create(m_allocator);
+            ASSERT_NE(m_env, nullptr);
+        }
+
+        void TearDown()
+        {
+            axutil_env_free(m_env);
+        }
+
+        axutil_allocator_t *m_allocator;
+        axutil_env_t *m_env;
+};
+
+
+TEST_F(TestToken, test_token) {
+
+    int status;
+    guththila_tok_list_t *tok_list;
+
+    tok_list = (guththila_tok_list_t*)AXIS2_MALLOC(m_allocator, sizeof(guththila_tok_list_t));
+    ASSERT_NE(tok_list, nullptr);
+
+    status = guththila_tok_list_init(tok_list, m_env);
+    ASSERT_EQ(status, GUTHTHILA_SUCCESS);
+
+    const char * abc = "abcdefghijklmnopqrstuvwxyz";
+    const char * p;
+
+    guththila_token_t * tokens = (guththila_token_t*)AXIS2_MALLOC(m_allocator,
+                                                                    strlen(abc) * sizeof(guththila_token_t));
+    ASSERT_NE(tokens, nullptr);
+
+    for (p = abc; *p != 0; ++p)
+    {
+        int index = p - abc;
+        guththila_set_token(&tokens[index], (char*)p, index % 7 + 1, 1, 0, 0, 1, m_env);
+        status = guththila_tok_list_release_token(tok_list, &tokens[index], m_env);
+        /* NOTE: status is index+16 because _init is pushing a bunch of empty
+         * tokens onto the stack.  I'm not sure this is correct behavior,
+         * but I don't want to risk changing it right now.
+         * TODO: invesitgate.  See AXIS2C-1698
+         */
+        ASSERT_EQ(status, index + 16);
+    }
+
+    for (p-=1; p >= abc; --p)
+    {
+        ASSERT_EQ((guththila_token_t*)guththila_tok_list_get_token(tok_list, m_env), &tokens[p-abc]);
+    }
+
+    guththila_token_t tok0;
+    guththila_set_token(&tok0, (char*)abc, 1, 1, 0, 0, 1, m_env);
+
+    ASSERT_NE(0, guththila_tok_tok_cmp(&tokens[0], &tokens[1], m_env));
+    ASSERT_EQ(0, guththila_tok_tok_cmp(&tokens[0], &tok0, m_env));
+
+    ASSERT_NE(0, guththila_tok_str_cmp(&tokens[0], "b", strlen("b"), m_env));
+    ASSERT_EQ(0, guththila_tok_str_cmp(&tokens[0], "a", strlen("a"), m_env));
+
+    /*TODO test guththila_tok_list_grow*/
+    /*TODO test guththila_tok_list_free_data*/
+    guththila_tok_list_free(tok_list, m_env);
+    AXIS2_FREE(m_allocator, tokens);
+
+}
