diff --git a/Data/X509/DistinguishedName.hs b/Data/X509/DistinguishedName.hs
--- a/Data/X509/DistinguishedName.hs
+++ b/Data/X509/DistinguishedName.hs
@@ -6,6 +6,8 @@
 -- Portability : unknown
 --
 -- X.509 Distinguished names types and functions
+
+{-# LANGUAGE CPP #-}
 module Data.X509.DistinguishedName
     ( DistinguishedName(..)
     , DistinguishedNameInner(..)
@@ -16,7 +18,11 @@
     ) where
 
 import Control.Applicative
-import Data.Monoid
+#if MIN_VERSION_base(4,9,0)
+import           Data.Semigroup
+#else
+import           Data.Monoid
+#endif
 import Data.ASN1.Types
 import Data.X509.Internal
 
@@ -49,9 +55,16 @@
 newtype DistinguishedNameInner = DistinguishedNameInner DistinguishedName
     deriving (Show,Eq)
 
+#if MIN_VERSION_base(4,9,0)
+instance Semigroup DistinguishedName where
+    DistinguishedName l1 <> DistinguishedName l2 = DistinguishedName (l1++l2)
+#endif
+
 instance Monoid DistinguishedName where
     mempty  = DistinguishedName []
+#if !(MIN_VERSION_base(4,11,0))
     mappend (DistinguishedName l1) (DistinguishedName l2) = DistinguishedName (l1++l2)
+#endif
 
 instance ASN1Object DistinguishedName where
     toASN1 dn = \xs -> encodeDN dn ++ xs
diff --git a/x509.cabal b/x509.cabal
--- a/x509.cabal
+++ b/x509.cabal
@@ -1,5 +1,5 @@
 Name:                x509
-version:             1.7.2
+version:             1.7.3
 Description:         X509 reader and writer
 License:             BSD3
 License-file:        LICENSE
@@ -21,7 +21,7 @@
                    , mtl
                    , containers
                    , hourglass
-                   , pem >= 0.1 && < 0.3
+                   , pem >= 0.1
                    , asn1-types >= 0.3.1 && < 0.4
                    , asn1-encoding >= 0.9 && < 0.10
                    , asn1-parse >= 0.9.3 && < 0.10
