diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+## HTagLib 1.2.0
+
+* Compiles with GHC 8.4.1.
+
+* Added `Semigroup` instance for `TagSetter`.
+
+* All definitions are re-exported in the `Sound.HTagLib` module, so other
+  modules have been hidden.
+
 ## HTagLib 1.1.1
 
 * Improved/updated documentation and metadata.
diff --git a/LICENSE.md b/LICENSE.md
--- a/LICENSE.md
+++ b/LICENSE.md
@@ -1,4 +1,4 @@
-Copyright © 2015–2017 Mark Karpov
+Copyright © 2015–2018 Mark Karpov
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -5,7 +5,6 @@
 [![Stackage Nightly](http://stackage.org/package/htaglib/badge/nightly)](http://stackage.org/nightly/package/htaglib)
 [![Stackage LTS](http://stackage.org/package/htaglib/badge/lts)](http://stackage.org/lts/package/htaglib)
 [![Build Status](https://travis-ci.org/mrkkrp/htaglib.svg?branch=master)](https://travis-ci.org/mrkkrp/htaglib)
-[![Coverage Status](https://coveralls.io/repos/mrkkrp/htaglib/badge.svg?branch=master&service=github)](https://coveralls.io/github/mrkkrp/htaglib?branch=master)
 
 * [Alternatives](#alternatives)
 * [A note for FLAC users](#a-note-for-flac-users)
@@ -193,6 +192,6 @@
 
 ## License
 
-Copyright © 2015–2017 Mark Karpov
+Copyright © 2015–2018 Mark Karpov
 
 Distributed under BSD 3 clause license.
diff --git a/Sound/HTagLib.hs b/Sound/HTagLib.hs
--- a/Sound/HTagLib.hs
+++ b/Sound/HTagLib.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Sound.HTagLib
--- Copyright   :  © 2015–2017 Mark Karpov
+-- Copyright   :  © 2015–2018 Mark Karpov
 -- License     :  BSD 3 clause
 --
 -- Maintainer  :  Mark Karpov <markkarpov92@gmail.com>
diff --git a/Sound/HTagLib/Getter.hs b/Sound/HTagLib/Getter.hs
--- a/Sound/HTagLib/Getter.hs
+++ b/Sound/HTagLib/Getter.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Sound.HTagLib.Getter
--- Copyright   :  © 2015–2017 Mark Karpov
+-- Copyright   :  © 2015–2018 Mark Karpov
 -- License     :  BSD 3 clause
 --
 -- Maintainer  :  Mark Karpov <markkarpov92@gmail.com>
diff --git a/Sound/HTagLib/Internal.hs b/Sound/HTagLib/Internal.hs
--- a/Sound/HTagLib/Internal.hs
+++ b/Sound/HTagLib/Internal.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Sound.HTagLib.Internal
--- Copyright   :  © 2015–2017 Mark Karpov
+-- Copyright   :  © 2015–2018 Mark Karpov
 -- License     :  BSD 3 clause
 --
 -- Maintainer  :  Mark Karpov <markkarpov92@gmail.com>
diff --git a/Sound/HTagLib/Setter.hs b/Sound/HTagLib/Setter.hs
--- a/Sound/HTagLib/Setter.hs
+++ b/Sound/HTagLib/Setter.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Sound.HTagLib.Setter
--- Copyright   :  © 2015–2017 Mark Karpov
+-- Copyright   :  © 2015–2018 Mark Karpov
 -- License     :  BSD 3 clause
 --
 -- Maintainer  :  Mark Karpov <markkarpov92@gmail.com>
@@ -31,11 +31,12 @@
 import Control.Applicative ((<|>))
 import Control.Monad.IO.Class
 import Data.Foldable (forM_)
+import Data.Semigroup (Semigroup (..))
 import Sound.HTagLib.Type
 import qualified Sound.HTagLib.Internal as I
 
 #if !MIN_VERSION_base(4,8,0)
-import Data.Monoid
+import Data.Monoid hiding ((<>))
 #endif
 
 -- | A composable entity that can be used together with the 'setTags' or the
@@ -56,6 +57,18 @@
   , sdYear        :: Maybe (Maybe Year)
   , sdTrackNumber :: Maybe (Maybe TrackNumber) }
 
+-- | @since 1.2.0
+
+instance Semigroup TagSetter where
+  x <> y = let f g = g x <|> g y in TagSetter
+    { sdTitle       = f sdTitle
+    , sdArtist      = f sdArtist
+    , sdAlbum       = f sdAlbum
+    , sdComment     = f sdComment
+    , sdGenre       = f sdGenre
+    , sdYear        = f sdYear
+    , sdTrackNumber = f sdTrackNumber }
+
 instance Monoid TagSetter where
   mempty = TagSetter
     { sdTitle       = Nothing
@@ -65,14 +78,7 @@
     , sdGenre       = Nothing
     , sdYear        = Nothing
     , sdTrackNumber = Nothing }
-  mappend x y = let f g = g x <|> g y in TagSetter
-    { sdTitle       = f sdTitle
-    , sdArtist      = f sdArtist
-    , sdAlbum       = f sdAlbum
-    , sdComment     = f sdComment
-    , sdGenre       = f sdGenre
-    , sdYear        = f sdYear
-    , sdTrackNumber = f sdTrackNumber }
+  mappend = (<>)
 
 -- | Set tags in specified file using the given setter.
 --
diff --git a/Sound/HTagLib/Type.hs b/Sound/HTagLib/Type.hs
--- a/Sound/HTagLib/Type.hs
+++ b/Sound/HTagLib/Type.hs
@@ -1,6 +1,6 @@
 -- |
 -- Module      :  Sound.HTagLib.Type
--- Copyright   :  © 2015–2017 Mark Karpov
+-- Copyright   :  © 2015–2018 Mark Karpov
 -- License     :  BSD 3 clause
 --
 -- Maintainer  :  Mark Karpov <markkarpov92@gmail.com>
diff --git a/htaglib.cabal b/htaglib.cabal
--- a/htaglib.cabal
+++ b/htaglib.cabal
@@ -1,65 +1,72 @@
-name:                htaglib
-version:             1.1.1
-cabal-version:       >= 1.10
-tested-with:         GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.1
-license:             BSD3
-license-file:        LICENSE.md
-author:              Mark Karpov <markkarpov92@gmail.com>
-maintainer:          Mark Karpov <markkarpov92@gmail.com>
-homepage:            https://github.com/mrkkrp/htaglib
-bug-reports:         https://github.com/mrkkrp/htaglib/issues
-category:            Sound, Foreign
-synopsis:            Bindings to TagLib, audio meta-data library
-build-type:          Simple
-description:         Bindings to TagLib, audio meta-data library.
-extra-doc-files:     CHANGELOG.md
-                   , README.md
-                   , audio-samples/README.md
-data-files:          audio-samples/*.flac
-                   , audio-samples/*.mp3
+name:                 htaglib
+version:              1.2.0
+cabal-version:        1.18
+tested-with:          GHC==7.8.4, GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.1
+license:              BSD3
+license-file:         LICENSE.md
+author:               Mark Karpov <markkarpov92@gmail.com>
+maintainer:           Mark Karpov <markkarpov92@gmail.com>
+homepage:             https://github.com/mrkkrp/htaglib
+bug-reports:          https://github.com/mrkkrp/htaglib/issues
+category:             Sound, Foreign
+synopsis:             Bindings to TagLib, audio meta-data library
+build-type:           Simple
+description:          Bindings to TagLib, audio meta-data library.
+extra-doc-files:      CHANGELOG.md
+                    , README.md
+                    , audio-samples/README.md
+data-files:           audio-samples/*.flac
+                    , audio-samples/*.mp3
 
+source-repository head
+  type:               git
+  location:           https://github.com/mrkkrp/htaglib.git
+
 flag dev
-  description:       Turn on development settings.
-  manual:            True
-  default:           False
+  description:        Turn on development settings.
+  manual:             True
+  default:            False
 
 library
-  build-depends:     base         >= 4.7 && < 5.0
-                   , bytestring   >= 0.9 && < 0.11
-                   , text         >= 1.0 && < 1.3
-                   , transformers >= 0.4 && < 0.6
-  extra-libraries:   tag_c
-  exposed-modules:   Sound.HTagLib
-                   , Sound.HTagLib.Type
-                   , Sound.HTagLib.Getter
-                   , Sound.HTagLib.Setter
-  other-modules:     Sound.HTagLib.Internal
+  build-depends:      base         >= 4.7 && < 5.0
+                    , bytestring   >= 0.9 && < 0.11
+                    , text         >= 1.0 && < 1.3
+                    , transformers >= 0.4 && < 0.6
+  if !impl(ghc >= 8.0)
+    build-depends:    semigroups       == 0.18.*
+  extra-libraries:    tag_c
+  exposed-modules:    Sound.HTagLib
+  other-modules:      Sound.HTagLib.Type
+                    , Sound.HTagLib.Getter
+                    , Sound.HTagLib.Setter
+                    , Sound.HTagLib.Internal
   if flag(dev)
-    ghc-options:     -O0 -Wall -Werror
+    ghc-options:      -Wall -Werror
   else
-    ghc-options:     -O2 -Wall
-  default-language:  Haskell2010
+    ghc-options:      -O2 -Wall
+  if flag(dev) && impl(ghc >= 8.0)
+    ghc-options:      -Wcompat
+                      -Wincomplete-record-updates
+                      -Wincomplete-uni-patterns
+                      -Wnoncanonical-monad-instances
+                      -Wnoncanonical-monadfail-instances
+  default-language:   Haskell2010
 
 test-suite tests
-  main-is:           Spec.hs
-  hs-source-dirs:    tests
-  type:              exitcode-stdio-1.0
+  main-is:            Spec.hs
+  hs-source-dirs:     tests
+  type:               exitcode-stdio-1.0
   if flag(dev)
-    ghc-options:     -O0 -Wall -Werror
+    ghc-options:      -Wall -Werror
   else
-    ghc-options:     -O2 -Wall
-  other-modules:     Sound.HTagLib.GetterSpec
-                   , Sound.HTagLib.SetterSpec
-                   , Sound.HTagLib.Test.Util
-  build-depends:     base       >= 4.7 && < 5.0
-                   , directory  >= 1.2 && < 1.4
-                   , filepath   >= 1.4 && < 2.0
-                   , hspec      >= 2.0 && < 3.0
-                   , htaglib
-  default-extensions:
-                     CPP
-  default-language:  Haskell2010
-
-source-repository head
-  type:              git
-  location:          https://github.com/mrkkrp/htaglib.git
+    ghc-options:      -O2 -Wall
+  other-modules:      Sound.HTagLib.GetterSpec
+                    , Sound.HTagLib.SetterSpec
+                    , Sound.HTagLib.Test.Util
+  build-depends:      base       >= 4.7 && < 5.0
+                    , directory  >= 1.2 && < 1.4
+                    , filepath   >= 1.4 && < 2.0
+                    , hspec      >= 2.0 && < 3.0
+                    , htaglib
+  build-tools:        hspec-discover >= 2.0 && < 3.0
+  default-language:   Haskell2010
diff --git a/tests/Sound/HTagLib/GetterSpec.hs b/tests/Sound/HTagLib/GetterSpec.hs
--- a/tests/Sound/HTagLib/GetterSpec.hs
+++ b/tests/Sound/HTagLib/GetterSpec.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 module Sound.HTagLib.GetterSpec (spec) where
 
 import Sound.HTagLib
diff --git a/tests/Sound/HTagLib/SetterSpec.hs b/tests/Sound/HTagLib/SetterSpec.hs
--- a/tests/Sound/HTagLib/SetterSpec.hs
+++ b/tests/Sound/HTagLib/SetterSpec.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Sound.HTagLib.SetterSpec (spec) where
diff --git a/tests/Sound/HTagLib/Test/Util.hs b/tests/Sound/HTagLib/Test/Util.hs
--- a/tests/Sound/HTagLib/Test/Util.hs
+++ b/tests/Sound/HTagLib/Test/Util.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE OverloadedStrings #-}
 
 module Sound.HTagLib.Test.Util
@@ -10,12 +11,14 @@
 where
 
 import Data.Maybe (fromJust)
-import Data.Monoid
 import Sound.HTagLib
 import Test.Hspec
 
 #if !MIN_VERSION_base(4,8,0)
 import Control.Applicative
+#endif
+#if !MIN_VERSION_base(4,11,0)
+import Data.Monoid
 #endif
 
 data AudioTags = AudioTags
