diff --git a/openid.cabal b/openid.cabal
--- a/openid.cabal
+++ b/openid.cabal
@@ -1,5 +1,5 @@
 name:               openid
-version:            0.2.0.2
+version:            0.2.1.0
 cabal-version:      >= 1.8
 synopsis:           An implementation of the OpenID-2.0 spec.
 description:        An implementation of the OpenID-2.0 spec.
@@ -27,14 +27,16 @@
 
 library
   build-depends:   base       >= 4.0.0.0 && < 5,
+                   base-compat,
                    bytestring >= 0.9.1.0,
                    containers >= 0.2.0.0,
                    HTTP       >= 4000.0.9,
                    monadLib   >= 3.6.0.0,
-                   network    >= 2.2.0.0,
+                   network    >= 2.6.0.0,
+                   network-uri>= 2.6.0.0,
                    time       >= 1.1.0.0,
                    xml        >= 1.3.0.0,
-                   HsOpenSSL  >= 0.9.0.0
+                   HsOpenSSL  >= 0.11.4
   hs-source-dirs:  src
   exposed-modules: Codec.Binary.Base64,
                    Codec.Encryption.DH,
diff --git a/src/Data/Digest/OpenSSL/SHA.hs b/src/Data/Digest/OpenSSL/SHA.hs
--- a/src/Data/Digest/OpenSSL/SHA.hs
+++ b/src/Data/Digest/OpenSSL/SHA.hs
@@ -16,6 +16,7 @@
 import Control.Exception
 import Foreign
 import Foreign.C
+import System.IO.Unsafe (unsafePerformIO)
 
 data EVP_MD
 data EVP_MD_CTX
@@ -38,11 +39,11 @@
   bracket c_EVP_MD_CTX_create c_EVP_MD_CTX_destroy $ \ evp_md_ctx ->
   withArrayLen (map (toEnum . fromEnum) bs) $ \ len arr -> do
     h <- hf
-    c_EVP_DigestInit_ex  evp_md_ctx h nullPtr
-    c_EVP_DigestUpdate   evp_md_ctx arr (toEnum len)
+    _ <- c_EVP_DigestInit_ex  evp_md_ctx h nullPtr
+    _ <- c_EVP_DigestUpdate   evp_md_ctx arr (toEnum len)
     allocaArray 64 $ \ hash ->
       alloca $ \ num  -> do
-        c_EVP_DigestFinal_ex evp_md_ctx hash num
+        _ <- c_EVP_DigestFinal_ex evp_md_ctx hash num
         n <- peek num
         hs <- peekArray (fromEnum n) hash
         return $ map (toEnum . fromEnum) hs
diff --git a/src/Network/OpenID/Association.hs b/src/Network/OpenID/Association.hs
--- a/src/Network/OpenID/Association.hs
+++ b/src/Network/OpenID/Association.hs
@@ -36,6 +36,8 @@
 import Network.OpenID.Utils
 
 -- Libraries
+import Prelude()
+import Prelude.Compat
 import Data.Bits
 import Data.Maybe
 import Data.Time
@@ -123,7 +125,7 @@
 
 -- | Association monad
 newtype Assoc m a = Assoc (ReaderT (AssocEnv m) (ExceptionT Error m) a)
-  deriving (Functor,Monad)
+  deriving (Functor,Applicative,Monad)
 
 instance MonadT Assoc where
   lift = Assoc . lift . lift
diff --git a/src/Network/OpenID/Association/Map.hs b/src/Network/OpenID/Association/Map.hs
--- a/src/Network/OpenID/Association/Map.hs
+++ b/src/Network/OpenID/Association/Map.hs
@@ -32,8 +32,8 @@
 instance AssociationManager AssociationMap where
   findAssociation (AM m) p = snd `fmap` Map.lookup (showProvider p) m
 
-  addAssociation (AM m) now p a = AM (Map.insert (showProvider p) (expire,a) m)
-    where expire = addUTCTime (toEnum (assocExpiresIn a)) now
+  addAssociation (AM m) now p a = AM (Map.insert (showProvider p) (ex,a) m)
+    where ex = addUTCTime (toEnum (assocExpiresIn a)) now
 
   expire (AM m) now = AM (Map.filter ((now >) . fst) m)
 
diff --git a/src/Network/OpenID/AttributeExchange.hs b/src/Network/OpenID/AttributeExchange.hs
--- a/src/Network/OpenID/AttributeExchange.hs
+++ b/src/Network/OpenID/AttributeExchange.hs
@@ -9,7 +9,8 @@
     getAxFields
 ) where
 
-import Control.Applicative
+import Prelude()
+import Prelude.Compat
 import Control.Monad (guard)
 import Network.OpenID.Types
 
diff --git a/src/Network/OpenID/Discovery.hs b/src/Network/OpenID/Discovery.hs
--- a/src/Network/OpenID/Discovery.hs
+++ b/src/Network/OpenID/Discovery.hs
@@ -54,10 +54,10 @@
       uri = fromMaybe (getIdentifier ident) mb_loc
   case parseURI uri of
     Nothing  -> err "Unable to parse identifier as a URI"
-    Just uri -> do
+    Just u   -> do
       estr <- lift $ resolve Request
         { rqMethod  = GET
-        , rqURI     = uri
+        , rqURI     = u
         , rqHeaders = []
         , rqBody    = ""
         }
diff --git a/src/Network/OpenID/SSL.hs b/src/Network/OpenID/SSL.hs
--- a/src/Network/OpenID/SSL.hs
+++ b/src/Network/OpenID/SSL.hs
@@ -15,12 +15,13 @@
         sslConnect
     ) where
 
+import Prelude()
+import Prelude.Compat
 import OpenSSL.Session as Session
 import qualified Control.Exception as E
 import Network.Socket
 import Network.Stream
 import qualified Data.ByteString as B
-import Control.Applicative
 import Data.ByteString.Internal (w2c, c2w)
 import Data.Word
 
