diff --git a/changelog b/changelog
--- a/changelog
+++ b/changelog
@@ -1,3 +1,8 @@
+2014-08-02 0.4.0
+================
+
+	* Change the upper boundary of base from 4.7 to 4.8 (#5)
+
 2014-06-02 0.3.0
 ================
 
diff --git a/jwt.cabal b/jwt.cabal
--- a/jwt.cabal
+++ b/jwt.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                jwt
-version:             0.3.0
+version:             0.4.0
 synopsis:            JSON Web Token (JWT) decoding and encoding
 license:             MIT
 license-file:        LICENSE
@@ -31,7 +31,7 @@
 library
   exposed-modules:     Web.JWT
   other-modules:       Web.Base64
-  build-depends:       base >= 4.6 && < 4.7
+  build-depends:       base >= 4.6 && < 4.8
                      , cryptohash               >= 0.11
                      , base64-bytestring        >= 1.0
                      , bytestring               >= 0.10
diff --git a/tests/src/Web/JWTTests.hs b/tests/src/Web/JWTTests.hs
--- a/tests/src/Web/JWTTests.hs
+++ b/tests/src/Web/JWTTests.hs
@@ -88,9 +88,14 @@
       , unregisteredClaims = Map.fromList [("http://example.com/is_root", Bool True)]
     }
         jwt = encodeUnsigned cs
-    -- Verified using https://py-jwt-decoder.appspot.com/
-    "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJodHRwOi8vZXhhbXBsZS5jb20vaXNfcm9vdCI6dHJ1ZSwiaXNzIjoiRm9vIn0." @=? jwt
+    -- Verify the shape of the JWT, ensure the shape of the triple of
+    -- <header>.<claims>.<signature>
+    let (h:c:s:_) = T.splitOn "." jwt
+    False @=? T.null h
+    False @=? T.null c
+    True  @=? T.null s
 
+
 case_encodeDecodeJWTNoMac = do
     let cs = def {
         iss = stringOrURI "Foo"
@@ -124,23 +129,16 @@
         t   = encodeSigned HS256 key cs
     iss' @=? tokenIssuer t
 
-
-case_encodeJWTClaimsSet = do
-    let cs = def {
-        iss = stringOrURI "Foo"
-    }
-    -- This is a valid JWT string that can be decoded with the given secret using the ruby JWT library
-    "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJGb28ifQ.dfhkuexBONtkewFjLNz9mZlFc82GvRkaZKD8Pd53zJ8" @=? encodeSigned HS256 (secret "secret") cs
-
-case_encodeJWTClaimsSetCustomClaims = do
+case_encodeDecodeJWTClaimsSetCustomClaims = do
     let now = 1234
         cs = def {
         iss = stringOrURI "Foo"
       , iat = intDate now
       , unregisteredClaims = Map.fromList [("http://example.com/is_root", Bool True)]
     }
-    -- The expected string can be decoded using the ruby-jwt library
-    "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpYXQiOjEyMzQsImh0dHA6Ly9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlLCJpc3MiOiJGb28ifQ.F3VCSxBBnY2caX4AH4GvIHyTVUhOnJF9Av_G_N4m710" @=? encodeSigned HS256 (secret "secret") cs
+    let secret' = secret "secret"
+        jwt = decodeAndVerifySignature secret' $ encodeSigned HS256 secret' cs
+    Just cs @=? fmap claims jwt
 
 
 prop_stringOrURIProp = f
