Remove PyArg_Parse usage from time module.  (An extra set of eyeballs on
this would be nice.  I'm a little rusty.)
diff --git a/Include/structseq.h b/Include/structseq.h
index e662916..a482bd8 100644
--- a/Include/structseq.h
+++ b/Include/structseq.h
@@ -35,6 +35,10 @@
 #define PyStructSequence_SET_ITEM(op, i, v) \
 	(((PyStructSequence *)(op))->ob_item[i] = v)
 
+#define PyStructSequence_GET_ITEM(op, i) \
+	(((PyStructSequence *)(op))->ob_item[i])
+
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/Modules/timemodule.c b/Modules/timemodule.c
index 8ce6667..c7acf3a 100644
--- a/Modules/timemodule.c
+++ b/Modules/timemodule.c
@@ -255,6 +255,29 @@
 }
 
 static PyObject *
+structtime_totuple(PyObject *t)
+{
+	PyObject *x = NULL;
+	unsigned int i;
+	PyObject *v = PyTuple_New(9);
+	if (v == NULL)
+		return NULL;
+
+	for (i=0; i<9; i++) {
+		x = PyStructSequence_GET_ITEM(t, i);
+		Py_INCREF(x);
+		PyTuple_SET_ITEM(v, i, x);
+	}
+
+	if (PyErr_Occurred()) {
+		Py_XDECREF(v);
+		return NULL;
+	}
+
+	return v;
+}
+
+static PyObject *
 time_convert(double when, struct tm * (*function)(const time_t *))
 {
 	struct tm *p;
@@ -332,18 +355,36 @@
 {
 	int y;
 	memset((void *) p, '\0', sizeof(struct tm));
+	PyObject *t = NULL;
 
-	if (!PyArg_Parse(args, "(iiiiiiiii)",
-			 &y,
-			 &p->tm_mon,
-			 &p->tm_mday,
-			 &p->tm_hour,
-			 &p->tm_min,
-			 &p->tm_sec,
-			 &p->tm_wday,
-			 &p->tm_yday,
-			 &p->tm_isdst))
+	if (PyTuple_Check(args)) {
+		t = args;
+		Py_INCREF(t);
+	}
+	else if (Py_Type(args) == &StructTimeType) {
+		t = structtime_totuple(args);
+	}
+	else {
+		PyErr_SetString(PyExc_TypeError,
+				"Tuple or struct_time argument required");
 		return 0;
+	}
+
+	if (t == NULL || !PyArg_ParseTuple(t, "iiiiiiiii",
+					   &y,
+					   &p->tm_mon,
+					   &p->tm_mday,
+					   &p->tm_hour,
+					   &p->tm_min,
+					   &p->tm_sec,
+					   &p->tm_wday,
+					   &p->tm_yday,
+					   &p->tm_isdst)) {
+		Py_XDECREF(t);
+		return 0;
+	}
+	Py_DECREF(t);
+
 	if (y < 1900) {
 		PyObject *accept = PyDict_GetItemString(moddict,
 							"accept2dyear");