diff --git a/Setup.hs b/Setup.hs
--- a/Setup.hs
+++ b/Setup.hs
@@ -1,2 +1,3 @@
 import Distribution.Simple
+
 main = defaultMain
diff --git a/genvalidity-hspec-aeson.cabal b/genvalidity-hspec-aeson.cabal
--- a/genvalidity-hspec-aeson.cabal
+++ b/genvalidity-hspec-aeson.cabal
@@ -1,7 +1,5 @@
 name: genvalidity-hspec-aeson
-version: 0.0.0.0
-synopsis: Standard spec's for aeson-related instances
-description: Standard spec's for aeson-related Instances
+version: 0.0.1.0
 cabal-version: >=1.10
 build-type: Simple
 license: MIT
@@ -9,49 +7,55 @@
 copyright: Copyright: (c) 2016 Tom Sydney Kerckhove
 maintainer: syd.kerckhove@gmail.com
 homepage: http://cs-syd.eu
+synopsis: Standard spec's for aeson-related instances
+description:
+    Standard spec's for aeson-related Instances
 category: Testing
 author: Tom Sydney Kerckhove
 
+source-repository head
+    type: git
+    location: https://github.com/NorfairKing/validity
+
 library
     exposed-modules:
         Test.Validity.Aeson
     build-depends:
         base >=4.9 && <=5,
-        genvalidity-hspec >= 0.3 && < 0.4,
-        genvalidity >= 0.3 && < 0.4,
-        hspec >= 2.2 && < 2.3,
-        aeson >= 0.11 && < 0.12,
-        QuickCheck >= 2.8 && < 2.9,
-        deepseq >= 1.4 && < 1.5
+        genvalidity-hspec >=0.3 && <0.4,
+        genvalidity >=0.3 && <0.4,
+        hspec,
+        aeson >=0.11 && <1.2,
+        QuickCheck,
+        deepseq >=1.4 && <1.5,
+        bytestring
     default-language: Haskell2010
     hs-source-dirs: src/
     ghc-options: -Wall
 
 test-suite genvalidity-hspec-aeson-doctests
-  default-language:   Haskell2010
-  hs-source-dirs:     test
-  type:               exitcode-stdio-1.0
-  ghc-options:        -threaded
-  main-is:            DocTest.hs
-  build-depends:      base
-    , doctest               >= 0.11      && < 0.12
-    , genvalidity-hspec-aeson
-
+    type: exitcode-stdio-1.0
+    main-is: DocTest.hs
+    build-depends:
+        base -any,
+        doctest >=0.11 && <0.12,
+        genvalidity-hspec-aeson -any
+    default-language: Haskell2010
+    hs-source-dirs: test
+    ghc-options: -threaded
 test-suite genvalidity-hspec-aeson-test
     type: exitcode-stdio-1.0
     main-is: Spec.hs
-    other-modules:
-        Test.Validity.AesonSpec
     build-depends:
         base >=4.9 && <=5,
-        genvalidity >= 0.3 && < 0.4,
-        genvalidity-hspec-aeson,
-        hspec >= 2.2 && < 2.3
+        genvalidity >=0.3 && <0.4,
+        genvalidity-hspec-aeson -any,
+        hspec,
+        aeson,
+        text,
+        genvalidity-text
     default-language: Haskell2010
     hs-source-dirs: test/
+    other-modules:
+        Test.Validity.AesonSpec
     ghc-options: -threaded -rtsopts -with-rtsopts=-N -Wall
-
-
-source-repository head
-  type:     git
-  location: https://github.com/NorfairKing/validity
diff --git a/src/Test/Validity/Aeson.hs b/src/Test/Validity/Aeson.hs
--- a/src/Test/Validity/Aeson.hs
+++ b/src/Test/Validity/Aeson.hs
@@ -18,6 +18,7 @@
 
 import Control.DeepSeq (deepseq)
 import Control.Exception (evaluate)
+import Control.Monad
 import Data.Aeson (FromJSON, ToJSON)
 import qualified Data.Aeson as JSON
 import Data.Typeable
@@ -67,22 +68,28 @@
     :: forall a.
        (Show a, Eq a, Typeable a, FromJSON a, ToJSON a)
     => Gen a -> String -> Spec
-jsonSpecOnGen gen genname = parallel $ do
-    let name = nameOf @a
-    describe ("JSON " ++ name ++ " (" ++ genname ++ ")") $ do
-        describe ("encode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $
-            it
-                (unwords
-                     ["never fails to encode a", "\"" ++ genname, name ++ "\""]) $
-            neverFailsToEncodeOnGen gen
-        describe ("decode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $
-            it
-                (unwords
-                     [ "ensures that encode and decode are inverses for"
-                     , "\"" ++ genname
-                     , name ++ "\"" ++ "'s"
-                     ]) $
-            encodeAndDecodeAreInversesOnGen gen
+jsonSpecOnGen gen genname =
+    parallel $ do
+        let name = nameOf @a
+        describe ("JSON " ++ name ++ " (" ++ genname ++ ")") $ do
+            describe
+                ("encode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $
+                it
+                    (unwords
+                         [ "never fails to encode a"
+                         , "\"" ++ genname
+                         , name ++ "\""
+                         ]) $
+                neverFailsToEncodeOnGen gen
+            describe
+                ("decode :: " ++ name ++ " -> Data.ByteString.Lazy.ByteString") $
+                it
+                    (unwords
+                         [ "ensures that encode and decode are inverses for"
+                         , "\"" ++ genname
+                         , name ++ "\"" ++ "'s"
+                         ]) $
+                encodeAndDecodeAreInversesOnGen gen
 
 -- |
 --
@@ -112,4 +119,27 @@
     => Gen a -> Property
 encodeAndDecodeAreInversesOnGen gen =
     forAll gen $ \(a :: a) ->
-        JSON.eitherDecode (JSON.encode a) `shouldBe` Right a
+        let encoded = JSON.encode a
+            errOrDecoded = JSON.eitherDecode encoded
+        in case errOrDecoded of
+               Left err ->
+                   expectationFailure $
+                   unlines
+                       [ "Decoding failed with error"
+                       , err
+                       , "instead of decoding to"
+                       , show a
+                       , "'encode' encoded it to the json"
+                       , show encoded
+                       ]
+               Right decoded ->
+                   unless (decoded == a) $
+                   expectationFailure $
+                   unlines
+                       [ "Decoding succeeded, but the decoded value"
+                       , show decoded
+                       , "differs from expected decoded value"
+                       , show a
+                       , "'encode' encoded it to the json"
+                       , show encoded
+                       ]
diff --git a/test/Test/Validity/AesonSpec.hs b/test/Test/Validity/AesonSpec.hs
--- a/test/Test/Validity/AesonSpec.hs
+++ b/test/Test/Validity/AesonSpec.hs
@@ -1,10 +1,16 @@
 {-# LANGUAGE TypeApplications #-}
+{-# LANGUAGE DeriveGeneric #-}
+{-# LANGUAGE OverloadedStrings #-}
 
 module Test.Validity.AesonSpec where
 
 import Test.Hspec
 
+import Data.Aeson
 import Data.GenValidity
+import Data.GenValidity.Text ()
+import Data.Text (Text)
+import GHC.Generics
 import Test.Validity.Aeson
 
 spec :: Spec
@@ -13,3 +19,20 @@
     jsonSpecOnValid @Double
     jsonSpec @Int
     jsonSpecOnArbitrary @Int
+    jsonSpecOnValid @ForShow
+
+data ForShow =
+    ForShow Text
+    deriving (Show, Eq, Generic)
+
+instance Validity ForShow
+
+instance GenUnchecked ForShow
+
+instance GenValid ForShow
+
+instance FromJSON ForShow
+
+instance ToJSON ForShow
+-- >>> decode (Data.Aeson.encode (ForShow "\248")) :: Maybe ForShow
+-- Just (ForShow "\248")
