diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,8 @@
 # Revision history for glirc2
 
+## 2.35
+* Added client certificate information to `/cert`
+
 ## 2.34
 
 * Add `/dump` command
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.34
+version:             2.35
 synopsis:            Console IRC client
 description:         Console IRC client
                      .
@@ -24,7 +24,7 @@
 custom-setup
   setup-depends: base     >=4.12 && <4.14,
                  filepath >=1.4  && <1.5,
-                 Cabal    >=2.2  && <4,
+                 Cabal    >=2.2  && <4
 
 source-repository head
   type: git
@@ -151,14 +151,14 @@
                        free                 >=4.12   && <5.2,
                        gitrev               >=1.2    && <1.4,
                        hashable             >=1.2.4  && <1.4,
-                       hookup               >=0.2.3  && <0.4,
+                       hookup               >=0.3.1  && <0.4,
                        irc-core             >=2.7.1  && <2.8,
                        kan-extensions       >=5.0    && <5.3,
-                       lens                 >=4.14   && <4.19,
+                       lens                 >=4.14   && <4.20,
                        network              >=2.6.2  && <3.2,
                        process              >=1.4.2  && <1.7,
                        psqueues             >=0.2.7  && <0.3,
-                       regex-tdfa           >=1.3    && <1.4,
+                       regex-tdfa           >=1.3.1  && <1.4,
                        semigroupoids        >=5.1    && <5.4,
                        split                >=0.2    && <0.3,
                        stm                  >=2.4    && <2.6,
@@ -169,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.27,
+                       vty                  >=5.23.1 && <5.28
 
 test-suite test
   type:                exitcode-stdio-1.0
diff --git a/src/Client/EventLoop.hs b/src/Client/EventLoop.hs
--- a/src/Client/EventLoop.hs
+++ b/src/Client/EventLoop.hs
@@ -364,7 +364,8 @@
             let upd Nothing = Just $! view clientFocus st
                 upd x       = x
             in return $! Just $! over clientActivityReturn upd out
-        | otherwise = return (Just out)
+        | otherwise = return $! Just
+                     $! set clientActivityReturn Nothing out
 
       changeEditor  f = continue (over clientTextBox f st)
       changeContent f = changeEditor
diff --git a/src/Client/EventLoop/Actions.hs b/src/Client/EventLoop/Actions.hs
--- a/src/Client/EventLoop/Actions.hs
+++ b/src/Client/EventLoop/Actions.hs
@@ -258,6 +258,8 @@
         "Delete"    -> pure KDel
         "Left"      -> pure KLeft
         "Right"     -> pure KRight
+        "Up"        -> pure KUp
+        "Down"      -> pure KDown
         [c]         -> pure (KChar c)
         'F':xs      -> KFun <$> liftMaybe (readMaybe xs)
         'C':'-':xs  -> modifier MCtrl  *> go xs
@@ -293,4 +295,6 @@
 prettyKey KBS       = "Backspace"
 prettyKey KLeft     = "Left"
 prettyKey KRight    = "Right"
+prettyKey KUp       = "Up"
+prettyKey KDown     = "Down"
 prettyKey k         = show k
diff --git a/src/Client/Network/Async.hs b/src/Client/Network/Async.hs
--- a/src/Client/Network/Async.hs
+++ b/src/Client/Network/Async.hs
@@ -53,7 +53,7 @@
 import qualified Data.Text as Text
 import           Data.Word (Word8)
 import           Numeric (showHex)
-import           OpenSSL.X509 (printX509)
+import           OpenSSL.X509 (X509, printX509)
 
 
 -- | Handle for a network connection
@@ -202,12 +202,20 @@
 reportNetworkOpen :: Connection -> TQueue NetworkEvent -> IO ()
 reportNetworkOpen h inQueue =
   do now <- getZonedTime
-     mbX509 <- getPeerCertificate h
-     txts <- case mbX509 of
-               Nothing -> return []
-               Just x509 -> do str <- printX509 x509
-                               return $! reverse (Text.lines (Text.pack str))
+     mbServer <- getPeerCertificate h
+     let mbClient = getClientCertificate h
+     cTxts <- certText "Server" mbServer
+     sTxts <- certText "Client" mbClient
+     let txts = cTxts ++ sTxts
      atomically (writeTQueue inQueue (NetworkOpen now txts))
+
+certText :: String -> Maybe X509 -> IO [Text]
+certText label mbX509 =
+  case mbX509 of
+    Nothing -> pure []
+    Just x509 ->
+      do str <- printX509 x509
+         return $! reverse (Text.lines (Text.pack ("<<" ++ label ++ ">>\n" ++ str)))
 
 formatDigest :: ByteString -> String
 formatDigest
