diff --git a/src/bot.ts b/src/bot.ts
index 1b368c04847a2031b96e393e6a613393c4a9326d..b80cf607a01cef29199a2394b7d81c5e403a7d11 100644
--- a/src/bot.ts
+++ b/src/bot.ts
@@ -50,6 +50,7 @@ export class DiscordBot {
       client.on("userUpdate", (_, newUser) => { this.UpdateUser(newUser); });
       client.on("channelUpdate", (_, newChannel) => { this.UpdateRooms(newChannel); });
       client.on("presenceUpdate", (_, newMember) => { this.UpdatePresence(newMember); });
+      client.on("guildMemberUpdate", (_, newMember) => { this.UpdateGuildMember(newMember); });
       client.on("message", (msg) => { Bluebird.delay(MSG_PROCESS_DELAY).then(() => {
           this.OnMessage(msg);
         });
@@ -200,8 +201,20 @@ export class DiscordBot {
       discord_channel: channel.id,
     }).then((rooms) => {
       if (rooms.length === 0) {
-        log.verbose("DiscordBot", `Got message but couldn"t find room chan id:${channel.id} for it.`);
-        return Promise.reject("Room not found.");
+        log.verbose("DiscordBot", `Couldn"t find room(s) for channel ${channel.id}.`);
+        return Promise.reject("Room(s) not found.");
+      }
+      return rooms.map((room) => {return room.matrix.getId(); });
+    });
+  }
+
+  private GetRoomIdsFromGuild(guild: String): Promise<string[]> {
+    return this.bridge.getRoomStore().getEntriesByRemoteRoomData({
+      discord_guild: guild,
+    }).then((rooms) => {
+      if (rooms.length === 0) {
+        log.verbose("DiscordBot", `Couldn"t find room(s) for guild id:${guild}.`);
+        return Promise.reject("Room(s) not found.");
       }
       return rooms.map((room) => {return room.matrix.getId(); });
     });
@@ -326,7 +339,24 @@ export class DiscordBot {
     } catch (err) {
       log.info("DiscordBot", "Couldn't set presence ", err);
     }
-    // TODO: Set nicknames inside the scope of guild chats.
+  }
+
+  private UpdateGuildMember(guildMember: Discord.GuildMember) {
+    const client = this.bridge.getIntentFromLocalpart(`_discord_${guildMember.id}`).getClient();
+    const userId = client.credentials.userId;
+    let avatar = null;
+    log.info(`Updating nick for ${guildMember.user.username}`);
+    return Bluebird.each(client.getProfileInfo(userId, "avatar_url").then((avatarUrl) => {
+      avatar = avatarUrl.avatar_url;
+      return this.GetRoomIdsFromGuild(guildMember.guild.id);
+    }), (room) => {
+      log.verbose(`Updating ${room}`);
+      client.sendStateEvent(room, "m.room.member", {
+        membership: "join",
+        avatar_url: avatar,
+        displayname: guildMember.displayName,
+      }, userId);
+    });
   }
 
   private OnTyping(channel: Discord.Channel, user: Discord.User, isTyping: boolean) {