diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,18 @@
 
+90000.0.0
+=========
+
+Package changes:
+* Updated the package to use `crypton-connection` since `connection` is
+  now unmaintained.
+
+API changes:
+* Updated the `ChannelMember` type's `channelMemberMsgCount` field to
+  have type `Int`, not `Integer`, to match all other numeric types in
+  the API.
+* Added support for `multiple_channels_viewed` websocket event added in
+  Mattermost 9.0.
+
 50200.15.0
 ==========
 
diff --git a/examples/GetPosts.hs b/examples/GetPosts.hs
--- a/examples/GetPosts.hs
+++ b/examples/GetPosts.hs
@@ -117,7 +117,7 @@
     pPrint teams
   forM_ teams $ \t -> do
     when (teamName t == configTeam config) $ do
-      users <- mmGetUsers (defaultUserQuery { userQueryInTeam = Just (getId t), userQueryPerPage = Just 1000 }) session
+      users <- mmGetUsers (defaultUserQuery { userQueryInTeam = Just (getId t), userQueryPerPage = Just 200 }) session
       let userMap = HM.fromList [ (getId u, u) | u <- toList users ]
       when (optVerbose opts) $ do
         pPrint userMap
diff --git a/mattermost-api.cabal b/mattermost-api.cabal
--- a/mattermost-api.cabal
+++ b/mattermost-api.cabal
@@ -1,5 +1,5 @@
 name:                mattermost-api
-version:             50200.15.0
+version:             90000.0.0
 synopsis:            Client API for Mattermost chat system
 
 description:         Client API for Mattermost chat system.  Mattermost is a
@@ -50,7 +50,7 @@
                      , websockets >= 0.11.0.0
                      , stm
                      , aeson >= 2.0.1.0 && < 2.2.0.0
-                     , connection
+                     , crypton-connection
                      , memory
                      , resource-pool >= 0.2.3
                      -- To prevent broken websockets versions from using
diff --git a/src/Network/Mattermost/Types.hs b/src/Network/Mattermost/Types.hs
--- a/src/Network/Mattermost/Types.hs
+++ b/src/Network/Mattermost/Types.hs
@@ -1483,7 +1483,7 @@
     ]
 
 data ChannelMember = ChannelMember
-  { channelMemberMsgCount :: Integer
+  { channelMemberMsgCount :: Int
   , channelMemberUserId :: UserId
   , channelMemberRoles :: Text
   , channelMemberMentionCount :: Int
diff --git a/src/Network/Mattermost/WebSocket/Types.hs b/src/Network/Mattermost/WebSocket/Types.hs
--- a/src/Network/Mattermost/WebSocket/Types.hs
+++ b/src/Network/Mattermost/WebSocket/Types.hs
@@ -15,6 +15,7 @@
 
 import           Control.Applicative
 import           Control.Exception ( throw )
+import           Control.Monad ( forM )
 import           Data.Aeson ( FromJSON(..)
                             , ToJSON(..)
                             , (.:)
@@ -22,6 +23,8 @@
                             , (.=)
                             )
 import qualified Data.Aeson as A
+import qualified Data.Aeson.Key as A
+import qualified Data.Aeson.KeyMap as A
 import qualified Data.Aeson.Types as A
 #if !MIN_VERSION_base(4,11,0)
 import           Data.Monoid ( (<>) )
@@ -69,6 +72,7 @@
   | WMReactionAdded
   | WMReactionRemoved
   | WMChannelViewed
+  | WMMultipleChannelsViewed
   | WMChannelUpdated
   | WMChannelMemberUpdated
   | WMEmojiAdded
@@ -107,6 +111,7 @@
     "authentication_challenge" -> return WMAuthenticationChallenge
     "preferences_deleted" -> return WMPreferenceDeleted
     "channel_viewed"     -> return WMChannelViewed
+    "multiple_channels_viewed"     -> return WMMultipleChannelsViewed
     "channel_updated"    -> return WMChannelUpdated
     "channel_member_updated" -> return WMChannelMemberUpdated
     "emoji_added"        -> return WMEmojiAdded
@@ -143,6 +148,7 @@
   toJSON WMWebRTC                  = "webrtc"
   toJSON WMAuthenticationChallenge = "authentication_challenge"
   toJSON WMChannelViewed           = "channel_viewed"
+  toJSON WMMultipleChannelsViewed  = "multiple_channels_viewed"
   toJSON WMChannelUpdated          = "channel_updated"
   toJSON WMChannelMemberUpdated    = "channel_member_updated"
   toJSON WMEmojiAdded              = "emoji_added"
@@ -163,6 +169,14 @@
       Right v  -> return v
       Left err -> throw (JSONDecodeException err (T.unpack s))
 
+fromChannelTimesMap :: A.Value -> A.Parser (HM.HashMap ChannelId ServerTime)
+fromChannelTimesMap = A.withObject "Channel times map" $ \o -> do
+    pairs <- forM (A.toList o) $ \(k, v) -> do
+        t <- timeFromServer <$> A.parseJSON v
+        return (fromId $ Id $ T.pack $ A.toString k, t)
+
+    return $ HM.fromList pairs
+
 --
 
 data WebsocketEvent = WebsocketEvent
@@ -212,6 +226,7 @@
   , wepMentions           :: Maybe (Set UserId)
   , wepPreferences        :: Maybe (Seq Preference)
   , wepChannelMember      :: Maybe ChannelMember
+  , wepChannelTimes       :: Maybe (HM.HashMap ChannelId ServerTime)
   } deriving (Read, Show, Eq)
 
 instance FromJSON WEData where
@@ -229,6 +244,7 @@
     wepMentions           <- mapM fromValueString =<< o .:? "mentions"
     wepPreferences        <- mapM fromValueString =<< o .:? "preferences"
     wepChannelMember      <- mapM fromValueString =<< o .:? "channelMember"
+    wepChannelTimes       <- mapM fromChannelTimesMap =<< o .:? "channel_times"
     return WEData { .. }
 
 instance ToJSON WEData where
@@ -244,6 +260,11 @@
     , "mentions"     .= toValueString wepMentions
     , "preferences"  .= toValueString wepPreferences
     , "channelMember" .= toValueString wepChannelMember
+    , "channelTimes" .= do
+          m <- wepChannelTimes
+          let pairs = HM.toList m
+              mkEntry (cId, t) = (A.fromString $ T.unpack $ unId $ toId cId, timeToServer t)
+          return $ A.fromList $ mkEntry <$> pairs
     ]
 
 --
