diff --git a/src/controllers/molecules/MemberInfo.js b/src/controllers/molecules/MemberInfo.js
index 24e4afe5fdd587184d639a657d716a6d9f3f7e43..23ae2e5fb13f0657b883fd103cd13f156e38cd05 100644
--- a/src/controllers/molecules/MemberInfo.js
+++ b/src/controllers/molecules/MemberInfo.js
@@ -161,6 +161,7 @@ module.exports = {
     onChatClick: function() {
         // check if there are any existing rooms with just us and them (1:1)
         // If so, just view that room. If not, create a private room with them.
+        var self = this;
         var rooms = MatrixClientPeg.get().getRooms();
         var userIds = [
             this.props.member.userId,
@@ -189,23 +190,28 @@ module.exports = {
                 action: 'view_room',
                 room_id: existingRoomId
             });
+            this.props.onFinished();
         }
         else {
+            self.setState({ creatingRoom: true });
             MatrixClientPeg.get().createRoom({
                 invite: [this.props.member.userId],
                 preset: "private_chat"
             }).done(function(res) {
+                self.setState({ creatingRoom: false });
                 dis.dispatch({
                     action: 'view_room',
                     room_id: res.room_id
                 });
+                self.props.onFinished();
             }, function(err) {
+                self.setState({ creatingRoom: false });
                 console.error(
                     "Failed to create room: %s", JSON.stringify(err)
                 );
+                self.props.onFinished();
             });
         }
-        this.props.onFinished();                
     },
 
     // FIXME: this is horribly duplicated with MemberTile's onLeaveClick.
@@ -249,7 +255,8 @@ module.exports = {
                 modifyLevel: false
             },
             muted: false,
-            isTargetMod: false
+            isTargetMod: false,
+            creatingRoom: false
         }
     },