diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -8,6 +8,12 @@
 
 -
 
+## 1.16.1
+
+- [julmb](https://github.com/discord-haskell/discord-haskell/pull/200) Default instance for InteractionResponseMessage
+
+- [S3NP41-v](https://github.com/discord-haskell/discord-haskell/pull/199) Adding ThreadMemberUpdate event, and a StartThreadOpts Default instance
+
 ## 1.16.0
 
 - [L0neGamer](https://github.com/discord-haskell/discord-haskell/pull/187) Switched StatusOpts to a list of activities
diff --git a/discord-haskell.cabal b/discord-haskell.cabal
--- a/discord-haskell.cabal
+++ b/discord-haskell.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.0
 name:                discord-haskell
-version:             1.16.0
+version:             1.16.1
 description:         Functions and data types to write discord bots.
                      Official discord docs <https://discord.com/developers/docs/reference>.
                      .
diff --git a/src/Discord/Internal/Rest/Channel.hs b/src/Discord/Internal/Rest/Channel.hs
--- a/src/Discord/Internal/Rest/Channel.hs
+++ b/src/Discord/Internal/Rest/Channel.hs
@@ -159,16 +159,14 @@
                             }
 
 -- | Data constructor for `GetReactions` requests
-data ReactionTiming = BeforeReaction MessageId
-                    | AfterReaction MessageId
-                    | LatestReaction
+data ReactionTiming = AfterUser UserId
+                    | FirstUsers
   deriving (Show, Read, Eq, Ord)
 
 reactionTimingToQuery :: ReactionTiming -> R.Option 'R.Https
 reactionTimingToQuery t = case t of
-  (BeforeReaction snow) -> "before" R.=: show snow
-  (AfterReaction snow) -> "after"  R.=: show snow
-  LatestReaction -> mempty
+  (AfterUser snow) -> "after"  R.=: show snow
+  FirstUsers -> mempty
 
 -- | Data constructor for `GetChannelMessages` requests.
 -- 
@@ -309,6 +307,12 @@
       , "auto_archive_duration" .=? startThreadAutoArchive
       , "rate_limit_per_user" .=? startThreadRateLimit
       ]
+
+instance Default StartThreadOpts where
+  def = StartThreadOpts { startThreadName        = "New Thread"
+                        , startThreadAutoArchive = Nothing
+                        , startThreadRateLimit   = Nothing
+                        }
 
 -- | Options for `StartThreadNoMessage` request
 data StartThreadNoMessageOpts = StartThreadNoMessageOpts
diff --git a/src/Discord/Internal/Rest/Guild.hs b/src/Discord/Internal/Rest/Guild.hs
--- a/src/Discord/Internal/Rest/Guild.hs
+++ b/src/Discord/Internal/Rest/Guild.hs
@@ -15,6 +15,7 @@
   , ModifyGuildRoleOpts(..)
   , CreateGuildIntegrationOpts(..)
   , ModifyGuildIntegrationOpts(..)
+  , ListActiveThreads (..)
   ) where
 
 
@@ -53,6 +54,8 @@
   --   'MANAGE_CHANNELS' permission. Returns a list of all of the guild's 'Channel'
   --   objects on success. Fires multiple Channel Update 'Event's.
   ModifyGuildChannelPositions      :: GuildId -> [(ChannelId,Int)] -> GuildRequest [Channel]
+  -- | Returns a list of active threads in a guild
+  ListActiveGuildThreads   :: GuildId -> GuildRequest ListActiveThreads
   -- | Returns a guild 'Member' object for the specified user
   GetGuildMember           :: GuildId -> UserId -> GuildRequest GuildMember
   -- | Returns a list of guild 'Member' objects that are members of the guild.
@@ -61,14 +64,13 @@
   --   for the user with the guilds.join scope. Returns the guild 'Member' as the body.
   --   Fires a Guild Member Add 'Event'. Requires the bot to have the
   --   CREATE_INSTANT_INVITE permission.
-  AddGuildMember           :: GuildId -> UserId -> AddGuildMemberOpts
-                                      -> GuildRequest ()
+  AddGuildMember           :: GuildId -> UserId -> AddGuildMemberOpts -> GuildRequest ()
   -- | Modify attributes of a guild 'Member'. Fires a Guild Member Update 'Event'.
   ModifyGuildMember        :: GuildId -> UserId -> ModifyGuildMemberOpts -> GuildRequest GuildMember
   -- | Modify the nickname of the current user
   ModifyCurrentUserNick    :: GuildId -> T.Text -> GuildRequest ()
   -- | Add a member to a guild role. Requires 'MANAGE_ROLES' permission.
-  AddGuildMemberRole    :: GuildId -> UserId -> RoleId -> GuildRequest ()
+  AddGuildMemberRole       :: GuildId -> UserId -> RoleId -> GuildRequest ()
   -- | Remove a member from a guild role. Requires 'MANAGE_ROLES' permission.
   RemoveGuildMemberRole    :: GuildId -> UserId -> RoleId -> GuildRequest ()
   -- | Remove a member from a guild. Requires 'KICK_MEMBER' permission. Fires a
@@ -132,11 +134,11 @@
   -- | Sync an 'Integration'. Requires the 'MANAGE_GUILD' permission.
   SyncGuildIntegration     :: GuildId -> IntegrationId -> GuildRequest ()
   -- | Returns the 'GuildWidget' object. Requires the 'MANAGE_GUILD' permission.
-  GetGuildWidget            :: GuildId -> GuildRequest GuildWidget
+  GetGuildWidget           :: GuildId -> GuildRequest GuildWidget
   -- | Modify a 'GuildWidget' object for the guild. All attributes may be passed in with
   --   JSON and modified. Requires the 'MANAGE_GUILD' permission. Returns the updated
   --   'GuildWidget' object.
-  ModifyGuildWidget         :: GuildId -> GuildWidget -> GuildRequest GuildWidget
+  ModifyGuildWidget        :: GuildId -> GuildWidget -> GuildRequest GuildWidget
   -- | Vanity URL
   GetGuildVanityURL        :: GuildId -> GuildRequest T.Text
 
@@ -301,6 +303,23 @@
                           , guildMembersTimingAfter :: Maybe UserId
                           } deriving (Show, Read, Eq, Ord)
 
+-- | result for `ListGuildActiveThreads`
+data ListActiveThreads = ListActiveThreads
+  { listActiveThreadsThreads :: [Channel]
+  , listActiveThreadsMembers :: [ThreadMember]
+  } deriving (Show, Read, Eq, Ord)
+
+instance ToJSON ListActiveThreads where
+  toJSON ListActiveThreads{..} = object
+    [ ("threads", toJSON listActiveThreadsThreads)
+    , ("members", toJSON listActiveThreadsMembers)
+    ]
+
+instance FromJSON ListActiveThreads where
+  parseJSON = withObject "ListActiveThreads" $ \o ->
+    ListActiveThreads <$> o .: "threads"
+                      <*> o .: "members"
+
 guildMembersTimingToQuery :: GuildMembersTiming -> R.Option 'R.Https
 guildMembersTimingToQuery (GuildMembersTiming mLimit mAfter) =
   let limit = case mLimit of
@@ -319,6 +338,7 @@
   (GetGuildChannels g) ->            "guild_chan " <> show g
   (CreateGuildChannel g _ _ _) ->    "guild_chan " <> show g
   (ModifyGuildChannelPositions g _) -> "guild_chan " <> show g
+  (ListActiveGuildThreads g) ->      "guild_chan " <> show g
   (GetGuildMember g _) ->            "guild_memb " <> show g
   (ListGuildMembers g _) ->         "guild_membs " <> show g
   (AddGuildMember g _ _) ->         "guild_membs " <> show g
@@ -375,6 +395,9 @@
       let patch = map (\(a, b) -> object [("id", toJSON a)
                                          ,("position", toJSON b)]) newlocs
       in Patch (guilds /~ guild /: "channels") (pure (R.ReqBodyJson patch)) mempty
+
+  (ListActiveGuildThreads guild) ->
+      Get (guilds /~ guild /: "threads" /: "active") mempty
 
   (GetGuildMember guild member) ->
       Get (guilds /~ guild /: "members" /~ member) mempty
diff --git a/src/Discord/Internal/Types.hs b/src/Discord/Internal/Types.hs
--- a/src/Discord/Internal/Types.hs
+++ b/src/Discord/Internal/Types.hs
@@ -43,6 +43,7 @@
   InternalChannelDelete a -> ChannelDelete a
   InternalThreadCreate a -> ThreadCreate a
   InternalThreadUpdate a -> ThreadUpdate a
+  InternalThreadMemberUpdate a -> ThreadMemberUpdate a
   InternalThreadDelete a -> ThreadDelete a
   InternalThreadListSync a -> ThreadListSync a
   InternalThreadMembersUpdate a -> ThreadMembersUpdate a
diff --git a/src/Discord/Internal/Types/Channel.hs b/src/Discord/Internal/Types/Channel.hs
--- a/src/Discord/Internal/Types/Channel.hs
+++ b/src/Discord/Internal/Types/Channel.hs
@@ -9,6 +9,7 @@
   , Overwrite (..)
   , ThreadMetadata (..)
   , ThreadMember (..)
+  , ThreadMemberUpdateFields (..)
   , ThreadListSyncFields (..)
   , ThreadMembersUpdateFields (..)
   , Message (..)
@@ -23,7 +24,7 @@
   , MessageFlag (..)
   , MessageFlags (..)
   , MessageInteraction (..)
-
+  
   , ChannelTypeOption (..)
   ) where
 
@@ -453,6 +454,30 @@
               , "flags" .== threadMemberFlags
               ]
 
+data ThreadMemberUpdateFields = ThreadMemberUpdateFields
+  { threadMemberUpdateFieldsThreadId :: Maybe ChannelId -- ^ id of the thread
+  , threadMemberUpdateFieldsUserId   :: Maybe UserId    -- ^ id of the user
+  , threadMemberUpdateFieldsJoinTime :: UTCTime         -- ^ time the current user last joined the thread
+  , threadMemberUpdateFieldsFlags    :: Integer         -- ^ user-thread settings
+  , threadMemberUpdateFieldsGuildId  :: GuildId         -- ^ id of the guild
+  } deriving (Show, Read, Eq, Ord)
+
+instance FromJSON ThreadMemberUpdateFields where
+  parseJSON = withObject "ThreadMemberUpdateFields" $ \o ->
+    ThreadMemberUpdateFields <$> o .:? "id"
+                             <*> o .:? "user_id"
+                             <*> o .:  "join_timestamp"
+                             <*> o .:  "flags"
+                             <*> o .:  "guild_id"
+
+instance ToJSON ThreadMemberUpdateFields where
+  toJSON ThreadMemberUpdateFields{..} = objectFromMaybes
+              [ "id" .=? threadMemberUpdateFieldsThreadId
+              , "user_id" .=? threadMemberUpdateFieldsUserId
+              , "join_timestamp" .== threadMemberUpdateFieldsJoinTime
+              , "flags" .== threadMemberUpdateFieldsFlags
+              , "guild_id" .== threadMemberUpdateFieldsGuildId
+              ]
 
 data ThreadListSyncFields = ThreadListSyncFields
   { threadListSyncFieldsGuildId :: GuildId
diff --git a/src/Discord/Internal/Types/Embed.hs b/src/Discord/Internal/Types/Embed.hs
--- a/src/Discord/Internal/Types/Embed.hs
+++ b/src/Discord/Internal/Types/Embed.hs
@@ -56,6 +56,8 @@
            , embedProvider    = Nothing
            }
 
+-- | The 'Default' instance of this type yields a 'def' value whose fields are all empty.
+-- As such, the 'def' value is not a valid embed and needs to be adjusted before being used.
 data CreateEmbed = CreateEmbed
   { createEmbedAuthorName  :: T.Text
   , createEmbedAuthorUrl   :: T.Text
diff --git a/src/Discord/Internal/Types/Events.hs b/src/Discord/Internal/Types/Events.hs
--- a/src/Discord/Internal/Types/Events.hs
+++ b/src/Discord/Internal/Types/Events.hs
@@ -41,11 +41,13 @@
   | ThreadCreate               Channel
   -- | thread was updated
   | ThreadUpdate               Channel
+  -- | thread member for the current user was updated
+  | ThreadMemberUpdate         ThreadMemberUpdateFields
   -- | thread was deleted
   | ThreadDelete               Channel
   -- | sent when gaining access to a channel, contains all active threads in that channel
   | ThreadListSync             ThreadListSyncFields
-  -- | thread member for the current user was updated
+  -- | member or the current user was added or removed from a thread
   | ThreadMembersUpdate        ThreadMembersUpdateFields
   -- | message was pinned or unpinned
   | ChannelPinsUpdate          ChannelId (Maybe UTCTime)
@@ -118,6 +120,7 @@
   | InternalChannelDelete              Channel
   | InternalThreadCreate               Channel
   | InternalThreadUpdate               Channel
+  | InternalThreadMemberUpdate         ThreadMemberUpdateFields
   | InternalThreadDelete               Channel
   | InternalThreadListSync             ThreadListSyncFields 
   | InternalThreadMembersUpdate        ThreadMembersUpdateFields 
@@ -278,6 +281,7 @@
     "CHANNEL_DELETE"            -> InternalChannelDelete             <$> reparse o
     "THREAD_CREATE"             -> InternalThreadCreate              <$> reparse o
     "THREAD_UPDATE"             -> InternalThreadUpdate              <$> reparse o
+    "THREAD_MEMBER_UPDATE"      -> InternalThreadMemberUpdate        <$> reparse o
     "THREAD_DELETE"             -> InternalThreadDelete              <$> reparse o
     "THREAD_LIST_SYNC"          -> InternalThreadListSync            <$> reparse o
     "THREAD_MEMBERS_UPDATE"     -> InternalThreadMembersUpdate       <$> reparse o
diff --git a/src/Discord/Internal/Types/Interactions.hs b/src/Discord/Internal/Types/Interactions.hs
--- a/src/Discord/Internal/Types/Interactions.hs
+++ b/src/Discord/Internal/Types/Interactions.hs
@@ -32,6 +32,7 @@
 
 import Control.Applicative (Alternative ((<|>)))
 import Control.Monad (join)
+import Data.Default
 import Data.Aeson
 import Data.Aeson.Types (Parser)
 import Data.Bits (Bits (shift, (.|.)))
@@ -603,6 +604,8 @@
   toJSON (InteractionResponseAutocompleteNumber cs) = object [("choices", toJSON cs)]
 
 -- | A cut down message structure.
+-- The 'Default' instance of this type yields a 'def' value whose fields are all empty.
+-- As such, the 'def' value is not a valid response message and needs to be adjusted before being used.
 data InteractionResponseMessage = InteractionResponseMessage
   { interactionResponseMessageTTS :: Maybe Bool,
     interactionResponseMessageContent :: Maybe T.Text,
@@ -618,6 +621,9 @@
 -- effectively a helper function.
 interactionResponseMessageBasic :: T.Text -> InteractionResponseMessage
 interactionResponseMessageBasic t = InteractionResponseMessage Nothing (Just t) Nothing Nothing Nothing Nothing Nothing
+
+instance Default InteractionResponseMessage where
+  def = InteractionResponseMessage Nothing Nothing Nothing Nothing Nothing Nothing Nothing
 
 instance ToJSON InteractionResponseMessage where
   toJSON InteractionResponseMessage {..} =
