diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,6 +1,11 @@
 # Revision history for glirc2
 
-## 2.32
+## 2.33.1
+
+* Support for GHC 8.8.1
+* Add `/trace` command
+
+## 2.33
 
 * Fixed cursor position with wide characters in input box
 * Added ability to force request capabilities.
diff --git a/glirc.cabal b/glirc.cabal
--- a/glirc.cabal
+++ b/glirc.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                glirc
-version:             2.33
+version:             2.33.1
 synopsis:            Console IRC client
 description:         Console IRC client
                      .
@@ -22,7 +22,7 @@
 tested-with:         GHC==8.6.5
 
 custom-setup
-  setup-depends: base     >=4.11 && <4.14,
+  setup-depends: base     >=4.12 && <4.14,
                  filepath >=1.4  && <1.5,
                  Cabal    >=2.2  && <4,
 
@@ -158,8 +158,7 @@
                        network              >=2.6.2  && <3.2,
                        process              >=1.4.2  && <1.7,
                        psqueues             >=0.2.7  && <0.3,
-                       regex-tdfa           >=1.2    && <1.3,
-                       regex-tdfa-text      >=1.0    && <1.1,
+                       regex-tdfa           >=1.3    && <1.4,
                        semigroupoids        >=5.1    && <5.4,
                        split                >=0.2    && <0.3,
                        stm                  >=2.4    && <2.6,
@@ -170,7 +169,7 @@
                        unix                 >=2.7    && <2.8,
                        unordered-containers >=0.2.7  && <0.3,
                        vector               >=0.11   && <0.13,
-                       vty                  >=5.23.1 && <5.26,
+                       vty                  >=5.23.1 && <5.27,
 
 test-suite test
   type:                exitcode-stdio-1.0
diff --git a/src/Client/Authentication/Ecdsa.hs b/src/Client/Authentication/Ecdsa.hs
--- a/src/Client/Authentication/Ecdsa.hs
+++ b/src/Client/Authentication/Ecdsa.hs
@@ -24,7 +24,6 @@
 import           Data.Text (Text)
 import qualified Data.Text as Text
 import qualified Data.Text.Encoding as Text
-import           System.IO.Error (IOError)
 import           System.Process (readProcess)
 import           Irc.Commands (AuthenticatePayload(..))
 
diff --git a/src/Client/Commands.hs b/src/Client/Commands.hs
--- a/src/Client/Commands.hs
+++ b/src/Client/Commands.hs
@@ -50,7 +50,7 @@
 import           Control.Monad
 import           Data.Foldable
 import           Data.HashSet (HashSet)
-import           Data.List (nub, (\\), elem)
+import           Data.List (nub, (\\))
 import           Data.List.NonEmpty (NonEmpty((:|)))
 import           Data.List.Split
 import qualified Data.HashMap.Strict as HashMap
@@ -1195,6 +1195,12 @@
     $ NetworkCommand cmdMasktrace simpleNetworkTab
 
   , Command
+      (pure "trace")
+      (optionalArg (liftA2 (,) (simpleToken "[server | nick]") (optionalArg (simpleToken "[server]"))))
+      "Outputs a list users on a server.\n"
+    $ NetworkCommand cmdTrace simpleNetworkTab
+
+  , Command
       (pure "map")
       (pure ())
       "Display network map.\n"
@@ -1820,6 +1826,16 @@
 cmdMasktrace :: NetworkCommand (String, Maybe String)
 cmdMasktrace cs st (mask, gecos) =
   do sendMsg cs (ircMasktrace (Text.pack mask) (maybe "*" Text.pack gecos))
+     commandSuccess st
+
+cmdTrace :: NetworkCommand (Maybe (String, Maybe String))
+cmdTrace cs st args =
+  do let argsList =
+           case args of
+            Nothing           -> []
+            Just (x, Nothing) -> [x]
+            Just (x, Just y)  -> [x, y]
+     sendMsg cs (rawIrcMsg "TRACE" (map Text.pack argsList))
      commandSuccess st
 
 cmdAway :: NetworkCommand String
diff --git a/src/Client/Configuration/Sts.hs b/src/Client/Configuration/Sts.hs
--- a/src/Client/Configuration/Sts.hs
+++ b/src/Client/Configuration/Sts.hs
@@ -24,7 +24,6 @@
 import           Config.Schema.Spec
 import           Config.Schema.Load (loadValue)
 import           Control.Exception (try)
-import           System.IO.Error (IOError)
 import           Control.Lens (makeLenses)
 import           Data.Maybe (fromMaybe)
 import           Data.Time (UTCTime, defaultTimeLocale, formatTime, parseTimeM, iso8601DateFormat)
@@ -32,7 +31,7 @@
 import qualified Data.Text as Text
 import qualified Data.Text.IO as Text
 import           System.Directory (getXdgDirectory, XdgDirectory(XdgConfig), createDirectoryIfMissing)
-import           System.FilePath (FilePath, (</>), takeDirectory)
+import           System.FilePath ((</>), takeDirectory)
 import           Data.HashMap.Strict (HashMap)
 import qualified Data.HashMap.Strict as HashMap
 
@@ -106,7 +105,8 @@
 dateTimeSpec :: ValueSpec UTCTime
 dateTimeSpec
   = customSpec "date-time" stringSpec
-  $ parseTimeM False defaultTimeLocale dateTimeFormat
+  $ maybe (Left "unable to parse") Right
+  . parseTimeM False defaultTimeLocale dateTimeFormat
 
 dateTimeFormat :: String
 dateTimeFormat = iso8601DateFormat (Just "%H:%M:%S")
diff --git a/src/Client/EventLoop.hs b/src/Client/EventLoop.hs
--- a/src/Client/EventLoop.hs
+++ b/src/Client/EventLoop.hs
@@ -18,7 +18,6 @@
 
 import           Client.CApi (popTimer)
 import           Client.Commands
-import           Client.Network.Async (recv)
 import           Client.Configuration (configJumpModifier, configKeyMap, configWindowNames, configDownloadDir)
 import           Client.Configuration.ServerSettings
 import           Client.EventLoop.Actions
diff --git a/src/Client/Hook/FreRelay.hs b/src/Client/Hook/FreRelay.hs
--- a/src/Client/Hook/FreRelay.hs
+++ b/src/Client/Hook/FreRelay.hs
@@ -20,8 +20,8 @@
 import           Data.Text (Text)
 import           Data.Foldable (asum)
 
-import           Text.Regex.TDFA (match, defaultCompOpt, defaultExecOpt)
-import           Text.Regex.TDFA.Text (Regex, compile)
+import           Text.Regex.TDFA (match, defaultCompOpt, defaultExecOpt, Regex)
+import           Text.Regex.TDFA.String (compile)
 
 import           Client.Hook (MessageHook(..), MessageResult(..))
 import           Irc.Message
@@ -69,7 +69,7 @@
   Text  {- ^ message            -} ->
   Maybe IrcMsg
 rule mk re s =
-  case match re s of
+  case map (map Text.pack) (match re (Text.unpack s)) of
     [_:xs] -> matchRule xs mk
     _      -> Nothing
 
@@ -87,7 +87,7 @@
 compRe ::
   Text                {- ^ regular expression           -} ->
   Either String Regex {- ^ error or compiled expression -}
-compRe = compile defaultCompOpt defaultExecOpt
+compRe = compile defaultCompOpt defaultExecOpt . Text.unpack
 
 ------------------------------------------------------------------------
 
diff --git a/src/Client/State/DCC.hs b/src/Client/State/DCC.hs
--- a/src/Client/State/DCC.hs
+++ b/src/Client/State/DCC.hs
@@ -64,7 +64,7 @@
 import           Data.ByteString.Builder (word32BE, toLazyByteString)
 import           Data.ByteString.Lazy (toStrict)
 import           Data.IntMap (Key, IntMap)
-import           Data.IntMap as I hiding (size, empty)
+import qualified Data.IntMap as I hiding (size, empty)
 import           Data.List (find)
 import           Data.Text (Text)
 import qualified Data.Text as Text
diff --git a/src/Client/View/Help.hs b/src/Client/View/Help.hs
--- a/src/Client/View/Help.hs
+++ b/src/Client/View/Help.hs
@@ -26,7 +26,6 @@
 import           Data.Foldable (toList)
 import           Data.List (delete, intercalate)
 import           Data.List.NonEmpty (NonEmpty((:|)))
-import           Data.Monoid ((<>))
 import           Data.Text (Text)
 import qualified Data.Text as Text
 import           Graphics.Vty.Attributes
