diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for siren-json
 
+## 0.1.0.1  -- 2017-11-11
+
+* add shrink methods to Arbitrary instances
+* add other-extensions to cabal file
+
 ## 0.1.0.0  -- 2017-11-08
 
 * First version.
diff --git a/siren-json.cabal b/siren-json.cabal
--- a/siren-json.cabal
+++ b/siren-json.cabal
@@ -1,5 +1,5 @@
 name:                siren-json
-version:             0.1.0.0
+version:             0.1.0.1
 synopsis:            Siren Tools for Haskell
 
 description:         
@@ -109,3 +109,5 @@
     , unordered-containers == 0.2.*
 
   other-extensions:
+      OverloadedStrings
+    , RecordWildCards
diff --git a/test/Data/SirenJSON/Arbitrary.hs b/test/Data/SirenJSON/Arbitrary.hs
--- a/test/Data/SirenJSON/Arbitrary.hs
+++ b/test/Data/SirenJSON/Arbitrary.hs
@@ -1,5 +1,7 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 
+{-# LANGUAGE RecordWildCards #-}
+
 {-|
 Module      : Data.SirenJSON.Arbitrary
 Description : Arbitrary Instances for Data.SirenJSON
@@ -11,7 +13,8 @@
 module Data.SirenJSON.Arbitrary where
 
 import Control.Applicative ((<$>), (<*>))
-import Test.QuickCheck (Arbitrary (arbitrary), elements, oneof, scale)
+import Data.Maybe (mapMaybe)
+import Test.QuickCheck (Arbitrary (arbitrary, shrink), elements, oneof, scale)
 import Test.QuickCheck.Instances ()
 
 import Data.SirenJSON
@@ -27,12 +30,24 @@
                      <*> arbitrary
                      <*> arbitrary
 
+  shrink Entity{..} = mapMaybe e eEntities ++
+                      [ Entity eClass' eProperties' eEntities' eLinks' eActions' eTitle' | (eClass', eProperties', eEntities', eLinks', eActions', eTitle') <- shrink (eClass, eProperties, eEntities, eLinks, eActions, eTitle) ]
+    where e EmbeddedRepresentation{..} = Just sEntity
+          e _                          = Nothing
+
 instance Arbitrary SubEntity where
   arbitrary = oneof [ EmbeddedLink <$> arbitrary
                     , EmbeddedRepresentation <$> scale (`div` 2) arbitrary
                                              <*> arbitrary
                     ]
 
+  shrink (EmbeddedLink l)           = [ EmbeddedLink l' | l' <- shrink l ]
+  shrink EmbeddedRepresentation{..} = map EmbeddedLink (eLinks sEntity) ++
+                                      filter isEntity (eEntities sEntity) ++
+                                      [ EmbeddedRepresentation sEntity' sRel' | (sEntity', sRel') <- shrink (sEntity, sRel) ]
+    where isEntity (EmbeddedRepresentation _ _) = True
+          isEntity _                            = False
+
 instance Arbitrary Link where
   arbitrary = Link <$> arbitrary
                    <*> arbitrary
@@ -40,6 +55,8 @@
                    <*> arbitrary
                    <*> arbitrary
 
+  shrink Link{..} = [ Link lClass' lRel' lHref' lType' lTitle' | (lClass', lRel', lHref', lType', lTitle') <- shrink (lClass, lRel, lHref, lType, lTitle) ]
+
 instance Arbitrary Action where
   arbitrary = Action <$> arbitrary
                      <*> arbitrary
@@ -49,12 +66,16 @@
                      <*> arbitrary
                      <*> arbitrary
 
+  shrink Action{..} = [ Action aName' aClass' aMethod' aHref' aTitle' aType' aFields' | (aName', aClass', aMethod', aHref', aTitle', aType', aFields') <- shrink (aName, aClass, aMethod, aHref, aTitle, aType, aFields) ]
+
 instance Arbitrary Field where
   arbitrary = Field <$> arbitrary
                     <*> arbitrary
                     <*> arbitrary
                     <*> arbitrary
                     <*> arbitrary
+
+  shrink Field{..} = [ Field fName' fClass' fType' fValue' fTitle' | (fName', fClass', fType', fValue', fTitle') <- shrink (fName, fClass, fType, fValue, fTitle) ]
 
 instance Arbitrary InputType where
   arbitrary = elements [ Hidden
diff --git a/test/External/Network/URI/Arbitrary.hs b/test/External/Network/URI/Arbitrary.hs
--- a/test/External/Network/URI/Arbitrary.hs
+++ b/test/External/Network/URI/Arbitrary.hs
@@ -16,7 +16,7 @@
 import Control.Monad (replicateM)
 import Data.List (intercalate)
 import Network.URI (URI (..), URIAuth (..))
-import Test.QuickCheck (Arbitrary (arbitrary), choose, elements, Gen, listOf, listOf1, oneof, suchThat)
+import Test.QuickCheck (Arbitrary (arbitrary, shrink), choose, elements, Gen, listOf, listOf1, oneof, suchThat)
 
 instance Arbitrary URI where
   arbitrary =
@@ -29,10 +29,14 @@
        return URI {..}
     where emptyAuthority URIAuth{..} = all null [uriUserInfo, uriRegName, uriPort]
 
+  shrink URI{..} = [ URI uriScheme' uriAuthority' uriPath' uriQuery' uriFragment' | (uriScheme', uriAuthority', uriPath', uriQuery', uriFragment') <- shrink (uriScheme, uriAuthority, uriPath, uriQuery, uriFragment) ]
+
 instance Arbitrary URIAuth where
   arbitrary = URIAuth <$> userinfo
                       <*> host `suchThat` (not . null)
                       <*> port
+
+  shrink URIAuth{..} = [ URIAuth uriUserInfo' uriRegName' uriPort' | (uriUserInfo', uriRegName', uriPort') <- shrink (uriUserInfo, uriRegName, uriPort) ]
 
 -- * RFC 3986 Generators
 --
