Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp	(revision 84536)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.cpp	(revision 84537)
@@ -365,4 +365,11 @@
 }
 
+void UIVirtualBoxManager::sltHandleMenuPrepare(int iIndex, QMenu *pMenu)
+{
+    /* Update if there is update-handler: */
+    if (m_menuUpdateHandlers.contains(iIndex))
+        (this->*(m_menuUpdateHandlers.value(iIndex)))(pMenu);
+}
+
 void UIVirtualBoxManager::sltOpenVirtualMediumManagerWindow()
 {
@@ -1377,22 +1384,4 @@
 }
 
-void UIVirtualBoxManager::sltGroupCloseMenuAboutToShow()
-{
-    /* Get selected items: */
-    QList<UIVirtualMachineItem*> items = currentItems();
-    AssertMsgReturnVoid(!items.isEmpty(), ("At least one item should be selected!\n"));
-
-    actionPool()->action(UIActionIndexST_M_Group_M_Close_S_Shutdown)->setEnabled(isActionEnabled(UIActionIndexST_M_Group_M_Close_S_Shutdown, items));
-}
-
-void UIVirtualBoxManager::sltMachineCloseMenuAboutToShow()
-{
-    /* Get selected items: */
-    QList<UIVirtualMachineItem*> items = currentItems();
-    AssertMsgReturnVoid(!items.isEmpty(), ("At least one item should be selected!\n"));
-
-    actionPool()->action(UIActionIndexST_M_Machine_M_Close_S_Shutdown)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_M_Close_S_Shutdown, items));
-}
-
 void UIVirtualBoxManager::prepare()
 {
@@ -1477,4 +1466,8 @@
     /* Create action-pool: */
     m_pActionPool = UIActionPool::create(UIActionPoolType_Manager);
+
+    /* Prepare menu update-handlers: */
+    m_menuUpdateHandlers[UIActionIndexST_M_Group_M_Close] = &UIVirtualBoxManager::updateMenuGroupClose;
+    m_menuUpdateHandlers[UIActionIndexST_M_Machine_M_Close] = &UIVirtualBoxManager::updateMenuMachineClose;
 
     /* Build menu-bar: */
@@ -1549,4 +1542,7 @@
     connect(gVBoxEvents, &UIVirtualBoxEventHandler::sigSessionStateChange,
             this, &UIVirtualBoxManager::sltHandleStateChange);
+
+    /* General action-pool connections: */
+    connect(actionPool(), &UIActionPool::sigNotifyAboutMenuPrepare, this, &UIVirtualBoxManager::sltHandleMenuPrepare);
 
     /* 'File' menu connections: */
@@ -1663,6 +1659,4 @@
 
     /* 'Group/Close' menu connections: */
-    connect(actionPool()->action(UIActionIndexST_M_Group_M_Close)->menu(), &UIMenu::aboutToShow,
-            this, &UIVirtualBoxManager::sltGroupCloseMenuAboutToShow);
     connect(actionPool()->action(UIActionIndexST_M_Group_M_Close_S_Detach), &UIAction::triggered,
             this, &UIVirtualBoxManager::sltPerformDetachMachineUI);
@@ -1675,6 +1669,4 @@
 
     /* 'Machine/Close' menu connections: */
-    connect(actionPool()->action(UIActionIndexST_M_Machine_M_Close)->menu(), &UIMenu::aboutToShow,
-            this, &UIVirtualBoxManager::sltMachineCloseMenuAboutToShow);
     connect(actionPool()->action(UIActionIndexST_M_Machine_M_Close_S_Detach), &UIAction::triggered,
             this, &UIVirtualBoxManager::sltPerformDetachMachineUI);
@@ -1905,4 +1897,22 @@
         }
     }
+}
+
+void UIVirtualBoxManager::updateMenuGroupClose(QMenu *)
+{
+    /* Get selected items: */
+    QList<UIVirtualMachineItem*> items = currentItems();
+    AssertMsgReturnVoid(!items.isEmpty(), ("At least one item should be selected!\n"));
+
+    actionPool()->action(UIActionIndexST_M_Group_M_Close_S_Shutdown)->setEnabled(isActionEnabled(UIActionIndexST_M_Group_M_Close_S_Shutdown, items));
+}
+
+void UIVirtualBoxManager::updateMenuMachineClose(QMenu *)
+{
+    /* Get selected items: */
+    QList<UIVirtualMachineItem*> items = currentItems();
+    AssertMsgReturnVoid(!items.isEmpty(), ("At least one item should be selected!\n"));
+
+    actionPool()->action(UIActionIndexST_M_Machine_M_Close_S_Shutdown)->setEnabled(isActionEnabled(UIActionIndexST_M_Machine_M_Close_S_Shutdown, items));
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h	(revision 84536)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/manager/UIVirtualBoxManager.h	(revision 84537)
@@ -49,4 +49,7 @@
     Q_OBJECT;
 
+    /** Pointer to menu update-handler for this class: */
+    typedef void (UIVirtualBoxManager::*MenuUpdateHandler)(QMenu *pMenu);
+
 signals:
 
@@ -142,4 +145,10 @@
         /** Handles CVirtualBox event about state change for machine with @a uID. */
         void sltHandleStateChange(const QUuid &uID);
+    /** @} */
+
+    /** @name Action-pool stuff.
+      * @{ */
+        /** Handle menu prepare. */
+        void sltHandleMenuPrepare(int iIndex, QMenu *pMenu);
     /** @} */
 
@@ -266,9 +275,4 @@
         /** Handles call to toggle machine search widget visibility to be @a fVisible. */
         void sltPerformMachineSearchWidgetVisibilityToggling(bool fVisible);
-
-        /** Handles call to show group Close menu. */
-        void sltGroupCloseMenuAboutToShow();
-        /** Handles call to show machine Close menu. */
-        void sltMachineCloseMenuAboutToShow();
     /** @} */
 
@@ -339,4 +343,9 @@
     /** @name Action update stuff.
       * @{ */
+        /** Updates 'Group' : 'Close' menu. */
+        void updateMenuGroupClose(QMenu *pMenu);
+        /** Updates 'Machine' : 'Close' menu. */
+        void updateMenuMachineClose(QMenu *pMenu);
+
         /** Performs update of actions visibility. */
         void updateActionsVisibility();
@@ -386,4 +395,6 @@
     /** Holds the action-pool instance. */
     UIActionPool *m_pActionPool;
+    /** Holds the map of menu update-handlers. */
+    QMap<int, MenuUpdateHandler> m_menuUpdateHandlers;
 
     /** Holds the Virtual Media Manager window instance. */
