diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+The MIT License (MIT)
+
+Copyright (c) 2015 Yogesh Sajanikar
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/src/Thrift/Transport/Wai.hs b/src/Thrift/Transport/Wai.hs
new file mode 100644
--- /dev/null
+++ b/src/Thrift/Transport/Wai.hs
@@ -0,0 +1,142 @@
+{-# LANGUAGE FlexibleInstances #-}
+
+{-|
+Module      : Thrift.Transport.Wai
+Description : Wai support for thrift transport
+License     : MIT
+Maintainer  : Yogesh Sajanikar <yogesh_sajanikar@yahoo.com>
+Stability   : experimental
+Portability : POSIX, WINDOWS
+
+Support thrift transport for Wai Request and Response.
+
+-}
+module Thrift.Transport.Wai (
+  RequestTransport,
+  StreamTransport,
+  fromRequest,
+  toStreamTransport,
+  thriftWaiApp,
+  thriftMiddleware
+  ) where
+
+import Thrift.Transport
+import Thrift.Protocol
+import Thrift.Transport.IOBuffer
+import Network.Wai as Wai
+import Network.Wai.Internal
+import Data.IORef
+import Blaze.ByteString.Builder
+import Data.Monoid
+import Network.HTTP.Types (status200)
+import Network.HTTP.Types.Method
+
+data RequestTransport = RequestTransport Request ReadBuffer
+
+-- | Creates RequestTransport from WAI request
+fromRequest :: Request -> IO RequestTransport
+fromRequest req = RequestTransport
+                  <$> return req
+                  <*> (Wai.lazyRequestBody req >>= newIORef)
+
+instance Transport RequestTransport where
+
+  tIsOpen = const $ return True
+
+  tClose = const $ return ()
+
+  tRead (RequestTransport _ b) n = readBuf b (fromIntegral n)
+
+  tPeek (RequestTransport _ b) = peekBuf b
+
+  tWrite _ _ = fail "RequestTransport does not support write"
+
+  tFlush _ = fail "RequestTransport does not support flush"
+
+
+type WriteBuilder = IORef Builder
+
+newtype ResponseTransport = ResponseTransport WriteBuilder
+
+newResponseTransport :: IO ResponseTransport
+newResponseTransport = ResponseTransport <$> (newIORef mempty)
+
+instance Transport ResponseTransport where
+
+  tIsOpen = const $ return False
+
+  tClose = const $ return ()
+
+  tRead _ _ = fail "Read operation is not supported for response"
+
+  tPeek _ = fail "Peek is not allowed for response buffers"
+
+  tWrite (ResponseTransport b) bs = modifyIORef b (<> fromLazyByteString bs)
+
+  tFlush (ResponseTransport b) = modifyIORef b (<> flush)
+  
+
+
+data StreamTransport = StreamTransport { writer :: Builder -> IO ()
+                                       , flusher :: IO ()
+                                       }
+
+toStreamTransport :: (Builder -> IO () ) -> IO () -> StreamTransport
+toStreamTransport w f = StreamTransport w f
+
+
+instance Transport StreamTransport where
+
+  tIsOpen = const $ return True
+
+  tClose = const $ return ()
+
+  tRead _ _ = fail "Read operation is not supported for response"
+
+  tPeek _ = fail "Peek is not allowed for response buffers"
+
+  tWrite st bs = writer st $ fromLazyByteString bs
+
+  tFlush st = flusher st
+
+
+
+thriftWaiApp ::
+  (Protocol ip, Protocol op)
+  => h
+  -> (RequestTransport -> ip RequestTransport)
+  -> (StreamTransport -> op StreamTransport)
+  -> (h -> (ip RequestTransport, op StreamTransport) -> IO Bool)
+  -> Application 
+thriftWaiApp h isp osp proc_ req responder = do
+  inp <- isp <$> fromRequest req
+  responder $ Wai.responseStream status200 [] $ \write flushstream -> do
+    let out = osp (StreamTransport write flushstream)
+    _ <- proc_ h (inp, out)
+    return ()
+ 
+  
+-- | Creates Wai middleware for the given handler
+thriftMiddleware :: (Protocol ip, Protocol op)
+                    => h
+                    -> (RequestTransport -> ip RequestTransport)
+                    -> (StreamTransport -> op StreamTransport)
+                    -> (h -> (ip RequestTransport, op StreamTransport) -> IO Bool)
+                    -> Application
+                    -> Application
+thriftMiddleware h isp osp proc_ app req responder = app req $ \res ->
+  case res of
+      ResponseStream {} -> 
+        if methodPost == requestMethod req then
+          do
+            inp <- isp <$> fromRequest req
+            responder $ Wai.responseStream status200 (responseHeaders res) $ \write flushstream -> do
+              let out = osp (StreamTransport write flushstream)
+              _ <- proc_ h (inp, out)
+              return ()
+        else
+          responder res
+
+      _ -> responder res
+    
+
diff --git a/wai-thrift.cabal b/wai-thrift.cabal
new file mode 100644
--- /dev/null
+++ b/wai-thrift.cabal
@@ -0,0 +1,34 @@
+-- Initial wai-thrift.cabal generated by cabal init.  For further 
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                wai-thrift
+version:             0.0.1.0
+synopsis:            Thrift transport layer for Wai
+description:         Implements a read-only transport layer for Wai
+                     Request, and write-only transport layer for Wai
+                     streaming body.
+license:             MIT
+license-file:        LICENSE
+author:              Yogesh Sajanikar
+maintainer:          yogesh.sajanikar@yahoo.com
+-- copyright:           
+category:            Web
+build-type:          Simple
+-- extra-source-files:  
+cabal-version:       >=1.10
+
+library
+  exposed-modules:     Thrift.Transport.Wai
+  -- other-modules:       
+  -- other-extensions:    
+  build-depends:       base >=4.8 && <4.9
+                     , thrift
+                     , wai
+                     , bytestring
+                     , stm
+                     , blaze-builder
+                     , http-types
+  hs-source-dirs:      src
+  default-language:    Haskell2010
+
+  
