diff --git a/src/Text/XML/Light/Extractors.hs b/src/Text/XML/Light/Extractors.hs
--- a/src/Text/XML/Light/Extractors.hs
+++ b/src/Text/XML/Light/Extractors.hs
@@ -21,17 +21,19 @@
 --
 -- And a data type for a book:
 --
--- > data Book = Book { bookdId       :: Int
+-- > data Book = Book { bookId        :: Int
 -- >                  , isbn          :: Maybe String
 -- >                  , author, title :: String
 -- >                  }
 --
 -- You can parse the xml file into a generic tree structure using
--- 'Text.XML.Light.Input.parseXMLDoc', then extract information from
--- the tree using this library.
+-- 'Text.XML.Light.Input.parseXMLDoc' from the `xml` package.
 --
+-- Using this library one can define extractors to extract data from
+-- the generic tree.
+-- 
 -- @
---    library = 'element' "library" $ 'children' $ 'many' book
+--    library = 'element' "library" $ 'children' $ 'only' $ 'many' book
 --
 --    book = 'element' "book" $ do
 --             i <- 'attribAs' "id" 'Text.XML.Light.Extractors.Extra.integer'
@@ -45,8 +47,16 @@
 --    extractLibrary = 'extractDocContents' library
 -- @
 --
--- /Note:/ The 'Control.Applicative' module contains some useful
--- combinators like 'optional', 'many' and '<|>'.
+-- = Notes
+--
+--  * The "Control.Applicative" module contains some useful
+--    combinators like 'optional', 'many' and '<|>'.
+--
+--  * The "Text.XML.Light.Extractors.ShowErr" contains some
+--    predefined functions to convert error values to strings.
+--
+--  * The "Text.XML.Light.Extractors.Extra" module provides some
+--    functions to read numeric data.
 --
 module Text.XML.Light.Extractors
   ( 
diff --git a/src/Text/XML/Light/Extractors/Extra.hs b/src/Text/XML/Light/Extractors/Extra.hs
--- a/src/Text/XML/Light/Extractors/Extra.hs
+++ b/src/Text/XML/Light/Extractors/Extra.hs
@@ -1,6 +1,5 @@
 module Text.XML.Light.Extractors.Extra where
 
-
 import Safe (readMay)
 import Text.XML.Light.Extractors
 
diff --git a/src/Text/XML/Light/Extractors/Internal.hs b/src/Text/XML/Light/Extractors/Internal.hs
--- a/src/Text/XML/Light/Extractors/Internal.hs
+++ b/src/Text/XML/Light/Extractors/Internal.hs
@@ -23,14 +23,10 @@
   ) 
 where
 
-import Control.Applicative
-
 import Control.Monad.Identity
 import Control.Monad.Trans.Reader
 import Control.Monad.Trans.State
 
-import Data.Monoid
-
 import           Text.XML.Light.Types as XML
 import qualified Text.XML.Light.Proc  as XML
 
@@ -39,8 +35,10 @@
 
 --------------------------------------------------------------------------------
 
+elemName :: Element -> String
 elemName = qName . elName
 
+qname :: String -> QName
 qname name = QName name Nothing Nothing
 
 --------------------------------------------------------------------------------
@@ -53,8 +51,6 @@
 addIdx i p = show i : p
 
 addElem :: XML.Element -> Path -> Path
-
-
 addElem e p = elemName e : p
 
 addAttrib :: String -> Path -> Path
@@ -99,7 +95,7 @@
 type ElementExtractor a = ReaderT (Path, XML.Element) (ResultT ExtractionErr Identity) a
 
 runElementExtractor :: ElementExtractor a -> XML.Element -> Path -> Result ExtractionErr a
-runElementExtractor p elem path = runIdentity $ runResultT $ runReaderT p (path,elem)
+runElementExtractor p elem path = runIdentity $ runResultT $ runReaderT p (path, elem)
 
 makeElementExtractor :: Result ExtractionErr a -> ElementExtractor a
 makeElementExtractor (Fatal e) = throwFatal e
@@ -142,7 +138,7 @@
 -- | Lift a string function to an element extractor.
 liftToElement :: (String -> Either Err a) -> String -> ElementExtractor a
 liftToElement f s = do
-  (path,x) <- ask
+  (path,_) <- ask
   case f s of
     Left e   -> throwError (ExtractionErr e path)
     Right a  -> return a
@@ -184,9 +180,9 @@
 element :: String -> ElementExtractor a -> ContentsExtractor a
 element name p = first expect go
   where
-    go c@(Elem x) path
+    go (Elem x) path
       | elemName x == name = escalate $ runElementExtractor p x (addElem x path)
-    go c          path     = Fail (ExtractionErr (ErrExpect expect c) path)
+    go c        path       = Fail (ExtractionErr (ErrExpect expect c) path)
 
     expect = "element " ++ show name
 
diff --git a/src/Text/XML/Light/Extractors/Internal/Result.hs b/src/Text/XML/Light/Extractors/Internal/Result.hs
--- a/src/Text/XML/Light/Extractors/Internal/Result.hs
+++ b/src/Text/XML/Light/Extractors/Internal/Result.hs
@@ -69,6 +69,7 @@
 
 
 -- | Maps 'Fail' and 'Fatal' to 'Left'.
+toEither :: Result a b -> Either a b
 toEither (Fatal e) = Left e
 toEither (Fail e)  = Left e
 toEither (Ok a)    = Right a
@@ -145,13 +146,13 @@
 
 --------------------------------------------------------------------------------
 
-testX :: ResultT String IO Int
-testX = lift (print "x") >> return 1
+-- testX :: ResultT String IO Int
+-- testX = lift (print "x") >> return 1
 
-testY :: ResultT String IO Int
-testY = lift (print "error") >> throwError "error"
+-- testY :: ResultT String IO Int
+-- testY = lift (print "error") >> throwError "error"
 
-testZ :: ResultT String IO Int
-testZ = lift (print "fatal") >> throwFatal "fatal"
+-- testZ :: ResultT String IO Int
+-- testZ = lift (print "fatal") >> throwFatal "fatal"
 
 --------------------------------------------------------------------------------
diff --git a/src/Text/XML/Light/Extractors/ShowErr.hs b/src/Text/XML/Light/Extractors/ShowErr.hs
--- a/src/Text/XML/Light/Extractors/ShowErr.hs
+++ b/src/Text/XML/Light/Extractors/ShowErr.hs
@@ -1,4 +1,10 @@
-module Text.XML.Light.Extractors.ShowErr where
+-- | This module provide default functions to translate errors into strings.
+module Text.XML.Light.Extractors.ShowErr
+  ( showExtractionErr
+  , showErr
+  , showPath
+  )
+where
 
 import Data.List
 
@@ -8,22 +14,38 @@
 
 
 showExtractionErr :: ExtractionErr -> String
-showExtractionErr (ExtractionErr e path) = showErr e ++ "\nin " ++ showPath path
+showExtractionErr (ExtractionErr e path) = showErr e ++ "in path: " ++ showPath path
 
 showPath :: Path -> String
 showPath = intercalate "/" . reverse
 
 
+showErr :: Err -> String
 showErr (ErrExpect expect found) =
-  unwords ["Expected", expect, "found", take 60 $ XML.showContent found]
-
+  unlines
+  [ unwords ["Expected", expect, "found"]
+  , take 60 $ XML.showContent found
+  , unwords ["at line:", showLine found]
+  ]
 showErr (ErrAttr expect parent) =
-  unwords ["Missing attribute", show expect, "of", qName $ elName parent]
-
-showErr (ErrMsg msg) = msg
+  unlines
+  [ unwords ["Missing attribute", show expect, "of", show $ qName $ elName parent]
+  , unwords ["at line:", showLine $ Elem parent]
+  ]
+showErr (ErrMsg msg) =
+  unlines [msg]
 
 showErr (ErrNull expected) = 
-  unwords ["Expected", expected]
+  unlines [unwords ["Expected", expected]]
 
 showErr (ErrEnd found) =
-  unwords ["Unexpected:", take 60 $ XML.showContent found]
+  unlines [unwords ["Unexpected:", take 60 $ XML.showContent found]]
+
+
+contentLine :: Content -> Maybe Integer
+contentLine (Elem e) = elLine e
+contentLine (Text t) = cdLine t
+contentLine _        = Nothing
+
+showLine :: Content -> String
+showLine = maybe "??" show . contentLine
diff --git a/xml-extractors.cabal b/xml-extractors.cabal
--- a/xml-extractors.cabal
+++ b/xml-extractors.cabal
@@ -1,26 +1,27 @@
 name:                xml-extractors
-version:             0.2.0.0
-synopsis:            Simple wrapper over xml (Text.XML.Light) to extract data from parsed xml
+version:             0.2.1.0
+synopsis:            Simple wrapper over xml to extract data from parsed xml
 description:
-  This is a library to make it easier to extract data from parsed xml.
+  This is a library to simplify extraction of data from parsed xml.
   .
   See the 'Text.XML.Light.Extractors' module for an example.
   .
   = Motivation
   .
-  The xml package provides functions to parse and get information
-  from xml data. You can parse an xml string into a generic xml tree
-  representation. Then to extract information from that tree and into
-  you own data types you can use this library.
+  The `xml` package provides functions to parse and get information from
+  xml data. It will parse an xml string into a generic tree
+  representation. Extracting information from such a tree while
+  keeping track of location to handle errors is tricky. This library
+  helps with that.
   .
   If there is an error during extraction (expected information is
-  absent or wrong), you will get an error value with position information.
+  absent or wrong), it will return an error value with position information.
   .
   = Some limitations
   .
-    * Only handles unqualified names, so far.
+    * Only handles unqualified names.
   .
-    * No column or line number reference in error values.
+    * No column number and sometimes no line number reference in error values.
  
 homepage:            https://github.com/holmisen/xml-extractors
 license:             BSD3
@@ -28,7 +29,8 @@
 author:              Johan Holmquist
 maintainer:          holmisen@gmail.com
 -- copyright:           
-category:            Text, XML
+category:            XML
+tested-with:         GHC == 7.8.3
 build-type:          Simple
 extra-source-files:  README.md
 cabal-version:       >=1.10
@@ -39,7 +41,7 @@
                        Text.XML.Light.Extractors.Internal.Result,
                        Text.XML.Light.Extractors.Extra,
                        Text.XML.Light.Extractors.ShowErr
-  -- other-modules:       
+  -- other-modules:
   other-extensions:    NoMonomorphismRestriction
   build-depends:       base >=4.6 && <4.8,
                        xml >=1.3 && <1.4,
