diff --git a/example/Keys.hs.sample b/example/Keys.hs.sample
--- a/example/Keys.hs.sample
+++ b/example/Keys.hs.sample
@@ -33,7 +33,7 @@
 facebookKey :: OAuth2
 facebookKey = OAuth2 { oauthClientId = "xxxxxxxxxxxxxxx"
                      , oauthClientSecret = "xxxxxxxxxxxxxxxxxxxxxx"
-                     , oauthCallback = Just "http://test.com/cb"
+                     , oauthCallback = Just "http://t.haskellcn.org/cb"
                      , oauthOAuthorizeEndpoint = "https://www.facebook.com/dialog/oauth"
                      , oauthAccessTokenEndpoint = "https://graph.facebook.com/v2.3/oauth/access_token"
                      }
@@ -53,3 +53,11 @@
                    , oauthOAuthorizeEndpoint = "https://www.fitbit.com/oauth2/authorize"
                    , oauthAccessTokenEndpoint = "https://api.fitbit.com/oauth2/token"
                    }
+
+stackexchangeKey :: OAuth2
+stackexchangeKey = OAuth2 { oauthClientId = "xx"
+                          , oauthClientSecret = "xxxxxxxxxxxxxxx"
+                          , oauthCallback = Just "http://c.haskellcn.org/cb"
+                          , oauthOAuthorizeEndpoint = "https://stackexchange.com/oauth"
+                          , oauthAccessTokenEndpoint = "https://stackexchange.com/oauth/access_token"
+                          }
diff --git a/example/StackExchange/test.hs b/example/StackExchange/test.hs
new file mode 100644
--- /dev/null
+++ b/example/StackExchange/test.hs
@@ -0,0 +1,81 @@
+{-# LANGUAGE TemplateHaskell   #-}
+{-# LANGUAGE FlexibleContexts  #-}
+{-# LANGUAGE OverloadedStrings #-}
+
+-- | Github API: http://developer.github.com/v3/oauth/
+
+module Main where
+
+import           Control.Applicative
+import           Control.Monad        (mzero)
+import           Data.Aeson
+import           Data.Aeson.TH                 (defaultOptions, deriveJSON)
+import qualified Data.ByteString      as BS
+import qualified Data.ByteString.Lazy.Char8    as BSL
+import           Data.Text            (Text)
+import qualified Data.Text            as T
+import qualified Data.Text.Encoding   as T
+import           Network.HTTP.Conduit
+
+import           Network.OAuth.OAuth2
+
+import           Keys
+
+data SiteInfo = SiteInfo { items   :: [SiteItem]
+                         , has_more :: Bool
+                         , quota_max :: Integer
+                         , quota_remaining :: Integer
+                         } deriving (Show, Eq)
+
+data SiteItem = SiteItem { new_active_users :: Integer
+                           , total_users :: Integer
+                           , badges_per_minute :: Double
+                           , total_badges :: Integer
+                           , total_votes :: Integer
+                           , total_comments :: Integer
+                           , answers_per_minute :: Double
+                           , questions_per_minute :: Double
+                           , total_answers :: Integer
+                           , total_accepted :: Integer
+                           , total_unanswered :: Integer
+                           , total_questions :: Integer
+                           , api_revision :: Text
+                         } deriving (Show, Eq)
+
+$(deriveJSON defaultOptions ''SiteInfo)
+$(deriveJSON defaultOptions ''SiteItem)
+
+
+main :: IO ()
+main = do
+    print $ authorizationUrl stackexchangeKey
+    putStrLn "visit the url and paste code here: "
+    code <- getLine
+    mgr <- newManager tlsManagerSettings
+    let (url, body) = accessTokenUrl stackexchangeKey (sToBS code)
+    token <- doSimplePostRequest mgr stackexchangeKey url (body)
+    print (token :: OAuth2Result BSL.ByteString)
+    case token of
+      Right at  -> siteInfo mgr (getAccessToken at) >>= print
+      Left _    -> putStrLn "no access token found yet"
+
+
+
+-- stackexchange access token api does not respond json but an string
+-- https://api.stackexchange.com/docs/authentication
+getAccessToken :: BSL.ByteString -> AccessToken
+getAccessToken str = let xs = BSL.split '&' str
+                         ys = BSL.split '=' (xs !! 0)
+                     in
+                       AccessToken { accessToken = BSL.toStrict (ys !! 1)
+                                   , refreshToken = Nothing
+                                   , expiresIn = Nothing
+                                   , tokenType = Nothing
+                                   }
+
+-- | Test API: info
+siteInfo :: Manager -> AccessToken -> IO (OAuth2Result SiteInfo)
+siteInfo mgr token = authGetJSON mgr token "https://api.stackexchange.com/2.2/info?site=stackoverflow"
+
+sToBS :: String -> BS.ByteString
+sToBS = T.encodeUtf8 . T.pack
diff --git a/hoauth2.cabal b/hoauth2.cabal
--- a/hoauth2.cabal
+++ b/hoauth2.cabal
@@ -1,6 +1,6 @@
 Name:                hoauth2
 -- http://wiki.haskell.org/Package_versioning_policy
-Version:             0.5.3
+Version:             0.5.3.1
 
 Synopsis:            Haskell OAuth2 authentication client
 Description:
@@ -213,3 +213,27 @@
                    -fno-warn-unused-do-bind -fno-warn-orphans
   else
       ghc-options: -Wall -fwarn-tabs -funbox-strict-fields
+
+Executable test-stackexchange
+  if flag(test)
+    Buildable: True
+  else
+    Buildable: False
+
+  main-is:             StackExchange/test.hs
+  hs-source-dirs:      example
+  default-language:    Haskell2010
+  build-depends:       base              >= 4.5    && < 5,
+                       http-types        >= 0.9    && < 0.10,
+                       http-conduit      >= 2.0    && < 2.2,
+                       text              >= 0.11   && < 1.3,
+                       bytestring        >= 0.9    && < 0.11,
+                       aeson             >= 0.9    && < 0.12,
+                       hoauth2
+
+  if impl(ghc >= 6.12.0)
+      ghc-options: -Wall -fwarn-tabs -funbox-strict-fields
+                   -fno-warn-unused-do-bind
+  else
+      ghc-options: -Wall -fwarn-tabs -funbox-strict-fields
+
diff --git a/src/Network/OAuth/OAuth2/HttpClient.hs b/src/Network/OAuth/OAuth2/HttpClient.hs
--- a/src/Network/OAuth/OAuth2/HttpClient.hs
+++ b/src/Network/OAuth/OAuth2/HttpClient.hs
@@ -149,7 +149,7 @@
 handleResponse rsp =
     if HT.statusIsSuccessful (responseStatus rsp)
         then Right $ responseBody rsp
-        else Left $ BSL.append "Gaining token failed: " (responseBody rsp)
+        else Left $ BSL.append "hoauth2.HttpClient.parseResponseJSON/Gaining token failed: " (responseBody rsp)
 
 -- | Parses a @OAuth2Result BSL.ByteString@ into @FromJSON a => a@
 parseResponseJSON :: FromJSON a
@@ -157,7 +157,7 @@
               -> OAuth2Result a
 parseResponseJSON (Left b) = Left b
 parseResponseJSON (Right b) = case decode b of
-                            Nothing -> Left ("Could not decode JSON" `BSL.append` b)
+                            Nothing -> Left ("hoauth2.HttpClient.parseResponseJSON/Could not decode JSON: " `BSL.append` b)
                             Just x -> Right x
 
 -- | Set several header values:
