diff --git a/Changes.md b/Changes.md
--- a/Changes.md
+++ b/Changes.md
@@ -1,3 +1,7 @@
+* 1.1.2.5
+  - Bump aeson and exceptions upper bounds.
+* 1.1.2.4
+  - Bump async upper bounds.
 * 1.1.2.2
   - Fix for GHC 8.2.2 support
 * 1.1.2.1
diff --git a/riak.cabal b/riak.cabal
--- a/riak.cabal
+++ b/riak.cabal
@@ -1,5 +1,5 @@
 name:                riak
-version:             1.1.2.4
+version:             1.1.2.5
 synopsis:            A Haskell client for the Riak decentralized data store
 description:
   A Haskell client library for the Riak decentralized data
@@ -101,7 +101,7 @@
                   Network.Riak.Tag
 
   build-depends:
-                aeson                         >= 0.8      && < 1.3,
+                aeson                         >= 0.8      && < 1.4,
                 async                         >= 2.0.0.0  && < 2.3,
                 attoparsec                    >= 0.12.1.6 && < 0.14,
                 base                          >= 3        && < 5,
@@ -113,7 +113,7 @@
                 data-default-class            >= 0.0.1,
                 deepseq                       >= 1.3,
                 enclosed-exceptions           >= 1.0.1.1  && <= 1.1,
-                exceptions                    >= 0.8.0.2  && <= 0.9,
+                exceptions                    >= 0.8.0.2  && < 0.11,
                 hashable                      >= 1.2.3,
                 transformers                  >= 0.3      && < 0.6,
                 transformers-base             == 0.4.*,
diff --git a/src/Network/Riak/CRDT.hs b/src/Network/Riak/CRDT.hs
--- a/src/Network/Riak/CRDT.hs
+++ b/src/Network/Riak/CRDT.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                 #-}
 {- | module:    Network.Riak.CRDT
      copyright: (c) 2016 Sentenai
      author:    Antonio Nikishaev <me@lelf.lu>
@@ -43,7 +44,9 @@
 import Data.Default.Class
 import qualified Data.Map as M
 import Data.Proxy
+#if __GLASGOW_HASKELL__ < 804
 import Data.Semigroup
+#endif
 import qualified Data.Set as S
 import Network.Riak.CRDT.Ops
 import Network.Riak.CRDT.Riak
diff --git a/src/Network/Riak/CRDT/Ops.hs b/src/Network/Riak/CRDT/Ops.hs
--- a/src/Network/Riak/CRDT/Ops.hs
+++ b/src/Network/Riak/CRDT/Ops.hs
@@ -22,7 +22,7 @@
 import qualified Network.Riak.Protocol.MapUpdate.FlagOp as PBFlag
 
 import           Data.ByteString.Lazy (ByteString)
-import           Data.Monoid
+import           Data.Semigroup (Semigroup((<>)))
 import qualified Data.Sequence as Seq
 import qualified Data.Set as S
 import           Network.Riak.CRDT.Types
@@ -42,6 +42,9 @@
 data SetOpsComb = SetOpsComb { setAdds :: S.Set ByteString,
                                setRemoves :: S.Set ByteString }
              deriving (Show)
+
+instance Semigroup SetOpsComb where
+    (SetOpsComb a b) <> (SetOpsComb x y) = SetOpsComb (a<>x) (b<>y)
 
 instance Monoid SetOpsComb where
     mempty = SetOpsComb mempty mempty
diff --git a/src/Network/Riak/CRDT/Types.hs b/src/Network/Riak/CRDT/Types.hs
--- a/src/Network/Riak/CRDT/Types.hs
+++ b/src/Network/Riak/CRDT/Types.hs
@@ -278,6 +278,9 @@
 -- >>> CounterInc 1
 data CounterOp = CounterInc !Count deriving (Eq,Show)
 
+instance Semigroup CounterOp where
+    CounterInc x <> CounterInc y = CounterInc . getSum $ Sum x <> Sum y
+
 instance Monoid CounterOp where
     mempty = CounterInc 0
     CounterInc x `mappend` CounterInc y = CounterInc . getSum $ Sum x <> Sum y
diff --git a/src/Network/Riak/Connection/NoPush.hsc b/src/Network/Riak/Connection/NoPush.hsc
--- a/src/Network/Riak/Connection/NoPush.hsc
+++ b/src/Network/Riak/Connection/NoPush.hsc
@@ -21,7 +21,7 @@
 import Foreign.Marshal.Utils (with)
 import Foreign.Ptr (Ptr)
 import Foreign.Storable (sizeOf)
-import Network.Socket (Socket(..))
+import Network.Socket (Socket(..), fdSocket)
 
 noPush :: CInt
 #if defined(TCP_NOPUSH)
@@ -37,11 +37,12 @@
 
 setNoPush :: Socket -> Bool -> IO ()
 setNoPush _ _ | noPush == 0 = return ()
-setNoPush (MkSocket fd _ _ _ _) onOff = do
+-- setNoPush (MkSocket fd _ _ _ _) onOff = do
+setNoPush s onOff = do
   let v = if onOff then 1 else 0
   with v $ \ptr ->
     throwErrnoIfMinus1_ "setNoPush" $
-      c_setsockopt fd (#const IPPROTO_TCP) noPush ptr (fromIntegral (sizeOf v))
+      c_setsockopt (fdSocket s) (#const IPPROTO_TCP) noPush ptr (fromIntegral (sizeOf v))
 
 foreign import ccall unsafe "setsockopt"
   c_setsockopt :: CInt -> CInt -> CInt -> Ptr CInt -> CInt -> IO CInt
diff --git a/src/Network/Riak/JSON.hs b/src/Network/Riak/JSON.hs
--- a/src/Network/Riak/JSON.hs
+++ b/src/Network/Riak/JSON.hs
@@ -36,13 +36,14 @@
 #if __GLASGOW_HASKELL__ < 710
 import Data.Monoid (Monoid)
 #endif
+import Data.Semigroup (Semigroup)
 import Data.Typeable (Typeable)
 import Network.Riak.Types.Internal
 import qualified Network.Riak.Value as V
 
 newtype JSON a = J {
       plain :: a -- ^ Unwrap a 'JSON'-wrapped value.
-    } deriving (Eq, Ord, Show, Read, Bounded, Typeable, Monoid)
+    } deriving (Eq, Ord, Show, Read, Bounded, Typeable, Semigroup, Monoid)
 
 -- | Wrap up a value so that it will be encoded and decoded as JSON
 -- when converted to/from 'Content'.
diff --git a/src/Network/Riak/Request.hs b/src/Network/Riak/Request.hs
--- a/src/Network/Riak/Request.hs
+++ b/src/Network/Riak/Request.hs
@@ -56,7 +56,9 @@
 import Control.Applicative ((<$>))
 #endif
 import qualified Data.ByteString.Char8 as B8
+#if __GLASGOW_HASKELL__ < 804
 import Data.Monoid
+#endif
 import Network.Riak.Protocol.BucketProps (BucketProps)
 import Network.Riak.Protocol.Content
 import Network.Riak.Protocol.GetClientIDRequest
diff --git a/src/Network/Riak/Resolvable/Internal.hs b/src/Network/Riak/Resolvable/Internal.hs
--- a/src/Network/Riak/Resolvable/Internal.hs
+++ b/src/Network/Riak/Resolvable/Internal.hs
@@ -45,6 +45,7 @@
 #if __GLASGOW_HASKELL__ < 710
 import Data.Monoid (Monoid(mappend))
 #endif
+import Data.Semigroup (Semigroup)
 import Data.Typeable (Typeable)
 import Network.Riak.Debug (debugValues)
 import Network.Riak.Types.Internal hiding (MessageTag(..))
@@ -86,7 +87,7 @@
 -- | A newtype wrapper that uses the 'mappend' method of a type's
 -- 'Monoid' instance to perform vector clock conflict resolution.
 newtype ResolvableMonoid a = RM { unRM :: a }
-    deriving (Eq, Ord, Read, Show, Typeable, Data, Monoid, FromJSON, ToJSON)
+    deriving (Eq, Ord, Read, Show, Typeable, Data, Semigroup, Monoid, FromJSON, ToJSON)
 
 instance (Show a, Monoid a) => Resolvable (ResolvableMonoid a) where
     resolve = mappend
diff --git a/tests/Test.hs b/tests/Test.hs
--- a/tests/Test.hs
+++ b/tests/Test.hs
@@ -15,7 +15,9 @@
 import qualified Data.Sequence as Seq
 import           Data.List.NonEmpty (NonEmpty(..))
 import           Data.Foldable (toList)
+#if __GLASGOW_HASKELL__ < 804
 import           Data.Semigroup
+#endif
 import           Data.Text (Text)
 import           Control.Concurrent (threadDelay)
 import           Control.Exception
