diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # hevm changelog
 
+## 0.17 - 2018-10-05
+ - Semigroup/Monoid fix
+
 ## 0.16 - 2018-09-19
  - Move ethjet into hevm
 
diff --git a/hevm.cabal b/hevm.cabal
--- a/hevm.cabal
+++ b/hevm.cabal
@@ -1,7 +1,7 @@
 name:
   hevm
 version:
-  0.16
+  0.17
 synopsis:
   Ethereum virtual machine evaluator
 description:
@@ -99,7 +99,7 @@
     process                           >= 1.4,
     quickcheck-text                   >= 0.1,
     readline                          >= 1.0,
-    restless-git                      >= 0.6,
+    restless-git                      >= 0.7,
     rosezipper                        >= 0.2,
     scientific                        >= 0.3,
     s-cargot                          >= 0.1,
diff --git a/src/EVM.hs b/src/EVM.hs
--- a/src/EVM.hs
+++ b/src/EVM.hs
@@ -37,6 +37,7 @@
 import Data.ByteString.Lazy         (fromStrict)
 import Data.Map.Strict              (Map)
 import Data.Maybe                   (fromMaybe, isNothing)
+import Data.Semigroup               (Semigroup (..))
 import Data.Sequence                (Seq)
 import Data.Vector.Storable         (Vector)
 import Data.Foldable                (toList)
@@ -258,11 +259,12 @@
 makeLenses ''Trace
 makeLenses ''VM
 
+instance Semigroup Cache where
+  a <> b = Cache
+    { _fetched = mappend (view fetched a) (view fetched b) }
+
 instance Monoid Cache where
   mempty = Cache { _fetched = mempty }
-  mappend a b = Cache
-    { _fetched = mappend (view fetched a) (view fetched b)
-    }
 
 -- * Data accessors
 
diff --git a/src/EVM/Concrete.hs b/src/EVM/Concrete.hs
--- a/src/EVM/Concrete.hs
+++ b/src/EVM/Concrete.hs
@@ -15,7 +15,7 @@
 import Data.ByteString (ByteString)
 import Data.DoubleWord (signedWord, unsignedWord)
 import Data.Maybe      (fromMaybe)
-import Data.Monoid     ((<>))
+import Data.Semigroup  ((<>))
 import Data.String     (IsString)
 import Data.Word       (Word8)
 
@@ -169,7 +169,9 @@
 deriving instance Eq Byte
 deriving instance Integral Byte
 deriving instance IsString Blob
+deriving instance Semigroup Blob
 deriving instance Monoid Blob
+deriving instance Semigroup Memory
 deriving instance Monoid Memory
 deriving instance Num Byte
 deriving instance Ord Byte
diff --git a/src/EVM/Solidity.hs b/src/EVM/Solidity.hs
--- a/src/EVM/Solidity.hs
+++ b/src/EVM/Solidity.hs
@@ -49,7 +49,7 @@
 import Data.Foldable
 import Data.Map.Strict      (Map)
 import Data.Maybe
-import Data.Monoid
+import Data.Semigroup
 import Data.Sequence        (Seq)
 import Data.Text            (Text, pack, intercalate)
 import Data.Text.Encoding   (encodeUtf8)
@@ -97,9 +97,11 @@
   , _sourceAsts   :: Map Text Value
   } deriving (Show, Eq, Generic)
 
+instance Semigroup SourceCache where
+  _ <> _ = error "lol"
+
 instance Monoid SourceCache where
   mempty = SourceCache mempty mempty mempty mempty
-  mappend (SourceCache _ _ _ _) (SourceCache _ _ _ _) = error "lol"
 
 data JumpType = JumpInto | JumpFrom | JumpRegular
   deriving (Show, Eq, Ord, Generic)
