diff --git a/.travis.yml b/.travis.yml
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,51 +1,39 @@
-language: sh
-sudo: required
-
-env:
-  matrix:
-    - GHCVER=7.4.2
-    - GHCVER=7.6.3
-    - GHCVER=7.8.4
-    - GHCVER=7.10.1 CABAL_FLAGS="-frun-integrated-test"
-  global:
-    # HALCYON_AWS_ACCESS_KEY_ID
-    - secure: "PTnc4TbawOwE6Z3v9QP5TRVYKg7FXU4PKgMqRPOy7HRwCriF+v4CxkyFgI2Ve614z85dF3kq9qZrhtyRuTSTL/SAu17Tz57+XhH0laGDF/7/h637ZRxy0+OBv/EDO0z6cJ1+8ndAl+5fbblQ8nmn5fgPrVCfbNIpujcjOSfs8+4="
-    # HALCYON_AWS_SECRET_ACCESS_KEY
-    - secure: "RCLM7gnzb0b4WgYeDQ+z1cn+IvsJMaqldLppJRM/b+oBeH5v+IZ0BL4hRk187iZsXJdMADC6MAeEchcV0rTseit/zKQAk6fx7360Sv+MdlzNbVHSiO7LpwbKTOvMfIQ5hB/S8oTuC1qmY18JhShO1lE6RpFsitwNdENRZv85fuQ="
-
-    # OAUTH_CONSUMER_KEY
-    - secure: "U3hh6wJf87tdZmwLtPyMQ0ci39ouKvTm/JCi0CCz2jaPvWZR+4Tt7aYV5WYqzjSmgfBOqKpXTpwFBcvvWRty8rI1b8OtrlljC1zUcgf/hsz3hfPtv+GKW/ldYnqg7znyeAdxWEF1a4JszKgOJaGMdX7zSpFewgwEq7T4jAlebLA="
-    # OAUTH_CONSUMER_SECRET
-    - secure: "I4BGd16zNQE3WjnwgdT7OM5sIIMtT9DMFPNdnWJPcgYndDovnFAUDoTomaGo0Wue4h64vGWl26f2Nm04i2upJXxkzFFtU5Az6cwUjzkOve1yqrkkyPFTXC8MLQYX3Zz8scQ8h1IJCn0Luu5HsHsool6IFZpiUovLZbDXmY44yH4="
-    # OAUTH_ACCESS_TOKEN
-    - secure: "dW2pYRplxJ7HmJEo3lMgLlzfdOylBvWiV4PJt1j4GMDPJBOu3RM0h3zNkkxDoS9D0wWRkBEH0iN2Bh08v2z7sJtF3f/kgLvPlOy5mNSYcozwMdHJRlJEcXaGULHbZ4p79lVIOdTAhY2WU2QdP7PEv0BiqqVcysnfK0TGkTa+KEc="
-    # OAUTH_ACCESS_SECRET
-    - secure: "I5hzi7sONDn8KJAhmkroHsGNJ2zUxYq2iGamTV9lgMUDH0bwpMx+guzfZr+fGesdlUphM0t+ZCh9YH8BoVJsjZ/db9u/lotg78DKp1QwhrWnISqWj6TIfXrSLPkBwY+xFtxl6Ihsjyl+ileiK5sb0C9mC+zXidgBqEM73miAokY="
+sudo: false
+language: c
 
 matrix:
-  allow_failures:
-    - env: GHCVER=7.4.2
-    - env: GHCVER=7.6.3
+  include:
+    - env: GHCVER=7.8.4 STACK_YAML=stack-lts-2.yml
+      addons:
+        apt:
+          sources: [ hvr-ghc ]
+          packages: [ ghc-7.8.4 ]
+    - env: GHCVER=7.10.2 STACK_YAML=stack-lts-3.yml
+      addons:
+        apt:
+          sources: [ hvr-ghc ]
+          packages: [ ghc-7.10.2 ]
 
 before_install:
-  - eval "$( curl -sL https://github.com/mietek/halcyon/raw/master/setup.sh )"
-  - export HALCYON_GHC_VERSION=$GHCVER HALCYON_CABAL_VERSION=1.22.4.0
-  - export HALCYON_S3_BUCKET=himura-halcyon
+  - mkdir -p ~/.local/bin
+  - export PATH=~/.local/bin:$PATH
+  - travis_retry curl -L https://github.com/commercialhaskell/stack/releases/download/v0.1.4.0/stack-0.1.4.0-x86_64-linux.tar.gz | tar xz -C ~/.local/bin
+  - export PATH=/opt/ghc/$GHCVER/bin:$PATH
 
 install:
-  - HALCYON_SANDBOX_EXTRA_APPS="hpc-coveralls happy" HALCYON_SANDBOX_EXTRA_CONFIGURE_FLAGS="--enable-tests --only-dependencies $CABAL_FLAGS" halcyon build
-  - ln -s /app/sandbox/cabal.sandbox.config .
+  - travis_wait stack --no-terminal --skip-ghc-check setup
+  - travis_wait stack --no-terminal --skip-ghc-check test --only-snapshot
 
 script:
-  - cabal configure --enable-tests --enable-library-coverage $CABAL_FLAGS
-  - travis_wait run-cabal-test --cabal-name=cabal --show-details=always
+  - travis_wait stack --no-terminal --skip-ghc-check test
 
   # tests source distribution package
-  - cabal sdist
+  - mkdir -p ./.test-sdist
+  - stack sdist 2>&1 | tee ./.test-sdist/sdist-log
   - |
     PKGNAME="$(cabal info . | awk '/^\*/{print $2}')"
-    SRCTGZ="${PKGNAME}.tar.gz"
-    cd dist/
+    SRCTGZ=$(readlink -f $(awk '/^Wrote sdist tarball to / { print $5 }' sdist-log))
+    cd ./.test-sdist
     if [ -f "$SRCTGZ" ]; then
       tar xvzf "$SRCTGZ"
       cd "$PKGNAME"
@@ -57,5 +45,6 @@
       fi
     fi
 
-after_script:
-  - hpc-coveralls --exclude-dir=tests tests
+cache:
+  directories:
+    - ~/.stack
diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,3 +1,8 @@
+## 0.1.2
+
+* Streaming API: Support multiple filters (#41)
+* Include parameters in body for POST requests (#40)
+
 ## 0.1.1.1
 
 * Fix warnings on GHC 7.10
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
@@ -68,10 +68,14 @@
              -> IO HTTP.Request
 makeRequest' m url query = do
     req <- HTTP.parseUrl url
-    return $ req { HTTP.method = m
-                 , HTTP.queryString = HT.renderSimpleQuery False query
-                 , HTTP.checkStatus = \_ _ _ -> Nothing
-                 }
+    let params = HT.renderSimpleQuery False query
+        addParams =
+            if m == "POST"
+            then HTTP.urlEncodedBody query
+            else \r -> r { HTTP.queryString = params }
+    return $ addParams $ req { HTTP.method = m
+                             , HTTP.checkStatus = \_ _ _ -> Nothing
+                             }
 
 getResponse :: MonadResource m
             => TWInfo
diff --git a/Web/Twitter/Conduit/Monad.hs b/Web/Twitter/Conduit/Monad.hs
--- a/Web/Twitter/Conduit/Monad.hs
+++ b/Web/Twitter/Conduit/Monad.hs
@@ -69,9 +69,7 @@
 runTW :: ( MonadBaseControl IO m
          , MonadIO m
          ) => TWInfo -> TW (ResourceT m) a -> m a
-runTW info st = do
-    mgr <- liftIO $ HTTP.newManager HTTP.tlsManagerSettings
-    runResourceT $ runTWManager info mgr st
+runTW info st = HTTP.withManager $ \mgr -> runTWManager info mgr st
 
 runTWManager :: MonadBaseControl IO m => TWInfo -> HTTP.Manager -> TW (ResourceT m) a -> ResourceT m a
 runTWManager info mgr st = runReaderT st $ TWEnv info mgr
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
@@ -11,6 +11,8 @@
          Userstream
        , userstream
        , StatusesFilter
+       , FilterParameter (..)
+       , statusesFilter
        , statusesFilterByFollow
        , statusesFilterByTrack
        -- , statusesFilterByLocation
@@ -33,6 +35,7 @@
 import qualified Data.Conduit as C
 import qualified Data.Conduit.List as CL
 import qualified Data.Conduit.Internal as CI
+import qualified Data.List as L
 import qualified Data.Text as T
 import Control.Monad.IO.Class
 import Data.Aeson
@@ -77,18 +80,44 @@
     , "replies"
     ]
 
+-- https://dev.twitter.com/streaming/overview/request-parameters
+data FilterParameter = Follow [UserId]
+                     | Track [T.Text]
+
+-- | Returns statuses/filter.json API query data.
+--
+-- >>> statusesFilter [Follow [1,2,3]]
+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("follow","1,2,3")]
+-- >>> statusesFilter [Track ["haskell","functional"]]
+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("track","haskell,functional")]
+-- >>> statusesFilter [Follow [1,2,3],Track ["haskell","functional"]]
+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("follow","1,2,3"),("track","haskell,functional")]
+statusesFilter :: [FilterParameter] -> APIRequest StatusesFilter StreamingAPI
+statusesFilter = APIRequestPost statusesFilterEndpoint . L.map paramToQueryItem
+
+paramToQueryItem :: FilterParameter -> APIQueryItem
+paramToQueryItem (Follow userIds) = ("follow", PVIntegerArray userIds)
+paramToQueryItem (Track texts) = ("track", PVStringArray texts)
+
 statusesFilterEndpoint :: String
 statusesFilterEndpoint = "https://stream.twitter.com/1.1/statuses/filter.json"
 
 data StatusesFilter
+
+-- | Returns statuses/filter.json API query data.
+--
+-- >>> statusesFilterByFollow [1,2,3]
+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("follow","1,2,3")]
 statusesFilterByFollow :: [UserId] -> APIRequest StatusesFilter StreamingAPI
-statusesFilterByFollow userIds =
-    APIRequestPost statusesFilterEndpoint [("follow", PVIntegerArray userIds)]
+statusesFilterByFollow userIds = statusesFilter [Follow userIds]
 
+-- | Returns statuses/filter.json API query data.
+--
+-- >>> statusesFilterByTrack "haskell"
+-- APIRequestPost "https://stream.twitter.com/1.1/statuses/filter.json" [("track","haskell")]
 statusesFilterByTrack :: T.Text -- ^ keyword
                       -> APIRequest StatusesFilter StreamingAPI
-statusesFilterByTrack keyword =
-    APIRequestPost statusesFilterEndpoint [("track", PVString keyword)]
+statusesFilterByTrack keyword = statusesFilter [Track [keyword]]
 
 deriveHasParamInstances ''StatusesFilter
     [ "language"
diff --git a/tests/doctests.hs b/tests/doctests.hs
--- a/tests/doctests.hs
+++ b/tests/doctests.hs
@@ -2,19 +2,18 @@
 
 import Build_doctests (deps)
 import Test.DocTest
+import Data.Maybe
+import System.Environment
 
 main = do
-  let sources =
-          [ "Web/Twitter/Conduit.hs"
-          ]
-
+  env <- getEnvironment
+  let dist = fromMaybe "dist" $ lookup "HASKELL_DIST_DIR" env
+      autogenDir = dist ++ "/build/autogen"
+      args = [ "-i."
+             , "-i" ++ autogenDir
+             , "-optP-include"
+             , "-optP" ++ autogenDir ++ "/cabal_macros.h"
+             , "-hide-all-packages"
+             ] ++ map ("-package=" ++) deps
+      sources = ["Web/Twitter/Conduit.hs"]
   doctest $ args ++ sources
-  where
-    args = ( "-i."
-           : "-idist/build/autogen"
-           : "-optP-include"
-           : "-optPdist/build/autogen/cabal_macros.h"
-           : "-hide-all-packages"
-           : map ("-package=" ++) deps
-           )
-
diff --git a/tests/hlint.hs b/tests/hlint.hs
--- a/tests/hlint.hs
+++ b/tests/hlint.hs
@@ -1,6 +1,7 @@
 module Main where
 
 import Control.Monad
+import Data.Maybe
 import Language.Haskell.HLint
 import System.Environment
 import System.Exit
@@ -8,5 +9,12 @@
 main :: IO ()
 main = do
   args <- getArgs
-  hints <- hlint $ ["Web", "--cpp-define=HLINT", "--cpp-ansi", "--cpp-file=dist/build/autogen/cabal_macros.h"] ++ args
+  cabalMacros <- getCabalMacrosPath
+  hints <- hlint $ ["Web", "--cpp-define=HLINT", "--cpp-ansi", "--cpp-file=" ++ cabalMacros] ++ args
   unless (null hints) exitFailure
+
+getCabalMacrosPath :: IO FilePath
+getCabalMacrosPath = do
+    env <- getEnvironment
+    let dist = fromMaybe "dist" $ lookup "HASKELL_DIST_DIR" env
+    return $ dist ++ "/build/autogen/cabal_macros.h"
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.1.1.1
+version:           0.1.2
 license:           BSD3
 license-file:      LICENSE
 author:            HATTORI Hiroki, Hideyuki Tanaka, Takahiro HIMURA
@@ -117,7 +117,7 @@
 test-suite spec_main
   type: exitcode-stdio-1.0
   main-is: spec_main.hs
-  hs-source-dirs: tests, .
+  hs-source-dirs: tests
 
   if flag(run-integrated-test)
     CPP-Options: -DRUN_INTEGRATED_TEST
@@ -147,6 +147,7 @@
     , hspec
     , twitter-types >= 0.6
     , twitter-types-lens >= 0.6
+    , twitter-conduit
 
   if flag(network-uri)
     build-depends: network-uri >= 2.6
@@ -222,6 +223,9 @@
     build-depends: network-uri >= 2.6
   else
     build-depends: network < 2.6
+
+  other-modules:
+    Common
 
 executable oauth_callback
   main-is: oauth_callback.hs
