diff --git a/Network/Sendfile/BSD.hsc b/Network/Sendfile/BSD.hsc
--- a/Network/Sendfile/BSD.hsc
+++ b/Network/Sendfile/BSD.hsc
@@ -42,7 +42,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfile :: Socket -> FilePath -> FileRange -> IO () -> IO ()
 sendfile sock path range hook = bracket setup teardown $ \fd ->
@@ -59,7 +59,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfileFd :: Socket -> Fd -> FileRange -> IO () -> IO ()
 sendfileFd sock fd range hook = do
@@ -109,7 +109,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfileWithHeader :: Socket -> FilePath -> FileRange -> IO () -> [ByteString] -> IO ()
 sendfileWithHeader sock path range hook hdr =
@@ -131,7 +131,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfileFdWithHeader :: Socket -> Fd -> FileRange -> IO () -> [ByteString] -> IO ()
 sendfileFdWithHeader sock fd range hook hdr = do
diff --git a/Network/Sendfile/Fallback.hs b/Network/Sendfile/Fallback.hs
--- a/Network/Sendfile/Fallback.hs
+++ b/Network/Sendfile/Fallback.hs
@@ -12,7 +12,6 @@
 import Network.Socket
 import Network.Socket.ByteString
 import qualified Network.Socket.ByteString as SB
-import Control.Monad.Trans.Resource (runResourceT)
 
 -- |
 -- Sendfile emulation using conduit.
@@ -22,12 +21,12 @@
 
 sendfile :: Socket -> FilePath -> FileRange -> IO () -> IO ()
 sendfile sock path EntireFile hook =
-    runResourceT $ sourceFile path $$ sinkSocket sock hook
+    runConduitRes $ sourceFile path  .| sinkSocket sock hook
 sendfile sock path (PartOfFile off len) hook =
-    runResourceT $ EB.sourceFileRange path (Just off) (Just len) $$ sinkSocket sock hook
+    runConduitRes $ EB.sourceFileRange path (Just off) (Just len) .| sinkSocket sock hook
 
 -- See sinkHandle.
-sinkSocket :: MonadIO m => Socket -> IO () -> Sink ByteString m ()
+sinkSocket :: MonadIO m => Socket -> IO () -> ConduitT ByteString Void m ()
 #if MIN_VERSION_conduit(0,5,0)
 sinkSocket s hook = awaitForever $ \bs -> liftIO $ SB.sendAll s bs >> hook
 #else
diff --git a/Network/Sendfile/Linux.hsc b/Network/Sendfile/Linux.hsc
--- a/Network/Sendfile/Linux.hsc
+++ b/Network/Sendfile/Linux.hsc
@@ -61,7 +61,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfile :: Socket -> FilePath -> FileRange -> IO () -> IO ()
 sendfile sock path range hook = bracket setup teardown $ \fd ->
@@ -91,7 +91,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 sendfileFd :: Socket -> Fd -> FileRange -> IO () -> IO ()
 sendfileFd sock fd range hook = do
 #if MIN_VERSION_network(3,1,0)
@@ -172,7 +172,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfileWithHeader :: Socket -> FilePath -> FileRange -> IO () -> [ByteString] -> IO ()
 sendfileWithHeader sock path range hook hdr = do
@@ -198,7 +198,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfileFdWithHeader :: Socket -> Fd -> FileRange -> IO () -> [ByteString] -> IO ()
 sendfileFdWithHeader sock fd range hook hdr = do
diff --git a/System/Linux/Sendfile.hs b/System/Linux/Sendfile.hs
--- a/System/Linux/Sendfile.hs
+++ b/System/Linux/Sendfile.hs
@@ -23,7 +23,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfile :: Fd -> ByteString -> FileRange -> IO () -> IO ()
 sendfile = sendfile'
@@ -42,7 +42,7 @@
 -- The fourth action argument is called when a file is sent as chunks.
 -- Chucking is inevitable if the socket is non-blocking (this is the
 -- default) and the file is large. The action is called after a chunk
--- is sent and bofore waiting the socket to be ready for writing.
+-- is sent and before waiting the socket to be ready for writing.
 
 sendfileFd :: Fd -> Fd -> FileRange -> IO () -> IO ()
 sendfileFd = sendfileFd'
diff --git a/simple-sendfile.cabal b/simple-sendfile.cabal
--- a/simple-sendfile.cabal
+++ b/simple-sendfile.cabal
@@ -1,76 +1,91 @@
-Name:                   simple-sendfile
-Version:                0.2.30
-Author:                 Kazu Yamamoto <kazu@iij.ad.jp>
-Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp>
-License:                BSD3
-License-File:           LICENSE
-Synopsis:               Cross platform library for the sendfile system call
-Description:            Cross platform library for the sendfile system call.
-                        This library tries to call minimum system calls which
-                        are the bottleneck of web servers.
-Category:               Network
-Cabal-Version:          >= 1.10
-Build-Type:             Simple
+cabal-version:      >=1.10
+name:               simple-sendfile
+version:            0.2.31
+license:            BSD3
+license-file:       LICENSE
+maintainer:         Kazu Yamamoto <kazu@iij.ad.jp>
+author:             Kazu Yamamoto <kazu@iij.ad.jp>
+synopsis:           Cross platform library for the sendfile system call
+description:
+    Cross platform library for the sendfile system call.
+    This library tries to call minimum system calls which
+    are the bottleneck of web servers.
 
-Extra-source-files:     test/inputFile
+category:           Network
+build-type:         Simple
+extra-source-files: test/inputFile
 
-Flag allow-bsd
-  Description:          Allow use of BSD sendfile (disable on GNU/kFreeBSD)
-  Default:              True
+source-repository head
+    type:     git
+    location: git://github.com/kazu-yamamoto/simple-sendfile
 
-Library
-  Default-Language:     Haskell2010
-  GHC-Options:          -Wall
-  Exposed-Modules:      Network.Sendfile
-  Other-Modules:        Network.Sendfile.Types
-  Build-Depends:        base >= 4.8 && < 5
-                      , network
-                      , bytestring
-  -- NetBSD and OpenBSD don't have sendfile
-  if os(freebsd) && flag(allow-bsd)
-    CPP-Options:        -DOS_BSD
-    Other-Modules:      Network.Sendfile.BSD
-                        Network.Sendfile.IOVec
-    Build-Depends:      unix
-  else
-    if os(darwin)
-      CPP-Options:      -DOS_MacOS
-      Other-Modules:    Network.Sendfile.BSD
-                        Network.Sendfile.IOVec
-      Build-Depends:    unix
+flag allow-bsd
+    description: Allow use of BSD sendfile (disable on GNU/kFreeBSD)
+
+flag fallback
+    description: Use counduit instead of sendfile()
+    default: False
+
+library
+    exposed-modules:  Network.Sendfile
+    other-modules:    Network.Sendfile.Types
+    default-language: Haskell2010
+    ghc-options:      -Wall
+    build-depends:
+        base >=4.8 && <5,
+        network,
+        bytestring
+
+    if (os(freebsd) && flag(allow-bsd) && !flag(fallback))
+        cpp-options:   -DOS_BSD
+        other-modules:
+            Network.Sendfile.BSD
+            Network.Sendfile.IOVec
+
+        build-depends: unix
+
     else
-      if os(linux)
-        CPP-Options:    -DOS_Linux
-        Exposed-Modules: System.Linux.Sendfile
-        Other-Modules:  Network.Sendfile.Linux
-        Build-Depends:  unix
-      else
-        Other-Modules:  Network.Sendfile.Fallback
-        Build-Depends:  conduit         >= 1.0 && < 1.4
-                      , conduit-extra   >= 1.0 && < 1.4
-                      , transformers    >= 0.2.2 && < 0.6
-                      , resourcet
+        if (os(osx) && !flag(fallback))
+            cpp-options:   -DOS_MacOS
+            other-modules:
+                Network.Sendfile.BSD
+                Network.Sendfile.IOVec
 
-Test-Suite spec
-  Type:                 exitcode-stdio-1.0
-  Default-Language:     Haskell2010
-  Hs-Source-Dirs:       test
-  Main-Is:              Spec.hs
-  GHC-Options:          -Wall
-  Other-Modules:        SendfileSpec
-  Build-Depends:        base
-                      , HUnit
-                      , bytestring
-                      , conduit
-                      , conduit-extra
-                      , resourcet
-                      , directory
-                      , hspec >= 1.3
-                      , network
-                      , process
-                      , simple-sendfile
-                      , unix
+            build-depends: unix
 
-Source-Repository head
-  Type:                 git
-  Location:             git://github.com/kazu-yamamoto/simple-sendfile
+        else
+            if (os(linux) && !flag(fallback))
+                exposed-modules: System.Linux.Sendfile
+                cpp-options:     -DOS_Linux
+                other-modules:   Network.Sendfile.Linux
+                build-depends:   unix
+
+            else
+                other-modules: Network.Sendfile.Fallback
+                build-depends:
+                    conduit >=1.0 && <1.4,
+                    conduit-extra >=1.0 && <1.4,
+                    transformers >=0.2.2 && <0.7,
+                    resourcet
+
+test-suite spec
+    type:               exitcode-stdio-1.0
+    main-is:            Spec.hs
+    build-tool-depends: hspec-discover:hspec-discover
+    hs-source-dirs:     test
+    other-modules:      SendfileSpec
+    default-language:   Haskell2010
+    ghc-options:        -Wall
+    build-depends:
+        base,
+        HUnit,
+        bytestring,
+        conduit,
+        conduit-extra,
+        resourcet,
+        directory,
+        hspec >=1.3,
+        network,
+        process,
+        simple-sendfile,
+        unix
