diff --git a/src/components/views/rooms/MessageComposer.js b/src/components/views/rooms/MessageComposer.js
index be6fbee4f6..83d4e2aa2e 100644
--- a/src/components/views/rooms/MessageComposer.js
+++ b/src/components/views/rooms/MessageComposer.js
@@ -68,6 +68,7 @@ export default class MessageComposer extends React.Component {
             showFormatting: SettingsStore.getValue('MessageComposer.showFormatting'),
             isQuoting: Boolean(RoomViewStore.getQuotingEvent()),
             tombstone: this._getRoomTombstone(),
+            canSendMessages: this.props.room.maySendMessage(),
         };
     }
 
@@ -120,6 +121,9 @@ export default class MessageComposer extends React.Component {
         if (ev.getType() === 'm.room.tombstone') {
             this.setState({tombstone: this._getRoomTombstone()});
         }
+        if (ev.getType() === 'm.room.power_levels') {
+            this.setState({canSendMessages: this.props.room.maySendMessage()});
+        }
     }
 
     _getRoomTombstone() {
@@ -359,9 +363,6 @@ export default class MessageComposer extends React.Component {
                 </AccessibleButton>;
         }
 
-        const canSendMessages = !this.state.tombstone &&
-            this.props.room.maySendMessage();
-
         // TODO: Remove temporary logging for riot-web#7838
         // Note: we rip apart the power level event ourselves because we don't want to
         // log too much data about it - just the bits we care about. Many of the variables
@@ -390,7 +391,7 @@ export default class MessageComposer extends React.Component {
             ` myUserId=${room.myUserId} roomId=${room.roomId} hasPlEvent=${!!plEvent} powerLevels='${plEventString}'`
         );
 
-        if (canSendMessages) {
+        if (!this.state.tombstone && this.state.canSendMessages) {
             // This also currently includes the call buttons. Really we should
             // check separately for whether we can call, but this is slightly
             // complex because of conference calls.