diff --git a/Network/IRC/Bot/Commands.hs b/Network/IRC/Bot/Commands.hs
--- a/Network/IRC/Bot/Commands.hs
+++ b/Network/IRC/Bot/Commands.hs
@@ -8,7 +8,7 @@
 import Data.Data
 import Data.List (isPrefixOf)
 import Data.Monoid ((<>))
-import Network (PortID(PortNumber))
+import Network.Socket (PortNumber)
 import Network.IRC
 import Network.IRC.Bot.BotMonad
 
@@ -73,6 +73,15 @@
 instance ToMessage PrivMsg where
     toMessage (PrivMsg prefix receivers msg) = Message prefix "PRIVMSG" (receivers <> [msg])
 
+data Notice
+  = Notice  { noticePrefix     :: (Maybe Prefix)
+            , noticeReceivers  :: [ByteString]
+            , noticeMsg        :: ByteString
+            }
+      deriving (Eq, Read, Show)
+
+instance ToMessage Notice where
+    toMessage (Notice prefix receivers msg) = Message prefix "NOTICE" (receivers <> [msg])
 
 -- | get the nickname of the user who sent the message
 askSenderNickName :: (BotMonad m) => m (Maybe ByteString)
diff --git a/Network/IRC/Bot/Core.hs b/Network/IRC/Bot/Core.hs
--- a/Network/IRC/Bot/Core.hs
+++ b/Network/IRC/Bot/Core.hs
@@ -22,7 +22,7 @@
 import Data.Set                 (Set, empty)
 import Data.Time                (UTCTime, addUTCTime, getCurrentTime)
 import GHC.IO.Handle            (hFlushAll)
-import Network                  (HostName, PortID(PortNumber), connectTo)
+import Network.Socket           hiding (Debug)
 import Network.IRC              (Message, decode, encode, joinChan, nick, showMessage, user)
 import Network.IRC              as I
 import Network.IRC.Bot.Types    (User(..), nullUser)
@@ -33,7 +33,7 @@
 import Prelude                  hiding (catch)
 import           Control.Concurrent.SSem (SSem)
 import qualified Control.Concurrent.SSem as SSem
-import System.IO                (BufferMode(NoBuffering, LineBuffering), Handle, hClose, hGetLine, hPutChar, hSetBuffering)
+import System.IO                (BufferMode(NoBuffering, LineBuffering), Handle, hClose, hGetLine, hPutChar, hSetBuffering, IOMode(..))
 
 -- |Bot configuration
 data BotConf =
@@ -41,7 +41,7 @@
     { channelLogger :: (Maybe (Chan Message -> IO ()))  -- ^ optional channel logging function
     , logger        :: Logger           -- ^ app logging
     , host          :: HostName         -- ^ irc server to connect
-    , port          :: PortID           -- ^ irc port to connect to (usually, 'PortNumber 6667')
+    , port          :: PortNumber       -- ^ irc port to connect to (usually, 'PortNumber 6667')
     , nick          :: ByteString       -- ^ irc nick
     , commandPrefix :: String           -- ^ command prefix
     , user          :: User             -- ^ irc user info
@@ -54,7 +54,7 @@
     BotConf { channelLogger  = Nothing
             , logger         = stdoutLogger Normal
             , host           = ""
-            , port           = PortNumber 6667
+            , port           = 6667
             , nick           = ""
             , commandPrefix  = "#"
             , user           = nullUser
@@ -64,15 +64,20 @@
 
 -- | connect to irc server and send NICK and USER commands
 ircConnect :: HostName
-           -> PortID
+           -> PortNumber
            -> ByteString
            -> User
            -> IO Handle
-ircConnect host port n u =
-    do h <- connectTo host port
-       hSetBuffering h LineBuffering
-       return h
+ircConnect host port n u = do
+    addr <- head <$> getAddrInfo Nothing (Just host) (Just $ show port)
+    print addr
+    sock <- socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr)
+    connect sock $ addrAddress addr
 
+    h <- socketToHandle sock ReadWriteMode
+    hSetBuffering h LineBuffering
+    return h
+
 partLoop :: Logger -> ByteString -> String -> Chan Message -> Chan Message -> (BotPartT IO ()) -> IO ()
 partLoop logger botName prefix incomingChan outgoingChan botPart =
   forever $ do msg <- readChan incomingChan
@@ -89,7 +94,7 @@
 -- reconnect loop is still a bit buggy
 -- if you try to write multiple lines, and the all fail, reconnect will be called multiple times..
 -- something should be done so that this does not happen
-connectionLoop :: Logger -> Maybe (Int, Int) -> TMVar UTCTime -> HostName -> PortID -> ByteString -> User -> Chan Message -> Chan Message -> Maybe (Chan Message) -> SSem -> IO (ThreadId, ThreadId, Maybe ThreadId, IO ())
+connectionLoop :: Logger -> Maybe (Int, Int) -> TMVar UTCTime -> HostName -> PortNumber -> ByteString -> User -> Chan Message -> Chan Message -> Maybe (Chan Message) -> SSem -> IO (ThreadId, ThreadId, Maybe ThreadId, IO ())
 connectionLoop logger mLimitConf tmv host port nick user outgoingChan incomingChan logChan connSSem =
   do hTMVar <- atomically $ newTMVar (undefined :: Handle)
      (limit, limitTid) <-
@@ -133,7 +138,7 @@
 
 ircConnectLoop :: (LogLevel -> ByteString -> IO a) -- ^ logging
                -> HostName
-               -> PortID
+               -> PortNumber
                -> ByteString
                -> User
                -> IO Handle
@@ -144,7 +149,7 @@
              threadDelay (60 * 10^6)
              ircConnectLoop logger host port nick user)
 
-doConnect :: (LogLevel -> ByteString -> IO a) -> HostName -> PortID -> ByteString -> User -> TMVar Handle -> SSem -> IO ()
+doConnect :: (LogLevel -> ByteString -> IO a) -> HostName -> PortNumber -> ByteString -> User -> TMVar Handle -> SSem -> IO ()
 doConnect logger host port nick user hTMVar connSSem =
     do logger Normal $ "Connecting to " <> (C.pack host) <> " as " <> nick
        h <- ircConnectLoop logger host port nick user
@@ -153,7 +158,7 @@
        SSem.signal connSSem
        return ()
 
-reconnect :: Logger -> HostName -> PortID -> ByteString -> User -> TMVar Handle -> SSem -> IOException -> IO ()
+reconnect :: Logger -> HostName -> PortNumber -> ByteString -> User -> TMVar Handle -> SSem -> IOException -> IO ()
 reconnect logger host port nick user hTMVar connSSem e =
     do logger Normal $ "IRC Connection died: " <> C.pack (show e)
 {-
@@ -190,7 +195,7 @@
           -> Logger           -- ^ application logging
           -> Maybe (Int, Int) -- ^ rate limiter settings (burst length, delay in microseconds)
           -> HostName         -- ^ irc server to connect
-          -> PortID           -- ^ irc port to connect to (usually, 'PortNumber 6667')
+          -> PortNumber       -- ^ irc port to connect to (usually, '6667')
           -> ByteString       -- ^ irc nick
           -> String           -- ^ command prefix
           -> User             -- ^ irc user info
diff --git a/Network/IRC/Bot/Types.hs b/Network/IRC/Bot/Types.hs
--- a/Network/IRC/Bot/Types.hs
+++ b/Network/IRC/Bot/Types.hs
@@ -7,7 +7,7 @@
 import Data.ByteString          (ByteString)
 import Data.Data                (Data, Typeable)
 import Network.IRC              as I
-import Network                  (HostName)
+import Network.Socket           (HostName)
 
 data User = User
     { username   :: ByteString    -- ^ username on client system
diff --git a/demo.hs b/demo.hs
--- a/demo.hs
+++ b/demo.hs
@@ -6,7 +6,7 @@
 import Data.ByteString            (ByteString)
 import qualified Data.ByteString.Char8 as C
 import Data.Set                   (Set, insert)
-import Network                    (HostName, PortID(PortNumber), connectTo)
+import Network.Socket      hiding (Debug)
 import Network.IRC                (Message)
 import Network.IRC.Bot.BotMonad   (BotMonad(..))
 import Network.IRC.Bot.Core       (BotConf(..), User(..), nullBotConf, simpleBot)
@@ -39,7 +39,7 @@
     ]
     where
       setIrcServer n = BotConfOpt $ \c -> c { host = n, user = (user c) { servername = n } }
-      setPort str    = BotConfOpt $ \c -> c { port = PortNumber (fromIntegral $ read str) }
+      setPort str    = BotConfOpt $ \c -> c { port = (fromIntegral $ read str) }
       setNick n      = BotConfOpt $ \c -> c { nick = C.pack n }
       setUsername n  = BotConfOpt $ \c -> c { user = (user c) { username = C.pack n } }
       setHostname n  = BotConfOpt $ \c -> c { user = (user c) { hostname = n } }
diff --git a/ircbot.cabal b/ircbot.cabal
--- a/ircbot.cabal
+++ b/ircbot.cabal
@@ -1,5 +1,5 @@
 Name:                ircbot
-Version:             0.6.5.3
+Version:             0.6.6
 Synopsis:            A library for writing IRC bots
 Description:         A simple library for an IRC bot
 License:             BSD3
@@ -12,7 +12,7 @@
 Build-type:          Simple
 Cabal-version:       >=1.10
 Homepage:            https://github.com/stepcut/ircbot
-tested-with:         GHC == 7.6.3, GHC == 7.8.4, GHC == 7.10.2, GHC==8.0.2
+tested-with:         GHC == 7.10.2, GHC==8.0.2, GHC==8.6.5, GHC==8.8.3, GHC==8.10.1
 
 source-repository head
     type:     git
@@ -39,17 +39,17 @@
 
   Build-depends:  base       >= 4    && <5,
                   bytestring >= 0.10 && < 0.11,
-                  containers >= 0.4  && < 0.6,
+                  containers >= 0.4  && < 0.7,
                   directory   < 1.4,
                   filepath   >= 1.2  && < 1.5,
                   irc        == 0.6.*,
                   mtl        >= 2.0  && < 2.3,
-                  network    >= 2.3  && < 2.7,
+                  network    >= 3.1  && < 3.2,
                   parsec     == 3.1.*,
                   time       >= 1.5  && < 1.10,
                   unix       >= 2.4  && < 2.8,
                   random     >= 1.0  && < 1.2,
-                  stm        >= 2.2  && < 2.5,
+                  stm        >= 2.2  && < 2.6,
                   SafeSemaphore >= 0.10 && < 0.11
 
 Executable demo
@@ -57,17 +57,17 @@
   ghc-options:         -threaded -rtsopts -with-rtsopts=-N
   build-depends:  base       >= 4    && <5,
                   bytestring >= 0.10 && < 0.11,
-                  containers >= 0.4  && < 0.6,
+                  containers >= 0.4  && < 0.7,
                   directory   < 1.4,
                   filepath   >= 1.2  && < 1.5,
                   irc        == 0.6.*,
                   mtl        >= 2.0  && < 2.3,
-                  network    >= 2.3  && < 2.7,
+                  network    >= 3.1  && < 3.2,
                   parsec     == 3.1.*,
                   time       >= 1.5  && < 1.10,
                   unix       >= 2.4  && < 2.8,
                   random     >= 1.0  && < 1.2,
-                  stm        >= 2.2  && < 2.5,
+                  stm        >= 2.2  && < 2.6,
                   SafeSemaphore >= 0.10 && < 0.11
   other-modules:
                     Network.IRC.Bot
