diff --git a/Changelog b/Changelog
--- a/Changelog
+++ b/Changelog
@@ -1,3 +1,10 @@
+hslogstash (0.3.6) precise; urgency=low
+
+  * Bumped http-conduit version.
+  * Added logstash firehose
+
+ -- Bartavelle <bartavelle@gmail.com>  Mon, 27 Dec 2013 08:18:07 +0100
+
 hslogstash (0.3.5) precise; urgency=low
 
   * Bumped text version bound.
diff --git a/Data/Conduit/ElasticSearch.hs b/Data/Conduit/ElasticSearch.hs
--- a/Data/Conduit/ElasticSearch.hs
+++ b/Data/Conduit/ElasticSearch.hs
@@ -25,6 +25,7 @@
 import Network.HTTP.Types
 import Control.Lens hiding ((.=))
 import Control.Lens.Aeson
+import Data.Default
 
 import qualified Data.HashMap.Strict as HM
 import qualified Data.Vector as V
@@ -72,7 +73,7 @@
     parseJSON _          = mzero
 
 -- | A source of Logstash messages generated from an ElasticSearch query.
-esSearchSource :: (MonadResource m) => Maybe (Request m) -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.
+esSearchSource :: (MonadResource m) => Maybe Request -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.
                -> BS.ByteString -- ^ Hostname of the ElasticSearch server
                -> Int -- ^ Port of the HTTP interface (usually 9200)
                -> BS.ByteString -- ^ Prefix of the index (usually logstash)
@@ -107,7 +108,7 @@
                     when (nexti < total) (self nexti)
                 _ -> yield (Left errbody)
 
-esScan :: Maybe (Request (ResourceT IO)) -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.
+esScan :: Maybe Request -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.
                -> BS.ByteString -- ^ Hostname of the ElasticSearch server
                -> Int -- ^ Port of the HTTP interface (usually 9200)
                -> BS.ByteString -- ^ Name of the index (Something like logstash-2013.12.06)
@@ -144,7 +145,7 @@
                 (Just (String nscr), hts) -> yield (Right hts) >> self nscr
                 _ -> yield (Left (fromMaybe "could not parse json" respbody))
 
-safeQuery :: Request (ResourceT IO) -> IO (Response BSL.ByteString)
+safeQuery :: Request -> IO (Response BSL.ByteString)
 safeQuery req = catch (withManager $ httpLbs ureq ) (\e -> print (e :: SomeException) >> threadDelay 500000 >> safeQuery req)
     where
         ureq = req { responseTimeout = Nothing }
@@ -152,7 +153,7 @@
 -- | Takes a "LogstashMessage", and returns the result of the ElasticSearch request
 -- along with the value in case of errors, or ElasticSearch's values in case of
 -- success.
-esConduit :: (MonadResource m) => Maybe (Request m) -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.
+esConduit :: (MonadResource m) => Maybe Request -- ^ Defaults parameters for the http request to ElasticSearch. Use "Nothing" for defaults.
             -> BS.ByteString -- ^ Hostname of the ElasticSearch server
             -> Int -- ^ Port of the HTTP interface (usually 9200)
             -> T.Text -- ^ Prefix of the index (usually logstash)
diff --git a/Data/Conduit/FireHose.hs b/Data/Conduit/FireHose.hs
new file mode 100644
--- /dev/null
+++ b/Data/Conduit/FireHose.hs
@@ -0,0 +1,33 @@
+-- | A firehose sink, letting client get through a port and read the sink
+-- output.
+module Data.Conduit.FireHose (fireHose) where
+
+import Control.Monad.IO.Class
+
+import Logstash.Message
+
+import Data.Conduit
+import Data.Conduit.Network.Firehose
+import Network.Wai (Request,pathInfo)
+
+import qualified Data.HashSet as HS
+import qualified Data.Text as T
+
+import Data.Aeson
+import Blaze.ByteString.Builder.ByteString
+import Data.Monoid
+
+-- | A web server will be launched on the specified port. The request URL
+-- must be of the form /type1,type2,type3. The client will be fed all
+-- messages matching those types.
+fireHose :: MonadIO m => Int -- ^ Port
+                      -> Int -- ^ Buffer size for the fire hose threads
+                      -> IO (Conduit LogstashMessage m LogstashMessage)
+fireHose port buffersize = firehoseConduit port buffersize getFilter serialize
+    where
+        serialize = (<> fromByteString "\n") . fromLazyByteString . encode
+        getFilter r = case pathInfo r of
+                          [p] -> let set = HS.fromList $ T.splitOn "," p
+                                 in  flip HS.member set . logstashType
+                          _ -> error "invalid url"
+
diff --git a/hslogstash.cabal b/hslogstash.cabal
--- a/hslogstash.cabal
+++ b/hslogstash.cabal
@@ -2,7 +2,7 @@
 -- documentation, see http://haskell.org/cabal/users-guide/
 
 name:                hslogstash
-version:             0.3.5
+version:             0.3.6
 synopsis:            A library to work with, or as, a logstash server
 description:         This library contains a few modules that let you work with Logstash messages, read them from a Redis list, store them in or get them from Elasticsearch, and more.
 homepage:            https://github.com/bartavelle/hslogstash
@@ -21,9 +21,9 @@
 
 
 library
-  exposed-modules:     Logstash.Message, Logstash.IO, Data.Conduit.Redis, Data.Conduit.ElasticSearch, Data.Conduit.Logstash, Data.Conduit.Network.Retry, Data.Conduit.Branching, Data.Conduit.Misc, Logstash.Counter
+  exposed-modules:     Logstash.Message, Logstash.IO, Data.Conduit.Redis, Data.Conduit.ElasticSearch, Data.Conduit.Logstash, Data.Conduit.Network.Retry, Data.Conduit.Branching, Data.Conduit.Misc, Logstash.Counter, Data.Conduit.FireHose
   default-extensions:  OverloadedStrings, BangPatterns
-  build-depends:       base >=4.6 && <4.7, conduit >=1.0.9 && <1.1, bytestring >=0.10 && <0.11, transformers >=0.3 && <0.4, aeson >=0.6 && <0.7, parallel-io >=0.3 && <0.4, text >=0.11 && <1.1, network >=2.4 && <2.5, network-conduit >=1.0 && <1.1, iconv >=0.4 && <0.5, http-conduit >=1.9 && <1.10, time >=1.4 && <1.5, text-format >=0.3 && <0.4, http-types >=0.8 && <0.9, unordered-containers >=0.2 && <0.3, vector >=0.10 && <0.11, containers >=0.5 && <0.6, stm-chans >=3.0 && <3.1, stm-conduit >=2.1 && <2.2, hedis >=0.6 && <0.7, stm >=2.4 && <2.5, attoparsec >=0.10 && <0.11, lens >= 3.9 && < 4, lens-aeson >= 0.1 && < 0.2
+  build-depends:       base >=4.6 && <4.7, conduit >=1.0.9 && <1.1, bytestring >=0.10 && <0.11, transformers >=0.3 && <0.4, aeson >=0.6 && <0.7, parallel-io >=0.3 && <0.4, text >=0.11 && <1.1, network >=2.4 && <2.5, network-conduit >=1.0 && <1.1, iconv >=0.4 && <0.5, http-conduit >= 2.0 && < 2.1, time >=1.4 && <1.5, text-format >=0.3 && <0.4, http-types >=0.8 && <0.9, unordered-containers >=0.2 && <0.3, vector >=0.10 && <0.11, containers >=0.5 && <0.6, stm-chans >=3.0 && <3.1, stm-conduit >=2.1 && <2.2, hedis >=0.6 && <0.7, stm >=2.4 && <2.5, attoparsec >=0.10 && <0.11, lens >= 3.9 && < 4, lens-aeson >= 0.1 && < 0.2, data-default, stm-firehose >= 0.1.1 && < 0.2, wai >= 2.0 && < 2.1, blaze-builder == 0.3.*
   default-language:    Haskell2010
   ghc-options:         -Wall
 
