diff --git a/Changelog.md b/Changelog.md
--- a/Changelog.md
+++ b/Changelog.md
@@ -1,3 +1,7 @@
+## 0.3.4
+
+* GHC 8.4.1 support
+
 ## 0.3.3
 
 * GHC 8.2.1 support
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,10 +1,5 @@
 # Unicode Transforms
 
-[![Hackage](https://img.shields.io/hackage/v/unicode-transforms.svg?style=flat)](https://hackage.haskell.org/package/unicode-transforms)
-[![Build Status](https://travis-ci.org/harendra-kumar/unicode-transforms.svg?branch=master)](https://travis-ci.org/harendra-kumar/unicode-transforms)
-[![Windows Build status](https://ci.appveyor.com/api/projects/status/5wov8m1m0asvbv32?svg=true)](https://ci.appveyor.com/project/harendra-kumar/unicode-transforms)
-[![Coverage Status](https://coveralls.io/repos/harendra-kumar/unicode-transforms/badge.svg?branch=master&service=github)](https://coveralls.io/github/harendra-kumar/unicode-transforms?branch=master)
-
 Fast Unicode 9.0 normalization in Haskell (NFC, NFKC, NFD, NFKD).
 
 ## What is normalization?
diff --git a/benchmark/Benchmark.hs b/benchmark/Benchmark.hs
--- a/benchmark/Benchmark.hs
+++ b/benchmark/Benchmark.hs
@@ -11,21 +11,20 @@
 --
 
 #if !MIN_VERSION_base(4,8,0)
-import           Control.Applicative ((<$>), (<*>))
+import Control.Applicative ((<$>), (<*>))
 #endif
-import           Control.DeepSeq           (NFData)
-import           Criterion.Main            (Benchmark, bench, bgroup,
-                                            defaultConfig, env, nf, runMode)
-import           Criterion.Main.Options    (describe)
-import           Data.Text                 (Text)
-import qualified Data.Text                 as T
-import qualified Data.Text.Normalize       as UTText
-import           Options.Applicative.Extra (execParser)
-import           Path                      (Dir, Path, Rel, mkRelDir,
-                                            toFilePath, (</>))
-import           Path.IO                   (listDir)
-import           System.FilePath           (dropExtensions, takeFileName)
+import Control.DeepSeq (NFData)
+import Data.Text (Text)
+import Gauge.Main (Benchmark, bench, bgroup, env, nf, runMode)
+import Gauge.Main.Options (defaultConfig, Config(..), parseWith)
+import Path (Dir, Path, Rel, mkRelDir, toFilePath, (</>))
+import Path.IO (listDir)
+import System.Environment (getArgs)
+import System.FilePath (dropExtensions, takeFileName)
 
+import qualified Data.Text as T
+import qualified Data.Text.Normalize as UTText
+
 #ifdef BENCH_ICU
 import qualified Data.Text.ICU             as TI
 
@@ -70,9 +69,10 @@
 
 main :: IO ()
 main = do
-    mode    <- execParser (describe defaultConfig)
+    args <- getArgs
+    let (cfg, xs) = parseWith defaultConfig args
     dataFiles <- fmap (map toFilePath . snd) (listDir dataDir)
-    runMode mode
+    runMode (mode cfg) cfg xs
         [
 #ifdef BENCH_ICU
           bgroup "text-icu"
diff --git a/stack-7.10.yaml b/stack-7.10.yaml
--- a/stack-7.10.yaml
+++ b/stack-7.10.yaml
@@ -3,3 +3,5 @@
 resolver: lts-6.35
 extra-deps:
 - bitarray-0.0.1.1
+- gauge-0.2.1
+- basement-0.0.7
diff --git a/stack-8.2.yaml b/stack-8.2.yaml
deleted file mode 100644
--- a/stack-8.2.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-packages:
-- '.'
-resolver: nightly-2017-07-31
-extra-deps: []
diff --git a/stack.yaml b/stack.yaml
--- a/stack.yaml
+++ b/stack.yaml
@@ -1,4 +1,8 @@
 packages:
 - '.'
-resolver: lts-9.0
-extra-deps: []
+resolver: lts-11.3
+extra-deps:
+- bitarray-0.0.1.1
+- gauge-0.2.1
+- basement-0.0.7
+- getopt-generics-0.13.0.2
diff --git a/unicode-data/stack.yaml b/unicode-data/stack.yaml
--- a/unicode-data/stack.yaml
+++ b/unicode-data/stack.yaml
@@ -1,3 +1,5 @@
 # This stack.yaml is to independently build
 # the utility using its own cabal file
-resolver: lts-6.16
+resolver: lts-11.0
+extra-deps:
+- getopt-generics-0.13.0.2
diff --git a/unicode-transforms.cabal b/unicode-transforms.cabal
--- a/unicode-transforms.cabal
+++ b/unicode-transforms.cabal
@@ -1,24 +1,26 @@
--- This file has been generated from package.yaml by hpack version 0.17.0.
+-- This file has been generated from package.yaml by hpack version 0.20.0.
 --
 -- see: https://github.com/sol/hpack
+--
+-- hash: 7a7d4e648121c309b0a878afd840b76eabfb6e00860059d926fea7fc97430651
 
-name:                unicode-transforms
-version:             0.3.3
-synopsis:            Unicode normalization
-description:         Fast Unicode 9.0 normalization in Haskell (NFC, NFKC, NFD, NFKD).
-homepage:            http://github.com/harendra-kumar/unicode-transforms
-bug-reports:         https://github.com/harendra-kumar/unicode-transforms/issues
-license:             BSD3
-license-file:        LICENSE
-tested-with:         GHC==7.10.3, GHC==8.0.2, GHC==8.2.1
-author:              Harendra Kumar
-maintainer:          harendra.kumar@gmail.com
-copyright:           2016-2017 Harendra Kumar,
-                     2014–2015 Antonio Nikishaev
-category:            Data,Text,Unicode
-stability:           Experimental
-build-type:          Simple
-cabal-version:       >= 1.10
+name:           unicode-transforms
+version:        0.3.4
+synopsis:       Unicode normalization
+description:    Fast Unicode 9.0 normalization in Haskell (NFC, NFKC, NFD, NFKD).
+category:       Data,Text,Unicode
+stability:      Experimental
+homepage:       http://github.com/harendra-kumar/unicode-transforms
+bug-reports:    https://github.com/harendra-kumar/unicode-transforms/issues
+author:         Harendra Kumar
+maintainer:     harendra.kumar@gmail.com
+copyright:      2016-2017 Harendra Kumar,
+                2014–2015 Antonio Nikishaev
+license:        BSD3
+license-file:   LICENSE
+tested-with:    GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.1
+build-type:     Simple
+cabal-version:  >= 1.10
 
 extra-source-files:
     benchmark/data/AllChars.txt
@@ -32,7 +34,6 @@
     NOTES.md
     README.md
     stack-7.10.yaml
-    stack-8.2.yaml
     stack.yaml
     unicode-data/extra/NormalizationTest.txt
     unicode-data/README.md
@@ -63,8 +64,18 @@
 library
   hs-source-dirs:
       ./.
-  default-language: Haskell2010
   ghc-options: -Wall -fwarn-identities -fwarn-incomplete-record-updates -fwarn-incomplete-uni-patterns -fwarn-tabs
+  build-depends:
+      base >=4.7 && <5
+    , bitarray >=0.0.1 && <0.1
+    , bytestring >=0.9 && <0.11
+    , text >=1.1.1 && <1.3
+  if flag(dev)
+    ghc-options: -O0
+  else
+    ghc-options: -O2 -funbox-strict-fields
+  if flag(has-llvm)
+    ghc-options: -fllvm
   exposed-modules:
       Data.ByteString.UTF8.Normalize
       Data.Text.Normalize
@@ -81,17 +92,7 @@
       Data.Unicode.Properties.Decompositions
       Data.Unicode.Properties.DecompositionsK
       Data.Unicode.Properties.DecompositionsK2
-  build-depends:
-      base >= 4.7 && < 5
-    , bitarray   >= 0.0.1 && < 0.1
-    , bytestring >= 0.9   && < 0.11
-    , text       >= 1.1.1 && < 1.3
-  if flag(dev)
-    ghc-options: -O0
-  else
-    ghc-options: -O2 -funbox-strict-fields
-  if flag(has-llvm)
-    ghc-options: -fllvm
+  default-language: Haskell2010
 
 test-suite extras
   type: exitcode-stdio-1.0
@@ -100,10 +101,10 @@
       test
   ghc-options: -Wall -fwarn-identities -fwarn-incomplete-record-updates -fwarn-incomplete-uni-patterns -fwarn-tabs
   build-depends:
-      base >= 4.7 && < 5
-    , deepseq     >= 1.1 && < 1.5
-    , QuickCheck  >= 2.1 && < 2.11
-    , text        >= 1.1.1 && < 1.3
+      QuickCheck >=2.1 && <2.12
+    , base >=4.7 && <5
+    , deepseq >=1.1 && <1.5
+    , text >=1.1.1 && <1.3
     , unicode-transforms
   if flag(dev)
     ghc-options: -O0
@@ -122,10 +123,10 @@
       test
   ghc-options: -Wall -fwarn-identities -fwarn-incomplete-record-updates -fwarn-incomplete-uni-patterns -fwarn-tabs
   build-depends:
-      base >= 4.7 && < 5
-    , deepseq     >= 1.1 && < 1.5
-    , QuickCheck  >= 2.1 && < 2.11
-    , text        >= 1.1.1 && < 1.3
+      QuickCheck >=2.1 && <2.12
+    , base >=4.7 && <5
+    , deepseq >=1.1 && <1.5
+    , text >=1.1.1 && <1.3
     , unicode-transforms
   if flag(dev)
     ghc-options: -O0
@@ -136,7 +137,7 @@
   if flag(has-icu)
     cpp-options: -DHAS_ICU
     build-depends:
-        text-icu >= 0.6.2.1
+        text-icu >=0.6.2.1
   other-modules:
       QuickCheckUtils
   default-language: Haskell2010
@@ -148,10 +149,10 @@
       test
   ghc-options: -Wall -fwarn-identities -fwarn-incomplete-record-updates -fwarn-incomplete-uni-patterns -fwarn-tabs
   build-depends:
-      base >= 4.7 && < 5
-    , getopt-generics    >= 0.11  && < 0.14
-    , split              >= 0.1   && < 0.3
-    , text               >= 1.1.1 && < 1.3
+      base >=4.7 && <5
+    , getopt-generics >=0.11 && <0.14
+    , split >=0.1 && <0.3
+    , text >=1.1.1 && <1.3
     , unicode-transforms
   if flag(dev)
     ghc-options: -O0
@@ -168,14 +169,14 @@
       benchmark
   ghc-options: -Wall -fwarn-identities -fwarn-incomplete-record-updates -fwarn-incomplete-uni-patterns -fwarn-tabs
   build-depends:
-      base >= 4.7 && < 5
-    , criterion            >= 1.1.1 && < 1.3
-    , deepseq              >= 1.1.0 && < 1.5
-    , filepath             >= 1.0   && < 2
-    , optparse-applicative >= 0.0.1 && < 0.15
-    , path                 >= 0.0.0 && < 0.7
-    , path-io              >= 0.1.0 && < 1.4
-    , text                 >= 1.1.1 && < 1.3
+      base >=4.7 && <5
+    , deepseq >=1.1.0 && <1.5
+    , filepath >=1.0 && <2
+    , gauge >=0.2.0 && <0.3
+    , optparse-applicative >=0.0.1 && <0.15
+    , path >=0.0.0 && <0.7
+    , path-io >=0.1.0 && <1.4
+    , text >=1.1.1 && <1.3
     , unicode-transforms
   if flag(dev)
     ghc-options: -O0
@@ -186,10 +187,8 @@
   if flag(has-icu)
     cpp-options: -DBENCH_ICU
     build-depends:
-        text-icu >= 0.6.2.1 && < 0.8
+        text-icu >=0.6.2.1 && <0.8
   if impl(ghc < 7.10)
     build-depends:
-        path (< 0.5.12 || > 0.5.12)
-  other-modules:
-      .
+        path (<0.5.12 || >0.5.12)
   default-language: Haskell2010
