     
     func hideContextualMenu(animated: Bool, completion: (() -> Void)?) {
         guard let roomContextualMenuViewController = self.roomContextualMenuViewController else {
+            completion?()
             return
         }
         
         let animationInstructions: (() -> Void) = {
             roomContextualMenuViewController.hideMenuToolbar()
-            roomContextualMenuViewController.view.alpha = 0
+            roomContextualMenuViewController.hideReactionsMenu()
             roomContextualMenuViewController.view.layoutIfNeeded()
         }
         
         let animationCompletionInstructions: (() -> Void) = {
             roomContextualMenuViewController.vc_removeFromParent()
-
-            // TODO: To remove once the retain cycle caused by reactionsMenuViewModel is fixed
-            self.roomContextualMenuViewController = nil
-
             completion?()
         }
         
         if animated {
-            UIView.animate(withDuration: Constants.animationDuration, animations: {
-                animationInstructions()
-            }, completion: { completed in
-                animationCompletionInstructions()
-            })
+            if roomContextualMenuViewController.shouldPerformTappedReactionAnimation {
+                UIView.animate(withDuration: 0.15, animations: {
+                    roomContextualMenuViewController.selectedReactionAnimationsIntructionsPart1()
+                }, completion: { _ in
+                    UIView.animate(withDuration: Constants.animationDuration, animations: {
+                        roomContextualMenuViewController.selectedReactionAnimationsIntructionsPart2()
+                        animationInstructions()
+                    }, completion: { completed in
+                        animationCompletionInstructions()
+                    })
+                })
+            } else {
+                UIView.animate(withDuration: Constants.animationDuration, animations: {
+                    animationInstructions()
+                }, completion: { completed in
+                    animationCompletionInstructions()
+                })
+            }
         } else {
             animationInstructions()
             animationCompletionInstructions()
         }
     }
-    
-    func showReactionsMenu(reactionsMenuViewModel: ReactionsMenuViewModel, aroundFrame frame: CGRect) {
-        self.roomContextualMenuViewController?.showReactionsMenu(withViewModel: reactionsMenuViewModel, aroundFrame: frame)
-    }
 }

    // MARK: - Constants
    
    private enum Constants {
        static let animationDuration: TimeInterval = 0.3
    }
    
    // MARK: - Properties

    }
    
    // MARK: - Public

    func present(roomContextualMenuViewController: RoomContextualMenuViewController,
                 from viewController: UIViewController,
                 on view: UIView,
                 contentToReactFrame: CGRect, // Not nullable for compatibility with Obj-C
                 animated: Bool,
                 completion: (() -> Void)?) {
        guard self.roomContextualMenuViewController == nil else {
            return
        }
        
        viewController.vc_addChildViewController(viewController: roomContextualMenuViewController, onView: view)
        
        self.roomContextualMenuViewController = roomContextualMenuViewController
        
        roomContextualMenuViewController.contentToReactFrame = contentToReactFrame
        
        roomContextualMenuViewController.hideMenuToolbar()
        roomContextualMenuViewController.prepareReactionsMenuAnimations()
        roomContextualMenuViewController.hideReactionsMenu()
        
        roomContextualMenuViewController.view.layoutIfNeeded()
        
        let animationInstructions: (() -> Void) = {
            roomContextualMenuViewController.showMenuToolbar()
            roomContextualMenuViewController.showReactionsMenu()
            roomContextualMenuViewController.view.layoutIfNeeded()
        }
        
