diff --git a/Lib/test/test_range.py b/Lib/test/test_range.py
index 1fd8f1d..b14a22b 100644
--- a/Lib/test/test_range.py
+++ b/Lib/test/test_range.py
@@ -2,6 +2,7 @@
 
 import test.support, unittest
 import sys
+import pickle
 
 import warnings
 warnings.filterwarnings("ignore", "integer argument expected",
@@ -61,6 +62,15 @@
         self.assertEqual(repr(range(1, 2)), 'range(1, 2)')
         self.assertEqual(repr(range(1, 2, 3)), 'range(1, 2, 3)')
 
+    def test_pickling(self):
+        testcases = [(13,), (0, 11), (-22, 10), (20, 3, -1),
+                     (13, 21, 3), (-2, 2, 2)]
+        for proto in range(pickle.HIGHEST_PROTOCOL):
+            for t in testcases:
+                r = range(*t)
+                self.assertEquals(list(pickle.loads(pickle.dumps(r, proto))),
+                                  list(r))
+
 def test_main():
     test.support.run_unittest(RangeTest)
 
diff --git a/Objects/rangeobject.c b/Objects/rangeobject.c
index cd5a804..f9a9cc9 100644
--- a/Objects/rangeobject.c
+++ b/Objects/rangeobject.c
@@ -252,6 +252,14 @@
                                     r->start, r->stop, r->step);
 }
 
+/* Pickling support */
+static PyObject *
+range_reduce(rangeobject *r, PyObject *args)
+{
+	return Py_BuildValue("(O(OOO))", Py_TYPE(r),
+                         r->start, r->stop, r->step);
+}
+
 static PySequenceMethods range_as_sequence = {
     (lenfunc)range_length,	/* sq_length */
     0,			/* sq_concat */
@@ -269,6 +277,7 @@
 static PyMethodDef range_methods[] = {
     {"__reversed__",	(PyCFunction)range_reverse, METH_NOARGS,
 	reverse_doc},
+    {"__reduce__",	(PyCFunction)range_reduce, METH_VARARGS},
     {NULL,		NULL}		/* sentinel */
 };
 
