diff --git a/postgresql-simple.cabal b/postgresql-simple.cabal
--- a/postgresql-simple.cabal
+++ b/postgresql-simple.cabal
@@ -1,5 +1,5 @@
 Name:                postgresql-simple
-Version:             0.4.2.1
+Version:             0.4.2.2
 Synopsis:            Mid-Level PostgreSQL client library
 Description:
     Mid-Level PostgreSQL client library, forked from mysql-simple.
@@ -81,7 +81,7 @@
 source-repository this
   type:     git
   location: http://github.com/lpsmith/postgresql-simple
-  tag:      v0.4.2.1
+  tag:      v0.4.2.2
 
 test-suite test
   type:           exitcode-stdio-1.0
diff --git a/src/Database/PostgreSQL/Simple.hs b/src/Database/PostgreSQL/Simple.hs
--- a/src/Database/PostgreSQL/Simple.hs
+++ b/src/Database/PostgreSQL/Simple.hs
@@ -331,7 +331,8 @@
 --
 -- Returns the number of rows affected.
 --
--- Throws 'FormatError' if the query could not be formatted correctly.
+-- Throws 'FormatError' if the query could not be formatted correctly, or
+-- a 'SqlError' exception if the backend returns an error.
 execute :: (ToRow q) => Connection -> Query -> q -> IO Int64
 execute conn template qs = do
   result <- exec conn =<< formatQuery conn template qs
@@ -340,9 +341,12 @@
 -- | Execute a multi-row @INSERT@, @UPDATE@, or other SQL query that is not
 -- expected to return results.
 --
--- Returns the number of rows affected.
+-- Returns the number of rows affected.   If the list of parameters is empty,
+-- this function will simply return 0 without issuing the query to the backend.
+-- If this is not desired, consider using the 'Values' constructor instead.
 --
--- Throws 'FormatError' if the query could not be formatted correctly.
+-- Throws 'FormatError' if the query could not be formatted correctly, or
+-- a 'SqlError' exception if the backend returns an error.
 --
 -- For example,  here's a command that inserts two rows into a table
 -- with two columns:
@@ -377,6 +381,10 @@
 -- in cases where you are only inserting a single row,  and do not need
 -- functionality analogous to 'executeMany'.
 --
+-- If the list of parameters is empty,  this function will simply return @[]@
+-- without issuing the query to the backend.   If this is not desired,
+-- consider using the 'Values' constructor instead.
+--
 -- Throws 'FormatError' if the query could not be formatted correctly.
 returning :: (ToRow q, FromRow r) => Connection -> Query -> [q] -> IO [r]
 returning _ _ [] = return []
@@ -399,6 +407,9 @@
 --   using 'execute' instead of 'query').
 --
 -- * 'ResultError': result conversion failed.
+--
+-- * 'SqlError':  the postgresql backend returned an error,  e.g.
+--   a syntax or type error,  or an incorrect table or column name.
 query :: (ToRow q, FromRow r) => Connection -> Query -> q -> IO [r]
 query = queryWith fromRow
 
@@ -428,6 +439,12 @@
 -- This fold is /not/ strict. The stream consumer is responsible for
 -- forcing the evaluation of its result to avoid space leaks.
 --
+-- This is implemented using a database cursor.    As such,  this requires
+-- a transaction.   This function will detect whether or not there is a
+-- transaction in progress,  and will create a 'ReadCommitted' 'ReadOnly'
+-- transaction if needed.   The cursor is given a unique temporary name,
+-- so the consumer may itself call fold.
+--
 -- Exceptions that may be thrown:
 --
 -- * 'FormatError': the query string could not be formatted correctly.
@@ -436,7 +453,9 @@
 --   using 'execute' instead of 'query').
 --
 -- * 'ResultError': result conversion failed.
-
+--
+-- * 'SqlError':  the postgresql backend returned an error,  e.g.
+--   a syntax or type error,  or an incorrect table or column name.
 fold            :: ( FromRow row, ToRow params )
                 => Connection
                 -> Query
@@ -446,6 +465,9 @@
                 -> IO a
 fold = foldWithOptions defaultFoldOptions
 
+-- | Number of rows to fetch at a time.   'Automatic' currently defaults
+--   to 256 rows,  although it might be nice to make this more intelligent
+--   based on e.g. the average size of the rows.
 data FetchQuantity
    = Automatic
    | Fixed !Int
@@ -456,12 +478,19 @@
        transactionMode :: !TransactionMode
      }
 
+-- | defaults to 'Automatic',  and 'TransactionMode' 'ReadCommitted' 'ReadOnly'
 defaultFoldOptions :: FoldOptions
 defaultFoldOptions = FoldOptions {
       fetchQuantity   = Automatic,
       transactionMode = TransactionMode ReadCommitted ReadOnly
     }
 
+-- | The same as 'fold',  but this provides a bit more control over
+--   lower-level details.  Currently,  the number of rows fetched per
+--   round-trip to the server and the transaction mode may be adjusted
+--   accordingly.    If the connection is already in a transaction,
+--   then the existing transaction is used and thus the 'transactionMode'
+--   option is ignored.
 foldWithOptions :: ( FromRow row, ToRow params )
                 => FoldOptions
                 -> Connection
diff --git a/src/Database/PostgreSQL/Simple/FromField.hs b/src/Database/PostgreSQL/Simple/FromField.hs
--- a/src/Database/PostgreSQL/Simple/FromField.hs
+++ b/src/Database/PostgreSQL/Simple/FromField.hs
@@ -27,9 +27,12 @@
 conversion routine,  which sacrifices some accuracy for speed.   If you
 need accuracy,  consider first converting data to a 'Scientific' or 'Rational'
 type,  and then converting to a floating-point type.   If you are defining
-your own 'ToRow' instances,  this can be acheived simply by
-@'fromRational' '<$>' 'field'@,  although this idiom additionally compatible
-with PostgreSQL's @numeric@ type.
+your own 'Database.PostgreSQL.Simple.FromRow.FromRow' instances,  this can be 
+acheived simply by 
+@'fromRational' '<$>' 'Database.PostgreSQL.Simple.FromRow.field'@,  although 
+this idiom is additionally compatible with PostgreSQL's @numeric@ type.
+If this is unacceptable,  you may find 
+'Database.PostgreSQL.Simple.FromRow.fieldWith' useful.
 
 Because 'FromField' is a typeclass,  one may provide conversions to
 additional Haskell types without modifying postgresql-simple.  This is
diff --git a/src/Database/PostgreSQL/Simple/FromRow.hs-boot b/src/Database/PostgreSQL/Simple/FromRow.hs-boot
--- a/src/Database/PostgreSQL/Simple/FromRow.hs-boot
+++ b/src/Database/PostgreSQL/Simple/FromRow.hs-boot
@@ -8,11 +8,10 @@
 instance (FromField a) => FromRow (Only a)
 instance (FromField a, FromField b)
       => FromRow (a,b)
-instance (FromField a, FromField b, FromField c, FromField d) 
+instance (FromField a, FromField b, FromField c, FromField d)
       => FromRow (a,b,c,d)
-instance (FromField a, FromField b, FromField c, FromField d, FromField e) 
+instance (FromField a, FromField b, FromField c, FromField d, FromField e)
       => FromRow (a,b,c,d,e)
 instance (FromField a, FromField b, FromField c, FromField d, FromField e
-         ,FromField f) 
+         ,FromField f)
       => FromRow (a,b,c,d,e,f)
-
diff --git a/src/Database/PostgreSQL/Simple/ToField.hs b/src/Database/PostgreSQL/Simple/ToField.hs
--- a/src/Database/PostgreSQL/Simple/ToField.hs
+++ b/src/Database/PostgreSQL/Simple/ToField.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE DeriveDataTypeable, DeriveFunctor       #-}
+{-# LANGUAGE CPP, DeriveDataTypeable, DeriveFunctor  #-}
 {-# LANGUAGE FlexibleInstances, TypeSynonymInstances #-}
 
 ------------------------------------------------------------------------------
@@ -48,7 +48,12 @@
 import qualified Data.Vector as V
 import qualified Database.PostgreSQL.LibPQ as PQ
 import           Database.PostgreSQL.Simple.Time
-import           Data.Scientific (Scientific, scientificBuilder)
+import           Data.Scientific (Scientific)
+#if MIN_VERSION_scientific(0,3,0)
+import           Data.Text.Lazy.Builder.Scientific (scientificBuilder)
+#else
+import           Data.Scientific (scientificBuilder)
+#endif
 
 -- | How to render an element when substituting it into a query.
 data Action =
