diff --git a/Data/SecureMem.hs b/Data/SecureMem.hs
--- a/Data/SecureMem.hs
+++ b/Data/SecureMem.hs
@@ -31,7 +31,12 @@
 import           Foreign.ForeignPtr (withForeignPtr)
 import           Foreign.Ptr
 import           Data.Word (Word8)
+#if MIN_VERSION_base(4,9,0)
+import           Data.Semigroup
+import           Data.Foldable (toList)
+#else
 import           Data.Monoid
+#endif
 import           Control.Applicative
 import           Data.Byteable
 
@@ -96,10 +101,18 @@
 instance Eq SecureMem where
     (==) = secureMemEq
 
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup SecureMem where
+    (<>)    = secureMemAppend
+    sconcat = secureMemConcat . toList
+#endif
+
 instance Monoid SecureMem where
     mempty  = unsafeCreateSecureMem 0 (\_ -> return ())
+#if !(MIN_VERSION_base(4,11,0))
     mappend = secureMemAppend
     mconcat = secureMemConcat
+#endif
 
 -- | Types that can be converted to a secure mem object.
 class ToSecureMem a where
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2013-2014 Vincent Hanquez <vincent@snarc.org>
+Copyright (c) 2013-2018 Vincent Hanquez <vincent@snarc.org>
 
 All rights reserved.
 
diff --git a/README.md b/README.md
deleted file mode 100644
--- a/README.md
+++ /dev/null
@@ -1,28 +0,0 @@
-securemem
-=========
-
-[![Build Status](https://travis-ci.org/vincenthz/hs-securemem.png?branch=master)](https://travis-ci.org/vincenthz/hs-securemem)
-[![BSD](http://b.repl.ca/v1/license-BSD-blue.png)](http://en.wikipedia.org/wiki/BSD_licenses)
-[![Haskell](http://b.repl.ca/v1/language-haskell-lightgrey.png)](http://haskell.org)
-
-Securemem provides memory chunks that allow auto-scrubbing of the memory after use,
-and constant time equality.
-
-Documentation: [securemem on hackage](http://hackage.haskell.org/package/securemem)
-
-Interacting with securemem
---------------------------
-
-It's recommended to use the [Byteable instance](http://hackage.haskell.org/package/byteable)
-when providing an interface that takes a securemem. It allow legacy code, and work in progress
-code to interface with securemem more easily.
-
-older base
-----------
-
-On older base, the memory is not scrubbed: upgrade your GHC to 7.6.0 or above.
-
-TODO
-----
-
-* add a custom memory allocator that give mlocked memory chunks.
diff --git a/securemem.cabal b/securemem.cabal
--- a/securemem.cabal
+++ b/securemem.cabal
@@ -1,5 +1,5 @@
 Name:                securemem
-Version:             0.1.9
+Version:             0.1.10
 Synopsis:            abstraction to an auto scrubbing and const time eq, memory chunk.
 Description:
     SecureMem is similar to ByteString, except that it provides a memory chunk that
@@ -12,9 +12,8 @@
 Category:            Data
 Stability:           experimental
 Build-Type:          Simple
-Homepage:            http://github.com/vincenthz/hs-securemem
+Homepage:            https://github.com/vincenthz/hs-securemem
 Cabal-Version:       >=1.8
-extra-doc-files:     README.md
 
 Library
   Exposed-modules:   Data.SecureMem
