diff --git a/hxt.cabal b/hxt.cabal
--- a/hxt.cabal
+++ b/hxt.cabal
@@ -1,6 +1,6 @@
 -- arch-tag: Haskell XML Toolbox main description file
 Name:           hxt
-Version:        9.3.1.16
+Version:        9.3.1.18
 Synopsis:       A collection of tools for processing XML with Haskell.
 Description:    The Haskell XML Toolbox bases on the ideas of HaXml and HXML,
                 but introduces a more general approach for processing XML with Haskell.
@@ -66,7 +66,7 @@
 Stability:      Stable
 Category:       XML
 Homepage:       https://github.com/UweSchmidt/hxt
-Copyright:      Copyright (c) 2005-20161 Uwe Schmidt
+Copyright:      Copyright (c) 2005-2019 Uwe Schmidt
 Build-type:     Simple
 Cabal-version:  >=1.8
 
@@ -123,6 +123,10 @@
                with ghc >= 7.10 default is True 
   default: False
 
+flag profile
+  description: turn profiling on
+  default: False
+                                          
 library
  exposed-modules:
   Control.Arrow.ArrowExc,
@@ -210,8 +214,10 @@
 
  hs-source-dirs: src
 
- ghc-options: -Wall
- ghc-prof-options: -caf-all
+ ghc-options: -Wall -fwarn-tabs
+
+ if flag(profile)
+   ghc-prof-options: -caf-all
 
  extensions: MultiParamTypeClasses DeriveDataTypeable FunctionalDependencies FlexibleInstances CPP
 
diff --git a/src/Control/Arrow/ArrowList.hs b/src/Control/Arrow/ArrowList.hs
--- a/src/Control/Arrow/ArrowList.hs
+++ b/src/Control/Arrow/ArrowList.hs
@@ -13,11 +13,13 @@
 
    This module defines the interface for list arrows.
 
-   A list arrow is a function, that gives a list of results
+   A list arrow is a function that gives a list of results
    for a given argument. A single element result represents a normal function.
-   An empty list oven indicates, the function is undefined for the given argument.
-   The empty list may also represent False, none empty lists True.
-   A list with more than one element gives all results for a nondeterministic function.
+   An empty list often indicates that the function is undefined
+   for the given argument.
+   The empty list may also represent False, non-empty lists True.
+   A list with more than one element gives all results for a
+   so called nondeterministic function.
 
 -}
 
diff --git a/src/Control/Arrow/ArrowNF.hs b/src/Control/Arrow/ArrowNF.hs
--- a/src/Control/Arrow/ArrowNF.hs
+++ b/src/Control/Arrow/ArrowNF.hs
@@ -42,7 +42,7 @@
 -- |
 -- partial evaluation of an arrow result using 'Control.FlatSeq'
 --
--- There are tow arrows with force the partial evaluation. By convention
+-- There are two arrows with force the partial evaluation. By convention
 -- the 2. should be less lazy than the 1.
 --
 -- These arrows are sometimes useful for preventing space leaks, especially when parsing
diff --git a/src/Text/XML/HXT/Arrow/Pickle.hs b/src/Text/XML/HXT/Arrow/Pickle.hs
--- a/src/Text/XML/HXT/Arrow/Pickle.hs
+++ b/src/Text/XML/HXT/Arrow/Pickle.hs
@@ -15,7 +15,7 @@
 
 This module is an adaptation of the pickler combinators
 developed by Andrew Kennedy
-( http:\/\/research.microsoft.com\/~akenn\/fun\/picklercombinators.pdf )
+( https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2004\/01\/picklercombinators.pdf )
 
 The difference to Kennedys approach is that the target is not
 a list of Chars but a list of XmlTrees. The basic picklers will
diff --git a/src/Text/XML/HXT/Arrow/Pickle/Xml.hs b/src/Text/XML/HXT/Arrow/Pickle/Xml.hs
--- a/src/Text/XML/HXT/Arrow/Pickle/Xml.hs
+++ b/src/Text/XML/HXT/Arrow/Pickle/Xml.hs
@@ -20,7 +20,7 @@
 
    This module is an adaptation of the pickler combinators
    developed by Andrew Kennedy
-   ( http:\/\/research.microsoft.com\/~akenn\/fun\/picklercombinators.pdf ).
+   ( https:\/\/www.microsoft.com\/en-us\/research\/wp-content\/uploads\/2004\/01\/picklercombinators.pdf )
 
    The difference to Kennedys approach is that the target is not
    a list of Chars but a list of XmlTrees. The basic picklers will
@@ -141,9 +141,7 @@
                   case r of
                     Left err -> (Left err, st')
                     Right v  -> runUP (f v) st'
-    fail        = throwMsg                              -- don't use fail, use throwError
 
-
 instance MonadState St Unpickler where
     get         = UP $ \ st -> (Right st, st)
     put st      = UP $ \ _  -> (Right (), st)
@@ -454,7 +452,7 @@
                          ) .
                   xpPair pa
 
--- | combine tow picklers with a choice
+-- | combine two picklers with a choice
 --
 -- Run two picklers in sequence like with xpSeq.
 -- If during unpickling the first one fails,
diff --git a/src/Text/XML/HXT/Arrow/XmlArrow.hs b/src/Text/XML/HXT/Arrow/XmlArrow.hs
--- a/src/Text/XML/HXT/Arrow/XmlArrow.hs
+++ b/src/Text/XML/HXT/Arrow/XmlArrow.hs
@@ -277,17 +277,17 @@
     mkelem  n afs cfs   = mkElement (mkName n) (catA afs) (catA cfs)
     {-# INLINE mkelem #-}
 
-    -- | convenient arrow for element constrution with attributes but without content, simple variant of 'mkelem' and 'mkElement'
+    -- | convenient arrow for element construction with attributes but without content, simple variant of 'mkelem' and 'mkElement'
     aelem               :: String -> [a n XmlTree]                  -> a n XmlTree
     aelem n afs         = catA afs >. \ al -> XN.mkElement (mkName n) al []
     {-# INLINE aelem #-}
 
-    -- | convenient arrow for simple element constrution without attributes, simple variant of 'mkelem' and 'mkElement'
+    -- | convenient arrow for simple element construction without attributes, simple variant of 'mkelem' and 'mkElement'
     selem               :: String                  -> [a n XmlTree] -> a n XmlTree
     selem n cfs         = catA cfs >.         XN.mkElement (mkName n) []
     {-# INLINE selem #-}
 
-    -- | convenient arrow for constrution of empty elements without attributes, simple variant of 'mkelem' and 'mkElement'
+    -- | convenient arrow for construction of empty elements without attributes, simple variant of 'mkelem' and 'mkElement'
     eelem               :: String                                   -> a n XmlTree
     eelem n             = constA      (XN.mkElement (mkName n) [] [])
     {-# INLINE eelem #-}
@@ -302,7 +302,7 @@
     qattr               = mkAttr
     {-# INLINE qattr #-}
 
-    -- | convenient arrow for attribute constrution, simple variant of 'mkAttr'
+    -- | convenient arrow for attribute construction, simple variant of 'mkAttr'
     attr                :: String -> a n XmlTree -> a n XmlTree
     attr                = mkAttr . mkName
     {-# INLINE attr #-}
