diff --git a/simplejson/scanner.py b/simplejson/scanner.py
index 5ab71218462393a3de42ca065a0d93a3258e4392_c2ltcGxlanNvbi9zY2FubmVyLnB5..e54b474466117e31161db96200ad3e4ae5df7b38_c2ltcGxlanNvbi9zY2FubmVyLnB5 100644
--- a/simplejson/scanner.py
+++ b/simplejson/scanner.py
@@ -41,6 +41,9 @@
         else:
             self.endlineno, self.endcolno = None, None
 
+    def __reduce__(self):
+        return self.__class__, (self.msg, self.doc, self.pos, self.end)
+
 
 def linecol(doc, pos):
     lineno = doc.count('\n', 0, pos) + 1
diff --git a/simplejson/tests/test_errors.py b/simplejson/tests/test_errors.py
index 5ab71218462393a3de42ca065a0d93a3258e4392_c2ltcGxlanNvbi90ZXN0cy90ZXN0X2Vycm9ycy5weQ==..e54b474466117e31161db96200ad3e4ae5df7b38_c2ltcGxlanNvbi90ZXN0cy90ZXN0X2Vycm9ycy5weQ== 100644
--- a/simplejson/tests/test_errors.py
+++ b/simplejson/tests/test_errors.py
@@ -1,4 +1,4 @@
-import sys
+import sys, pickle
 from unittest import TestCase
 
 import simplejson as json
@@ -33,3 +33,19 @@
                 self.fail('Expected JSONDecodeError')
             self.assertEqual(err.lineno, 1)
             self.assertEqual(err.colno, 10)
+
+    def test_error_is_pickable(self):
+        err = None
+        try:
+            json.loads('{}\na\nb')
+        except json.JSONDecodeError:
+            err = sys.exc_info()[1]
+        else:
+            self.fail('Expected JSONDecodeError')
+        s = pickle.dumps(err)
+        e = pickle.loads(s)
+
+        self.assertEquals(err.msg, e.msg)
+        self.assertEquals(err.doc, e.doc)
+        self.assertEquals(err.pos, e.pos)
+        self.assertEquals(err.end, e.end)