diff --git a/Lib/test/test_datetime.py b/Lib/test/test_datetime.py
index 73db033..f383d7b 100644
--- a/Lib/test/test_datetime.py
+++ b/Lib/test/test_datetime.py
@@ -278,8 +278,6 @@
     def test_pickling(self):
         args = 12, 34, 56
         orig = timedelta(*args)
-        state = orig.__getstate__()
-        self.assertEqual(args, state)
         for pickler, unpickler, proto in pickle_choices:
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
@@ -832,8 +830,6 @@
     def test_pickling(self):
         args = 6, 7, 23
         orig = self.theclass(*args)
-        state = orig.__getstate__()
-        self.assertEqual(state, ('\x00\x06\x07\x17',), self.theclass)
         for pickler, unpickler, proto in pickle_choices:
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
@@ -1186,8 +1182,6 @@
     def test_pickling(self):
         args = 6, 7, 23, 20, 59, 1, 64**2
         orig = self.theclass(*args)
-        state = orig.__getstate__()
-        self.assertEqual(state, ('\x00\x06\x07\x17\x14\x3b\x01\x00\x10\x00',))
         for pickler, unpickler, proto in pickle_choices:
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
@@ -1567,8 +1561,6 @@
     def test_pickling(self):
         args = 20, 59, 16, 64**2
         orig = self.theclass(*args)
-        state = orig.__getstate__()
-        self.assertEqual(state, ('\x14\x3b\x10\x00\x10\x00',))
         for pickler, unpickler, proto in pickle_choices:
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
@@ -1877,8 +1869,6 @@
         # Try one without a tzinfo.
         args = 20, 59, 16, 64**2
         orig = self.theclass(*args)
-        state = orig.__getstate__()
-        self.assertEqual(state, ('\x14\x3b\x10\x00\x10\x00',))
         for pickler, unpickler, proto in pickle_choices:
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
@@ -2080,8 +2070,6 @@
         # Try one without a tzinfo.
         args = 6, 7, 23, 20, 59, 1, 64**2
         orig = self.theclass(*args)
-        state = orig.__getstate__()
-        self.assertEqual(state, ('\x00\x06\x07\x17\x14\x3b\x01\x00\x10\x00',))
         for pickler, unpickler, proto in pickle_choices:
             green = pickler.dumps(orig, proto)
             derived = unpickler.loads(green)
diff --git a/Misc/NEWS b/Misc/NEWS
index c0aa976..5d3f57c 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -131,8 +131,8 @@
 
   The pickle format of date, time and datetime objects has changed
   completely.  The undocumented pickler and unpickler functions no
-  longer exist.  The undocumented __setstate__() methods no longer
-  exist either.
+  longer exist.  The undocumented __setstate__() and __getstate__()
+  methods no longer exist either.
 
 Library
 -------
diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index 054ddd4..ba2b737 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -1949,6 +1949,7 @@
 
 /* Pickle support, a simple use of __reduce__. */
 
+/* __getstate__ isn't exposed */
 static PyObject *
 delta_getstate(PyDateTime_Delta *self)
 {
@@ -1979,9 +1980,6 @@
 };
 
 static PyMethodDef delta_methods[] = {
-	{"__getstate__", (PyCFunction)delta_getstate, METH_NOARGS,
-	 PyDoc_STR("__getstate__() -> state")},
-
 	{"__reduce__", (PyCFunction)delta_reduce,     METH_NOARGS,
 	 PyDoc_STR("__reduce__() -> (cls, state)")},
 
@@ -2525,6 +2523,7 @@
 
 /* Pickle support, a simple use of __reduce__. */
 
+/* __getstate__ isn't exposed */
 static PyObject *
 date_getstate(PyDateTime_Date *self)
 {
@@ -2591,9 +2590,6 @@
 	{"replace",     (PyCFunction)date_replace,      METH_KEYWORDS,
 	 PyDoc_STR("Return date with new specified fields.")},
 
-	{"__getstate__", (PyCFunction)date_getstate,	METH_NOARGS,
-	 PyDoc_STR("__getstate__() -> state")},
-
 	{"__reduce__", (PyCFunction)date_reduce,        METH_NOARGS,
 	 PyDoc_STR("__reduce__() -> (cls, state)")},
 
@@ -3340,6 +3336,7 @@
 /* Let basestate be the non-tzinfo data string.
  * If tzinfo is None, this returns (basestate,), else (basestate, tzinfo).
  * So it's a tuple in any (non-error) case.
+ * __getstate__ isn't exposed.
  */
 static PyObject *
 time_getstate(PyDateTime_Time *self)
@@ -3386,9 +3383,6 @@
 	{"replace",     (PyCFunction)time_replace,	METH_KEYWORDS,
 	 PyDoc_STR("Return time with new specified fields.")},
 
-	{"__getstate__", (PyCFunction)time_getstate,	METH_NOARGS,
-	 PyDoc_STR("__getstate__() -> state")},
-
 	{"__reduce__", (PyCFunction)time_reduce,        METH_NOARGS,
 	 PyDoc_STR("__reduce__() -> (cls, state)")},
 
@@ -4340,6 +4334,7 @@
 /* Let basestate be the non-tzinfo data string.
  * If tzinfo is None, this returns (basestate,), else (basestate, tzinfo).
  * So it's a tuple in any (non-error) case.
+ * __getstate__ isn't exposed.
  */
 static PyObject *
 datetime_getstate(PyDateTime_DateTime *self)
@@ -4431,9 +4426,6 @@
 	{"astimezone",  (PyCFunction)datetime_astimezone, METH_KEYWORDS,
 	 PyDoc_STR("tz -> convert to local time in new timezone tz\n")},
 
-	{"__getstate__", (PyCFunction)datetime_getstate, METH_NOARGS,
-	 PyDoc_STR("__getstate__() -> state")},
-
 	{"__reduce__", (PyCFunction)datetime_reduce,     METH_NOARGS,
 	 PyDoc_STR("__reduce__() -> (cls, state)")},
 
@@ -4530,46 +4522,6 @@
 	if (PyType_Ready(&PyDateTime_TZInfoType) < 0)
 		return;
 
-	/* Make __getnewargs__ a true alias for __getstate__ */
-	{
-		PyObject *d, *f;
-
-		d = PyDateTime_DateType.tp_dict;
-		f = PyDict_GetItemString(d, "__getstate__");
-		if (f != NULL) {
-			if (PyDict_SetItemString(d, "__getnewargs__", f) < 0)
-				return;
-		}
-
-		d = PyDateTime_DateTimeType.tp_dict;
-		f = PyDict_GetItemString(d, "__getstate__");
-		if (f != NULL) {
-			if (PyDict_SetItemString(d, "__getnewargs__", f) < 0)
-				return;
-		}
-
-		d = PyDateTime_DeltaType.tp_dict;
-		f = PyDict_GetItemString(d, "__getstate__");
-		if (f != NULL) {
-			if (PyDict_SetItemString(d, "__getnewargs__", f) < 0)
-				return;
-		}
-
-		d = PyDateTime_TimeType.tp_dict;
-		f = PyDict_GetItemString(d, "__getstate__");
-		if (f != NULL) {
-			if (PyDict_SetItemString(d, "__getnewargs__", f) < 0)
-				return;
-		}
-
-		d = PyDateTime_TZInfoType.tp_dict;
-		f = PyDict_GetItemString(d, "__getstate__");
-		if (f != NULL) {
-			if (PyDict_SetItemString(d, "__getnewargs__", f) < 0)
-				return;
-		}
-	}
-
 	/* timedelta values */
 	d = PyDateTime_DeltaType.tp_dict;
 
