diff --git a/CHANGES.txt b/CHANGES.txt
index df3e6c198a1092ac8af5e8d42c4769bf34e5d0e7_Q0hBTkdFUy50eHQ=..3e28c9467467d5d4383315345b2410933eaaef51_Q0hBTkdFUy50eHQ= 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Version 2.1.2 released XXXX-XX-XX
 
+* Correctly raise TypeError when non-string keys are used with speedups
+  http://code.google.com/p/simplejson/issues/detail?id=82
 * Fix the endlineno, endcolno attributes of the JSONDecodeError exception.
   http://code.google.com/p/simplejson/issues/detail?id=81
 
diff --git a/simplejson/_speedups.c b/simplejson/_speedups.c
index df3e6c198a1092ac8af5e8d42c4769bf34e5d0e7_c2ltcGxlanNvbi9fc3BlZWR1cHMuYw==..3e28c9467467d5d4383315345b2410933eaaef51_c2ltcGxlanNvbi9fc3BlZWR1cHMuYw== 100644
--- a/simplejson/_speedups.c
+++ b/simplejson/_speedups.c
@@ -2277,7 +2277,7 @@
         }
         else {
             /* TODO: include repr of key */
-            PyErr_SetString(PyExc_ValueError, "keys must be a string");
+            PyErr_SetString(PyExc_TypeError, "keys must be a string");
             goto bail;
         }
 
diff --git a/simplejson/tests/test_errors.py b/simplejson/tests/test_errors.py
index df3e6c198a1092ac8af5e8d42c4769bf34e5d0e7_c2ltcGxlanNvbi90ZXN0cy90ZXN0X2Vycm9ycy5weQ==..3e28c9467467d5d4383315345b2410933eaaef51_c2ltcGxlanNvbi90ZXN0cy90ZXN0X2Vycm9ycy5weQ== 100644
--- a/simplejson/tests/test_errors.py
+++ b/simplejson/tests/test_errors.py
@@ -3,6 +3,10 @@
 import simplejson as json
 
 class TestErrors(TestCase):
+    def test_string_keys_error(self):
+        data = [{'a': 'A', 'b': (2, 4), 'c': 3.0, ('d',): 'D tuple'}]
+        self.assertRaises(TypeError, json.dumps, data)
+
     def test_decode_error(self):
         err = None
         try: