diff --git a/CHANGELOG b/CHANGELOG
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,3 +1,9 @@
+1.2.0.6
+
+* Add Travis CI support
+* Add Semigroup s => Semigroup (CI s) instance
+
+
 1.2.0.5
 
 * Support HUnit-1.3
diff --git a/Data/CaseInsensitive/Internal.hs b/Data/CaseInsensitive/Internal.hs
--- a/Data/CaseInsensitive/Internal.hs
+++ b/Data/CaseInsensitive/Internal.hs
@@ -30,19 +30,20 @@
 --------------------------------------------------------------------------------
 
 -- from base:
-import Data.Bool     ( (||) )
-import Data.Char     ( Char, toLower )
-import Data.Eq       ( Eq, (==) )
-import Data.Function ( on )
-import Data.Monoid   ( Monoid, mempty, mappend )
-import Data.Ord      ( Ord, compare )
-import Data.String   ( IsString, fromString )
-import Data.Data     ( Data )
-import Data.Typeable ( Typeable )
-import Data.Word     ( Word8 )
-import Prelude       ( (.), fmap, (&&), (+), (<=), otherwise )
-import Text.Read     ( Read, readPrec )
-import Text.Show     ( Show, showsPrec )
+import Data.Bool      ( (||) )
+import Data.Char      ( Char, toLower )
+import Data.Eq        ( Eq, (==) )
+import Data.Function  ( on )
+import Data.Monoid    ( Monoid, mempty, mappend )
+import Data.Ord       ( Ord, compare )
+import Data.String    ( IsString, fromString )
+import Data.Data      ( Data )
+import Data.Typeable  ( Typeable )
+import Data.Word      ( Word8 )
+import Prelude        ( (.), fmap, (&&), (+), (<=), otherwise )
+import Text.Read      ( Read, readPrec )
+import Text.Show      ( Show, showsPrec )
+import Data.Semigroup ( Semigroup, (<>) )
 
 import qualified Data.List as L ( map )
 
@@ -108,6 +109,9 @@
 
 instance (IsString s, FoldCase s) => IsString (CI s) where
     fromString = mk . fromString
+
+instance Semigroup s => Semigroup (CI s) where
+    CI o1 l1 <> CI o2 l2 = CI (o1 <> o2) (l1 <> l2)
 
 instance Monoid s => Monoid (CI s) where
     mempty = CI mempty mempty
diff --git a/case-insensitive.cabal b/case-insensitive.cabal
--- a/case-insensitive.cabal
+++ b/case-insensitive.cabal
@@ -1,5 +1,5 @@
 name:          case-insensitive
-version:       1.2.0.5
+version:       1.2.0.6
 cabal-version: >=1.8
 build-type:    Simple
 license:       BSD3
@@ -16,6 +16,14 @@
                type like: 'String', 'ByteString', 'Text',
                etc.. Comparisons of values of the resulting type will be
                insensitive to cases.
+tested-with:
+  GHC==7.0.4,
+  GHC==7.2.2
+  GHC==7.4.2,
+  GHC==7.6.3,
+  GHC==7.8.4,
+  GHC==7.10.3,
+  GHC==8.0.1
 
 extra-source-files: README.markdown CHANGELOG pg2189.txt
 
@@ -25,11 +33,13 @@
 
 Library
   ghc-options: -Wall
-  build-depends: base       >= 3   && < 4.9
+  build-depends: base       >= 3   && < 4.10
                , bytestring >= 0.9 && < 0.11
                , text       >= 0.3 && < 1.3
                , deepseq    >= 1.1 && < 1.5
                , hashable   >= 1.0 && < 1.3
+  if !impl(ghc >= 8.0)
+    build-depends: semigroups >= 0.18 && < 0.19
   exposed-modules: Data.CaseInsensitive, Data.CaseInsensitive.Unsafe
   other-modules: Data.CaseInsensitive.Internal
 
@@ -39,7 +49,7 @@
   hs-source-dirs: test
 
   build-depends: case-insensitive
-               , base                 >= 3     && < 4.9
+               , base                 >= 3     && < 4.10
                , bytestring           >= 0.9   && < 0.11
                , text                 >= 0.3   && < 1.3
                , HUnit                >= 1.2.2 && < 1.4
@@ -56,7 +66,7 @@
   ghc-options:    -Wall -O2
 
   build-depends: case-insensitive
-               , base                 >= 3     && < 4.9
+               , base                 >= 3     && < 4.10
                , bytestring           >= 0.9   && < 0.11
                , criterion            >= 0.6.1 && < 1.2
                , deepseq              >= 1.1   && < 1.5
