diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,5 +0,0 @@
-#! /usr/bin/env runhaskell
-
-import Distribution.Simple
-main = defaultMain
-
diff --git a/omnicodec.cabal b/omnicodec.cabal
--- a/omnicodec.cabal
+++ b/omnicodec.cabal
@@ -1,46 +1,53 @@
-name: omnicodec
-version: 0.7
-license: OtherLicense
-license-file: COPYING
-author: Magnus Therning
-maintainer: magnus@therning.org
-copyright: Magnus Therning, 2012
-synopsis: data encoding and decoding command line utilities
-description: Two simple command line tools built on sandi
-    (http://hackage.haskell.org/package/sandi).
-build-type: Simple
-category: Codec
-cabal-version: >= 1.6
+cabal-version: 1.12
 
-source-repository head
-    type: git
-    location: https://github.com/magthe/omnicodec
+-- This file has been generated from package.yaml by hpack version 0.31.1.
+--
+-- see: https://github.com/sol/hpack
+--
+-- hash: ae6d7c6f78d12539cc6fe2febc529b9aecc04f2c70f1f2a1e869819dd375d535
 
-source-repository this
-    type: git
-    location: https://github.com/magthe/omnicodec
-    tag: REL_0.6
+name:           omnicodec
+version:        0.8
+synopsis:       Data encoding and decoding command line utilities
+description:    Two simple command line tools built on sandi (http://hackage.haskell.org/package/sandi).
+category:       Codec
+maintainer:     Magnus Therning <magnus@therning.org>
+license:        OtherLicense
+license-file:   COPYING
+build-type:     Simple
 
+source-repository head
+  type: git
+  location: https://github.com/magthe/omnicodec.git
+
 executable odec
-    main-is: odec.hs
-    hs-source-dirs: src
-    build-depends:
-        base ==4.6.*,
-        cmdargs ==0.10.*,
-        conduit ==1.0.*,
-        bytestring ==0.10.*,
-        sandi ==0.2.*,
-        transformers ==0.3.*
-    ghc-options: -Wall
+  main-is: odec.hs
+  other-modules:
+      Paths_omnicodec
+  hs-source-dirs:
+      src
+  ghc-options: -Wall
+  build-depends:
+      base <5
+    , bytestring
+    , cmdargs
+    , conduit
+    , sandi
+    , transformers
+  default-language: Haskell2010
 
 executable oenc
-    main-is: oenc.hs
-    hs-source-dirs: src
-    build-depends:
-        base ==4.6.*,
-        cmdargs ==0.10.*,
-        conduit ==1.0.*,
-        bytestring ==0.10.*,
-        sandi ==0.2.*,
-        transformers ==0.3.*
-    ghc-options: -Wall
+  main-is: oenc.hs
+  other-modules:
+      Paths_omnicodec
+  hs-source-dirs:
+      src
+  ghc-options: -Wall
+  build-depends:
+      base <5
+    , bytestring
+    , cmdargs
+    , conduit
+    , sandi
+    , transformers
+  default-language: Haskell2010
diff --git a/src/odec.hs b/src/odec.hs
--- a/src/odec.hs
+++ b/src/odec.hs
@@ -23,35 +23,32 @@
 
 import Control.Exception
 import Control.Monad.IO.Class
--- import Control.Monad
 import Data.ByteString as BS
+import Data.Conduit
+import Data.Conduit.Combinators (sinkHandle, sourceHandle)
 import Data.Maybe
 import Data.Version(showVersion)
 import System.Console.CmdArgs
--- import System.Exit
 import System.IO as SIO
-import Data.Conduit
-import Data.Conduit.Binary
 
-import qualified Data.Conduit.Codec.Base64 as B64
-import qualified Data.Conduit.Codec.Base64Url as B64U
+import qualified Data.Conduit.Codec.Base16 as B16
 import qualified Data.Conduit.Codec.Base32 as B32
 import qualified Data.Conduit.Codec.Base32Hex as B32H
-import qualified Data.Conduit.Codec.Base16 as B16
+import qualified Data.Conduit.Codec.Base64 as B64
+import qualified Data.Conduit.Codec.Base64Url as B64U
 import qualified Data.Conduit.Codec.Base85 as B85
 import qualified Data.Conduit.Codec.QuotedPrintable as QP
 import qualified Data.Conduit.Codec.Uu as Uu
 import qualified Data.Conduit.Codec.Xx as Xx
 
--- {{{1 command line options
 ver :: String
-ver = "omnicode decode (odec) " ++ (showVersion version)
+ver = "omnicode decode (odec) " ++ showVersion version
     ++ "\nCopyright 2012 Magnus Therning <magnus@therning.org>"
 
 data Codec = B64 | B64U | B32 | B32H | B16 | B85 | QP | Uu | Xx
     deriving(Show, Eq, Data, Typeable)
 
-codecMap :: [(Codec, Conduit ByteString (ResourceT IO) ByteString)]
+codecMap :: [(Codec, ConduitT ByteString ByteString IO ())]
 codecMap =
     [ (B64, B64.decode)
     , (B64U, B64U.decode)
@@ -89,25 +86,23 @@
         -- , " url  - url encoding"
         ]
 
--- {{{1 main
 main :: IO ()
-main = do
+main =
     cmdArgs myArgs >>= \ a -> do
-    let decFunc = lookup (argCodec a) codecMap
-    withMaybeFile (argInput a) ReadMode $ \ inputFile ->
+      let decFunc = lookup (argCodec a) codecMap
+      withMaybeFile (argInput a) ReadMode $ \ inputFile ->
         withMaybeFile (argOutput a) WriteMode $ \ outputFile ->
-            runResourceT $ decodeFile (fromJust decFunc) inputFile outputFile
+        runConduit $ decodeFile (fromJust decFunc) inputFile outputFile
 
 withMaybeFile :: Maybe FilePath -> IOMode -> (Handle -> IO r) -> IO r
 withMaybeFile fn mode func = let
         dH = if mode == ReadMode
             then stdin
             else stdout
-    in bracket 
-        (maybe (return dH) (flip openFile mode) fn)
+    in bracket
+        (maybe (return dH) (`openFile` mode) fn)
         hClose
         func
 
--- decodeFile :: (BS.ByteString -> Either a BS.ByteString) -> Handle -> Handle -> IO ()
-decodeFile :: (MonadIO m) => Conduit ByteString m ByteString -> Handle -> Handle -> m ()
-decodeFile decFunc inF outF = sourceHandle inF $= decFunc $$ sinkHandle outF
+decodeFile :: MonadIO m => ConduitM ByteString ByteString m () -> Handle -> Handle -> ConduitM a c m ()
+decodeFile decFunc inF outF = sourceHandle inF .| decFunc .| sinkHandle outF
diff --git a/src/oenc.hs b/src/oenc.hs
--- a/src/oenc.hs
+++ b/src/oenc.hs
@@ -22,34 +22,33 @@
 import Paths_omnicodec (version)
 
 import Control.Exception
+import Control.Monad.IO.Class
 import Data.ByteString as BS
+import Data.Conduit
+import Data.Conduit.Combinators (sinkHandle, sourceHandle)
 import Data.Maybe
 import Data.Version(showVersion)
 import System.Console.CmdArgs
 import System.IO
-import Data.Conduit
-import Data.Conduit.Binary
-import Control.Monad.IO.Class
 
-import qualified Data.Conduit.Codec.Base64 as B64
-import qualified Data.Conduit.Codec.Base64Url as B64U
+import qualified Data.Conduit.Codec.Base16 as B16
 import qualified Data.Conduit.Codec.Base32 as B32
 import qualified Data.Conduit.Codec.Base32Hex as B32H
-import qualified Data.Conduit.Codec.Base16 as B16
+import qualified Data.Conduit.Codec.Base64 as B64
+import qualified Data.Conduit.Codec.Base64Url as B64U
 import qualified Data.Conduit.Codec.Base85 as B85
 import qualified Data.Conduit.Codec.QuotedPrintable as QP
 import qualified Data.Conduit.Codec.Uu as Uu
 import qualified Data.Conduit.Codec.Xx as Xx
 
--- {{{1 command line options
 ver :: String
-ver = "omnicode encode (oenc) " ++ (showVersion version)
+ver = "omnicode encode (oenc) " ++ showVersion version
     ++ "\nCopyright 2012 Magnus Therning <magnus@therning.org>"
 
 data Codec = B64 | B64U | B32 | B32H | B16 | B85 | QP | Uu | Xx
     deriving(Show, Eq, Data, Typeable)
 
-codecMap :: [(Codec, Conduit ByteString (ResourceT IO) ByteString)]
+codecMap :: [(Codec, ConduitT ByteString ByteString IO ())]
 codecMap =
     [ (B64, B64.encode)
     , (B64U, B64U.encode)
@@ -85,24 +84,23 @@
         -- , " url  - url encoding"
         ]
 
--- {{{1 main
 main :: IO ()
-main = do
+main =
     cmdArgs myArgs >>= \ a -> do
-    let encFunc = lookup (argCodec a) codecMap
-    withMaybeFile (argInput a) ReadMode $ \ inputFile ->
+      let encFunc = lookup (argCodec a) codecMap
+      withMaybeFile (argInput a) ReadMode $ \ inputFile ->
         withMaybeFile (argOutput a) WriteMode $ \ outputFile ->
-            runResourceT $ encodeFile (fromJust encFunc) inputFile outputFile
+        runConduit $ encodeFile (fromJust encFunc) inputFile outputFile
 
 withMaybeFile :: Maybe FilePath -> IOMode -> (Handle -> IO r) -> IO r
 withMaybeFile fn mode func = let
         dH = if mode == ReadMode
             then stdin
             else stdout
-    in bracket 
-        (maybe (return dH) (flip openFile mode) fn)
+    in bracket
+        (maybe (return dH) (`openFile` mode) fn)
         hClose
         func
 
-encodeFile :: (MonadIO m) => Conduit ByteString m ByteString -> Handle -> Handle -> m ()
-encodeFile encFunc inF outF = sourceHandle inF $= encFunc $$ sinkHandle outF
+encodeFile :: MonadIO m => ConduitM ByteString ByteString m () -> Handle -> Handle -> ConduitM a c m ()
+encodeFile encFunc inF outF = sourceHandle inF .| encFunc .| sinkHandle outF
