diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -13,11 +13,12 @@
   matrix:
     - GHCVER=7.4.2
     - GHCVER=7.6.3
-    - GHCVER=7.8.2 USE_COVERALLS=1 CABAL_FLAGS="-frun-integrated-test"
+    - GHCVER=7.8.3 USE_COVERALLS=1 CABAL_FLAGS="-frun-integrated-test"
     - GHCVER=head
 
 matrix:
   allow_failures:
+    - env: GHCVER=7.4.2
     - env: GHCVER=head
 
 before_install:
@@ -36,6 +37,9 @@
   - export PATH=$HOME/.cabal/bin:$PATH
   - which cabal
   - travis_retry cabal update
+  # GHC 7.8.3 exports transformers-0.3.0, but happy and our package installs transformers 0.4 series.
+  # However, doctest fails when we have multiple version of transformers.
+  # To prevent this, we restrict transformers version to (< 0.4)
   - cabal install happy --constraint="transformers < 0.4"
   - cabal install --only-dependencies --enable-tests
   - "[ -n \"$USE_COVERALLS\" ] && travis_retry cabal install hpc-coveralls || true"
diff --git a/Web/Twitter/Conduit.hs b/Web/Twitter/Conduit.hs
--- a/Web/Twitter/Conduit.hs
+++ b/Web/Twitter/Conduit.hs
@@ -24,7 +24,6 @@
        , module Web.Twitter.Conduit.Stream
        , module Web.Twitter.Conduit.Request
        , module Web.Twitter.Conduit.Parameters
-       , module Web.Twitter.Types.Lens
 
        , MediaData (..)
        , UploadedMedia
@@ -45,7 +44,6 @@
 import Web.Twitter.Conduit.Stream
 import Web.Twitter.Conduit.Request
 import Web.Twitter.Conduit.Parameters
-import Web.Twitter.Types.Lens
 
 -- for haddock
 import Web.Authenticate.OAuth
diff --git a/Web/Twitter/Conduit/Api.hs b/Web/Twitter/Conduit/Api.hs
--- a/Web/Twitter/Conduit/Api.hs
+++ b/Web/Twitter/Conduit/Api.hs
@@ -46,7 +46,8 @@
        -- , friendshipsShow
        , FriendsList
        , friendsList
-       -- , followersList
+       , FollowersList
+       , followersList
        -- , friendshipsLookup
 
        -- * Users
@@ -449,6 +450,34 @@
 friendsList :: UserParam -> APIRequest FriendsList (WithCursor UsersCursorKey User)
 friendsList q = APIRequestGet (endpoint ++ "friends/list.json") (mkUserParam q)
 deriveHasParamInstances ''FriendsList
+    [ "cursor"
+    , "count"
+    , "skip_status"
+    , "include_user_entities"
+    ]
+
+data FollowersList
+-- | Returns query data which asks a cursored collection of user objects for users following the specified user.
+--
+-- You can perform request by using 'call':
+--
+-- @
+-- res <- 'call' '$' 'followersList' ('ScreenNameParam' \"thimura\")
+-- @
+--
+-- Or, you can iterate with 'sourceWithCursor':
+--
+-- @
+-- 'sourceWithCursor' ('followersList' ('ScreenNameParam' \"thimura\")) $$ CL.consume
+-- @
+--
+-- >>> followersList (ScreenNameParam "thimura")
+-- APIRequestGet "https://api.twitter.com/1.1/followers/list.json" [("screen_name","thimura")]
+-- >>> followersList (UserIdParam 69179963)
+-- APIRequestGet "https://api.twitter.com/1.1/followers/list.json" [("user_id","69179963")]
+followersList :: UserParam -> APIRequest FollowersList (WithCursor UsersCursorKey User)
+followersList q = APIRequestGet (endpoint ++ "followers/list.json") (mkUserParam q)
+deriveHasParamInstances ''FollowersList
     [ "cursor"
     , "count"
     , "skip_status"
diff --git a/Web/Twitter/Conduit/Base.hs b/Web/Twitter/Conduit/Base.hs
--- a/Web/Twitter/Conduit/Base.hs
+++ b/Web/Twitter/Conduit/Base.hs
@@ -8,7 +8,7 @@
 
 module Web.Twitter.Conduit.Base
        ( api
-       , apiRequest
+       , getResponse
        , call
        , call'
        , checkResponse
@@ -24,7 +24,6 @@
        , showBS
        ) where
 
-import Prelude as P
 import Web.Twitter.Conduit.Monad
 import Web.Twitter.Conduit.Types
 import Web.Twitter.Conduit.Parameters
@@ -40,12 +39,13 @@
 import Data.Aeson
 import Data.Aeson.Lens
 import qualified Data.Conduit.Attoparsec as CA
+import qualified Data.Text as T
 import qualified Data.Text.Encoding as T
 import Data.ByteString (ByteString)
 import qualified Data.ByteString.Char8 as S8
+import Control.Monad.IO.Class
 import Control.Monad.Trans.Class (lift)
 import Control.Monad.Trans.Resource (MonadResource, MonadThrow, monadThrow)
-import Text.Shakespeare.Text
 import Control.Monad.Logger
 import Control.Lens
 import Unsafe.Coerce
@@ -54,38 +54,49 @@
                       , MonadLogger m
                       )
 
-makeRequest :: MonadThrow m
-            => HT.Method -- ^ HTTP request method (GET or POST)
-            -> String -- ^ API Resource URL
-            -> HT.SimpleQuery -- ^ Query
-            -> TW m HTTP.Request
-makeRequest m url query = do
-    p <- getProxy
+makeRequest :: (MonadThrow m, MonadIO m)
+            => APIRequest apiName responseType
+            -> m HTTP.Request
+makeRequest (APIRequestGet u pa) = makeRequest' "GET" u pa
+makeRequest (APIRequestPost u pa) = makeRequest' "POST" u pa
+makeRequest (APIRequestPostMultipart u param prt) =
+    formDataBody body =<< makeRequest' "POST" u []
+  where
+    body = prt ++ partParam
+    partParam = Prelude.map (uncurry partBS . over _1 T.decodeUtf8) param
+
+makeRequest' :: MonadThrow m
+             => HT.Method -- ^ HTTP request method (GET or POST)
+             -> String -- ^ API Resource URL
+             -> HT.SimpleQuery -- ^ Query
+             -> m HTTP.Request
+makeRequest' m url query = do
     req <- HTTP.parseUrl url
     return $ req { HTTP.method = m
                  , HTTP.queryString = HT.renderSimpleQuery False query
-                 , HTTP.proxy = p
                  , HTTP.checkStatus = \_ _ _ -> Nothing
                  }
 
+{-# DEPRECATED api "use `getResponse =<< makeRequest'`" #-}
 api :: TwitterBaseM m
     => HT.Method -- ^ HTTP request method (GET or POST)
     -> String -- ^ API Resource URL
     -> HT.SimpleQuery -- ^ Query
     -> TW m (Response (C.ResumableSource (TW m) ByteString))
 api m url query =
-    apiRequest =<< makeRequest m url query
+    getResponse =<< makeRequest' m url query
 
-apiRequest :: TwitterBaseM m
-           => HTTP.Request
-           -> TW m (Response (C.ResumableSource (TW m) ByteString))
-apiRequest req = do
-    signedReq <- signOAuthTW req
-    $(logDebug) [st|Signed Request: #{show signedReq}|]
+getResponse :: TwitterBaseM m
+            => HTTP.Request
+            -> TW m (Response (C.ResumableSource (TW m) ByteString))
+getResponse req = do
+    proxy <- getProxy
+    signedReq <- signOAuthTW $ req { HTTP.proxy = proxy }
+    $(logDebug) $ T.pack $ "Signed Request: " ++ show signedReq
     mgr <- getManager
     res <- HTTP.http signedReq mgr
-    $(logDebug) [st|Response Status: #{show $ HTTP.responseStatus res}|]
-    $(logDebug) [st|Response Header: #{show $ HTTP.responseHeaders res}|]
+    $(logDebug) $ T.pack $ "Response Status: " ++ show (HTTP.responseStatus res)
+    $(logDebug) $ T.pack $ "Response Header: " ++ show (HTTP.responseHeaders res)
     return
         Response { responseStatus = HTTP.responseStatus res
                  , responseHeaders = HTTP.responseHeaders res
@@ -96,8 +107,8 @@
 endpoint = "https://api.twitter.com/1.1/"
 
 getValue :: (MonadLogger m, MonadThrow m)
-         => Response (C.ResumableSource (TW m) ByteString)
-         -> TW m (Response Value)
+         => Response (C.ResumableSource m ByteString)
+         -> m (Response Value)
 getValue res = do
     value <- responseBody res C.$$+- sinkJSON
     return $ res { responseBody = value }
@@ -118,8 +129,8 @@
     sci = HT.statusCode responseStatus
 
 getValueOrThrow :: (MonadThrow m, MonadLogger m, FromJSON a)
-                => Response (C.ResumableSource (TW m) ByteString)
-                -> TW m a
+                => Response (C.ResumableSource m ByteString)
+                -> m a
 getValueOrThrow res = do
     val <- getValueOrThrow' res
     case fromJSON val of
@@ -127,23 +138,14 @@
         Error err -> monadThrow $ FromJSONError err
 
 getValueOrThrow' :: (MonadLogger m, MonadThrow m)
-                 => Response (C.ResumableSource (TW m) ByteString)
-                 -> TW m Value
+                 => Response (C.ResumableSource m ByteString)
+                 -> m Value
 getValueOrThrow' res = do
     res' <- getValue res
     case checkResponse res' of
         Left err -> monadThrow err
         Right v -> return v
 
-apiValue :: (TwitterBaseM m, FromJSON a)
-         => HT.Method -- ^ HTTP request method (GET or POST)
-         -> String -- ^ API Resource URL
-         -> HT.SimpleQuery -- ^ Query
-         -> TW m a
-apiValue m url query = do
-    src <- api m url query
-    getValueOrThrow src
-
 call :: (TwitterBaseM m, FromJSON responseType)
      => APIRequest apiName responseType
      -> TW m responseType
@@ -152,15 +154,9 @@
 call' :: (TwitterBaseM m, FromJSON value)
       => APIRequest apiName responseType
       -> TW m value
-call' (APIRequestGet u pa) = apiValue "GET" u pa
-call' (APIRequestPost u pa) = apiValue "POST" u pa
-call' (APIRequestPostMultipart u param prt) = do
-    req <- formDataBody body =<< makeRequest "POST" u []
-    src <- apiRequest req
-    getValueOrThrow src
-  where
-    body = prt ++ partParam
-    partParam = P.map (uncurry partBS . over _1 T.decodeUtf8) param
+call' req = do
+    res <- getResponse =<< makeRequest req
+    getValueOrThrow res
 
 sourceWithMaxId :: ( TwitterBaseM m
                    , FromJSON responseType
@@ -235,7 +231,7 @@
             ) => C.Consumer ByteString m Value
 sinkJSON = do
     js <- CA.sinkParser json
-    $(logDebug) [st|Response JSON: #{show js}|]
+    $(logDebug) $ T.pack $ "Response JSON: " ++ show js
     return js
 
 sinkFromJSON :: ( FromJSON a
diff --git a/Web/Twitter/Conduit/Stream.hs b/Web/Twitter/Conduit/Stream.hs
--- a/Web/Twitter/Conduit/Stream.hs
+++ b/Web/Twitter/Conduit/Stream.hs
@@ -9,7 +9,9 @@
 module Web.Twitter.Conduit.Stream
        (
        -- * StreamingAPI
-         userstream
+         Userstream
+       , userstream
+       , StatusesFilter
        , statusesFilterByFollow
        , statusesFilterByTrack
        -- , statusesFilterByLocation
@@ -52,14 +54,9 @@
 stream' :: (TwitterBaseM m, FromJSON value)
         => APIRequest apiName responseType
         -> TW m (C.ResumableSource (TW m) value)
-stream' (APIRequestGet u pa) = do
-    rsrc <- api "GET" u pa
-    responseBody rsrc $=+ CL.sequence sinkFromJSON
-stream' (APIRequestPost u pa) = do
-    rsrc <- api "POST" u pa
+stream' req = do
+    rsrc <- getResponse =<< makeRequest req
     responseBody rsrc $=+ CL.sequence sinkFromJSON
-stream' APIRequestPostMultipart {} =
-    error "APIRequestPostMultipart is not supported by stream function."
 
 data Userstream
 userstream :: APIRequest Userstream StreamingAPI
diff --git a/Web/Twitter/Conduit/Types/TH.hs b/Web/Twitter/Conduit/Types/TH.hs
--- a/Web/Twitter/Conduit/Types/TH.hs
+++ b/Web/Twitter/Conduit/Types/TH.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 module Web.Twitter.Conduit.Types.TH
        ( makeLenses
        ) where
@@ -5,5 +7,12 @@
 import Control.Lens hiding (makeLenses)
 import Language.Haskell.TH
 
+#if MIN_VERSION_lens(4,4,0)
 makeLenses :: Name -> Q [Dec]
+makeLenses = makeLensesWith (lensRules & lensField .~ myFieldToDef)
+  where
+    myFieldToDef _ n = [TopName (mkName (nameBase n))]
+#else
+makeLenses :: Name -> Q [Dec]
 makeLenses = makeLensesWith (defaultRules & lensField .~ Just)
+#endif
diff --git a/sample/simple.hs b/sample/simple.hs
--- a/sample/simple.hs
+++ b/sample/simple.hs
@@ -4,6 +4,7 @@
 module Main where
 
 import Web.Twitter.Conduit
+import Web.Twitter.Types.Lens
 import Control.Lens
 import Web.Authenticate.OAuth (OAuth(..), Credential(..))
 import qualified Web.Authenticate.OAuth as OA
diff --git a/sample/userstream.hs b/sample/userstream.hs
--- a/sample/userstream.hs
+++ b/sample/userstream.hs
@@ -17,6 +17,7 @@
 import Network.HTTP.Conduit
 
 import Web.Twitter.Conduit
+import Web.Twitter.Types.Lens
 import Common
 import Control.Lens
 
diff --git a/tests/hlint.hs b/tests/hlint.hs
--- a/tests/hlint.hs
+++ b/tests/hlint.hs
@@ -8,5 +8,5 @@
 main :: IO ()
 main = do
   args <- getArgs
-  hints <- hlint $ ["Web", "--cpp-define=HLINT", "--cpp-ansi"] ++ args
+  hints <- hlint $ ["Web", "--cpp-define=HLINT", "--cpp-ansi", "--cpp-file=dist/build/autogen/cabal_macros.h"] ++ args
   unless (null hints) exitFailure
diff --git a/twitter-conduit.cabal b/twitter-conduit.cabal
--- a/twitter-conduit.cabal
+++ b/twitter-conduit.cabal
@@ -1,5 +1,5 @@
 name:              twitter-conduit
-version:           0.0.5.5
+version:           0.0.5.6
 license:           BSD3
 license-file:      LICENSE
 author:            HATTORI Hiroki, Hideyuki Tanaka, Takahiro HIMURA
@@ -31,6 +31,14 @@
   type: git
   location: git://github.com/himura/twitter-conduit.git
 
+flag network-uri
+  description: Get Network.URI from the network-uri package
+  default: True
+
+flag lens-aeson
+  description: Get Data.Aeson.Lens from the lens-aeson package
+  default: True
+
 flag build-samples
   description: build samples
   default: False
@@ -50,13 +58,12 @@
       base >= 4.5 && < 5
     , transformers >= 0.2.2
     , template-haskell
-    , lens >= 4.0
+    , lens >= 4.0 && < 4.5
     , authenticate-oauth >= 1.3
     , resourcet >= 1.0
     , conduit >= 1.1
     , conduit-extra >= 1.1
     , monad-logger
-    , shakespeare >= 2.0
     , http-types
     , http-conduit >= 2.0 && < 2.2
     , http-client >= 0.3
@@ -69,6 +76,9 @@
     , time
     , twitter-types >= 0.2
 
+  if flag(lens-aeson)
+    build-depends: lens-aeson >= 1
+
   exposed-modules:
     Web.Twitter.Conduit
     Web.Twitter.Conduit.Types
@@ -128,7 +138,6 @@
     , text
     , aeson
     , attoparsec >= 0.10
-    , shakespeare
     , data-default
     , resourcet
     , conduit
@@ -139,10 +148,18 @@
     , monad-logger
     , authenticate-oauth
     , case-insensitive
-    , network
     , containers
     , hspec
     , twitter-types >= 0.4.0
+
+  if flag(network-uri)
+    build-depends: network-uri >= 2.6
+  else
+    build-depends: network < 2.6
+
+  if flag(lens-aeson)
+    build-depends: lens-aeson >= 1
+
   other-modules:
     Spec
     ApiSpec
@@ -171,6 +188,7 @@
       , monad-logger
       , authenticate-oauth
       , twitter-conduit
+      , twitter-types
 
 executable userstream
   main-is: userstream.hs
@@ -189,7 +207,6 @@
       , text
       , filepath
       , directory
-      , network
       , process
       , case-insensitive
       , lens
@@ -202,6 +219,12 @@
       , monad-logger
       , authenticate-oauth
       , twitter-conduit
+      , twitter-types
+
+  if flag(network-uri)
+    build-depends: network-uri >= 2.6
+  else
+    build-depends: network < 2.6
 
 executable oauth_callback
   main-is: oauth_callback.hs
