diff --git a/Doc/api.tex b/Doc/api.tex
index 7f44500..352dc00 100644
--- a/Doc/api.tex
+++ b/Doc/api.tex
@@ -980,7 +980,8 @@
 a new one and insert in in the modules dictionary.  Because the former
 action is most common, this does not return a new reference, and you
 do not own the returned reference.  Return \NULL{} with an
-exception set on failure.
+exception set on failure.  NOTE: this function returns
+a ``borrowed'' reference.  
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyImport_ExecCodeModule}{char *name, PyObject *co}
@@ -1697,7 +1698,8 @@
 \label{noneObject}
 
 \begin{cvardesc}{PyObject *}{Py_None}
-XXX macro
+The Python \code{None} object, denoting lack of value.  This object has
+no methods.
 \end{cvardesc}
 
 
@@ -1753,32 +1755,53 @@
 \begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **string,
                                                PyObject *newpart}
 Creates a new string object in \var{*string} containing the contents
-of \var{newpart} appended to \var{string}.  --WHAT IS THE 
-DIFFERENCE BETWEEN THIS AND PLAIN CONCAT?--
+of \var{newpart} appended to \var{string}.  This version decrements
+the reference count of \var{newpart}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **string, int newsize}
+A way to resize a string object even though it is ``immutable''.  
+Only use this to build up a brand new string object; don't use this if
+the string may already be known in other parts of the code.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyString_Format}{PyObject *format,
                                               PyObject *args}
+Returns a new string object from \var{format} and \var{args}.  Analogous
+to \code{\var{format} \% \var{args}}.  The \var{args} argument must be
+a tuple.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **string}
+Intern the argument \var{*string} in place.  The argument must be the
+address of a pointer variable pointing to a Python string object.
+If there is an existing interned string that is the same as
+\var{*string}, it sets \var{*string} to it (decrementing the reference 
+count of the old string object and incrementing the reference count of
+the interned string object), otherwise it leaves \var{*string} alone
+and interns it (incrementing its reference count).  (Clarification:
+even though there is a lot of talk about reference counts, think of
+this function as reference-count-neutral; you owned the object after
+the call if and only if you own it after the call.)
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyString_InternFromString}{const char *v}
+A combination of \code{PyString_FromString()} and
+\code{PyString_InternInPlace()}, returning either a new string object
+that has been interned, or a new (``owned'') reference to an earlier
+interned string object with the same value.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{char*}{PyString_AS_STRING}{PyObject *string}
-
+Macro form of \code{PyString_AsString} but without error checking.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyObject *string}
-
+Macro form of \code{PyString_GetSize} but without error checking.
 \end{cfuncdesc}
 
 
+
 \subsection{Tuple Objects}
 \label{tupleObjects}
 
@@ -1806,7 +1829,8 @@
 \begin{cfuncdesc}{PyObject*}{PyTuple_GetItem}{PyTupleObject *p, int pos}
 Returns the object at position \var{pos} in the tuple pointed
 to by \var{p}.  If \var{pos} is out of bounds, returns \NULL{} and
-raises an \exception{IndexError} exception.
+sets an \exception{IndexError} exception.  NOTE: this function returns
+a ``borrowed'' reference.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
@@ -1873,7 +1897,10 @@
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_GetItem}{PyObject *list, int index}
-Returns the item in \var{list} at index \var{index}.
+Returns the object at position \var{pos} in the list pointed
+to by \var{p}.  If \var{pos} is out of bounds, returns \NULL{} and
+sets an \exception{IndexError} exception.  NOTE: this function returns
+a ``borrowed'' reference.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *list, int index,
@@ -1882,36 +1909,40 @@
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_Insert}{PyObject *list, int index,
-                                      PyObject *index}
-Inserts the item \var{item} into list \var{list} in front of index \var{index}
-and returns true if successful.
-For example: 
-\begin{verbatim}
-PyList_Insert(list, 0, object);
-\end{verbatim}
+                                      PyObject *item}
+Inserts the item \var{item} into list \var{list} in front of index
+\var{index}.  Returns 0 if successful; returns -1 and sets an
+exception if unsuccessful.  Analogous to \code{list.insert(index, item)}.
 \end{cfuncdesc}
-would insert \var{object} at the front of the list.
 
 \begin{cfuncdesc}{int}{PyList_Append}{PyObject *list, PyObject *item}
-Appends the object \var{item} at the end of list \var{list}.
+Appends the object \var{item} at the end of list \var{list}.  Returns
+0 if successful; returns -1 and sets an exception if unsuccessful.
+Analogous to \code{list.append(item)}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_GetSlice}{PyObject *list,
                                               int low, int high}
 Returns a list of the objects in \var{list} containing the objects 
-\emph{between} \var{low} and \var{high}.  Analogous to \var{list[low:high]}.
+\emph{between} \var{low} and \var{high}.  Returns NULL and sets an
+exception if unsuccessful.
+Analogous to \code{list[low:high]}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *list,
                                         int low, int high,
                                         PyObject *itemlist}
+Sets the slice of \var{list} between \var{low} and \var{high} to the contents
+of \var{itemlist}.  Analogous to \code{list[low:high]=itemlist}.  Returns 0
+on success, -1 on failure.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_Sort}{PyObject *list}
-
+Sorts the items of \var{list} in place.  Returns 0 on success, -1 on failure.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *list}
+Reverses the items of \var{list} in place.  Returns 0 on success, -1 on failure.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_AsTuple}{PyObject *list}
@@ -1919,9 +1950,11 @@
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_GET_ITEM}{PyObject *list, int i}
+Macro form of \code{PyList_GetItem} without error checking.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
+Macro form of \code{PyList_GetSize} without error checking.
 \end{cfuncdesc}
 
 
@@ -1979,29 +2012,31 @@
 
 \begin{cfuncdesc}{PyObject*}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
 Returns the object from dictionary \var{p} which has a key
-\var{key}.  Returns \NULL{} if the key \var{key} is not present.
+\var{key}.  Returns \NULL{} if the key \var{key} is not present, but
+without (!) setting an exception.  NOTE:  this function returns a
+``borrowed'' reference.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_GetItemString}{PyDictObject *p, char *key}
-Does the same, but \var{key} is specified as a
-\code{char *}, rather than a \code{PyObject *}.
+This is the same as \code{PyDict_GetItem()}, but \var{key} is
+specified as a \code{char *}, rather than a \code{PyObject *}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_Items}{PyDictObject *p}
 Returns a \code{PyListObject} containing all the items 
-from the dictionary, as in the mapping method \method{items()} (see
+from the dictionary, as in the dictinoary method \method{items()} (see
 the \emph{Python Library Reference}).
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_Keys}{PyDictObject *p}
 Returns a \code{PyListObject} containing all the keys 
-from the dictionary, as in the mapping method \method{keys()} (see the
+from the dictionary, as in the dictionary method \method{keys()} (see the
 \emph{Python Library Reference}).
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_Values}{PyDictObject *p}
 Returns a \code{PyListObject} containing all the values 
-from the dictionary \var{p}, as in the mapping method
+from the dictionary \var{p}, as in the dictionary method
 \method{values()} (see the \emph{Python Library Reference}).
 \end{cfuncdesc}
 
@@ -2093,16 +2128,16 @@
 
 \begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *pylong}
 Returns a \C{} \code{long} representation of the contents of \var{pylong}.  
-WHAT HAPPENS IF \var{pylong} > MAXLONG?
+WHAT HAPPENS IF \var{pylong} is greater than \code{LONG_MAX}?
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject *pylong}
 Returns a \C{} \code{unsigned long} representation of the contents of 
-\var{pylong}.  WHAT HAPPENS IF \var{pylong} > MAXLONG?
+\var{pylong}.  WHAT HAPPENS IF \var{pylong} is greater than \code{ULONG_MAX}?
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *pylong}
-Returns a \C{} \code{double} representation of teh contents of \var{pylong}.
+Returns a \C{} \code{double} representation of the contents of \var{pylong}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyLong_FromString}{char *str, char **pend,
@@ -2278,8 +2313,37 @@
 \subsection{CObjects}
 \label{cObjects}
 
-XXX
+\begin{ctypedesc}{PyCObject}
+This subtype of \code{PyObject} represents an opaque value, useful for
+\C{} extension modules who need to pass an opaque value (as a
+\code{void *} pointer) through Python code to other \C{} code.  It is
+often used to make a C function pointer defined in one module
+available to other modules, so the regular import mechanism can be
+used to access C APIs defined in dynamically loaded modules.
+\end{ctypedesc}
 
+\begin{cfuncdesc}{PyObject *}{PyCObject_FromVoidPtr}{void* cobj, 
+	void (*destr)(void *)}
+Creates a \code{PyCObject} from the \code{void *} \var{cobj}.  The \var{destr} 
+function will be called when the object is reclaimed.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyCObject_FromVoidPtrAndDesc}{void* cobj,
+	void* desc, void (*destr)(void *, void *) }
+Creates a \code{PyCObject} from the \code{void *} \var{cobj}.  The \var{destr} 
+function will be called when the object is reclaimed.  The \var{desc} argument
+can be used to pass extra callback data for the destructor function.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void *}{PyCObject_AsVoidPtr}{PyObject* self}
+Returns the object \code{void *} that the \code{PyCObject} \var{self}
+was created with.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void *}{PyCObject_GetDesc}{PyObject* self}
+Returns the description \code{void *} that the \code{PyCObject}
+\var{self} was created with.
+\end{cfuncdesc}
 
 \chapter{Initialization, Finalization, and Threads}
 \label{initialization}
diff --git a/Doc/api/api.tex b/Doc/api/api.tex
index 7f44500..352dc00 100644
--- a/Doc/api/api.tex
+++ b/Doc/api/api.tex
@@ -980,7 +980,8 @@
 a new one and insert in in the modules dictionary.  Because the former
 action is most common, this does not return a new reference, and you
 do not own the returned reference.  Return \NULL{} with an
-exception set on failure.
+exception set on failure.  NOTE: this function returns
+a ``borrowed'' reference.  
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyImport_ExecCodeModule}{char *name, PyObject *co}
@@ -1697,7 +1698,8 @@
 \label{noneObject}
 
 \begin{cvardesc}{PyObject *}{Py_None}
-XXX macro
+The Python \code{None} object, denoting lack of value.  This object has
+no methods.
 \end{cvardesc}
 
 
@@ -1753,32 +1755,53 @@
 \begin{cfuncdesc}{void}{PyString_ConcatAndDel}{PyObject **string,
                                                PyObject *newpart}
 Creates a new string object in \var{*string} containing the contents
-of \var{newpart} appended to \var{string}.  --WHAT IS THE 
-DIFFERENCE BETWEEN THIS AND PLAIN CONCAT?--
+of \var{newpart} appended to \var{string}.  This version decrements
+the reference count of \var{newpart}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{_PyString_Resize}{PyObject **string, int newsize}
+A way to resize a string object even though it is ``immutable''.  
+Only use this to build up a brand new string object; don't use this if
+the string may already be known in other parts of the code.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyString_Format}{PyObject *format,
                                               PyObject *args}
+Returns a new string object from \var{format} and \var{args}.  Analogous
+to \code{\var{format} \% \var{args}}.  The \var{args} argument must be
+a tuple.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{void}{PyString_InternInPlace}{PyObject **string}
+Intern the argument \var{*string} in place.  The argument must be the
+address of a pointer variable pointing to a Python string object.
+If there is an existing interned string that is the same as
+\var{*string}, it sets \var{*string} to it (decrementing the reference 
+count of the old string object and incrementing the reference count of
+the interned string object), otherwise it leaves \var{*string} alone
+and interns it (incrementing its reference count).  (Clarification:
+even though there is a lot of talk about reference counts, think of
+this function as reference-count-neutral; you owned the object after
+the call if and only if you own it after the call.)
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyString_InternFromString}{const char *v}
+A combination of \code{PyString_FromString()} and
+\code{PyString_InternInPlace()}, returning either a new string object
+that has been interned, or a new (``owned'') reference to an earlier
+interned string object with the same value.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{char*}{PyString_AS_STRING}{PyObject *string}
-
+Macro form of \code{PyString_AsString} but without error checking.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyString_GET_SIZE}{PyObject *string}
-
+Macro form of \code{PyString_GetSize} but without error checking.
 \end{cfuncdesc}
 
 
+
 \subsection{Tuple Objects}
 \label{tupleObjects}
 
@@ -1806,7 +1829,8 @@
 \begin{cfuncdesc}{PyObject*}{PyTuple_GetItem}{PyTupleObject *p, int pos}
 Returns the object at position \var{pos} in the tuple pointed
 to by \var{p}.  If \var{pos} is out of bounds, returns \NULL{} and
-raises an \exception{IndexError} exception.
+sets an \exception{IndexError} exception.  NOTE: this function returns
+a ``borrowed'' reference.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyTuple_GET_ITEM}{PyTupleObject *p, int pos}
@@ -1873,7 +1897,10 @@
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_GetItem}{PyObject *list, int index}
-Returns the item in \var{list} at index \var{index}.
+Returns the object at position \var{pos} in the list pointed
+to by \var{p}.  If \var{pos} is out of bounds, returns \NULL{} and
+sets an \exception{IndexError} exception.  NOTE: this function returns
+a ``borrowed'' reference.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_SetItem}{PyObject *list, int index,
@@ -1882,36 +1909,40 @@
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_Insert}{PyObject *list, int index,
-                                      PyObject *index}
-Inserts the item \var{item} into list \var{list} in front of index \var{index}
-and returns true if successful.
-For example: 
-\begin{verbatim}
-PyList_Insert(list, 0, object);
-\end{verbatim}
+                                      PyObject *item}
+Inserts the item \var{item} into list \var{list} in front of index
+\var{index}.  Returns 0 if successful; returns -1 and sets an
+exception if unsuccessful.  Analogous to \code{list.insert(index, item)}.
 \end{cfuncdesc}
-would insert \var{object} at the front of the list.
 
 \begin{cfuncdesc}{int}{PyList_Append}{PyObject *list, PyObject *item}
-Appends the object \var{item} at the end of list \var{list}.
+Appends the object \var{item} at the end of list \var{list}.  Returns
+0 if successful; returns -1 and sets an exception if unsuccessful.
+Analogous to \code{list.append(item)}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_GetSlice}{PyObject *list,
                                               int low, int high}
 Returns a list of the objects in \var{list} containing the objects 
-\emph{between} \var{low} and \var{high}.  Analogous to \var{list[low:high]}.
+\emph{between} \var{low} and \var{high}.  Returns NULL and sets an
+exception if unsuccessful.
+Analogous to \code{list[low:high]}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_SetSlice}{PyObject *list,
                                         int low, int high,
                                         PyObject *itemlist}
+Sets the slice of \var{list} between \var{low} and \var{high} to the contents
+of \var{itemlist}.  Analogous to \code{list[low:high]=itemlist}.  Returns 0
+on success, -1 on failure.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_Sort}{PyObject *list}
-
+Sorts the items of \var{list} in place.  Returns 0 on success, -1 on failure.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_Reverse}{PyObject *list}
+Reverses the items of \var{list} in place.  Returns 0 on success, -1 on failure.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_AsTuple}{PyObject *list}
@@ -1919,9 +1950,11 @@
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyList_GET_ITEM}{PyObject *list, int i}
+Macro form of \code{PyList_GetItem} without error checking.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{int}{PyList_GET_SIZE}{PyObject *list}
+Macro form of \code{PyList_GetSize} without error checking.
 \end{cfuncdesc}
 
 
@@ -1979,29 +2012,31 @@
 
 \begin{cfuncdesc}{PyObject*}{PyDict_GetItem}{PyDictObject *p, PyObject *key}
 Returns the object from dictionary \var{p} which has a key
-\var{key}.  Returns \NULL{} if the key \var{key} is not present.
+\var{key}.  Returns \NULL{} if the key \var{key} is not present, but
+without (!) setting an exception.  NOTE:  this function returns a
+``borrowed'' reference.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_GetItemString}{PyDictObject *p, char *key}
-Does the same, but \var{key} is specified as a
-\code{char *}, rather than a \code{PyObject *}.
+This is the same as \code{PyDict_GetItem()}, but \var{key} is
+specified as a \code{char *}, rather than a \code{PyObject *}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_Items}{PyDictObject *p}
 Returns a \code{PyListObject} containing all the items 
-from the dictionary, as in the mapping method \method{items()} (see
+from the dictionary, as in the dictinoary method \method{items()} (see
 the \emph{Python Library Reference}).
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_Keys}{PyDictObject *p}
 Returns a \code{PyListObject} containing all the keys 
-from the dictionary, as in the mapping method \method{keys()} (see the
+from the dictionary, as in the dictionary method \method{keys()} (see the
 \emph{Python Library Reference}).
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyDict_Values}{PyDictObject *p}
 Returns a \code{PyListObject} containing all the values 
-from the dictionary \var{p}, as in the mapping method
+from the dictionary \var{p}, as in the dictionary method
 \method{values()} (see the \emph{Python Library Reference}).
 \end{cfuncdesc}
 
@@ -2093,16 +2128,16 @@
 
 \begin{cfuncdesc}{long}{PyLong_AsLong}{PyObject *pylong}
 Returns a \C{} \code{long} representation of the contents of \var{pylong}.  
-WHAT HAPPENS IF \var{pylong} > MAXLONG?
+WHAT HAPPENS IF \var{pylong} is greater than \code{LONG_MAX}?
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{unsigned long}{PyLong_AsUnsignedLong}{PyObject *pylong}
 Returns a \C{} \code{unsigned long} representation of the contents of 
-\var{pylong}.  WHAT HAPPENS IF \var{pylong} > MAXLONG?
+\var{pylong}.  WHAT HAPPENS IF \var{pylong} is greater than \code{ULONG_MAX}?
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{double}{PyLong_AsDouble}{PyObject *pylong}
-Returns a \C{} \code{double} representation of teh contents of \var{pylong}.
+Returns a \C{} \code{double} representation of the contents of \var{pylong}.
 \end{cfuncdesc}
 
 \begin{cfuncdesc}{PyObject*}{PyLong_FromString}{char *str, char **pend,
@@ -2278,8 +2313,37 @@
 \subsection{CObjects}
 \label{cObjects}
 
-XXX
+\begin{ctypedesc}{PyCObject}
+This subtype of \code{PyObject} represents an opaque value, useful for
+\C{} extension modules who need to pass an opaque value (as a
+\code{void *} pointer) through Python code to other \C{} code.  It is
+often used to make a C function pointer defined in one module
+available to other modules, so the regular import mechanism can be
+used to access C APIs defined in dynamically loaded modules.
+\end{ctypedesc}
 
+\begin{cfuncdesc}{PyObject *}{PyCObject_FromVoidPtr}{void* cobj, 
+	void (*destr)(void *)}
+Creates a \code{PyCObject} from the \code{void *} \var{cobj}.  The \var{destr} 
+function will be called when the object is reclaimed.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{PyObject *}{PyCObject_FromVoidPtrAndDesc}{void* cobj,
+	void* desc, void (*destr)(void *, void *) }
+Creates a \code{PyCObject} from the \code{void *} \var{cobj}.  The \var{destr} 
+function will be called when the object is reclaimed.  The \var{desc} argument
+can be used to pass extra callback data for the destructor function.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void *}{PyCObject_AsVoidPtr}{PyObject* self}
+Returns the object \code{void *} that the \code{PyCObject} \var{self}
+was created with.
+\end{cfuncdesc}
+
+\begin{cfuncdesc}{void *}{PyCObject_GetDesc}{PyObject* self}
+Returns the description \code{void *} that the \code{PyCObject}
+\var{self} was created with.
+\end{cfuncdesc}
 
 \chapter{Initialization, Finalization, and Threads}
 \label{initialization}
