diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,5 +1,11 @@
 # Version History
 
+## 0.3.1.0 (March 20, 2018)
+
+  - Update dependency bounds
+
+  - Deal with the Semigroup Monoid Proposal
+
 ## 0.3.0.0 (December 1, 2017)
 
   - New style modifier: `swapFgBg` (Thanks to Sam Tay)
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2015-2017 Peter J. Jones <pjones@devalot.com>
+Copyright (c) 2015-2018 Peter J. Jones <pjones@devalot.com>
 All rights reserved.
 
 Redistribution and use in source and binary forms, with or without
diff --git a/byline.cabal b/byline.cabal
--- a/byline.cabal
+++ b/byline.cabal
@@ -1,6 +1,6 @@
 --------------------------------------------------------------------------------
 name:          byline
-version:       0.3.0.0
+version:       0.3.1.0
 synopsis:      Library for creating command-line interfaces (colors, menus, etc.)
 homepage:      http://github.com/pjones/byline
 bug-reports:   http://github.com/pjones/byline/issues
@@ -8,12 +8,12 @@
 license-file:  LICENSE
 author:        Peter Jones <pjones@devalot.com>
 maintainer:    Peter Jones <pjones@devalot.com>
-copyright:     Copyright: (c) 2015-2017 Peter J. Jones
+copyright:     Copyright: (c) 2015-2018 Peter J. Jones
 category:      System, User Interfaces
 build-type:    Simple
 stability:     experimental
-tested-with:   GHC == 7.8.4, GHC == 7.10.3, GHC == 8.0.2
-cabal-version: >=1.18
+tested-with:   GHC == 7.10.3, GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.1
+cabal-version: 1.18
 description:
   Byline simplifies writing interactive terminal applications by
   building upon @ansi-terminal@ and @haskeline@.  This makes it
@@ -73,15 +73,18 @@
     ghc-options: -Werror
 
   build-depends: base          >= 4.7  && < 5.0
-               , ansi-terminal >= 0.6  && < 0.8
+               , ansi-terminal >= 0.6  && < 0.9
                , colour        >= 2.3  && < 2.4
                , containers    >= 0.5  && < 0.6
-               , exceptions    >= 0.8  && < 0.9
+               , exceptions    >= 0.8  && < 0.11
                , haskeline     >= 0.7  && < 0.8
                , mtl           >= 2.1  && < 2.3
                , terminfo-hs   >= 0.1  && < 0.3
                , text          >= 0.11 && < 1.3
                , transformers  >= 0.3  && < 0.6
+
+  if !impl(ghc >= 8.0)
+    build-depends: semigroups == 0.18.*
 
 --------------------------------------------------------------------------------
 executable simple
diff --git a/src/System/Console/Byline/Internal/Types.hs b/src/System/Console/Byline/Internal/Types.hs
--- a/src/System/Console/Byline/Internal/Types.hs
+++ b/src/System/Console/Byline/Internal/Types.hs
@@ -22,6 +22,7 @@
 --------------------------------------------------------------------------------
 -- Library imports:
 import Data.Monoid
+import qualified Data.Semigroup as Semi
 
 --------------------------------------------------------------------------------
 -- Byline imports:
@@ -32,22 +33,30 @@
 data Status = On | Off
 
 --------------------------------------------------------------------------------
+instance Semi.Semigroup Status where
+  (<>) Off Off = Off
+  (<>) Off On  = On
+  (<>) On  On  = On
+  (<>) On  Off = On
+
+--------------------------------------------------------------------------------
 instance Monoid Status where
   mempty = Off
-  mappend Off Off = Off
-  mappend Off On  = On
-  mappend On  On  = On
-  mappend On  Off = On
+  mappend = (Semi.<>)
 
 --------------------------------------------------------------------------------
 -- | Like @Maybe@, but with a different @Monoid@ instance.
 newtype OnlyOne a = OnlyOne {unOne :: Maybe a}
 
 --------------------------------------------------------------------------------
+instance Semi.Semigroup (OnlyOne a) where
+  (<>) _ b@(OnlyOne (Just _)) = b
+  (<>) a _                    = a
+
+--------------------------------------------------------------------------------
 instance Monoid (OnlyOne a) where
   mempty = OnlyOne Nothing
-  mappend _ b@(OnlyOne (Just _)) = b
-  mappend a _                    = a
+  mappend = (Semi.<>)
 
 --------------------------------------------------------------------------------
 -- | Information about modifications made to stylized text.
@@ -60,7 +69,11 @@
   }
 
 --------------------------------------------------------------------------------
+instance Semi.Semigroup Modifier where
+  (<>) (Modifier a b c d e) (Modifier a' b' c' d' e') =
+    Modifier (a <> a') (b <> b') (c <> c') (d <> d') (e <> e')
+
+--------------------------------------------------------------------------------
 instance Monoid Modifier where
   mempty = Modifier mempty mempty mempty mempty mempty
-  mappend (Modifier a b c d e) (Modifier a' b' c' d' e') =
-    Modifier (a <> a') (b <> b') (c <> c') (d <> d') (e <> e')
+  mappend = (Semi.<>)
diff --git a/src/System/Console/Byline/Stylized.hs b/src/System/Console/Byline/Stylized.hs
--- a/src/System/Console/Byline/Stylized.hs
+++ b/src/System/Console/Byline/Stylized.hs
@@ -22,6 +22,7 @@
 --------------------------------------------------------------------------------
 -- Library imports:
 import Data.Monoid
+import qualified Data.Semigroup as Semi
 import Data.String
 import Data.Text (Text)
 import qualified Data.Text as T
@@ -64,23 +65,27 @@
 modStylized = StylizedMod
 
 --------------------------------------------------------------------------------
-instance Monoid Stylized where
-  mempty = StylizedText mempty mempty
-
+instance Semi.Semigroup Stylized where
   -- StylizedText on LHS.
-  mappend a@(StylizedText _ _) b@(StylizedText _ _) = StylizedList [a, b]
-  mappend (StylizedText t m) (StylizedMod m')       = StylizedText t (m <> m')
-  mappend a@(StylizedText _ _) (StylizedList b)     = StylizedList (a:b)
+  (<>) a@(StylizedText _ _) b@(StylizedText _ _) = StylizedList [a, b]
+  (<>) (StylizedText t m) (StylizedMod m')       = StylizedText t (m <> m')
+  (<>) a@(StylizedText _ _) (StylizedList b)     = StylizedList (a:b)
 
   -- StylizedMod on LHS.
-  mappend (StylizedMod m) (StylizedText t m') = StylizedText t (m <> m')
-  mappend (StylizedMod m) (StylizedMod m')    = StylizedMod (m <> m')
-  mappend m@(StylizedMod _) (StylizedList l)  = StylizedList (map (m <>) l)
+  (<>) (StylizedMod m) (StylizedText t m') = StylizedText t (m <> m')
+  (<>) (StylizedMod m) (StylizedMod m')    = StylizedMod (m <> m')
+  (<>) m@(StylizedMod _) (StylizedList l)  = StylizedList (map (m <>) l)
 
   -- StylizedList on LHS.
-  mappend (StylizedList l) t@(StylizedText _ _) = StylizedList (l <> [t])
-  mappend (StylizedList l) m@(StylizedMod _)    = StylizedList (map (<> m) l)
-  mappend (StylizedList l) (StylizedList l')    = StylizedList (l <> l')
+  (<>) (StylizedList l) t@(StylizedText _ _) = StylizedList (l <> [t])
+  (<>) (StylizedList l) m@(StylizedMod _)    = StylizedList (map (<> m) l)
+  (<>) (StylizedList l) (StylizedList l')    = StylizedList (l <> l')
+
+
+--------------------------------------------------------------------------------
+instance Monoid Stylized where
+  mempty = StylizedText mempty mempty
+  mappend = (Semi.<>)
 
 --------------------------------------------------------------------------------
 instance IsString Stylized where
