diff --git a/Text/Parsec/Combinator.hs b/Text/Parsec/Combinator.hs
--- a/Text/Parsec/Combinator.hs
+++ b/Text/Parsec/Combinator.hs
@@ -50,7 +50,7 @@
 option :: (Stream s m t) => a -> ParsecT s u m a -> ParsecT s u m a
 option x p          = p <|> return x
 
--- | @option p@ tries to apply parser @p@.  If @p@ fails without
+-- | @optionMaybe p@ tries to apply parser @p@.  If @p@ fails without
 -- consuming input, it return 'Nothing', otherwise it returns
 -- 'Just' the value returned by @p@.
 
@@ -85,7 +85,7 @@
                       scan  = do{ p; scan } <|> return ()
 -}
 
--- | @many p@ applies the parser @p@ /one/ or more times. Returns a
+-- | @many1 p@ applies the parser @p@ /one/ or more times. Returns a
 -- list of the returned values of @p@.
 --
 -- >  word  = many1 letter
@@ -266,7 +266,7 @@
 -- >                      ; manyTill anyChar (try (string "-->"))
 -- >                      }
 --
---    Note the overlapping parsers @anyChar@ and @string \"<!--\"@, and
+--    Note the overlapping parsers @anyChar@ and @string \"-->\"@, and
 --    therefore the use of the 'try' combinator.
 
 manyTill :: (Stream s m t) => ParsecT s u m a -> ParsecT s u m end -> ParsecT s u m [a]
diff --git a/Text/Parsec/Pos.hs b/Text/Parsec/Pos.hs
--- a/Text/Parsec/Pos.hs
+++ b/Text/Parsec/Pos.hs
@@ -22,7 +22,12 @@
     , updatePosChar, updatePosString
     ) where
 
+#ifdef BASE3
 import Data.Generics
+#else
+import Data.Data (Data)
+import Data.Typeable (Typeable)
+#endif
 
 -- < Source positions: a file name, a line and a column
 -- upper left is (1,1)
diff --git a/Text/Parsec/Prim.hs b/Text/Parsec/Prim.hs
--- a/Text/Parsec/Prim.hs
+++ b/Text/Parsec/Prim.hs
@@ -228,7 +228,7 @@
                                                
                  -- if (k x) doesn't consume input, but is okay,
                  -- we still return in the consumed continuation
-                 peok = cok
+                 peok x s err' = cok x s (mergeError err err')
 
                  -- if (k x) doesn't consume input, but errors,
                  -- we return the error in the 'consumed-error'
@@ -241,7 +241,7 @@
             let
                 -- in these cases, (k x) can return as empty
                 pcok = cok
-                peok = eok
+                peok x s err' = eok x s (mergeError err err')
                 pcerr = cerr
                 peerr err' = eerr (mergeError err err') 
             in  unParser (k x) s pcok pcerr peok peerr
@@ -436,7 +436,7 @@
     let pcerr parseError = eerr $ setErrorPos pos parseError 
     in unParser p s cok pcerr eok eerr
 
--- | The parser @token showTok posFromTok testTok@ accepts a token @t@
+-- | The parser @tokenPrim showTok posFromTok testTok@ accepts a token @t@
 -- with result @x@ when the function @testTok t@ returns @'Just' x@. The
 -- source position of the @t@ should be returned by @posFromTok t@ and
 -- the token can be shown using @showTok t@.
diff --git a/parsec.cabal b/parsec.cabal
--- a/parsec.cabal
+++ b/parsec.cabal
@@ -1,10 +1,10 @@
 name:		parsec
-version:	3.1.0
-cabal-version: >= 1.2.3
+version:	3.1.1
+cabal-version: >= 1.6
 license:	BSD3
 license-file:	LICENSE
 author:		Daan Leijen <daan@microsoft.com>, Paolo Martini <paolo@nemail.it>
-maintainer:	Derek Elkins <derek.a.elkins@gmail.com>
+maintainer:	Antoine Latter <aslatter@gmail.com>
 homepage:	http://www.cs.uu.nl/~daan/parsec.html
 category:	Parsing
 synopsis:	Monadic parser combinators
@@ -17,6 +17,15 @@
 	stacked on arbitrary monads, and it is also parametric in the
 	input stream type.
 
+source-repository head
+    type: darcs
+    location: http://code.haskell.org/parsec3
+
+source-repository this
+    type: darcs
+    location: http://code.haskell.org/parsec3
+    tag: 3.1.1
+
 flag base4
     Description: Use base-4.*
     Default:    True
@@ -47,10 +56,10 @@
         Text.ParserCombinators.Parsec.Prim,
         Text.ParserCombinators.Parsec.Token
     if flag(base4)
-        build-depends: base >= 4 && < 5, syb
+        build-depends: base >= 4 && < 5
     else
         build-depends: base >= 3.0.3 && < 4
+        cpp-options: -DBASE3
     build-depends: mtl, bytestring
-    extensions:	ExistentialQuantification, PolymorphicComponents, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, DeriveDataTypeable
+    extensions:	ExistentialQuantification, PolymorphicComponents, MultiParamTypeClasses, FlexibleInstances, FlexibleContexts, DeriveDataTypeable, CPP
     ghc-options:	-O2
-    ghc-prof-options:	-auto-all
