         }
     }
 
-    private func react(withReaction reaction: ReactionsMenuReaction, selected: Bool) {
+    private func react(withReaction reaction: ReactionsMenuReaction, selected: Bool, notifyDelegate: Bool = true) {
+
+        // If required, unreact first
+        if selected {
+            self.ensure3StateButtons(withReaction: reaction)
+        }
+
         if selected {
             self.aggregations.sendReaction(reaction.rawValue, toEvent: self.eventId, inRoom: self.roomId, success: {[weak self] _ in
 

                    return
                }

                sself.coordinatorDelegate?.reactionsMenuViewModel(sself, didReactionComplete: reaction.rawValue, isAddReaction: true)

            }, failure: {[weak self] (error) in
                print("[ReactionsMenuViewModel] react: Error: \(error)")

                    return
                }

                if notifyDelegate {
                    sself.coordinatorDelegate?.reactionsMenuViewModel(sself, didReactionFailedWithError: error, reaction: reaction.rawValue, isAddReaction: true)
                }
            })
        } else {

