diff --git a/Network/IRC/Conduit.hs b/Network/IRC/Conduit.hs
--- a/Network/IRC/Conduit.hs
+++ b/Network/IRC/Conduit.hs
@@ -64,38 +64,39 @@
 import Control.Monad            (when)
 import Control.Monad.IO.Class   (MonadIO, liftIO)
 import Data.ByteString          (ByteString)
-import Data.Conduit             (Conduit, Consumer, Producer, (=$), ($$), (=$=), awaitForever, yield, runConduit)
+import Data.Conduit             (ConduitM, (.|), awaitForever, yield, runConduit)
 import Data.Conduit.Network     (AppData, clientSettings, runTCPClient, appSource, appSink)
 import Data.Conduit.Network.TLS (TLSClientConfig(..), tlsClientConfig, runTLSClient)
 import Data.Monoid              ((<>))
 import Data.Text                (unpack)
 import Data.Text.Encoding       (decodeUtf8)
 import Data.Time.Clock          (NominalDiffTime, getCurrentTime, addUTCTime, diffUTCTime)
+import Data.Void                (Void)
 import Data.X509.Validation     (FailedReason(..))
 import Network.Connection       (TLSSettings(..))
 import Network.IRC.Conduit.Internal
 import Network.IRC.Conduit.Lens
 import Network.TLS              (ClientParams(..), ClientHooks(..), Supported(..), Version(..), defaultParamsClient)
-import Network.TLS.Extra        (ciphersuite_all)
+import Network.TLS.Extra        (ciphersuite_strong)
 
 -- *Conduits
 
 -- |A conduit which takes as input bytestrings representing encoded
 -- IRC messages, and decodes them to events. If decoding fails, the
 -- original bytestring is just passed through.
-ircDecoder :: Monad m => Conduit ByteString m (Either ByteString IrcEvent)
-ircDecoder = chunked =$= awaitForever (yield . fromByteString)
+ircDecoder :: Monad m => ConduitM ByteString (Either ByteString IrcEvent) m ()
+ircDecoder = chunked .| awaitForever (yield . fromByteString)
 
 -- |Like 'ircDecoder', but discards messages which could not be
 -- decoded.
-ircLossyDecoder :: Monad m => Conduit ByteString m IrcEvent
-ircLossyDecoder = chunked =$= awaitForever lossy
+ircLossyDecoder :: Monad m => ConduitM ByteString IrcEvent m ()
+ircLossyDecoder = chunked .| awaitForever lossy
   where
     lossy bs = either (\_ -> return ()) yield $ fromByteString bs
 
 -- |A conduit which takes as input irc messages, and produces as
 -- output the encoded bytestring representation.
-ircEncoder :: Monad m => Conduit IrcMessage m ByteString
+ircEncoder :: Monad m => ConduitM IrcMessage ByteString m ()
 ircEncoder = awaitForever (yield . (<>"\r\n") . toByteString)
 
 -- |A conduit which rate limits output sent downstream. Awaiting on
@@ -104,7 +105,7 @@
 floodProtector :: MonadIO m
                => NominalDiffTime
                -- ^The minimum time between sending adjacent messages.
-               -> IO (Conduit a m a)
+               -> IO (ConduitM a a m ())
 floodProtector delay = do
   now  <- getCurrentTime
   mvar <- newMVar now
@@ -141,9 +142,9 @@
           -> IO ()
           -- ^Any initialisation work (started concurrently with the
           -- producer and consumer)
-          -> Consumer (Either ByteString IrcEvent) IO ()
+          -> ConduitM (Either ByteString IrcEvent) Void IO ()
           -- ^The consumer of irc events
-          -> Producer IO IrcMessage
+          -> ConduitM () IrcMessage IO ()
           -- ^The producer of irc messages
           -> IO ()
 ircClient port host = ircWithConn $ runTCPClient $ clientSettings port host
@@ -156,8 +157,8 @@
 ircWithConn :: ((AppData -> IO ()) -> IO ())
             -- ^The initialised connection.
             -> IO ()
-            -> Consumer (Either ByteString IrcEvent) IO ()
-            -> Producer IO IrcMessage
+            -> ConduitM (Either ByteString IrcEvent) Void IO ()
+            -> ConduitM () IrcMessage IO ()
             -> IO ()
 ircWithConn runner start cons prod = runner $ \appdata -> runConcurrently $
      Concurrently start
@@ -166,10 +167,11 @@
 
   where
     runSource appdata  = do
-      runConduit $ appSource appdata =$= ircDecoder =$ cons
+      runConduit $ appSource appdata .| ircDecoder .| cons
       ioError    $ userError "Upstream source closed."
 
-    runSink appdata = prod $$ ircEncoder =$ appSink appdata
+    runSink appdata =
+      runConduit $ prod .| ircEncoder .| appSink appdata
 
 -- **TLS
 
@@ -178,16 +180,18 @@
 ircTLSClient :: Int
              -> ByteString
              -> IO ()
-             -> Consumer (Either ByteString IrcEvent) IO ()
-             -> Producer IO IrcMessage -> IO ()
+             -> ConduitM (Either ByteString IrcEvent) Void IO ()
+             -> ConduitM () IrcMessage IO ()
+             -> IO ()
 ircTLSClient port host = ircTLSClient' (defaultTLSConfig port host)
 
 -- |Like 'ircTLSClient', but takes the configuration to use, which
 -- includes the host and port.
 ircTLSClient' :: TLSClientConfig
               -> IO ()
-              -> Consumer (Either ByteString IrcEvent) IO ()
-              -> Producer IO IrcMessage -> IO ()
+              -> ConduitM (Either ByteString IrcEvent) Void IO ()
+              -> ConduitM () IrcMessage IO ()
+              -> IO ()
 ircTLSClient' cfg = ircWithConn (runTLSClient cfg)
 
 -- |The default TLS settings for 'ircTLSClient'.
@@ -202,7 +206,7 @@
       { onServerCertificate = validate }
     , clientSupported = (clientSupported cpara)
       { supportedVersions = [TLS12, TLS11, TLS10]
-      , supportedCiphers = ciphersuite_all
+      , supportedCiphers = ciphersuite_strong
       }
     }
   }
diff --git a/Network/IRC/Conduit/Internal.hs b/Network/IRC/Conduit/Internal.hs
--- a/Network/IRC/Conduit/Internal.hs
+++ b/Network/IRC/Conduit/Internal.hs
@@ -20,7 +20,7 @@
 import Control.Arrow       ((&&&))
 import Data.ByteString     (ByteString, isSuffixOf, singleton, unpack)
 import Data.Char           (ord)
-import Data.Conduit        (Conduit, await, yield)
+import Data.Conduit        (ConduitM, await, yield)
 import Data.Maybe          (listToMaybe, isJust)
 import Data.Monoid         ((<>))
 import Data.Profunctor (Choice)
@@ -50,7 +50,7 @@
 -- *Conduits
 
 -- |Split up incoming bytestrings into new lines.
-chunked :: Monad m => Conduit ByteString m ByteString
+chunked :: Monad m => ConduitM ByteString ByteString m ()
 chunked = chunked' ""
   where
     chunked' !leftover = do
diff --git a/irc-conduit.cabal b/irc-conduit.cabal
--- a/irc-conduit.cabal
+++ b/irc-conduit.cabal
@@ -10,7 +10,7 @@
 -- PVP summary:      +-+------- breaking API changes
 --                   | | +----- non-breaking API additions
 --                   | | | +--- code changes with no API change
-version:             0.2.2.5
+version:             0.3.0.0
 
 -- A short (one-line) description of the package.
 synopsis:            Streaming IRC message library using conduits.
@@ -82,7 +82,7 @@
   build-depends:       base                >=4.8   && <5
                      , async               >=2.0   && <2.2
                      , bytestring          >=0.10  && <0.11
-                     , conduit             >=1.2   && <1.4
+                     , conduit             >=1.2.8 && <1.4
                      , conduit-extra       >=1.1   && <1.4
                      , connection          >=0.2   && <0.3
                      , irc                 >=0.6   && <0.7
@@ -108,4 +108,4 @@
 source-repository this
   type:     git
   location: https://github.com/barrucadu/irc-conduit.git
-  tag:      0.2.2.5
+  tag:      0.3.0.0
