diff --git a/Doc/lib/libcsv.tex b/Doc/lib/libcsv.tex
index 7de9056..f30aefe 100644
--- a/Doc/lib/libcsv.tex
+++ b/Doc/lib/libcsv.tex
@@ -30,10 +30,12 @@
 write sequences.  Programmers can also read and write data in dictionary
 form using the \class{DictReader} and \class{DictWriter} classes.
 
-\note{The first version of the \module{csv} module doesn't support Unicode
-input.  Also, there are currently some issues regarding \ASCII{} NUL
-characters.  Accordingly, all input should generally be printable \ASCII{}
-to be safe.  These restrictions will be removed in the future.}
+\begin{notice}
+  This version of the \module{csv} module doesn't support Unicode
+  input.  Also, there are currently some issues regarding \ASCII{} NUL
+  characters.  Accordingly, all input should generally be printable
+  \ASCII{} to be safe.  These restrictions will be removed in the future.
+\end{notice}
 
 \begin{seealso}
 %  \seemodule{array}{Arrays of uniformly types numeric values.}
@@ -45,7 +47,6 @@
 
 \subsection{Module Contents}
 
-
 The \module{csv} module defines the following functions:
 
 \begin{funcdesc}{reader}{csvfile\optional{,
@@ -112,8 +113,8 @@
 The \module{csv} module defines the following classes:
 
 \begin{classdesc}{DictReader}{csvfile, fieldnames\optional{,
-                              restkey=\code{None}\optional{,
-			      restval=\code{None}\optional{,
+                              restkey=\constant{None}\optional{,
+			      restval=\constant{None}\optional{,
                               dialect=\code{'excel'}\optional{,
 			      fmtparam}}}}}
 Create an object which operates like a regular reader but maps the
@@ -145,53 +146,32 @@
 parameters are interpreted as for regular writers.
 \end{classdesc}
 
-
 \begin{classdesc*}{Dialect}{}
 The \class{Dialect} class is a container class relied on primarily for its
 attributes, which are used to define the parameters for a specific
-\class{reader} or \class{writer} instance.  Dialect objects support the
-following data attributes:
-
-\begin{memberdesc}[string]{delimiter}
-A one-character string used to separate fields.  It defaults to \code{","}.
-\end{memberdesc}
-
-\begin{memberdesc}[boolean]{doublequote}
-Controls how instances of \var{quotechar} appearing inside a field should be
-themselves be quoted.  When \constant{True}, the character is doubledd.
-When \constant{False}, the \var{escapechar} must be a one-character string
-which is used as a prefix to the \var{quotechar}.  It defaults to
-\constant{True}.
-\end{memberdesc}
-
-\begin{memberdesc}{escapechar}
-A one-character string used to escape the \var{delimiter} if \var{quoting}
-is set to \constant{QUOTE_NONE}.  It defaults to \constant{None}.
-\end{memberdesc}
-
-\begin{memberdesc}[string]{lineterminator}
-The string used to terminate lines in the CSV file.  It defaults to
-\code{"\e r\e n"}.
-\end{memberdesc}
-
-\begin{memberdesc}[string]{quotechar}
-A one-character string used to quote elements containing the \var{delimiter}
-or which start with the \var{quotechar}.  It defaults to \code{'"'}.
-\end{memberdesc}
-
-\begin{memberdesc}[integer]{quoting}
-Controls when quotes should be generated by the writer.  It can take on any
-of the \code{QUOTE_*} constants defined below and defaults to
-\constant{QUOTE_MINIMAL}. 
-\end{memberdesc}
-
-\begin{memberdesc}[boolean]{skipinitialspace}
-When \constant{True}, whitespace immediately following the \var{delimiter}
-is ignored.  The default is \constant{False}.
-\end{memberdesc}
-
+\class{reader} or \class{writer} instance.
 \end{classdesc*}
 
+\begin{classdesc}{Sniffer}{\optional{sample=16384}}
+The \class{Sniffer} class is used to deduce the format of a CSV file.  The
+optional \var{sample} argument to the constructor specifies the number of
+bytes to use when determining Dialect parameters.
+\end{classdesc}
+
+The \class{Sniffer} class provides a single method:
+
+\begin{methoddesc}{sniff}{fileobj}
+Analyze the next chunk of \var{fileobj} and return a \class{Dialect} subclass
+reflecting the parameters found.
+\end{methoddesc}
+
+\begin{methoddesc}{has_header}{sample}
+Analyze the sample text (presumed to be in CSV format) and return
+\constant{True} if the first row appears to be a series of column
+headers.
+\end{methoddesc}
+
+
 The \module{csv} module defines the following constants:
 
 \begin{datadesc}{QUOTE_ALWAYS}
@@ -223,7 +203,7 @@
 \end{excdesc}
 
 
-\subsection{Dialects and Formatting Parameters\label{fmt-params}}
+\subsection{Dialects and Formatting Parameters\label{csv-fmt-params}}
 
 To make it easier to specify the format of input and output records,
 specific formatting parameters are grouped together into dialects.  A
@@ -235,13 +215,53 @@
 individual formatting parameters, which have the same names as the
 attributes defined above for the \class{Dialect} class.
 
+Dialects support the following attributes:
+
+\begin{memberdesc}[Dialect]{delimiter}
+A one-character string used to separate fields.  It defaults to \code{','}.
+\end{memberdesc}
+
+\begin{memberdesc}[Dialect]{doublequote}
+Controls how instances of \var{quotechar} appearing inside a field should be
+themselves be quoted.  When \constant{True}, the character is doubledd.
+When \constant{False}, the \var{escapechar} must be a one-character string
+which is used as a prefix to the \var{quotechar}.  It defaults to
+\constant{True}.
+\end{memberdesc}
+
+\begin{memberdesc}[Dialect]{escapechar}
+A one-character string used to escape the \var{delimiter} if \var{quoting}
+is set to \constant{QUOTE_NONE}.  It defaults to \constant{None}.
+\end{memberdesc}
+
+\begin{memberdesc}[Dialect]{lineterminator}
+The string used to terminate lines in the CSV file.  It defaults to
+\code{'\e r\e n'}.
+\end{memberdesc}
+
+\begin{memberdesc}[Dialect]{quotechar}
+A one-character string used to quote elements containing the \var{delimiter}
+or which start with the \var{quotechar}.  It defaults to \code{'"'}.
+\end{memberdesc}
+
+\begin{memberdesc}[Dialect]{quoting}
+Controls when quotes should be generated by the writer.  It can take on any
+of the \constant{QUOTE_*} constants defined below and defaults to
+\constant{QUOTE_MINIMAL}. 
+\end{memberdesc}
+
+\begin{memberdesc}[Dialect]{skipinitialspace}
+When \constant{True}, whitespace immediately following the \var{delimiter}
+is ignored.  The default is \constant{False}.
+\end{memberdesc}
+
 
 \subsection{Reader Objects}
 
-\class{DictReader} and \var{reader} objects have the following public
-methods:
+Reader objects (\class{DictReader} instances and objects returned by
+the \function{reader()}function) have the following public methods:
 
-\begin{methoddesc}{next}{}
+\begin{methoddesc}[csv reader]{next}{}
 Return the next row of the reader's iterable object as a list, parsed
 according to the current dialect.
 \end{methoddesc}
@@ -249,51 +269,36 @@
 
 \subsection{Writer Objects}
 
-\class{DictWriter} and \var{writer} objects have the following public
-methods:
+Writer objects (\class{DictWriter} instances and objects returned by
+the \function{writer()} function) have the following public methods:
 
-\begin{methoddesc}{writerow}{row}
+\begin{methoddesc}[csv writer]{writerow}{row}
 Write the \var{row} parameter to the writer's file object, formatted
 according to the current dialect.
 \end{methoddesc}
 
-\begin{methoddesc}{writerows}{rows}
+\begin{methoddesc}[csv writer]{writerows}{rows}
 Write all the \var{rows} parameters to the writer's file object, formatted
 according to the current dialect.
 \end{methoddesc}
 
 
-\begin{classdesc}{Sniffer}{}
-
-The \class{Sniffer} class is used to deduce the format of a CSV file.
-
-\begin{methoddesc}{sniff}{sample}
-Analyze the sample text (presumed to be in CSV format) and return a
-{}\class{Dialect} class reflecting the parameters found.
-\end{methoddesc}
-
-\begin{methoddesc}{has_header}{sample}
-Analyze the sample text (presumed to be in CSV format) and return
-{}\code{True} if the first row appears to be a series of column headers.
-\end{methoddesc}
-\end{classdesc}
-
 \subsection{Examples}
 
 The ``Hello, world'' of csv reading is
 
 \begin{verbatim}
-    import csv
-    reader = csv.reader(file("some.csv"))
-    for row in reader:
-        print row
+import csv
+reader = csv.reader(file("some.csv"))
+for row in reader:
+    print row
 \end{verbatim}
 
 The corresponding simplest possible writing example is
 
 \begin{verbatim}
-    import csv
-    writer = csv.writer(file("some.csv", "w"))
-    for row in someiterable:
-        writer.writerow(row)
+import csv
+writer = csv.writer(file("some.csv", "w"))
+for row in someiterable:
+    writer.writerow(row)
 \end{verbatim}
