     item_user = @client.rtm.dataStore.getUserById(item_user)
     @receive new ReactionMessage(type, user, reaction, item_user, item, event_ts)
 
+  loadUsers: (err, res) =>
+    if err || !res.ok
+      @robot.logger.warning "Can't fetch users"
+      return
+
+    for id, user of res.members
+      @userChange user
+
+    for id, user of @robot.brain.data.users
+      if id is user.name then delete @robot.brain.data.users[user.id]
+
+  userChange: (user) =>
+    return unless user?.id?
+    newUser =
+      name: user.name
+      real_name: user.real_name
+      email_address: user.profile.email
+      slack: {}
+    for key, value of user
+      # don't store the SlackClient, because it'd cause a circular reference
+      # (it contains users and channels), and because it has sensitive information like the token
+      continue if value instanceof SlackClient
+      newUser.slack[key] = value
+
+    if user.id of @robot.brain.data.users
+      for key, value of @robot.brain.data.users[user.id]
+        unless key of newUser
+          newUser[key] = value
+    delete @robot.brain.data.users[user.id]
+    @robot.brain.userForId user.id, newUser
+
 module.exports = SlackBot

        @robot.logger.debug "#{user.name} set the topic in #{channel.name} to #{topic}"
        @receive new TopicMessage user, message.topic, message.ts

      else        
        @robot.logger.debug "Received message: '#{text}' in channel: #{channel.name}, subtype: #{subtype}"
        message.user = user
        @receive new CatchAllMessage(message)

    @client.on 'reaction_added', @reaction
    @client.on 'reaction_removed', @reaction
    @client.on 'authenticated', @authenticated
    @client.on 'userChange', @userChange

    @robot.brain.on 'loaded', () =>
      @client.web.users.list @loadUsers

    # Start logging in
    @client.connect()
