Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.cpp	(revision 27141)
@@ -39,26 +39,52 @@
 }
 
-QMenuBar* UIMachineMenuBar::createMenuBar(UISession *pSession)
-{
-    QMenuBar *pMenuBar = new QMenuBar(0);
-
-    UIActionsPool *pActionsPool = pSession->actionsPool();
+QMenu* UIMachineMenuBar::createMenu(UIActionsPool *pActionsPool)
+{
+    /* Create empty menu: */
+    QMenu *pMenu = new QMenu;
+
+    /* Fill menu with prepared items: */
+    foreach (QMenu *pSubMenu, prepareSubMenus(pActionsPool))
+        pMenu->addMenu(pSubMenu);
+
+    /* Return filled menu: */
+    return pMenu;
+}
+
+QMenuBar* UIMachineMenuBar::createMenuBar(UIActionsPool *pActionsPool)
+{
+    /* Create empty menubar: */
+    QMenuBar *pMenuBar = new QMenuBar;
+
+    /* Fill menubar with prepared items: */
+    foreach (QMenu *pSubMenu, prepareSubMenus(pActionsPool))
+        pMenuBar->addMenu(pSubMenu);
+
+    /* Return filled menubar: */
+    return pMenuBar;
+}
+
+QList<QMenu*> UIMachineMenuBar::prepareSubMenus(UIActionsPool *pActionsPool)
+{
+    /* Create empty submenu list: */
+    QList<QMenu*> preparedSubMenus;
 
     /* Machine submenu: */
     QMenu *pMenuMachine = pActionsPool->action(UIActionIndex_Menu_Machine)->menu();
     prepareMenuMachine(pMenuMachine, pActionsPool);
-    pMenuBar->addMenu(pMenuMachine);
+    preparedSubMenus << pMenuMachine;
 
     /* Devices submenu: */
     QMenu *pMenuDevices = pActionsPool->action(UIActionIndex_Menu_Devices)->menu();
     prepareMenuDevices(pMenuDevices, pActionsPool);
-    pMenuBar->addMenu(pMenuDevices);
+    preparedSubMenus << pMenuDevices;
 
 #ifdef VBOX_WITH_DEBUGGER_GUI
+    /* Debug submenu: */
     if (vboxGlobal().isDebuggerEnabled())
     {
         QMenu *pMenuDebug = pActionsPool->action(UIActionIndex_Menu_Debug)->menu();
         prepareMenuDebug(pMenuDebug, pActionsPool);
-        pMenuBar->addMenu(pMenuDebug);
+        preparedSubMenus << pMenuDebug;
     }
 #endif
@@ -67,8 +93,107 @@
     QMenu *pMenuHelp = pActionsPool->action(UIActionIndex_Menu_Help)->menu();
     prepareMenuHelp(pMenuHelp, pActionsPool);
-    pMenuBar->addMenu(pMenuHelp);
-
-    /* Because this connections are done to VBoxGlobal, they are needed once
-     * only. Otherwise we will get the slots called more than once. */
+    preparedSubMenus << pMenuHelp;
+
+    /* Return a list of prepared submenus: */
+    return preparedSubMenus;
+}
+
+void UIMachineMenuBar::prepareMenuMachine(QMenu *pMenu, UIActionsPool *pActionsPool)
+{
+    /* Do not prepare if ready: */
+    if (!pMenu->isEmpty())
+        return;
+
+    /* Machine submenu: */
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Fullscreen));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Seamless));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_GuestAutoresize));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_AdjustWindow));
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_MouseIntegration));
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_TypeCAD));
+#ifdef Q_WS_X11
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_TypeCABS));
+#endif
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_TakeSnapshot));
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_InformationDialog));
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Pause));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Reset));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Shutdown));
+#ifndef Q_WS_MAC
+    pMenu->addSeparator();
+#else /* Q_WS_MAC */
+    if (m_fIsFirstTime)
+#endif /* !Q_WS_MAC */
+        pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Close));
+}
+
+void UIMachineMenuBar::prepareMenuDevices(QMenu *pMenu, UIActionsPool *pActionsPool)
+{
+    /* Do not prepare if ready: */
+    if (!pMenu->isEmpty())
+        return;
+
+    /* Devices submenu: */
+    pMenu->addMenu(pActionsPool->action(UIActionIndex_Menu_OpticalDevices)->menu());
+    pMenu->addMenu(pActionsPool->action(UIActionIndex_Menu_FloppyDevices)->menu());
+    pMenu->addMenu(pActionsPool->action(UIActionIndex_Menu_USBDevices)->menu());
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_NetworkAdaptersDialog));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_SharedFoldersDialog));
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_VRDP));
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_InstallGuestTools));
+}
+
+#ifdef VBOX_WITH_DEBUGGER_GUI
+void UIMachineMenuBar::prepareMenuDebug(QMenu *pMenu, UIActionsPool *pActionsPool)
+{
+    /* Do not prepare if ready: */
+    if (!pMenu->isEmpty())
+        return;
+
+    /* Debug submenu: */
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Statistics));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_CommandLine));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Logging));
+}
+#endif /* VBOX_WITH_DEBUGGER_GUI */
+
+void UIMachineMenuBar::prepareMenuHelp(QMenu *pMenu, UIActionsPool *pActionsPool)
+{
+    /* Do not prepare if ready: */
+    if (!pMenu->isEmpty())
+        return;
+
+    /* Help submenu: */
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Help));
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Web));
+    pMenu->addSeparator();
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_ResetWarnings));
+    pMenu->addSeparator();
+
+#ifdef VBOX_WITH_REGISTRATION
+    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Register));
+#endif
+
+#ifdef Q_WS_MAC
+    if (m_fIsFirstTime)
+#endif /* Q_WS_MAC */
+        pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Update));
+
+#ifndef Q_WS_MAC
+    pMenu->addSeparator();
+#else /* Q_WS_MAC */
+    if (m_fIsFirstTime)
+#endif /* !Q_WS_MAC */
+        pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_About));
+
+    /* Because this connections are done to VBoxGlobal, they are needed once only.
+     * Otherwise we will get the slots called more than once. */
     if (m_fIsFirstTime)
     {
@@ -93,84 +218,4 @@
         m_fIsFirstTime = false;
     }
-
-    return pMenuBar;
-}
-
-void UIMachineMenuBar::prepareMenuMachine(QMenu *pMenu, UIActionsPool *pActionsPool)
-{
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Fullscreen));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Seamless));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_GuestAutoresize));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_AdjustWindow));
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_MouseIntegration));
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_TypeCAD));
-#ifdef Q_WS_X11
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_TypeCABS));
-#endif
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_TakeSnapshot));
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_InformationDialog));
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Pause));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Reset));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Shutdown));
-#ifndef Q_WS_MAC
-    pMenu->addSeparator();
-#else /* Q_WS_MAC */
-    if (m_fIsFirstTime)
-#endif /* !Q_WS_MAC */
-        pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Close));
-}
-
-void UIMachineMenuBar::prepareMenuDevices(QMenu *pMenu, UIActionsPool *pActionsPool)
-{
-    /* Devices submenu */
-    pMenu->addMenu(pActionsPool->action(UIActionIndex_Menu_OpticalDevices)->menu());
-    pMenu->addMenu(pActionsPool->action(UIActionIndex_Menu_FloppyDevices)->menu());
-    pMenu->addMenu(pActionsPool->action(UIActionIndex_Menu_USBDevices)->menu());
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_NetworkAdaptersDialog));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_SharedFoldersDialog));
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_VRDP));
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_InstallGuestTools));
-}
-
-#ifdef VBOX_WITH_DEBUGGER_GUI
-void UIMachineMenuBar::prepareMenuDebug(QMenu *pMenu, UIActionsPool *pActionsPool)
-{
-    /* Debug submenu */
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Statistics));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_CommandLine));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Toggle_Logging));
-}
-#endif /* VBOX_WITH_DEBUGGER_GUI */
-
-void UIMachineMenuBar::prepareMenuHelp(QMenu *pMenu, UIActionsPool *pActionsPool)
-{
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Help));
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Web));
-    pMenu->addSeparator();
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_ResetWarnings));
-    pMenu->addSeparator();
-
-#ifdef VBOX_WITH_REGISTRATION
-    pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Register));
-#endif
-
-#ifdef Q_WS_MAC
-    if (m_fIsFirstTime)
-#endif /* Q_WS_MAC */
-        pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_Update));
-
-#ifndef Q_WS_MAC
-    pMenu->addSeparator();
-#else /* Q_WS_MAC */
-    if (m_fIsFirstTime)
-#endif /* !Q_WS_MAC */
-        pMenu->addAction(pActionsPool->action(UIActionIndex_Simple_About));
-}
-
+}
+
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.h	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineMenuBar.h	(revision 27141)
@@ -24,18 +24,26 @@
 #define __UIMachineMenuBar_h__
 
-class UISession;
+/* Global includes */
+#include <QList>
+
+/* Global forwards */
+class QMenu;
+class QMenuBar;
+
+/* Local forwards */
 class UIActionsPool;
-class QMenuBar;
-class QMenu;
 
 class UIMachineMenuBar
 {
 public:
+
     UIMachineMenuBar();
 
-    QMenuBar* createMenuBar(UISession *pSession);
+    QMenu* createMenu(UIActionsPool *pActionsPool);
+    QMenuBar* createMenuBar(UIActionsPool *pActionsPool);
 
 protected:
 
+    QList<QMenu*> prepareSubMenus(UIActionsPool *pActionsPool);
     void prepareMenuMachine(QMenu *pMenu, UIActionsPool *pActionsPool);
     void prepareMenuDevices(QMenu *pMenu, UIActionsPool *pActionsPool);
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 27141)
@@ -529,5 +529,5 @@
     , m_callback(CConsoleCallback(new UIConsoleCallback(this)))
     /* Common variables: */
-    , m_pMenuBar(0)
+    , m_pMenuPool(0)
     , m_machineState(KMachineState_Null)
 #if defined(Q_WS_WIN)
@@ -560,4 +560,7 @@
     session().GetConsole().RegisterCallback(m_callback);
 
+    /* Prepare main menu: */
+    prepareMenuPool();
+
     /* Load uisession settings: */
     loadSessionSettings();
@@ -568,4 +571,7 @@
     /* Save uisession settings: */
     saveSessionSettings();
+
+    /* Cleanup main menu: */
+    cleanupMenuPool();
 
     /* Unregister console callback: */
@@ -584,50 +590,25 @@
 }
 
+QMenu* UISession::newMenu()
+{
+    /* Create new menu: */
+    QMenu *pMenu = m_pMenuPool->createMenu(actionsPool());
+
+    /* Re-init menu pool for the case manu were recreated: */
+    reinitMenuPool();
+
+    /* Return newly created menu: */
+    return pMenu;
+}
+
 QMenuBar* UISession::newMenuBar()
 {
-    /* */
-    QMenuBar *pMenuBar = m_pMenuBar->createMenuBar(this);
-
-    /* Get uisession machine: */
-    CMachine machine = session().GetConsole().GetMachine();
-
-    /* Availability settings: */
-    {
-        /* USB Stuff: */
-        CUSBController usbController = machine.GetUSBController();
-        if (   usbController.isNull()
-            || !usbController.GetProxyAvailable())
-        {
-            /* Hide USB menu if controller is NULL or no USB proxy available: */
-            uimachine()->actionsPool()->action(UIActionIndex_Menu_USBDevices)->setVisible(false);
-        }
-        else
-        {
-            /* Enable/Disable USB menu depending on USB controller: */
-            uimachine()->actionsPool()->action(UIActionIndex_Menu_USBDevices)->setEnabled(usbController.GetEnabled());
-        }
-    }
-
-    /* Prepare some initial settings: */
-    {
-        /* Initialize CD/FD menus: */
-        int iDevicesCountCD = 0;
-        int iDevicesCountFD = 0;
-        const CMediumAttachmentVector &attachments = machine.GetMediumAttachments();
-        foreach (const CMediumAttachment &attachment, attachments)
-        {
-            if (attachment.GetType() == KDeviceType_DVD)
-                ++ iDevicesCountCD;
-            if (attachment.GetType() == KDeviceType_Floppy)
-                ++ iDevicesCountFD;
-        }
-        QAction *pOpticalDevicesMenu = uimachine()->actionsPool()->action(UIActionIndex_Menu_OpticalDevices);
-        QAction *pFloppyDevicesMenu = uimachine()->actionsPool()->action(UIActionIndex_Menu_FloppyDevices);
-        pOpticalDevicesMenu->setData(iDevicesCountCD);
-        pOpticalDevicesMenu->setVisible(iDevicesCountCD);
-        pFloppyDevicesMenu->setData(iDevicesCountFD);
-        pFloppyDevicesMenu->setVisible(iDevicesCountFD);
-    }
-
+    /* Create new menubar: */
+    QMenuBar *pMenuBar = m_pMenuPool->createMenuBar(actionsPool());
+
+    /* Re-init menu pool for the case manu were recreated: */
+    reinitMenuPool();
+
+    /* Return newly created menubar: */
     return pMenuBar;
 }
@@ -916,9 +897,12 @@
 }
 
+void UISession::prepareMenuPool()
+{
+    m_pMenuPool = new UIMachineMenuBar;
+}
+
 void UISession::loadSessionSettings()
 {
-    m_pMenuBar = new UIMachineMenuBar;
-
-    /* Get uisession machine: */
+   /* Get uisession machine: */
     CMachine machine = session().GetConsole().GetMachine();
 
@@ -984,7 +968,10 @@
         //machine.SetExtraData(VBoxDefs::GUI_MiniToolBarAutoHide, mMiniToolBar->isAutoHide() ? "on" : "off");
     }
-
-    delete m_pMenuBar;
-    m_pMenuBar = 0;
+}
+
+void UISession::cleanupMenuPool()
+{
+    delete m_pMenuPool;
+    m_pMenuPool = 0;
 }
 
@@ -1229,2 +1216,46 @@
 }
 
+void UISession::reinitMenuPool()
+{
+    /* Get uisession machine: */
+    CMachine machine = session().GetConsole().GetMachine();
+
+    /* Availability settings: */
+    {
+        /* USB Stuff: */
+        CUSBController usbController = machine.GetUSBController();
+        if (   usbController.isNull()
+            || !usbController.GetProxyAvailable())
+        {
+            /* Hide USB menu if controller is NULL or no USB proxy available: */
+            uimachine()->actionsPool()->action(UIActionIndex_Menu_USBDevices)->setVisible(false);
+        }
+        else
+        {
+            /* Enable/Disable USB menu depending on USB controller: */
+            uimachine()->actionsPool()->action(UIActionIndex_Menu_USBDevices)->setEnabled(usbController.GetEnabled());
+        }
+    }
+
+    /* Prepare some initial settings: */
+    {
+        /* Initialize CD/FD menus: */
+        int iDevicesCountCD = 0;
+        int iDevicesCountFD = 0;
+        const CMediumAttachmentVector &attachments = machine.GetMediumAttachments();
+        foreach (const CMediumAttachment &attachment, attachments)
+        {
+            if (attachment.GetType() == KDeviceType_DVD)
+                ++ iDevicesCountCD;
+            if (attachment.GetType() == KDeviceType_Floppy)
+                ++ iDevicesCountFD;
+        }
+        QAction *pOpticalDevicesMenu = uimachine()->actionsPool()->action(UIActionIndex_Menu_OpticalDevices);
+        QAction *pFloppyDevicesMenu = uimachine()->actionsPool()->action(UIActionIndex_Menu_FloppyDevices);
+        pOpticalDevicesMenu->setData(iDevicesCountCD);
+        pOpticalDevicesMenu->setVisible(iDevicesCountCD);
+        pFloppyDevicesMenu->setData(iDevicesCountFD);
+        pFloppyDevicesMenu->setVisible(iDevicesCountFD);
+    }
+}
+
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.h	(revision 27141)
@@ -32,4 +32,5 @@
 
 /* Global forwards */
+class QMenu;
 class QMenuBar;
 
@@ -79,5 +80,7 @@
     KMachineState machineState() const { return m_machineState; }
     UIActionsPool* actionsPool() const;
+    QMenu* newMenu();
     QMenuBar* newMenuBar();
+    QCursor cursor() const { return m_cursor; }
     QSize guestSizeHint(ulong uScreenId) const;
 
@@ -95,5 +98,4 @@
     bool isIgnoreRuntimeMediumsChanging() const { return m_fIsIgnoreRutimeMediumsChanging; }
     bool isGuestResizeIgnored() const { return m_fIsGuestResizeIgnored; }
-    QCursor cursor() const { return m_cursor; }
 
     /* Guest additions state getters: */
@@ -171,12 +173,15 @@
 
     /* Prepare helpers: */
+    void prepareMenuPool();
     void loadSessionSettings();
 
     /* Cleanup helpers: */
     void saveSessionSettings();
+    void cleanupMenuPool();
 
     /* Common helpers: */
     WId winId() const;
     void setPointerShape(const uchar *pShapeData, bool fHasAlpha, uint uXHot, uint uYHot, uint uWidth, uint uHeight);
+    void reinitMenuPool();
 
     /* Private variables: */
@@ -185,5 +190,5 @@
     const CConsoleCallback m_callback;
 
-    UIMachineMenuBar *m_pMenuBar;
+    UIMachineMenuBar *m_pMenuPool;
 
     /* Common variables: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp	(revision 27141)
@@ -235,9 +235,5 @@
             {
                 if (pKeyEvent->key() == Qt::Key_Home)
-                {
-#if 0 // TODO: Activate Main Menu!
-                    // should we create it first?
-#endif
-                }
+                    QTimer::singleShot(0, machineWindowWrapper()->machineWindow(), SLOT(sltPopupMainMenu()));
                 else
                     pEvent->ignore();
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.cpp	(revision 27141)
@@ -31,7 +31,5 @@
 #include "VBoxGlobal.h"
 
-#ifdef Q_WS_MAC
 #include "UISession.h"
-#endif /* Q_WS_MAC */
 #include "UIMachineLogic.h"
 #include "UIMachineView.h"
@@ -41,13 +39,14 @@
     : QIWithRetranslateUI2<QIMainDialog>(0, Qt::FramelessWindowHint)
     , UIMachineWindow(pMachineLogic, uScreenId)
+    , m_pMainMenu(0)
 {
     /* "This" is machine window: */
     m_pMachineWindow = this;
 
-    /* Set the main window in VBoxGlobal */
+    /* Set the main window in VBoxGlobal: */
     if (uScreenId == 0)
         vboxGlobal().setMainWindow(this);
 
-    /* Prepare window icon: */
+    /* Prepare fullscreen window icon: */
     prepareWindowIcon();
 
@@ -55,10 +54,8 @@
     prepareConsoleConnections();
 
-#ifdef Q_WS_MAC
-    /* Prepare menu: */
+    /* Prepare fullscreen menu: */
     prepareMenu();
-#endif /* Q_WS_MAC */
-
-    /* Retranslate normal window finally: */
+
+    /* Retranslate fullscreen window finally: */
     retranslateUi();
 
@@ -66,5 +63,5 @@
     prepareMachineViewContainer();
 
-    /* Prepare normal machine view: */
+    /* Prepare fullscreen machine view: */
     prepareMachineView();
 
@@ -85,4 +82,7 @@
     /* Cleanup normal machine view: */
     cleanupMachineView();
+
+    /* Cleanup menu: */
+    cleanupMenu();
 }
 
@@ -90,4 +90,11 @@
 {
     UIMachineWindow::sltMachineStateChanged();
+}
+
+void UIMachineWindowFullscreen::sltPopupMainMenu()
+{
+    /* Popup main menu if present: */
+    if (m_pMainMenu && !m_pMainMenu->isEmpty())
+        m_pMainMenu->popup(machineWindow()->geometry().center());
 }
 
@@ -137,10 +144,12 @@
 }
 
-#ifdef Q_WS_MAC
 void UIMachineWindowFullscreen::prepareMenu()
 {
+#ifdef Q_WS_MAC
     setMenuBar(uisession()->newMenuBar());
-}
-#endif /* Q_WS_MAC */
+#else /* To NaN: Please uncomment below for mac too and test! */
+    m_pMainMenu = uisession()->newMenu();
+#endif /* Q_WS_MAC */
+}
 
 void UIMachineWindowFullscreen::prepareMachineView()
@@ -186,2 +195,12 @@
 }
 
+void UIMachineWindowFullscreen::cleanupMenu()
+{
+#ifdef Q_WS_MAC
+    // Sync with UIMachineWindowFullscreen::prepareMenu()!
+#else /* To NaN: Please uncomment below for mac too and test! */
+    delete m_pMainMenu;
+    m_pMainMenu = 0;
+#endif /* Q_WS_MAC */
+}
+
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineWindowFullscreen.h	(revision 27141)
@@ -47,4 +47,7 @@
     void sltMachineStateChanged();
 
+    /* Popup main menu: */
+    void sltPopupMainMenu();
+
     /* Close window reimplementation: */
     void sltTryClose();
@@ -62,7 +65,5 @@
 
     /* Prepare helpers: */
-#ifdef Q_WS_MAC
     void prepareMenu();
-#endif /* Q_WS_MAC */
     void prepareMachineView();
 
@@ -70,7 +71,8 @@
     //void saveWindowSettings() {}
     void cleanupMachineView();
-#ifdef Q_WS_MAC
-    //void cleanupMenu() {}
-#endif /* Q_WS_MAC */
+    void cleanupMenu();
+
+    /* Private variables: */
+    QMenu *m_pMainMenu;
 
     /* Factory support: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp	(revision 27141)
@@ -242,9 +242,5 @@
             {
                 if (pKeyEvent->key() == Qt::Key_Home)
-                {
-#if 0 // TODO: Activate Main Menu!
-                    // should we create it first?
-#endif
-                }
+                    QTimer::singleShot(0, machineWindowWrapper()->machineWindow(), SLOT(sltPopupMainMenu()));
                 else
                     pEvent->ignore();
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.cpp	(revision 27141)
@@ -32,7 +32,7 @@
 
 #ifdef Q_WS_MAC
-# include "UISession.h"
 # include "VBoxUtils.h"
 #endif /* Q_WS_MAC */
+#include "UISession.h"
 #include "UIMachineLogic.h"
 #include "UIMachineView.h"
@@ -42,13 +42,14 @@
     : QIWithRetranslateUI2<QIMainDialog>(0, Qt::FramelessWindowHint)
     , UIMachineWindow(pMachineLogic, uScreenId)
+    , m_pMainMenu(0)
 {
     /* "This" is machine window: */
     m_pMachineWindow = this;
 
-    /* Set the main window in VBoxGlobal */
+    /* Set the main window in VBoxGlobal: */
     if (uScreenId == 0)
         vboxGlobal().setMainWindow(this);
 
-    /* Prepare window icon: */
+    /* Prepare seamless window icon: */
     prepareWindowIcon();
 
@@ -59,20 +60,18 @@
     prepareSeamless();
 
-#ifdef Q_WS_MAC
-    /* Prepare menu: */
+    /* Prepare seamless menu: */
     prepareMenu();
-#endif /* Q_WS_MAC */
 
     /* Retranslate seamless window finally: */
     retranslateUi();
 
-    /* Prepare normal machine view container: */
+    /* Prepare machine view container: */
     prepareMachineViewContainer();
 
-    /* Prepare normal machine view: */
+    /* Prepare seamless machine view: */
     prepareMachineView();
 
 #ifdef Q_WS_MAC
-    /* Load normal window settings: */
+    /* Load seamless window settings: */
     loadWindowSettings();
 #endif /* Q_WS_MAC */
@@ -89,4 +88,7 @@
     /* Cleanup normal machine view: */
     cleanupMachineView();
+
+    /* Cleanup menu: */
+    cleanupMenu();
 }
 
@@ -94,4 +96,11 @@
 {
     UIMachineWindow::sltMachineStateChanged();
+}
+
+void UIMachineWindowSeamless::sltPopupMainMenu()
+{
+    /* Popup main menu if present: */
+    if (m_pMainMenu && !m_pMainMenu->isEmpty())
+        m_pMainMenu->popup(machineWindow()->geometry().center());
 }
 
@@ -174,10 +183,12 @@
 }
 
-#ifdef Q_WS_MAC
 void UIMachineWindowSeamless::prepareMenu()
 {
+#ifdef Q_WS_MAC
     setMenuBar(uisession()->newMenuBar());
-}
-#endif /* Q_WS_MAC */
+#else /* To NaN: Please uncomment below for mac too and test! */
+    m_pMainMenu = uisession()->newMenu();
+#endif /* Q_WS_MAC */
+}
 
 void UIMachineWindowSeamless::prepareMachineView()
@@ -228,4 +239,14 @@
     UIMachineView::destroy(m_pMachineView);
     m_pMachineView = 0;
+}
+
+void UIMachineWindowSeamless::cleanupMenu()
+{
+#ifdef Q_WS_MAC
+    // Sync with UIMachineWindowSeamless::prepareMenu()!
+#else /* To NaN: Please uncomment below for mac too and test! */
+    delete m_pMainMenu;
+    m_pMainMenu = 0;
+#endif /* Q_WS_MAC */
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h	(revision 27140)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineWindowSeamless.h	(revision 27141)
@@ -47,4 +47,7 @@
     void sltMachineStateChanged();
 
+    /* Popup main menu: */
+    void sltPopupMainMenu();
+
     /* Close window reimplementation: */
     void sltTryClose();
@@ -66,7 +69,5 @@
     /* Prepare helpers: */
     void prepareSeamless();
-#ifdef Q_WS_MAC
     void prepareMenu();
-#endif /* Q_WS_MAC */
     void prepareMachineView();
 #ifdef Q_WS_MAC
@@ -79,7 +80,5 @@
 #endif /* Q_WS_MAC */
     void cleanupMachineView();
-#ifdef Q_WS_MAC
-    //void cleanupMenu() {}
-#endif /* Q_WS_MAC */
+    void cleanupMenu();
     //void cleanupSeamless() {}
 
@@ -90,4 +89,5 @@
 
     /* Private variables: */
+    QMenu *m_pMainMenu;
 #ifdef Q_WS_WIN
     QRegion m_prevRegion;
