diff --git a/sandi.cabal b/sandi.cabal
--- a/sandi.cabal
+++ b/sandi.cabal
@@ -1,5 +1,5 @@
 name: sandi
-version: 0.2.3
+version: 0.3.0
 license: BSD3
 license-file: LICENSE
 cabal-version: >= 1.8
@@ -8,7 +8,7 @@
 maintainer: magnus@therning.org
 homepage: http://hackage.haskell.org/package/sandi
 copyright: Magnus Therning, 2012
-category: Codec
+category: Codec Conduit
 synopsis: Data encoding library
 description: Reasonably fast data encoding library.
 extra-source-files: csrc/*.h
@@ -24,9 +24,10 @@
     ghc-options: -Wall
     cc-options: -Wall -Wextra
     build-depends:
-        base >=4.5 && < 4.7,
-        bytestring >=0.9 && < 0.11,
-        conduit ==1.0.*
+        base ==4.7.*,
+        bytestring ==0.10.*,
+        conduit ==1.1.*,
+        exceptions ==0.6.*
     exposed-modules:
             Codec.Binary.Base16
             Codec.Binary.Base32
@@ -59,10 +60,10 @@
         base,
         bytestring,
         HUnit,
-        test-framework-quickcheck2,
-        test-framework-hunit,
-        test-framework-th,
-        test-framework
+        tasty,
+        tasty-hunit,
+        tasty-quickcheck,
+        tasty-th
     main-is: Main.hs
     other-modules:
         Codec.Binary.Base16Test
diff --git a/src/Data/Conduit/Codec/Base16.hs b/src/Data/Conduit/Codec/Base16.hs
--- a/src/Data/Conduit/Codec/Base16.hs
+++ b/src/Data/Conduit/Codec/Base16.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Base16
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Base16 where
 
 import qualified Codec.Binary.Base16 as B16
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit
-import Data.ByteString as BS
+import Control.Monad.Catch (MonadThrow)
+import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeII B16.encode
diff --git a/src/Data/Conduit/Codec/Base32.hs b/src/Data/Conduit/Codec/Base32.hs
--- a/src/Data/Conduit/Codec/Base32.hs
+++ b/src/Data/Conduit/Codec/Base32.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Base32
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Base32 where
 
 import qualified Codec.Binary.Base32 as B32
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeI B32.b32_encode_part B32.b32_encode_final empty
diff --git a/src/Data/Conduit/Codec/Base32Hex.hs b/src/Data/Conduit/Codec/Base32Hex.hs
--- a/src/Data/Conduit/Codec/Base32Hex.hs
+++ b/src/Data/Conduit/Codec/Base32Hex.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Base32Hex
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Base32Hex where
 
 import qualified Codec.Binary.Base32Hex as B32H
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeI B32H.b32h_encode_part B32H.b32h_encode_final empty
diff --git a/src/Data/Conduit/Codec/Base64.hs b/src/Data/Conduit/Codec/Base64.hs
--- a/src/Data/Conduit/Codec/Base64.hs
+++ b/src/Data/Conduit/Codec/Base64.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Base64
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Base64 where
 
 import qualified Codec.Binary.Base64 as B64
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeI B64.b64_encode_part B64.b64_encode_final empty
diff --git a/src/Data/Conduit/Codec/Base64Url.hs b/src/Data/Conduit/Codec/Base64Url.hs
--- a/src/Data/Conduit/Codec/Base64Url.hs
+++ b/src/Data/Conduit/Codec/Base64Url.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Base64Url
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Base64Url where
 
 import qualified Codec.Binary.Base64Url as B64U
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeI B64U.b64u_encode_part B64U.b64u_encode_final empty
diff --git a/src/Data/Conduit/Codec/Base85.hs b/src/Data/Conduit/Codec/Base85.hs
--- a/src/Data/Conduit/Codec/Base85.hs
+++ b/src/Data/Conduit/Codec/Base85.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Base85
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Base85 where
 
 import qualified Codec.Binary.Base85 as B85
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeI B85.b85_encode_part B85.b85_encode_final empty
diff --git a/src/Data/Conduit/Codec/QuotedPrintable.hs b/src/Data/Conduit/Codec/QuotedPrintable.hs
--- a/src/Data/Conduit/Codec/QuotedPrintable.hs
+++ b/src/Data/Conduit/Codec/QuotedPrintable.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.QuotedPrintable
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.QuotedPrintable where
 
 import qualified Codec.Binary.QuotedPrintable as Qp
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit
-import Data.ByteString as BS
+import Control.Monad.Catch (MonadThrow)
+import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeII Qp.encode
diff --git a/src/Data/Conduit/Codec/Util.hs b/src/Data/Conduit/Codec/Util.hs
--- a/src/Data/Conduit/Codec/Util.hs
+++ b/src/Data/Conduit/Codec/Util.hs
@@ -1,3 +1,7 @@
+-- |
+-- Module: Data.Conduit.Codec.Util
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 {-# OPTIONS_GHC -XDeriveDataTypeable #-}
 
 module Data.Conduit.Codec.Util
@@ -11,9 +15,10 @@
 import Data.Typeable (Typeable)
 import Control.Exception (Exception)
 import Data.ByteString as BS (ByteString, append, null)
-import Data.Conduit (Conduit, MonadThrow, await, monadThrow, yield)
+import Data.Conduit (Conduit, await, yield)
 import Data.Maybe (fromJust)
 import Control.Monad (unless)
+import Control.Monad.Catch (MonadThrow, throwM)
 
 type EncFunc = ByteString -> ByteString
 type EncFuncPart = ByteString -> (ByteString, ByteString)
@@ -43,13 +48,13 @@
     case enc of
         Nothing -> 
             case dec_final i of
-                Nothing -> monadThrow (CodecDecodeException i)
+                Nothing -> throwM (CodecDecodeException i)
                 Just s -> yield s >> return ()
         Just s ->
             case dec_part (i `append` s) of
                 Left (a, b) -> do
                     unless (BS.null a) $ yield a
-                    monadThrow (CodecDecodeException b)
+                    throwM (CodecDecodeException b)
                 Right (a, b) -> do
                     unless (BS.null a) $ yield a
                     decodeI dec_part dec_final b
@@ -69,11 +74,11 @@
     case enc of
         Nothing -> if BS.null i
             then return ()
-            else monadThrow $ CodecDecodeException i
+            else throwM $ CodecDecodeException i
         Just s -> case (dec $ i `append` s) of
             Left (c, b) -> do
                 unless (BS.null c) $ yield c
-                monadThrow $ CodecDecodeException b
+                throwM $ CodecDecodeException b
             Right (c, r) -> do
                 unless (BS.null c) $ yield c
                 decodeII dec r
diff --git a/src/Data/Conduit/Codec/Uu.hs b/src/Data/Conduit/Codec/Uu.hs
--- a/src/Data/Conduit/Codec/Uu.hs
+++ b/src/Data/Conduit/Codec/Uu.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Uu
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Uu where
 
 import qualified Codec.Binary.Uu as Uu
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeI Uu.uu_encode_part Uu.uu_encode_final empty
diff --git a/src/Data/Conduit/Codec/Xx.hs b/src/Data/Conduit/Codec/Xx.hs
--- a/src/Data/Conduit/Codec/Xx.hs
+++ b/src/Data/Conduit/Codec/Xx.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Xx
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Xx where
 
 import qualified Codec.Binary.Xx as Xx
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeI Xx.xx_encode_part Xx.xx_encode_final empty
diff --git a/src/Data/Conduit/Codec/Yenc.hs b/src/Data/Conduit/Codec/Yenc.hs
--- a/src/Data/Conduit/Codec/Yenc.hs
+++ b/src/Data/Conduit/Codec/Yenc.hs
@@ -1,10 +1,15 @@
+-- |
+-- Module: Data.Conduit.Codec.Yenc
+-- Copyright: (c) 2014 Magnus Therning
+-- License: BSD3
 module Data.Conduit.Codec.Yenc where
 
 import qualified Codec.Binary.Yenc as Y
 import qualified Data.Conduit.Codec.Util as U
 
-import Data.Conduit (Conduit, MonadThrow)
+import Control.Monad.Catch (MonadThrow)
 import Data.ByteString (ByteString, empty)
+import Data.Conduit (Conduit)
 
 encode :: (Monad m) => Conduit ByteString m ByteString
 encode = U.encodeII Y.encode
diff --git a/test-src/Codec/Binary/Base16Test.hs b/test-src/Codec/Binary/Base16Test.hs
--- a/test-src/Codec/Binary/Base16Test.hs
+++ b/test-src/Codec/Binary/Base16Test.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_b16_enc_foobar :: IO ()
 case_b16_enc_foobar = do
     BSC.empty               @=? B16.encode BSC.empty
@@ -44,5 +44,5 @@
 prop_b16_encdec :: [Word8] -> Bool
 prop_b16_encdec ws = (BS.pack ws) == (fromRight $ B16.decode $ B16.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/Base32HexTest.hs b/test-src/Codec/Binary/Base32HexTest.hs
--- a/test-src/Codec/Binary/Base32HexTest.hs
+++ b/test-src/Codec/Binary/Base32HexTest.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BSC.empty                   @=? B32H.encode BS.empty
@@ -48,5 +48,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ B32H.decode $ B32H.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/Base32Test.hs b/test-src/Codec/Binary/Base32Test.hs
--- a/test-src/Codec/Binary/Base32Test.hs
+++ b/test-src/Codec/Binary/Base32Test.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BSC.empty                   @=? B32.encode BSC.empty
@@ -48,5 +48,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ B32.decode $ B32.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/Base64Test.hs b/test-src/Codec/Binary/Base64Test.hs
--- a/test-src/Codec/Binary/Base64Test.hs
+++ b/test-src/Codec/Binary/Base64Test.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BSC.empty           @=? B64.encode BSC.empty
@@ -49,5 +49,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ B64.decode $ B64.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/Base64UrlTest.hs b/test-src/Codec/Binary/Base64UrlTest.hs
--- a/test-src/Codec/Binary/Base64UrlTest.hs
+++ b/test-src/Codec/Binary/Base64UrlTest.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BSC.empty           @=? B64U.encode BSC.empty
@@ -49,5 +49,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ B64U.decode $ B64U.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/Base85Test.hs b/test-src/Codec/Binary/Base85Test.hs
--- a/test-src/Codec/Binary/Base85Test.hs
+++ b/test-src/Codec/Binary/Base85Test.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BS.empty @=? B85.encode BS.empty
@@ -58,5 +58,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ B85.decode $ B85.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/QuotedPrintableTest.hs b/test-src/Codec/Binary/QuotedPrintableTest.hs
--- a/test-src/Codec/Binary/QuotedPrintableTest.hs
+++ b/test-src/Codec/Binary/QuotedPrintableTest.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BS.empty          @=? QP.encode BS.empty
@@ -29,5 +29,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ QP.decode $ QP.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/UuTest.hs b/test-src/Codec/Binary/UuTest.hs
--- a/test-src/Codec/Binary/UuTest.hs
+++ b/test-src/Codec/Binary/UuTest.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BS.empty            @=? Uu.encode BS.empty
@@ -39,5 +39,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ Uu.decode $ Uu.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/XxTest.hs b/test-src/Codec/Binary/XxTest.hs
--- a/test-src/Codec/Binary/XxTest.hs
+++ b/test-src/Codec/Binary/XxTest.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.HUnit
+import Test.Tasty.QuickCheck
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BS.empty            @=? Xx.encode BS.empty
@@ -39,5 +39,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ Xx.decode $ Xx.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Codec/Binary/YencTest.hs b/test-src/Codec/Binary/YencTest.hs
--- a/test-src/Codec/Binary/YencTest.hs
+++ b/test-src/Codec/Binary/YencTest.hs
@@ -9,13 +9,13 @@
 
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BSC
-import Test.HUnit
-import Test.Framework (Test)
-import Test.Framework.TH
-import Test.Framework.Providers.HUnit
-import Test.Framework.Providers.QuickCheck2
 import Data.Word (Word8)
 
+import Test.Tasty
+import Test.Tasty.TH
+import Test.Tasty.QuickCheck
+import Test.Tasty.HUnit
+
 case_enc_foobar :: IO ()
 case_enc_foobar = do
     BS.empty                          @=? Y.encode BS.empty
@@ -55,5 +55,5 @@
 prop_encdec :: [Word8] -> Bool
 prop_encdec ws = (BS.pack ws) == (fromRight $ Y.decode $ Y.encode $ BS.pack ws)
 
-tests :: Test.Framework.Test
+tests :: TestTree
 tests = $(testGroupGenerator)
diff --git a/test-src/Main.hs b/test-src/Main.hs
--- a/test-src/Main.hs
+++ b/test-src/Main.hs
@@ -5,13 +5,7 @@
 
 module Main where
 
-import Test.Framework
-import Test.Framework.TH
--- import Test.Framework.Providers.HUnit
--- import Test.Framework.Providers.QuickCheck2
--- import Test.HUnit
--- import qualified Data.ByteString as BS
--- import qualified Data.ByteString.Char8 as BSC
+import Test.Tasty
 
 import qualified Codec.Binary.Base16Test as B16Test
 import qualified Codec.Binary.Base32Test as B32Test
@@ -24,10 +18,9 @@
 import qualified Codec.Binary.XxTest as XxTest
 import qualified Codec.Binary.YencTest as YTest
 
-tests :: [Test.Framework.Test]
-tests =
-    [ $(testGroupGenerator)
-    , B16Test.tests
+tests :: TestTree
+tests = testGroup "All tests"
+    [ B16Test.tests
     , B32Test.tests
     , B32HTest.tests
     , B64Test.tests
