diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,10 @@
 # Revision history for irc-core
 
+## 2.9
+
+* Move message hiding logic out of the IRC library
+* Add message code for STARTTLS
+
 ## 2.8
 
 * `encodePlainAuthentication` has separate authorization and authentication identity parameters
diff --git a/irc-core.cabal b/irc-core.cabal
--- a/irc-core.cabal
+++ b/irc-core.cabal
@@ -1,5 +1,5 @@
 name:                irc-core
-version:             2.8
+version:             2.9
 synopsis:            IRC core library for glirc
 description:         IRC core library for glirc
                      .
diff --git a/src/Irc/Codes.hs b/src/Irc/Codes.hs
--- a/src/Irc/Codes.hs
+++ b/src/Irc/Codes.hs
@@ -368,7 +368,7 @@
 pattern RPL_SERVMODEIS              = ReplyCode 664
 pattern RPL_OTHERUMODEIS            = ReplyCode 665
 pattern RPL_ENDOF_GENERIC           = ReplyCode 666
-pattern RPL_WHOWASDETAILS           = ReplyCode 670
+pattern RPL_STARTTLS                = ReplyCode 670
 pattern RPL_WHOISSECURE             = ReplyCode 671
 pattern RPL_UNKNOWNMODES            = ReplyCode 672
 pattern RPL_CANNOTSETMODES          = ReplyCode 673
@@ -379,6 +379,7 @@
 pattern RPL_LANGUAGE                = ReplyCode 688
 pattern RPL_WHOISSTAFF              = ReplyCode 689
 pattern RPL_WHOISLANGUAGE           = ReplyCode 690
+pattern ERR_STARTTLS                = ReplyCode 691
 pattern RPL_MODLIST                 = ReplyCode 702
 pattern RPL_ENDOFMODLIST            = ReplyCode 703
 pattern RPL_HELPSTART               = ReplyCode 704
@@ -797,7 +798,7 @@
   , (RPL_SERVMODEIS            , ReplyCodeInfo CommandReply "serv-mode-is")
   , (RPL_OTHERUMODEIS          , ReplyCodeInfo CommandReply "other-umode-is")
   , (RPL_ENDOF_GENERIC         , ReplyCodeInfo CommandReply "end-of-generic")
-  , (RPL_WHOWASDETAILS         , ReplyCodeInfo CommandReply "whowas-details")
+  , (RPL_STARTTLS              , ReplyCodeInfo CommandReply "start-tls")
   , (RPL_WHOISSECURE           , ReplyCodeInfo CommandReply "whois-secure")
   , (RPL_UNKNOWNMODES          , ReplyCodeInfo CommandReply "unknown-modes")
   , (RPL_CANNOTSETMODES        , ReplyCodeInfo CommandReply "cannot-set-modes")
@@ -808,6 +809,7 @@
   , (RPL_LANGUAGE              , ReplyCodeInfo CommandReply "language")
   , (RPL_WHOISSTAFF            , ReplyCodeInfo CommandReply "whois-staff")
   , (RPL_WHOISLANGUAGE         , ReplyCodeInfo CommandReply "who-is-language")
+  , (ERR_STARTTLS              , ReplyCodeInfo CommandReply "err-start-tls")
   , (RPL_MODLIST               , ReplyCodeInfo CommandReply "mod-list")
   , (RPL_ENDOFMODLIST          , ReplyCodeInfo CommandReply "end-of-modlist")
   , (RPL_HELPSTART             , ReplyCodeInfo CommandReply "help-start")
diff --git a/src/Irc/Message.hs b/src/Irc/Message.hs
--- a/src/Irc/Message.hs
+++ b/src/Irc/Message.hs
@@ -199,7 +199,6 @@
   = TargetUser   !Identifier -- ^ Metadata update for a user
   | TargetWindow !Identifier -- ^ Directed message to channel or from user
   | TargetNetwork            -- ^ Network-level message
-  | TargetHidden             -- ^ Completely hidden message
   deriving (Show)
 
 -- | Target information for the window that could be appropriate to
@@ -208,7 +207,7 @@
 msgTarget me msg =
   case msg of
     UnknownMsg{}             -> TargetNetwork
-    Nick user _              -> TargetUser (userNick user)
+    Nick user oldUser        -> TargetUser (userNick user)
     Mode _ tgt _ | tgt == me -> TargetNetwork
                  | otherwise -> TargetWindow tgt
     Join _ chan _ _          -> TargetWindow chan
@@ -220,14 +219,14 @@
     Ctcp src tgt _ _         -> directed src tgt
     CtcpNotice src tgt _ _   -> directed src tgt
     Notice  src tgt _        -> directed src tgt
-    Authenticate{}           -> TargetHidden
-    Ping{}                   -> TargetHidden
-    Pong{}                   -> TargetHidden
+    Authenticate{}           -> TargetNetwork
+    Ping{}                   -> TargetNetwork
+    Pong{}                   -> TargetNetwork
     Error{}                  -> TargetNetwork
     Cap{}                    -> TargetNetwork
     Reply code args          -> replyTarget code args
-    BatchStart{}             -> TargetHidden
-    BatchEnd{}               -> TargetHidden
+    BatchStart{}             -> TargetNetwork
+    BatchEnd{}               -> TargetNetwork
     Account user _           -> TargetUser (userNick user)
     Chghost user _ _         -> TargetUser (userNick user)
     Wallops src _            -> TargetWindow (userNick src)
