diff --git a/src/Text/XML/Generator.hs b/src/Text/XML/Generator.hs
--- a/src/Text/XML/Generator.hs
+++ b/src/Text/XML/Generator.hs
@@ -54,7 +54,6 @@
 import Control.Monad.Reader (Reader(..), ask, asks, runReader)
 import qualified Data.Map as Map
 import qualified Data.ByteString.Lazy as BSL
-import Data.Monoid hiding (mconcat)
 import qualified Data.Monoid as M
 
 import Blaze.ByteString.Builder
@@ -67,6 +66,14 @@
 import Data.Char (isPrint, ord)
 import qualified Data.String as S
 
+#if MIN_VERSION_base(4,9,0)
+import Data.Semigroup
+import Data.Monoid hiding (mconcat, (<>))
+#else
+-- for ghc 7.10
+import Data.Monoid hiding (mconcat)
+#endif
+
 import qualified Data.Text as T
 import qualified Data.Text.Lazy as TL
 
@@ -278,14 +285,32 @@
 noAttrs :: Xml Attr
 noAttrs = xempty
 
+{-# INLINE mappendAttr #-}
+mappendAttr :: Xml Attr -> Xml Attr -> Xml Attr
+mappendAttr x1 x2 = Xml $
+    do env <- ask
+       let (Attr b1, env') = runXml env x1
+       let (Attr b2, env'') = runXml env' x2
+       return $ (Attr $ b1 `mappend` b2, env'')
+
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup (Xml Attr) where
+    (<>) = mappendAttr
+
 instance Monoid (Xml Attr) where
     mempty = noAttrs
-    mappend x1 x2 = Xml $
-        do env <- ask
-           let (Attr b1, env') = runXml env x1
-           let (Attr b2, env'') = runXml env' x2
-           return $ (Attr $ b1 `mappend` b2, env'')
+#if !(MIN_VERSION_base(4,11,0))
+    -- this is redundant starting with base-4.11 / GHC 8.4
+    mappend = (<>)
+#endif
+#else
+-- for ghc 7.10
+instance Monoid (Xml Attr) where
+    mempty = noAttrs
+    mappend = mappendAttr
+#endif
 
+
 --
 -- Elements
 --
@@ -372,14 +397,30 @@
 xelemWithText :: Name -> TextContent -> Xml Elem
 xelemWithText n t = xelem n (xtext t)
 
+{-# INLINE mappendElem #-}
+mappendElem :: Xml Elem -> Xml Elem -> Xml Elem
+mappendElem x1 x2 = Xml $
+    do env <- ask
+       let (Elem b1, env') = runXml env x1
+           (Elem b2, env'') = runXml env' x2
+       return (Elem $ b1 `mappend` b2, env'')
+
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup (Xml Elem) where
+    (<>) = mappendElem
+
 instance Monoid (Xml Elem) where
     mempty = noElems
-    mappend x1 x2 = Xml $
-        do env <- ask
-           let (Elem b1, env') = runXml env x1
-               (Elem b2, env'') = runXml env' x2
-           return (Elem $ b1 `mappend` b2, env'')
-
+#if !(MIN_VERSION_base(4,11,0))
+    -- this is redundant starting with base-4.11 / GHC 8.4
+    mappend = (<>)
+#endif
+#else
+-- for ghc 7.10
+instance Monoid (Xml Elem) where
+    mempty = noElems
+    mappend = mappendElem
+#endif
 --
 -- Other XML constructs
 --
diff --git a/xmlgen.cabal b/xmlgen.cabal
--- a/xmlgen.cabal
+++ b/xmlgen.cabal
@@ -1,5 +1,5 @@
 Name:                xmlgen
-Version:             0.6.2.1
+Version:             0.6.2.2
 Synopsis:            Fast XML generation library
 Description:         Library for high-performance XML generation.
 License:             BSD3
