diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -7,9 +7,9 @@
 
 import Data.Foldable
 import Data.Maybe
-import Data.Semigroup                                ((<>))
+import Data.Semigroup                             ((<>))
 import Data.Word
-import HaskellWorks.Data.BalancedParens.RangeMinMax2
+import HaskellWorks.Data.BalancedParens.RangeMin2
 import HaskellWorks.Data.BalancedParens.Simple
 import HaskellWorks.Data.Bits.BitShown
 import HaskellWorks.Data.FromByteString
@@ -27,7 +27,7 @@
 import qualified Data.Vector.Storable as DVS
 
 type RawCursor = XmlCursor BS.ByteString (BitShown (DVS.Vector Word64)) (SimpleBalancedParens (DVS.Vector Word64))
-type FastCursor = XmlCursor BS.ByteString CsPoppy (RangeMinMax2 CsPoppy)
+type FastCursor = XmlCursor BS.ByteString CsPoppy (RangeMin2 CsPoppy)
 
 -- | Read an XML file into memory and return a raw cursor initialised to the
 -- start of the XML document.
@@ -47,7 +47,7 @@
   -- re-parsing the file.
   XmlCursor !text (BitShown !ib) (SimpleBalancedParens !bp) _ <- readRawCursor filename
   let !bpCsPoppy = makeCsPoppy bp
-  let !rangeMinMax = mkRangeMinMax2 bpCsPoppy
+  let !rangeMinMax = mkRangeMin2 bpCsPoppy
   let !ibCsPoppy = makeCsPoppy ib
   return $ XmlCursor text ibCsPoppy rangeMinMax 1
 
diff --git a/hw-xml.cabal b/hw-xml.cabal
--- a/hw-xml.cabal
+++ b/hw-xml.cabal
@@ -1,159 +1,185 @@
-cabal-version: 1.12
+cabal-version:      2.2
 
-name:           hw-xml
-version:        0.1.0.4
-synopsis:       Conduits for tokenizing streams.
-description:    Conduits for tokenizing streams. Please see README.md
-category:       Data, XML, Succinct Data Structures, Data Structures
-homepage:       http://github.com/haskell-works/hw-xml#readme
-bug-reports:    https://github.com/haskell-works/hw-xml/issues
-author:         John Ky,
-                Alexey Raga
-maintainer:     alexey.raga@gmail.com
-copyright:      2016 John Ky,
-                Alexey Raga
-license:        BSD3
-license-file:   LICENSE
-build-type:     Simple
-extra-source-files:
-    README.md
+name:               hw-xml
+version:            0.2.0.0
+synopsis:           Conduits for tokenizing streams.
+description:        Conduits for tokenizing streams. Please see README.md
+category:           Data, XML, Succinct Data Structures, Data Structures
+homepage:           http://github.com/haskell-works/hw-xml#readme
+bug-reports:        https://github.com/haskell-works/hw-xml/issues
+author:             John Ky,
+                    Alexey Raga
+maintainer:         alexey.raga@gmail.com
+copyright:          2016-2019 John Ky
+                  , 2016-2019 Alexey Raga
+license:            BSD-3-Clause
+license-file:       LICENSE
+build-type:         Simple
+extra-source-files: README.md
 data-files:
-    data/catalog.xml
+  data/catalog.xml
 
 source-repository head
   type: git
   location: https://github.com/haskell-works/hw-xml
 
+common base                       { build-depends: base                       >= 4.7        && < 5      }
+
+common QuickCheck                 { build-depends: QuickCheck                 >= 2.13.1     && < 3      }
+common ansi-wl-pprint             { build-depends: ansi-wl-pprint             >= 0.6.9      && < 0.7    }
+common array                      { build-depends: array                      >= 0.5.2.0    && < 0.6    }
+common attoparsec                 { build-depends: attoparsec                 >= 0.13.2.2   && < 0.14   }
+common bytestring                 { build-depends: bytestring                 >= 0.10.8.2   && < 0.11   }
+common cereal                     { build-depends: cereal                     >= 0.5.8.1    && < 0.6    }
+common conduit                    { build-depends: conduit                    >= 1.3.1.1    && < 1.4    }
+common containers                 { build-depends: containers                 >= 0.6.2.1    && < 0.7    }
+common criterion                  { build-depends: criterion                  >= 1.5.5.0    && < 1.6    }
+common deepseq                    { build-depends: deepseq                    >= 1.4.3.0    && < 1.5    }
+common ghc-prim                   { build-depends: ghc-prim                   >= 0.5        && < 0.6    }
+common hedgehog                   { build-depends: hedgehog                   >= 1.0        && < 1.1    }
+common hspec                      { build-depends: hspec                      >= 2.5        && < 3.0    }
+common hw-balancedparens          { build-depends: hw-balancedparens          >= 0.3.0.0    && < 0.4    }
+common hw-bits                    { build-depends: hw-bits                    >= 0.7.0.6    && < 0.8    }
+common hw-conduit                 { build-depends: hw-conduit                 >= 0.2.0.5    && < 0.3    }
+common hw-hspec-hedgehog          { build-depends: hw-hspec-hedgehog          >= 0.1        && < 0.2    }
+common hw-parser                  { build-depends: hw-parser                  >= 0.1.0.1    && < 0.2    }
+common hw-prim                    { build-depends: hw-prim                    >= 0.6.2.28   && < 0.7    }
+common hw-rankselect              { build-depends: hw-rankselect              >= 0.13.1.0   && < 0.14   }
+common hw-rankselect-base         { build-depends: hw-rankselect-base         >= 0.3.2.1    && < 0.4    }
+common lens                       { build-depends: lens                       >= 4.17.1     && < 5.0    }
+common mmap                       { build-depends: mmap                       >= 0.5.9      && < 0.6    }
+common mtl                        { build-depends: mtl                        >= 2.2.2      && < 3      }
+common resourcet                  { build-depends: resourcet                  >= 1.2.2      && < 1.3    }
+common transformers               { build-depends: transformers               >= 0.5.5.0    && < 0.6    }
+common vector                     { build-depends: vector                     >= 0.12.0.3   && < 0.13   }
+common word8                      { build-depends: word8                      >= 0.1.3      && < 0.2    }
+
+common config
+  default-language: Haskell2010
+
 library
+  import:   base, config
+          , ansi-wl-pprint
+          , array
+          , attoparsec
+          , base
+          , bytestring
+          , cereal
+          , conduit
+          , containers
+          , deepseq
+          , ghc-prim
+          , hw-balancedparens
+          , hw-bits
+          , hw-conduit
+          , hw-parser
+          , hw-prim
+          , hw-rankselect
+          , hw-rankselect-base
+          , lens
+          , mtl
+          , resourcet
+          , transformers
+          , vector
+          , word8
   exposed-modules:
-      HaskellWorks.Data.Xml
-      HaskellWorks.Data.Xml.Blank
-      HaskellWorks.Data.Xml.CharLike
-      HaskellWorks.Data.Xml.Conduit
-      HaskellWorks.Data.Xml.Conduit.Blank
-      HaskellWorks.Data.Xml.Conduit.Words
-      HaskellWorks.Data.Xml.Decode
-      HaskellWorks.Data.Xml.DecodeError
-      HaskellWorks.Data.Xml.DecodeResult
-      HaskellWorks.Data.Xml.Grammar
-      HaskellWorks.Data.Xml.Index
-      HaskellWorks.Data.Xml.Lens
-      HaskellWorks.Data.Xml.Succinct
-      HaskellWorks.Data.Xml.Succinct.Cursor
-      HaskellWorks.Data.Xml.Succinct.Cursor.BalancedParens
-      HaskellWorks.Data.Xml.Succinct.Cursor.BlankedXml
-      HaskellWorks.Data.Xml.Succinct.Cursor.InterestBits
-      HaskellWorks.Data.Xml.Succinct.Cursor.Internal
-      HaskellWorks.Data.Xml.Succinct.Cursor.Token
-      HaskellWorks.Data.Xml.Succinct.Index
-      HaskellWorks.Data.Xml.RawDecode
-      HaskellWorks.Data.Xml.RawValue
-      HaskellWorks.Data.Xml.Token.Tokenize
-      HaskellWorks.Data.Xml.Token.Types
-      HaskellWorks.Data.Xml.Token
-      HaskellWorks.Data.Xml.Type
-      HaskellWorks.Data.Xml.Value
-  other-modules:
-      Paths_hw_xml
-  hs-source-dirs:
-      src
-  ghc-options: -Wall -O2 -msse4.2
-  build-depends:
-      ansi-wl-pprint
-    , array
-    , attoparsec
-    , base >=4 && <5
-    , bytestring
-    , cereal
-    , conduit
-    , containers
-    , deepseq
-    , ghc-prim
-    , hw-balancedparens >=0.1.0.0
-    , hw-bits >=0.4.0.0
-    , hw-conduit >=0.2.0.2
-    , hw-parser
-    , hw-prim >=0.4.0.0
-    , hw-rankselect >=0.7.0.0
-    , hw-rankselect-base >=0.2.0.0
-    , lens
-    , mtl
-    , resourcet
-    , transformers
-    , vector
-    , word8
-  default-language: Haskell2010
+    HaskellWorks.Data.Xml
+    HaskellWorks.Data.Xml.Blank
+    HaskellWorks.Data.Xml.CharLike
+    HaskellWorks.Data.Xml.Conduit
+    HaskellWorks.Data.Xml.Conduit.Blank
+    HaskellWorks.Data.Xml.Conduit.Words
+    HaskellWorks.Data.Xml.Decode
+    HaskellWorks.Data.Xml.DecodeError
+    HaskellWorks.Data.Xml.DecodeResult
+    HaskellWorks.Data.Xml.Grammar
+    HaskellWorks.Data.Xml.Index
+    HaskellWorks.Data.Xml.Lens
+    HaskellWorks.Data.Xml.Succinct
+    HaskellWorks.Data.Xml.Succinct.Cursor
+    HaskellWorks.Data.Xml.Succinct.Cursor.BalancedParens
+    HaskellWorks.Data.Xml.Succinct.Cursor.BlankedXml
+    HaskellWorks.Data.Xml.Succinct.Cursor.InterestBits
+    HaskellWorks.Data.Xml.Succinct.Cursor.Internal
+    HaskellWorks.Data.Xml.Succinct.Cursor.Token
+    HaskellWorks.Data.Xml.Succinct.Index
+    HaskellWorks.Data.Xml.RawDecode
+    HaskellWorks.Data.Xml.RawValue
+    HaskellWorks.Data.Xml.Token.Tokenize
+    HaskellWorks.Data.Xml.Token.Types
+    HaskellWorks.Data.Xml.Token
+    HaskellWorks.Data.Xml.Type
+    HaskellWorks.Data.Xml.Value
+  other-modules:      Paths_hw_xml
+  autogen-modules:    Paths_hw_xml
+  hs-source-dirs:     src
+  ghc-options:        -Wall -O2 -msse4.2
 
 executable hw-xml-example
-  main-is: Main.hs
-  other-modules:
-      Paths_hw_xml
-  hs-source-dirs:
-      app
-  ghc-options: -threaded -rtsopts -with-rtsopts=-N -O2 -Wall -msse4.2
-  build-depends:
-      base >=4 && <5
-    , bytestring
-    , hw-balancedparens >=0.2.0.1
-    , hw-bits >=0.7.0.2
-    , hw-prim >=0.5.0.0
-    , hw-rankselect >=0.10.0.3
-    , hw-xml
-    , vector
-  default-language: Haskell2010
+  import:   base, config
+          , bytestring
+          , hw-balancedparens
+          , hw-bits
+          , hw-prim
+          , hw-rankselect
+          , vector
+  main-is:            Main.hs
+  other-modules:      Paths_hw_xml
+  autogen-modules:    Paths_hw_xml
+  build-depends:      hw-xml
+  hs-source-dirs:     app
+  ghc-options:        -threaded -rtsopts -with-rtsopts=-N -O2 -Wall -msse4.2
 
 test-suite hw-xml-test
-  type: exitcode-stdio-1.0
-  main-is: Spec.hs
-  other-modules:
-      HaskellWorks.Data.Xml.Conduit.BlankSpec
-      HaskellWorks.Data.Xml.RawValueSpec
-      HaskellWorks.Data.Xml.Succinct.Cursor.BalancedParensSpec
-      HaskellWorks.Data.Xml.Succinct.Cursor.InterestBitsSpec
-      HaskellWorks.Data.Xml.Succinct.CursorSpec
-      HaskellWorks.Data.Xml.Token.TokenizeSpec
-      HaskellWorks.Data.Xml.TypeSpec
-      Paths_hw_xml
-  hs-source-dirs:
-      test
-  ghc-options: -threaded -rtsopts -with-rtsopts=-N
-  build-depends:
-      QuickCheck
-    , attoparsec
-    , base >=4 && <5
-    , bytestring
-    , conduit
-    , hspec
-    , hw-balancedparens >=0.1.0.0
-    , hw-bits >=0.4.0.0
-    , hw-conduit >=0.2.0.2
-    , hw-prim >=0.4.0.0
-    , hw-rankselect >=0.7.0.0
-    , hw-rankselect-base >=0.2.0.0
-    , hw-xml
-    , vector
-  default-language: Haskell2010
+  import:   base, config
+          , QuickCheck
+          , attoparsec
+          , base
+          , bytestring
+          , conduit
+          , hspec
+          , hw-balancedparens
+          , hw-bits
+          , hw-conduit
+          , hw-prim
+          , hw-rankselect
+          , hw-rankselect-base
+          , vector
+  type:               exitcode-stdio-1.0
+  main-is:            Spec.hs
+  hs-source-dirs:     test
+  build-depends:      hw-xml
+  ghc-options:        -threaded -rtsopts -with-rtsopts=-N
+  default-language:   Haskell2010
   build-tool-depends: hspec-discover:hspec-discover
+  autogen-modules:    Paths_hw_xml
+  other-modules:
+    HaskellWorks.Data.Xml.Conduit.BlankSpec
+    HaskellWorks.Data.Xml.RawValueSpec
+    HaskellWorks.Data.Xml.Succinct.Cursor.BalancedParensSpec
+    HaskellWorks.Data.Xml.Succinct.Cursor.InterestBitsSpec
+    HaskellWorks.Data.Xml.Succinct.CursorSpec
+    HaskellWorks.Data.Xml.Token.TokenizeSpec
+    HaskellWorks.Data.Xml.TypeSpec
+    Paths_hw_xml
 
 benchmark bench
-  type: exitcode-stdio-1.0
-  main-is: Main.hs
-  other-modules:
-      Paths_hw_xml
-  hs-source-dirs:
-      bench
-  ghc-options: -O2 -Wall -msse4.2
-  build-depends:
-      base >=4 && <5
-    , bytestring
-    , conduit
-    , criterion
-    , hw-balancedparens >=0.1.0.0
-    , hw-bits >=0.4.0.0
-    , hw-conduit >=0.2.0.2
-    , hw-prim >=0.4.0.0
-    , hw-xml
-    , mmap
-    , resourcet
-    , vector
-  default-language: Haskell2010
+  import:   base, config
+          , bytestring
+          , conduit
+          , criterion
+          , hw-balancedparens
+          , hw-bits
+          , hw-conduit
+          , hw-prim
+          , mmap
+          , resourcet
+          , vector
+  type:             exitcode-stdio-1.0
+  main-is:          Main.hs
+  other-modules:    Paths_hw_xml
+  build-depends:    hw-xml
+  autogen-modules:  Paths_hw_xml
+  hs-source-dirs:   bench
+  ghc-options:      -O2 -Wall -msse4.2
+
diff --git a/test/HaskellWorks/Data/Xml/TypeSpec.hs b/test/HaskellWorks/Data/Xml/TypeSpec.hs
--- a/test/HaskellWorks/Data/Xml/TypeSpec.hs
+++ b/test/HaskellWorks/Data/Xml/TypeSpec.hs
@@ -34,7 +34,7 @@
 
 {-# ANN module ("HLint: ignore Redundant do"        :: String) #-}
 {-# ANN module ("HLint: ignore Reduce duplication"  :: String) #-}
-{-# ANN module ("HLint: redundant bracket"          :: String) #-}
+{-# ANN module ("HLint: ignore Redundant bracket"   :: String) #-}
 
 fc = TC.firstChild
 ns = TC.nextSibling
