diff --git a/Modules/datetimemodule.c b/Modules/datetimemodule.c
index dede178..642c11f 100644
--- a/Modules/datetimemodule.c
+++ b/Modules/datetimemodule.c
@@ -621,7 +621,7 @@
 	assert(PyDateTimeTZ_Check(self));
 	assert(check_tzinfo_subclass(newtzinfo) >= 0);
 	Py_INCREF(newtzinfo);
-	Py_DECREF(((PyDateTime_DateTimeTZ *)self)->tzinfo);
+	Py_XDECREF(((PyDateTime_DateTimeTZ *)self)->tzinfo);
 	((PyDateTime_DateTimeTZ *)self)->tzinfo = newtzinfo;
 }
 
@@ -3233,8 +3233,6 @@
 	return NULL;
 }
 
-static PyObject *datetime_getstate(PyDateTime_DateTime *self);
-
 static long
 datetime_hash(PyDateTime_DateTime *self)
 {
@@ -3251,7 +3249,9 @@
 
 		/* Reduce this to a hash of another object. */
 		if (n == OFFSET_NAIVE)
-			temp = datetime_getstate(self);
+			temp = PyString_FromStringAndSize(
+					(char *)self->data,
+					_PyDateTime_DATETIME_DATASIZE);
 		else {
 			int days;
 			int seconds;
@@ -3350,34 +3350,6 @@
 			  Py_None);
 }
 
-/* Pickle support.  Quite a maze! */
-
-static PyObject *
-datetime_getstate(PyDateTime_DateTime *self)
-{
-	return PyString_FromStringAndSize((char *)self->data,
-					  _PyDateTime_DATETIME_DATASIZE);
-}
-
-static PyObject *
-datetime_setstate(PyDateTime_DateTime *self, PyObject *state)
-{
-	const int len = PyString_Size(state);
-	unsigned char *pdata = (unsigned char*)PyString_AsString(state);
-
-	if (! PyString_Check(state) ||
-	    len != _PyDateTime_DATETIME_DATASIZE) {
-		PyErr_SetString(PyExc_TypeError,
-				"bad argument to datetime.__setstate__");
-		return NULL;
-	}
-	memcpy(self->data, pdata, _PyDateTime_DATETIME_DATASIZE);
-	self->hashcode = -1;
-
-	Py_INCREF(Py_None);
-	return Py_None;
-}
-
 static PyMethodDef datetime_methods[] = {
 	/* Class methods: */
 	{"now",         (PyCFunction)datetime_now,
@@ -3428,11 +3400,6 @@
 	{"astimezone",  (PyCFunction)datetime_astimezone, METH_KEYWORDS,
 	 PyDoc_STR("tz -> datetimetz with same date & time, and tzinfo=tz\n")},
 
-	{"__setstate__", (PyCFunction)datetime_setstate, METH_O,
-	 PyDoc_STR("__setstate__(state)")},
-
-	{"__getstate__", (PyCFunction)datetime_getstate, METH_NOARGS,
-	 PyDoc_STR("__getstate__() -> state")},
 	{NULL,	NULL}
 };
 
@@ -3696,8 +3663,6 @@
 	return NULL;
 }
 
-static PyObject *time_getstate(PyDateTime_Time *self);
-
 static long
 time_hash(PyDateTime_Time *self)
 {
@@ -3713,7 +3678,8 @@
 
 		/* Reduce this to a hash of another object. */
 		if (offset == 0)
-			temp = time_getstate(self);
+			temp = PyString_FromStringAndSize((char *)self->data,
+						_PyDateTime_TIME_DATASIZE);
 		else {
 			int hour;
 			int minute;
@@ -3773,34 +3739,6 @@
 	       TIME_GET_MICROSECOND(self);
 }
 
-/* Pickle support.  Quite a maze! */
-
-static PyObject *
-time_getstate(PyDateTime_Time *self)
-{
-	return PyString_FromStringAndSize((char *)self->data,
-					  _PyDateTime_TIME_DATASIZE);
-}
-
-static PyObject *
-time_setstate(PyDateTime_Time *self, PyObject *state)
-{
-	const int len = PyString_Size(state);
-	unsigned char *pdata = (unsigned char*)PyString_AsString(state);
-
-	if (! PyString_Check(state) ||
-	    len != _PyDateTime_TIME_DATASIZE) {
-		PyErr_SetString(PyExc_TypeError,
-				"bad argument to time.__setstate__");
-		return NULL;
-	}
-	memcpy(self->data, pdata, _PyDateTime_TIME_DATASIZE);
-	self->hashcode = -1;
-
-	Py_INCREF(Py_None);
-	return Py_None;
-}
-
 static PyMethodDef time_methods[] = {
 	{"isoformat",   (PyCFunction)time_isoformat,	METH_KEYWORDS,
 	 PyDoc_STR("Return string in ISO 8601 format, HH:MM:SS[.mmmmmm].")},
@@ -3810,12 +3748,6 @@
 
 	{"replace",     (PyCFunction)time_replace,	METH_KEYWORDS,
 	 PyDoc_STR("Return datetime with new specified fields.")},
-
-	{"__setstate__", (PyCFunction)time_setstate,	METH_O,
-	 PyDoc_STR("__setstate__(state)")},
-
-	{"__getstate__", (PyCFunction)time_getstate,	METH_NOARGS,
-	 PyDoc_STR("__getstate__() -> state")},
 	{NULL,	NULL}
 };
 
@@ -4176,7 +4108,7 @@
  * Pickle support.  Quite a maze!
  */
 
-/* Let basestate be the state string returned by time_getstate.
+/* 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.
  */
@@ -4186,7 +4118,8 @@
 	PyObject *basestate;
 	PyObject *result = NULL;
 
-	basestate = time_getstate((PyDateTime_Time *)self);
+	basestate =  PyString_FromStringAndSize((char *)self->data,
+						_PyDateTime_TIME_DATASIZE);
 	if (basestate != NULL) {
 		if (self->tzinfo == Py_None)
 			result = Py_BuildValue("(O)", basestate);
@@ -4200,7 +4133,6 @@
 static PyObject *
 timetz_setstate(PyDateTime_TimeTZ *self, PyObject *state)
 {
-	PyObject *temp;
 	PyObject *basestate;
 	PyObject *tzinfo = Py_None;
 
@@ -4208,15 +4140,19 @@
 			       &PyString_Type, &basestate,
 			       &tzinfo))
 		return NULL;
-	temp = time_setstate((PyDateTime_Time *)self, basestate);
-	if (temp == NULL)
+	if (PyString_Size(basestate) !=  _PyDateTime_TIME_DATASIZE ||
+	    check_tzinfo_subclass(tzinfo) < 0) {
+		PyErr_SetString(PyExc_TypeError,
+				"bad argument to time.__setstate__");
 		return NULL;
-	Py_DECREF(temp);
-
+	}
+	memcpy((char *)self->data,
+	       PyString_AsString(basestate),
+	       _PyDateTime_TIME_DATASIZE);
+	self->hashcode = -1;
 	Py_INCREF(tzinfo);
 	Py_XDECREF(self->tzinfo);
 	self->tzinfo = tzinfo;
-
 	Py_INCREF(Py_None);
 	return Py_None;
 }
@@ -4864,7 +4800,10 @@
  * Pickle support.  Quite a maze!
  */
 
-/* Let basestate be the state string returned by datetime_getstate.
+
+/* Pickle support.  Quite a maze! */
+
+/* Let basestate be the state string returned by the date & time fields.
  * If tzinfo is None, this returns (basestate,), else (basestate, tzinfo).
  * So it's a tuple in any (non-error) case.
  */
@@ -4874,7 +4813,8 @@
 	PyObject *basestate;
 	PyObject *result = NULL;
 
-	basestate = datetime_getstate((PyDateTime_DateTime *)self);
+	basestate = PyString_FromStringAndSize((char *)self->data,
+					  _PyDateTime_DATETIME_DATASIZE);
 	if (basestate != NULL) {
 		if (self->tzinfo == Py_None)
 			result = Py_BuildValue("(O)", basestate);
@@ -4888,7 +4828,6 @@
 static PyObject *
 datetimetz_setstate(PyDateTime_DateTimeTZ *self, PyObject *state)
 {
-	PyObject *temp;
 	PyObject *basestate;
 	PyObject *tzinfo = Py_None;
 
@@ -4896,15 +4835,17 @@
 			       &PyString_Type, &basestate,
 			       &tzinfo))
 		return NULL;
-	temp = datetime_setstate((PyDateTime_DateTime *)self, basestate);
-	if (temp == NULL)
+	if (PyString_Size(basestate) !=  _PyDateTime_DATETIME_DATASIZE ||
+	    check_tzinfo_subclass(tzinfo) < 0) {
+		PyErr_SetString(PyExc_TypeError,
+				"bad argument to datetime.__setstate__");
 		return NULL;
-	Py_DECREF(temp);
-
-	Py_INCREF(tzinfo);
-	Py_XDECREF(self->tzinfo);
-	self->tzinfo = tzinfo;
-
+	}
+	memcpy((char *)self->data,
+	       PyString_AsString(basestate),
+	       _PyDateTime_DATETIME_DATASIZE);
+	self->hashcode = -1;
+	replace_tzinfo((PyObject *)self, tzinfo);
 	Py_INCREF(Py_None);
 	return Py_None;
 }
