diff --git a/generic_utils.py b/generic_utils.py
index d4b1892..eeb26d6 100644
--- a/generic_utils.py
+++ b/generic_utils.py
@@ -87,7 +87,7 @@
 
     @functools.wraps(obj)
     def memoizer(*args, **kwargs):
-        key = str(args) + str(kwargs)
+        key = args + tuple(kwargs.items())
         if key not in cache:
             cache[key] = obj(*args, **kwargs)
         return cache[key]
diff --git a/utest/test_generic_utils.py b/utest/test_generic_utils.py
new file mode 100755
index 0000000..58e3a4a
--- /dev/null
+++ b/utest/test_generic_utils.py
@@ -0,0 +1,117 @@
+#!/usr/bin/env python
+# Copyright 2013, Big Switch Networks, Inc.
+#
+# LoxiGen is licensed under the Eclipse Public License, version 1.0 (EPL), with
+# the following special exception:
+#
+# LOXI Exception
+#
+# As a special exception to the terms of the EPL, you may distribute libraries
+# generated by LoxiGen (LoxiGen Libraries) under the terms of your choice, provided
+# that copyright and licensing notices generated by LoxiGen are not altered or removed
+# from the LoxiGen Libraries and the notice provided below is (i) included in
+# the LoxiGen Libraries, if distributed in source code form and (ii) included in any
+# documentation for the LoxiGen Libraries, if distributed in binary form.
+#
+# Notice: "Copyright 2013, Big Switch Networks, Inc. This library was generated by the LoxiGen Compiler."
+#
+# You may not use this file except in compliance with the EPL or LOXI Exception. You may obtain
+# a copy of the EPL at:
+#
+# http://www.eclipse.org/legal/epl-v10.html
+#
+# 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
+# EPL for the specific language governing permissions and limitations
+# under the EPL.
+
+import sys
+import os
+import unittest
+
+root_dir = os.path.join(os.path.dirname(os.path.realpath(__file__)), '..')
+sys.path.insert(0, root_dir)
+
+from generic_utils import *
+
+class MyHash(object):
+    def __init__(self, val):
+        self.val = val
+
+    def __hash__(self):
+        return hash(self.val)
+
+    def __str__(self):
+        return "BoringConstantString"
+
+    def __eq__(self, o ):
+        return type(self) == type(o) and self.val == o.val
+
+class GenericTest(unittest.TestCase):
+    def test_memoize_simple(self):
+        self.count = 0
+
+        @memoize
+        def function():
+            self.count += 1
+            return "Foo"
+
+        self.assertEquals(0, self.count)
+        self.assertEquals("Foo", function())
+        self.assertEquals(1, self.count)
+        self.assertEquals("Foo", function())
+        self.assertEquals(1, self.count)
+
+    def test_memoize_string_args(self):
+        self.count = 0
+
+        @memoize
+        def function(a, b):
+            self.count += 1
+            return "%s:%s" % (a,b)
+
+        self.assertEquals(0, self.count)
+        self.assertEquals("a:b", function('a', 'b'))
+        self.assertEquals(1, self.count)
+        self.assertEquals("ab:", function('ab', ''))
+        self.assertEquals(2, self.count)
+        self.assertEquals("ab:", function('ab', ''))
+        self.assertEquals(2, self.count)
+
+    def test_memoize_kw_args(self):
+        self.count = 0
+
+        @memoize
+        def function(**kw):
+            self.count += 1
+            return ",".join("{k}={v}".format(k=k,v=v) for k,v in kw.items())
+
+        self.assertEquals(0, self.count)
+        self.assertEquals("a=1", function(a=1))
+        self.assertEquals(1, self.count)
+        self.assertEquals("a=1,b=2", function(a=1, b=2))
+        self.assertEquals(2, self.count)
+        self.assertEquals("a=1", function(a=1))
+        self.assertEquals(2, self.count)
+        self.assertEquals("a=1,b=BoringConstantString", function(a=1, b=MyHash('1')))
+        self.assertEquals(3, self.count)
+
+    def test_memoize_with_hashable_object(self):
+        self.count = 0
+
+        @memoize
+        def function(a):
+            self.count += 1
+            return a.val
+
+        self.assertEquals(0, self.count)
+        self.assertEquals("a", function(MyHash('a')))
+        self.assertEquals(1, self.count)
+        self.assertEquals("b", function(MyHash('b')))
+        self.assertEquals(2, self.count)
+        self.assertEquals("a", function(MyHash('a')))
+        self.assertEquals(2, self.count)
+
+if __name__ == '__main__':
+    unittest.main()
