diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,12 @@
+# Version 0.5.2
+
+* Fix MonadFail issue
+
+# Version 0.5.1
+
+* Remove crypto-api dependency and move over to memory package
+* Have MonadFail constraint
+
 # Version 0.5.0
 
 * Change type signature of `fbHttpManager` from `site -> Manager` to `(Y.MonadHandler m, Y.HandlerSite m ~ site) => m HTTP.Manager`.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,6 +1,11 @@
 yesod-fb
 ----------
 
+[![Hackage](https://img.shields.io/hackage/v/yesod-fb.svg)](https://hackage.haskell.org/package/yesod-fb)
+[![Stackage
+Nightly](http://stackage.org/package/yesod-fb/badge/nightly)](http://stackage.org/nightly/package/yesod-fb)
+[![Stackage
+LTS](http://stackage.org/package/yesod-fb/badge/lts)](http://stackage.org/lts/package/yesod-fb)
 [![Build Status](https://travis-ci.org/psibi/yesod-fb.svg?branch=master)](https://travis-ci.org/psibi/yesod-fb)
 
 Glue functions between yesod and the `fb` package.
diff --git a/src/Yesod/Facebook.hs b/src/Yesod/Facebook.hs
--- a/src/Yesod/Facebook.hs
+++ b/src/Yesod/Facebook.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE OverloadedStrings, TypeFamilies #-}
+{-# LANGUAGE OverloadedStrings, TypeFamilies, ScopedTypeVariables #-}
 module Yesod.Facebook
   ( -- * Running @FacebookT@ actions inside @HandlerT@
     YesodFacebook(..)
@@ -15,9 +15,10 @@
   ) where
 
 import Control.Applicative ((<$>))
-import Crypto.Classes (constTimeEq)
 import Network.HTTP.Client.TLS (getGlobalManager)
 import Data.ByteString.Char8 () -- IsString
+import Data.ByteArray (convert, ScrubbedBytes)
+import Control.Monad.Fail
 import qualified Data.Aeson as A
 import qualified Data.ByteString.Lazy.Char8 as L
 import qualified Data.Conduit as C
@@ -92,10 +93,10 @@
 -- fails (signature header not found, invalid signature, invalid
 -- JSON).
 parseRealTimeUpdateNotifications ::
-  (Y.MonadHandler m, Y.HandlerSite m ~ site, YesodFacebook site, A.FromJSON a) =>
+  (Y.MonadHandler m, Y.HandlerSite m ~ site, YesodFacebook site, A.FromJSON a, MonadFail m) =>
   m (FB.RealTimeUpdateNotification a)
 parseRealTimeUpdateNotifications = do
-  let myFail = fail . ("parseRealTimeUpdateNotifications: " ++)
+  let myFail = Prelude.fail . ("parseRealTimeUpdateNotifications: " ++)
   -- Get request's signature.
   waiReq <- Y.waiRequest
   case lookup "X-Hub-Signature" (W.requestHeaders waiReq) of
@@ -132,7 +133,7 @@
     -- FIXME: Is hub.mode always subscribe?  Facebook's docs say
     -- so, but I don't believe them =).
     (Just "subscribe", Just hubChallenge, Just hubVerifyToken)
-      | TE.encodeUtf8 hubVerifyToken `constTimeEq` token ->
+      | (convert (TE.encodeUtf8 hubVerifyToken) :: ScrubbedBytes) == (convert token) ->
           return $ Y.RepPlain (Y.toContent hubChallenge)
     _ -> Y.notFound
 
diff --git a/yesod-fb.cabal b/yesod-fb.cabal
--- a/yesod-fb.cabal
+++ b/yesod-fb.cabal
@@ -1,5 +1,5 @@
 Name:                yesod-fb
-Version:             0.5.0
+Version:             0.5.2
 Synopsis:            Useful glue functions between the fb library and Yesod.
 Homepage:            https://github.com/psibi/yesod-fb
 License:             BSD3
@@ -27,9 +27,9 @@
 
   Build-depends:   base         >= 4.9.0     && < 5
                  , yesod-core   >= 1.6.0
-                 , fb           >= 1.2.0
+                 , fb           >= 2.0
                  , http-client-tls
-                 , crypto-api
+                 , memory
                  , http-conduit >= 2.3.0
                  , wai
                  , conduit      >= 1.3.0
