diff --git a/Include/cStringIO.h b/Include/cStringIO.h
index dae31bb..5fd9941 100644
--- a/Include/cStringIO.h
+++ b/Include/cStringIO.h
@@ -70,8 +70,11 @@
   This would typically be done in your init function.
 
   $Log$
-  Revision 2.2  1997/01/06 22:50:12  guido
-  Jim's latest version
+  Revision 2.3  1997/04/09 17:34:28  guido
+  Changed the way the C API was exported.  Jim Fulton.
+
+  Revision 1.2  1997/01/27 14:13:05  jim
+  Changed the way the C API was exported.
 
   Revision 1.1  1997/01/02 15:18:36  chris
   initial version
@@ -81,54 +84,59 @@
 
 /* Basic fuctions to manipulate cStringIO objects from C */
 
-/* Read a string.  If the last argument is -1, the remainder will be read. */
-static int(*PycStringIO_cread)(PyObject *, char **, int)=NULL;
+static struct PycStringIO_CAPI {
+  
+  /* Read a string.  If the last argument is -1, the remainder will be read. */
+  int(*cread)(PyObject *, char **, int);
 
-/* Read a line */
-static int(*PycStringIO_creadline)(PyObject *, char **)=NULL;
+  /* Read a line */
+  int(*creadline)(PyObject *, char **);
 
-/* Write a string */
-static int(*PycStringIO_cwrite)(PyObject *, char *, int)=NULL;
+  /* Write a string */
+  int(*cwrite)(PyObject *, char *, int);
 
-/* Get the cStringIO object as a Python string */
-static PyObject *(*PycStringIO_cgetvalue)(PyObject *)=NULL;
+  /* Get the cStringIO object as a Python string */
+  PyObject *(*cgetvalue)(PyObject *);
 
-/* Create a new output object */
-static PyObject *(*PycStringIO_NewOutput)(int)=NULL;
+  /* Create a new output object */
+  PyObject *(*NewOutput)(int);
 
-/* Create an input object from a Python string */
-static PyObject *(*PycStringIO_NewInput)(PyObject *)=NULL;
+  /* Create an input object from a Python string */
+  PyObject *(*NewInput)(PyObject *);
 
-/* The Python types for cStringIO input and output objects.
-   Note that you can do input on an output object.
-*/
-static PyObject *PycStringIO_InputType=NULL, *PycStringIO_OutputType=NULL;
+  /* The Python types for cStringIO input and output objects.
+     Note that you can do input on an output object.
+     */
+  PyTypeObject *InputType, *OutputType;
+
+} * PycStringIO = NULL;
 
 /* These can be used to test if you have one */
 #define PycStringIO_InputCheck(O) \
-  ((O)->ob_type==(PyTypeObject*)PycStringIO_InputType)
+  ((O)->ob_type==PycStringIO->InputType)
 #define PycStringIO_OutputCheck(O) \
-  ((O)->ob_type==(PyTypeObject*)PycStringIO_OutputType)
+  ((O)->ob_type==PycStringIO->OutputType)
 
-/* The following is used to implement PycString_IMPORT: */
-static PyObject *PycStringIO_Module=NULL, *PycStringIO_CObject=NULL;
+static void *
+PyCObject_Import(char *module_name, char *name)
+{
+  PyObject *m, *c;
+  void *r=NULL;
+  
+  if(m=PyImport_ImportModule(module_name))
+    {
+      if(c=PyObject_GetAttrString(m,name))
+	{
+	  r=PyCObject_AsVoidPtr(c);
+	  Py_DECREF(c);
+	}
+      Py_DECREF(m);
+    }
 
-#define IMPORT_C_OBJECT(N) \
-  if((PycStringIO_CObject=PyObject_GetAttrString(PycStringIO_Module, #N))) { \
-    PycStringIO_ ## N = PyCObject_AsVoidPtr(PycStringIO_CObject); \
-    Py_DECREF(PycStringIO_CObject); }
+  return r;
+}
 
 #define PycString_IMPORT \
-  if((PycStringIO_Module=PyImport_ImportModule("cStringIO"))) { \
-    PycStringIO_InputType=PyObject_GetAttrString(PycStringIO_Module, \
-						 "InputType"); \
-    PycStringIO_OutputType=PyObject_GetAttrString(PycStringIO_Module, \
-						  "OutputType"); \
-    IMPORT_C_OBJECT(cread); \
-    IMPORT_C_OBJECT(creadline); \
-    IMPORT_C_OBJECT(cwrite); \
-    IMPORT_C_OBJECT(NewInput); \
-    IMPORT_C_OBJECT(NewOutput); \
-    IMPORT_C_OBJECT(cgetvalue);   }
+  PycStringIO=PyCObject_Import("cStringIO", "cStringIO_CAPI")
 
 #endif /* CSTRINGIO_INCLUDED */
