- PyEval_GetFrame() is now declared to return a PyFrameObject *
  instead of a plain PyObject *.  (SF patch #686601 by Ben Laurie.)
diff --git a/Include/ceval.h b/Include/ceval.h
index 9bb145d..8d0ca9e 100644
--- a/Include/ceval.h
+++ b/Include/ceval.h
@@ -25,11 +25,13 @@
 PyAPI_FUNC(void) PyEval_SetProfile(Py_tracefunc, PyObject *);
 PyAPI_FUNC(void) PyEval_SetTrace(Py_tracefunc, PyObject *);
 
+struct _frame; /* Avoid including frameobject.h */
+
 PyAPI_FUNC(PyObject *) PyEval_GetBuiltins(void);
 PyAPI_FUNC(PyObject *) PyEval_GetGlobals(void);
 PyAPI_FUNC(PyObject *) PyEval_GetLocals(void);
 PyAPI_FUNC(PyObject *) PyEval_GetOwner(void);
-PyAPI_FUNC(PyObject *) PyEval_GetFrame(void);
+PyAPI_FUNC(struct _frame *) PyEval_GetFrame(void);
 PyAPI_FUNC(int) PyEval_GetRestricted(void);
 
 /* Look at the current frame's (if any) code's co_flags, and turn on
diff --git a/Include/pystate.h b/Include/pystate.h
index d4233bf..3e5b5b4 100644
--- a/Include/pystate.h
+++ b/Include/pystate.h
@@ -107,8 +107,10 @@
 PyAPI_FUNC(PyThreadState *) PyInterpreterState_ThreadHead(PyInterpreterState *);
 PyAPI_FUNC(PyThreadState *) PyThreadState_Next(PyThreadState *);
 
+typedef struct _frame *(*PyThreadFrameGetter)(PyThreadState *self_);
+
 /* hook for PyEval_GetFrame(), requested for Psyco */
-PyAPI_DATA(unaryfunc) _PyThreadState_GetFrame;
+PyAPI_DATA(PyThreadFrameGetter) _PyThreadState_GetFrame;
 
 #ifdef __cplusplus
 }