Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackend.h	(revision 52937)
@@ -75,4 +75,5 @@
 template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuMachineActionType>();
 template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuViewActionType>();
+template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuInputActionType>();
 template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuDevicesActionType>();
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -133,4 +134,6 @@
 template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuViewActionType &runtimeMenuViewActionType);
 template<> UIExtraDataMetaDefs::RuntimeMenuViewActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuViewActionType>(const QString &strRuntimeMenuViewActionType);
+template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuInputActionType &runtimeMenuInputActionType);
+template<> UIExtraDataMetaDefs::RuntimeMenuInputActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(const QString &strRuntimeMenuInputActionType);
 template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuDevicesActionType &runtimeMenuDevicesActionType);
 template<> UIExtraDataMetaDefs::RuntimeMenuDevicesActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuDevicesActionType>(const QString &strRuntimeMenuDevicesActionType);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52937)
@@ -46,4 +46,5 @@
 template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuMachineActionType>() { return true; }
 template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuViewActionType>() { return true; }
+template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuInputActionType>() { return true; }
 template<> bool canConvert<UIExtraDataMetaDefs::RuntimeMenuDevicesActionType>() { return true; }
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -373,4 +374,5 @@
         case UIExtraDataMetaDefs::MenuType_Machine:     strResult = "Machine"; break;
         case UIExtraDataMetaDefs::MenuType_View:        strResult = "View"; break;
+        case UIExtraDataMetaDefs::MenuType_Input:       strResult = "Input"; break;
         case UIExtraDataMetaDefs::MenuType_Devices:     strResult = "Devices"; break;
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -399,4 +401,5 @@
     keys << "Machine";     values << UIExtraDataMetaDefs::MenuType_Machine;
     keys << "View";        values << UIExtraDataMetaDefs::MenuType_View;
+    keys << "Input";       values << UIExtraDataMetaDefs::MenuType_Input;
     keys << "Devices";     values << UIExtraDataMetaDefs::MenuType_Devices;
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -512,12 +515,4 @@
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeScreenshot:    strResult = "TakeScreenshot"; break;
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog: strResult = "InformationDialog"; break;
-        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard:          strResult = "Keyboard"; break;
-        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings:  strResult = "KeyboardSettings"; break;
-        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse:             strResult = "Mouse"; break;
-        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration:  strResult = "MouseIntegration"; break;
-        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD:           strResult = "TypeCAD"; break;
-#ifdef Q_WS_X11
-        case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS:          strResult = "TypeCABS"; break;
-#endif /* Q_WS_X11 */
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause:             strResult = "Pause"; break;
         case UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset:             strResult = "Reset"; break;
@@ -549,12 +544,4 @@
     keys << "TakeScreenshot";    values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TakeScreenshot;
     keys << "InformationDialog"; values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_InformationDialog;
-    keys << "Keyboard";          values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard;
-    keys << "KeyboardSettings";  values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings;
-    keys << "Mouse";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse;
-    keys << "MouseIntegration";  values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration;
-    keys << "TypeCAD";           values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD;
-#ifdef Q_WS_X11
-    keys << "TypeCABS";          values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS;
-#endif /* Q_WS_X11 */
     keys << "Pause";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Pause;
     keys << "Reset";             values << UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Reset;
@@ -628,4 +615,50 @@
     /* Corresponding type for known words: */
     return values.at(keys.indexOf(QRegExp(strRuntimeMenuViewActionType, Qt::CaseInsensitive)));
+}
+
+/* QString <= UIExtraDataMetaDefs::RuntimeMenuInputActionType: */
+template<> QString toInternalString(const UIExtraDataMetaDefs::RuntimeMenuInputActionType &runtimeMenuInputActionType)
+{
+    QString strResult;
+    switch (runtimeMenuInputActionType)
+    {
+        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard:          strResult = "Keyboard"; break;
+        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings:  strResult = "KeyboardSettings"; break;
+        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse:             strResult = "Mouse"; break;
+        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration:  strResult = "MouseIntegration"; break;
+        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD:           strResult = "TypeCAD"; break;
+#ifdef Q_WS_X11
+        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS:          strResult = "TypeCABS"; break;
+#endif /* Q_WS_X11 */
+        case UIExtraDataMetaDefs::RuntimeMenuInputActionType_All:               strResult = "All"; break;
+        default:
+        {
+            AssertMsgFailed(("No text for action type=%d", runtimeMenuInputActionType));
+            break;
+        }
+    }
+    return strResult;
+}
+
+/* UIExtraDataMetaDefs::RuntimeMenuInputActionType <= QString: */
+template<> UIExtraDataMetaDefs::RuntimeMenuInputActionType fromInternalString<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(const QString &strRuntimeMenuInputActionType)
+{
+    /* Here we have some fancy stuff allowing us
+     * to search through the keys using 'case-insensitive' rule: */
+    QStringList keys;            QList<UIExtraDataMetaDefs::RuntimeMenuInputActionType> values;
+    keys << "Keyboard";          values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard;
+    keys << "KeyboardSettings";  values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings;
+    keys << "Mouse";             values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse;
+    keys << "MouseIntegration";  values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration;
+    keys << "TypeCAD";           values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD;
+#ifdef Q_WS_X11
+    keys << "TypeCABS";          values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS;
+#endif /* Q_WS_X11 */
+    keys << "All";               values << UIExtraDataMetaDefs::RuntimeMenuInputActionType_All;
+    /* Invalid type for unknown words: */
+    if (!keys.contains(strRuntimeMenuInputActionType, Qt::CaseInsensitive))
+        return UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid;
+    /* Corresponding type for known words: */
+    return values.at(keys.indexOf(QRegExp(strRuntimeMenuInputActionType, Qt::CaseInsensitive)));
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.cpp	(revision 52937)
@@ -92,4 +92,5 @@
 const char* UIExtraDataDefs::GUI_RestrictedRuntimeMachineMenuActions = "GUI/RestrictedRuntimeMachineMenuActions";
 const char* UIExtraDataDefs::GUI_RestrictedRuntimeViewMenuActions = "GUI/RestrictedRuntimeViewMenuActions";
+const char* UIExtraDataDefs::GUI_RestrictedRuntimeInputMenuActions = "GUI/RestrictedRuntimeInputMenuActions";
 const char* UIExtraDataDefs::GUI_RestrictedRuntimeDevicesMenuActions = "GUI/RestrictedRuntimeDevicesMenuActions";
 #ifdef VBOX_WITH_DEBUGGER_GUI
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52937)
@@ -154,4 +154,6 @@
         /** Holds restricted Runtime UI action types for View menu. */
         extern const char* GUI_RestrictedRuntimeViewMenuActions;
+        /** Holds restricted Runtime UI action types for Input menu. */
+        extern const char* GUI_RestrictedRuntimeInputMenuActions;
         /** Holds restricted Runtime UI action types for Devices menu. */
         extern const char* GUI_RestrictedRuntimeDevicesMenuActions;
@@ -281,4 +283,5 @@
     Q_ENUMS(RuntimeMenuMachineActionType);
     Q_ENUMS(RuntimeMenuViewActionType);
+    Q_ENUMS(RuntimeMenuInputActionType);
     Q_ENUMS(RuntimeMenuDevicesActionType);
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -297,9 +300,10 @@
         MenuType_Machine     = RT_BIT(1),
         MenuType_View        = RT_BIT(2),
-        MenuType_Devices     = RT_BIT(3),
+        MenuType_Input       = RT_BIT(3),
+        MenuType_Devices     = RT_BIT(4),
 #ifdef VBOX_WITH_DEBUGGER_GUI
-        MenuType_Debug       = RT_BIT(4),
+        MenuType_Debug       = RT_BIT(5),
 #endif /* VBOX_WITH_DEBUGGER_GUI */
-        MenuType_Help        = RT_BIT(5),
+        MenuType_Help        = RT_BIT(6),
         MenuType_All         = 0xFF
     };
@@ -343,12 +347,4 @@
         RuntimeMenuMachineActionType_TakeScreenshot    = RT_BIT(2),
         RuntimeMenuMachineActionType_InformationDialog = RT_BIT(3),
-        RuntimeMenuMachineActionType_Keyboard          = RT_BIT(4),
-        RuntimeMenuMachineActionType_KeyboardSettings  = RT_BIT(5),
-        RuntimeMenuMachineActionType_Mouse             = RT_BIT(6),
-        RuntimeMenuMachineActionType_MouseIntegration  = RT_BIT(7),
-        RuntimeMenuMachineActionType_TypeCAD           = RT_BIT(8),
-#ifdef Q_WS_X11
-        RuntimeMenuMachineActionType_TypeCABS          = RT_BIT(9),
-#endif /* Q_WS_X11 */
         RuntimeMenuMachineActionType_Pause             = RT_BIT(10),
         RuntimeMenuMachineActionType_Reset             = RT_BIT(11),
@@ -381,4 +377,19 @@
         RuntimeMenuViewActionType_Multiscreen       = RT_BIT(12),
         RuntimeMenuViewActionType_All               = 0xFFFF
+    };
+
+    /** Runtime UI: Menu "Input": Action types. */
+    enum RuntimeMenuInputActionType
+    {
+        RuntimeMenuInputActionType_Invalid           = 0,
+        RuntimeMenuInputActionType_Keyboard          = RT_BIT(0),
+        RuntimeMenuInputActionType_KeyboardSettings  = RT_BIT(1),
+        RuntimeMenuInputActionType_Mouse             = RT_BIT(2),
+        RuntimeMenuInputActionType_MouseIntegration  = RT_BIT(3),
+        RuntimeMenuInputActionType_TypeCAD           = RT_BIT(4),
+#ifdef Q_WS_X11
+        RuntimeMenuInputActionType_TypeCABS          = RT_BIT(5),
+#endif /* Q_WS_X11 */
+        RuntimeMenuInputActionType_All               = 0xFFFF
     };
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 52937)
@@ -1778,4 +1778,5 @@
            << GUI_RestrictedRuntimeMachineMenuActions
            << GUI_RestrictedRuntimeViewMenuActions
+           << GUI_RestrictedRuntimeInputMenuActions
            << GUI_RestrictedRuntimeDevicesMenuActions
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -2720,4 +2721,51 @@
 }
 
+UIExtraDataMetaDefs::RuntimeMenuInputActionType UIExtraDataManager::restrictedRuntimeMenuInputActionTypes(const QString &strID)
+{
+    /* Prepare result: */
+    UIExtraDataMetaDefs::RuntimeMenuInputActionType result = UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid;
+    /* Get restricted runtime-machine-menu action-types: */
+    foreach (const QString &strValue, extraDataStringList(GUI_RestrictedRuntimeInputMenuActions, strID))
+    {
+        UIExtraDataMetaDefs::RuntimeMenuInputActionType value = gpConverter->fromInternalString<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(strValue);
+        if (value != UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid)
+            result = static_cast<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(result | value);
+    }
+    /* Return result: */
+    return result;
+}
+
+void UIExtraDataManager::setRestrictedRuntimeMenuInputActionTypes(UIExtraDataMetaDefs::RuntimeMenuInputActionType types, const QString &strID)
+{
+    /* We have RuntimeMenuInputActionType enum registered, so we can enumerate it: */
+    const QMetaObject &smo = UIExtraDataMetaDefs::staticMetaObject;
+    const int iEnumIndex = smo.indexOfEnumerator("RuntimeMenuInputActionType");
+    QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
+
+    /* Prepare result: */
+    QStringList result;
+    /* Handle RuntimeMenuInputActionType_All enum-value: */
+    if (types == UIExtraDataMetaDefs::RuntimeMenuInputActionType_All)
+        result << gpConverter->toInternalString(types);
+    else
+    {
+        /* Handle other enum-values: */
+        for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
+        {
+            /* Get iterated enum-value: */
+            const UIExtraDataMetaDefs::RuntimeMenuInputActionType enumValue =
+                static_cast<const UIExtraDataMetaDefs::RuntimeMenuInputActionType>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
+            /* Skip RuntimeMenuInputActionType_Invalid & RuntimeMenuInputActionType_All enum-values: */
+            if (enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid ||
+                enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_All)
+                continue;
+            if (types & enumValue)
+                result << gpConverter->toInternalString(enumValue);
+        }
+    }
+    /* Save result: */
+    setExtraDataStringList(GUI_RestrictedRuntimeInputMenuActions, result, strID);
+}
+
 UIExtraDataMetaDefs::RuntimeMenuDevicesActionType UIExtraDataManager::restrictedRuntimeMenuDevicesActionTypes(const QString &strID)
 {
@@ -3479,4 +3527,5 @@
             strKey == GUI_RestrictedRuntimeMachineMenuActions ||
             strKey == GUI_RestrictedRuntimeViewMenuActions ||
+            strKey == GUI_RestrictedRuntimeInputMenuActions ||
             strKey == GUI_RestrictedRuntimeDevicesMenuActions ||
 #ifdef VBOX_WITH_DEBUGGER_GUI
Index: /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 52937)
@@ -313,4 +313,9 @@
         void setRestrictedRuntimeMenuViewActionTypes(UIExtraDataMetaDefs::RuntimeMenuViewActionType types, const QString &strID);
 
+        /** Returns restricted Runtime UI action types for Input menu. */
+        UIExtraDataMetaDefs::RuntimeMenuInputActionType restrictedRuntimeMenuInputActionTypes(const QString &strID);
+        /** Defines restricted Runtime UI action types for Input menu. */
+        void setRestrictedRuntimeMenuInputActionTypes(UIExtraDataMetaDefs::RuntimeMenuInputActionType types, const QString &strID);
+
         /** Returns restricted Runtime UI action types for Devices menu. */
         UIExtraDataMetaDefs::RuntimeMenuDevicesActionType restrictedRuntimeMenuDevicesActionTypes(const QString &strID);
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52937)
@@ -205,191 +205,4 @@
 };
 
-class UIActionMenuKeyboard : public UIActionMenu
-{
-    Q_OBJECT;
-
-public:
-
-    UIActionMenuKeyboard(UIActionPool *pParent)
-        : UIActionMenu(pParent, ":/keyboard_16px.png") {}
-
-protected:
-
-    /** Returns action extra-data ID. */
-    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard; }
-    /** Returns action extra-data key. */
-    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard); }
-    /** Returns whether action is allowed. */
-    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Keyboard); }
-
-    void retranslateUi()
-    {
-        setName(QApplication::translate("UIActionPool", "&Keyboard"));
-    }
-};
-
-class UIActionSimpleKeyboardSettings : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    UIActionSimpleKeyboardSettings(UIActionPool *pParent)
-        : UIActionSimple(pParent, ":/keyboard_settings_16px.png", ":/keyboard_settings_disabled_16px.png") {}
-
-protected:
-
-    /** Returns action extra-data ID. */
-    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings; }
-    /** Returns action extra-data key. */
-    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings); }
-    /** Returns whether action is allowed. */
-    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings); }
-
-    QString shortcutExtraDataID() const
-    {
-        return QString("KeyboardSettings");
-    }
-
-    void retranslateUi()
-    {
-        setName(QApplication::translate("UIActionPool", "&Keyboard Settings..."));
-        setStatusTip(QApplication::translate("UIActionPool", "Display the global settings window to configure shortcuts"));
-    }
-};
-
-class UIActionMenuMouse : public UIActionMenu
-{
-    Q_OBJECT;
-
-public:
-
-    UIActionMenuMouse(UIActionPool *pParent)
-        : UIActionMenu(pParent) {}
-
-protected:
-
-    /** Returns action extra-data ID. */
-    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse; }
-    /** Returns action extra-data key. */
-    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse); }
-    /** Returns whether action is allowed. */
-    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Mouse); }
-
-    void retranslateUi()
-    {
-        setName(QApplication::translate("UIActionPool", "&Mouse"));
-    }
-};
-
-class UIActionToggleMouseIntegration : public UIActionToggle
-{
-    Q_OBJECT;
-
-public:
-
-    UIActionToggleMouseIntegration(UIActionPool *pParent)
-        : UIActionToggle(pParent,
-                         ":/mouse_can_seamless_on_16px.png", ":/mouse_can_seamless_16px.png",
-                         ":/mouse_can_seamless_on_disabled_16px.png", ":/mouse_can_seamless_disabled_16px.png") {}
-
-protected:
-
-    /** Returns action extra-data ID. */
-    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration; }
-    /** Returns action extra-data key. */
-    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration); }
-    /** Returns whether action is allowed. */
-    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration); }
-
-    QString shortcutExtraDataID() const
-    {
-        return QString("MouseIntegration");
-    }
-
-    QKeySequence defaultShortcut(UIActionPoolType) const
-    {
-        return QKeySequence("I");
-    }
-
-    void retranslateUi()
-    {
-        setName(QApplication::translate("UIActionPool", "Disable &Mouse Integration"));
-        setStatusTip(QApplication::translate("UIActionPool", "Temporarily disable host mouse pointer integration"));
-    }
-};
-
-class UIActionSimplePerformTypeCAD : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    UIActionSimplePerformTypeCAD(UIActionPool *pParent)
-        : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
-
-protected:
-
-    /** Returns action extra-data ID. */
-    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD; }
-    /** Returns action extra-data key. */
-    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD); }
-    /** Returns whether action is allowed. */
-    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCAD); }
-
-    QString shortcutExtraDataID() const
-    {
-        return QString("TypeCAD");
-    }
-
-    QKeySequence defaultShortcut(UIActionPoolType) const
-    {
-        return QKeySequence("Del");
-    }
-
-    void retranslateUi()
-    {
-        setName(QApplication::translate("UIActionPool", "&Insert Ctrl-Alt-Del"));
-        setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Del sequence to the virtual machine"));
-    }
-};
-
-#ifdef Q_WS_X11
-class UIActionSimplePerformTypeCABS : public UIActionSimple
-{
-    Q_OBJECT;
-
-public:
-
-    UIActionSimplePerformTypeCABS(UIActionPool *pParent)
-        : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
-
-protected:
-
-    /** Returns action extra-data ID. */
-    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS; }
-    /** Returns action extra-data key. */
-    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS); }
-    /** Returns whether action is allowed. */
-    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuMachine(UIExtraDataMetaDefs::RuntimeMenuMachineActionType_TypeCABS); }
-
-    QString shortcutExtraDataID() const
-    {
-        return QString("TypeCABS");
-    }
-
-    QKeySequence defaultShortcut(UIActionPoolType) const
-    {
-        return QKeySequence("Backspace");
-    }
-
-    void retranslateUi()
-    {
-        setName(QApplication::translate("UIActionPool", "Ins&ert Ctrl-Alt-Backspace"));
-        setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Backspace sequence to the virtual machine"));
-    }
-};
-#endif /* Q_WS_X11 */
-
 class UIActionTogglePause : public UIActionToggle
 {
@@ -1001,4 +814,215 @@
 };
 
+class UIActionMenuInput : public UIActionMenu
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionMenuInput(UIActionPool *pParent)
+        : UIActionMenu(pParent) {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::MenuType_Input; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::MenuType_Input); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->isAllowedInMenuBar(UIExtraDataMetaDefs::MenuType_Input); }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "&Input"));
+    }
+};
+
+class UIActionMenuKeyboard : public UIActionMenu
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionMenuKeyboard(UIActionPool *pParent)
+        : UIActionMenu(pParent, ":/keyboard_16px.png") {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Keyboard); }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "&Keyboard"));
+    }
+};
+
+class UIActionSimpleKeyboardSettings : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionSimpleKeyboardSettings(UIActionPool *pParent)
+        : UIActionSimple(pParent, ":/keyboard_settings_16px.png", ":/keyboard_settings_disabled_16px.png") {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings); }
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("KeyboardSettings");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "&Keyboard Settings..."));
+        setStatusTip(QApplication::translate("UIActionPool", "Display the global settings window to configure shortcuts"));
+    }
+};
+
+class UIActionMenuMouse : public UIActionMenu
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionMenuMouse(UIActionPool *pParent)
+        : UIActionMenu(pParent) {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_Mouse); }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "&Mouse"));
+    }
+};
+
+class UIActionToggleMouseIntegration : public UIActionToggle
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionToggleMouseIntegration(UIActionPool *pParent)
+        : UIActionToggle(pParent,
+                         ":/mouse_can_seamless_on_16px.png", ":/mouse_can_seamless_16px.png",
+                         ":/mouse_can_seamless_on_disabled_16px.png", ":/mouse_can_seamless_disabled_16px.png") {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration); }
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("MouseIntegration");
+    }
+
+    QKeySequence defaultShortcut(UIActionPoolType) const
+    {
+        return QKeySequence("I");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "Disable &Mouse Integration"));
+        setStatusTip(QApplication::translate("UIActionPool", "Temporarily disable host mouse pointer integration"));
+    }
+};
+
+class UIActionSimplePerformTypeCAD : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionSimplePerformTypeCAD(UIActionPool *pParent)
+        : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCAD); }
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("TypeCAD");
+    }
+
+    QKeySequence defaultShortcut(UIActionPoolType) const
+    {
+        return QKeySequence("Del");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "&Insert Ctrl-Alt-Del"));
+        setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Del sequence to the virtual machine"));
+    }
+};
+
+#ifdef Q_WS_X11
+class UIActionSimplePerformTypeCABS : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionSimplePerformTypeCABS(UIActionPool *pParent)
+        : UIActionSimple(pParent, ":/hostkey_16px.png", ":/hostkey_disabled_16px.png") {}
+
+protected:
+
+    /** Returns action extra-data ID. */
+    virtual int extraDataID() const { return UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS; }
+    /** Returns action extra-data key. */
+    virtual QString extraDataKey() const { return gpConverter->toInternalString(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS); }
+    /** Returns whether action is allowed. */
+    virtual bool isAllowed() const { return actionPool()->toRuntime()->isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType_TypeCABS); }
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("TypeCABS");
+    }
+
+    QKeySequence defaultShortcut(UIActionPoolType) const
+    {
+        return QKeySequence("Backspace");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "Ins&ert Ctrl-Alt-Backspace"));
+        setStatusTip(QApplication::translate("UIActionPool", "Send the Ctrl-Alt-Backspace sequence to the virtual machine"));
+    }
+};
+#endif /* Q_WS_X11 */
+
 class UIActionMenuDevices : public UIActionMenu
 {
@@ -1815,4 +1839,18 @@
     m_restrictedActionsMenuView[level] = restriction;
     m_invalidations << UIActionIndexRT_M_View << UIActionIndexRT_M_ViewPopup;
+}
+
+bool UIActionPoolRuntime::isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType type) const
+{
+    foreach (const UIExtraDataMetaDefs::RuntimeMenuInputActionType &restriction, m_restrictedActionsMenuInput.values())
+        if (restriction & type)
+            return false;
+    return true;
+}
+
+void UIActionPoolRuntime::setRestrictionForMenuInput(UIActionRestrictionLevel level, UIExtraDataMetaDefs::RuntimeMenuInputActionType restriction)
+{
+    m_restrictedActionsMenuInput[level] = restriction;
+    m_invalidations << UIActionIndexRT_M_Input;
 }
 
@@ -1921,12 +1959,4 @@
     m_pool[UIActionIndexRT_M_Machine_S_TakeScreenshot] = new UIActionSimplePerformTakeScreenshot(this);
     m_pool[UIActionIndexRT_M_Machine_S_ShowInformation] = new UIActionSimpleShowInformationDialog(this);
-    m_pool[UIActionIndexRT_M_Machine_M_Keyboard] = new UIActionMenuKeyboard(this);
-    m_pool[UIActionIndexRT_M_Machine_M_Keyboard_S_Settings] = new UIActionSimpleKeyboardSettings(this);
-    m_pool[UIActionIndexRT_M_Machine_M_Mouse] = new UIActionMenuMouse(this);
-    m_pool[UIActionIndexRT_M_Machine_M_Mouse_T_Integration] = new UIActionToggleMouseIntegration(this);
-    m_pool[UIActionIndexRT_M_Machine_S_TypeCAD] = new UIActionSimplePerformTypeCAD(this);
-#ifdef Q_WS_X11
-    m_pool[UIActionIndexRT_M_Machine_S_TypeCABS] = new UIActionSimplePerformTypeCABS(this);
-#endif /* Q_WS_X11 */
     m_pool[UIActionIndexRT_M_Machine_T_Pause] = new UIActionTogglePause(this);
     m_pool[UIActionIndexRT_M_Machine_S_Reset] = new UIActionSimplePerformReset(this);
@@ -1952,4 +1982,15 @@
     m_pool[UIActionIndexRT_M_View_M_StatusBar_S_Settings] = new UIActionSimpleShowStatusBarSettingsWindow(this);
     m_pool[UIActionIndexRT_M_View_M_StatusBar_T_Visibility] = new UIActionToggleStatusBar(this);
+
+    /* 'Input' actions: */
+    m_pool[UIActionIndexRT_M_Input] = new UIActionMenuInput(this);
+    m_pool[UIActionIndexRT_M_Input_M_Keyboard] = new UIActionMenuKeyboard(this);
+    m_pool[UIActionIndexRT_M_Input_M_Keyboard_S_Settings] = new UIActionSimpleKeyboardSettings(this);
+    m_pool[UIActionIndexRT_M_Input_M_Mouse] = new UIActionMenuMouse(this);
+    m_pool[UIActionIndexRT_M_Input_M_Mouse_T_Integration] = new UIActionToggleMouseIntegration(this);
+    m_pool[UIActionIndexRT_M_Input_S_TypeCAD] = new UIActionSimplePerformTypeCAD(this);
+#ifdef Q_WS_X11
+    m_pool[UIActionIndexRT_M_Input_S_TypeCABS] = new UIActionSimplePerformTypeCABS(this);
+#endif /* Q_WS_X11 */
 
     /* 'Devices' actions: */
@@ -1993,10 +2034,11 @@
     /* Prepare update-handlers for known menus: */
     m_menuUpdateHandlers[UIActionIndexRT_M_Machine].ptfr =                 &UIActionPoolRuntime::updateMenuMachine;
-    m_menuUpdateHandlers[UIActionIndexRT_M_Machine_M_Keyboard].ptfr =      &UIActionPoolRuntime::updateMenuMachineKeyboard;
-    m_menuUpdateHandlers[UIActionIndexRT_M_Machine_M_Mouse].ptfr =         &UIActionPoolRuntime::updateMenuMachineMouse;
     m_menuUpdateHandlers[UIActionIndexRT_M_View].ptfr =                    &UIActionPoolRuntime::updateMenuView;
     m_menuUpdateHandlers[UIActionIndexRT_M_ViewPopup].ptfr =               &UIActionPoolRuntime::updateMenuViewPopup;
     m_menuUpdateHandlers[UIActionIndexRT_M_View_M_MenuBar].ptfr =          &UIActionPoolRuntime::updateMenuViewMenuBar;
     m_menuUpdateHandlers[UIActionIndexRT_M_View_M_StatusBar].ptfr =        &UIActionPoolRuntime::updateMenuViewStatusBar;
+    m_menuUpdateHandlers[UIActionIndexRT_M_Input].ptfr =                   &UIActionPoolRuntime::updateMenuInput;
+    m_menuUpdateHandlers[UIActionIndexRT_M_Input_M_Keyboard].ptfr =        &UIActionPoolRuntime::updateMenuInputKeyboard;
+    m_menuUpdateHandlers[UIActionIndexRT_M_Input_M_Mouse].ptfr =           &UIActionPoolRuntime::updateMenuInputMouse;
     m_menuUpdateHandlers[UIActionIndexRT_M_Devices].ptfr =                 &UIActionPoolRuntime::updateMenuDevices;
     m_menuUpdateHandlers[UIActionIndexRT_M_Devices_M_HardDrives].ptfr =    &UIActionPoolRuntime::updateMenuDevicesHardDrives;
@@ -2037,4 +2079,5 @@
     m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] =     gEDataManager->restrictedRuntimeMenuMachineActionTypes(strMachineID);
     m_restrictedActionsMenuView[UIActionRestrictionLevel_Base] =        gEDataManager->restrictedRuntimeMenuViewActionTypes(strMachineID);
+    m_restrictedActionsMenuInput[UIActionRestrictionLevel_Base] =       gEDataManager->restrictedRuntimeMenuInputActionTypes(strMachineID);
     m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] =     gEDataManager->restrictedRuntimeMenuDevicesActionTypes(strMachineID);
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -2063,6 +2106,6 @@
         m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuMachineActionType)
             (m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuMachineActionType_SettingsDialog);
-        m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuMachineActionType)
-            (m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuMachineActionType_KeyboardSettings);
+        m_restrictedActionsMenuInput[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuInputActionType)
+            (m_restrictedActionsMenuInput[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuInputActionType_KeyboardSettings);
         m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] = (UIExtraDataMetaDefs::RuntimeMenuDevicesActionType)
             (m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] | UIExtraDataMetaDefs::RuntimeMenuDevicesActionType_HardDrivesSettings);
@@ -2149,4 +2192,8 @@
     updateMenuViewPopup();
 
+    /* 'Input' menu: */
+    addMenu(m_mainMenus, action(UIActionIndexRT_M_Input));
+    updateMenuInput();
+
     /* 'Devices' menu: */
     addMenu(m_mainMenus, action(UIActionIndexRT_M_Devices));
@@ -2183,20 +2230,4 @@
     /* 'Information Dialog' action: */
     fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_ShowInformation)) || fSeparator;
-
-    /* Separator: */
-    if (fSeparator)
-    {
-        pMenu->addSeparator();
-        fSeparator = false;
-    }
-
-    /* 'Keyboard' submenu: */
-    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Keyboard)) || fSeparator;
-    updateMenuMachineKeyboard();
-    /* 'Mouse' submenu: */
-    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Mouse), false) || fSeparator;
-    updateMenuMachineMouse();
-    /* 'Mouse Integration' action: */
-    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration)) || fSeparator;
 
     /* Separator: */
@@ -2232,51 +2263,4 @@
     /* Mark menu as valid: */
     m_invalidations.remove(UIActionIndexRT_M_Machine);
-}
-
-void UIActionPoolRuntime::updateMenuMachineKeyboard()
-{
-    /* Get corresponding menu: */
-    UIMenu *pMenu = action(UIActionIndexRT_M_Machine_M_Keyboard)->menu();
-    AssertPtrReturnVoid(pMenu);
-    /* Clear contents: */
-    pMenu->clear();
-
-    /* Separator: */
-    bool fSeparator = false;
-
-    /* 'Keyboard Settings' action: */
-    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Keyboard_S_Settings)) || fSeparator;
-
-    /* Separator: */
-    if (fSeparator)
-    {
-        pMenu->addSeparator();
-        fSeparator = false;
-    }
-
-    /* 'Type CAD' action: */
-    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_TypeCAD)) || fSeparator;
-#ifdef Q_WS_X11
-    /* 'Type CABS' action: */
-    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Machine_S_TypeCABS)) || fSeparator;
-#endif /* Q_WS_X11 */
-
-    /* Mark menu as valid: */
-    m_invalidations.remove(UIActionIndexRT_M_Machine_M_Keyboard);
-}
-
-void UIActionPoolRuntime::updateMenuMachineMouse()
-{
-    /* Get corresponding menu: */
-    UIMenu *pMenu = action(UIActionIndexRT_M_Machine_M_Mouse)->menu();
-    AssertPtrReturnVoid(pMenu);
-    /* Clear contents: */
-    pMenu->clear();
-
-    /* 'Machine Integration' action: */
-    addAction(pMenu, action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration));
-
-    /* Mark menu as valid: */
-    m_invalidations.remove(UIActionIndexRT_M_Machine_M_Mouse);
 }
 
@@ -2558,4 +2542,75 @@
 }
 
+void UIActionPoolRuntime::updateMenuInput()
+{
+    /* Get corresponding menu: */
+    UIMenu *pMenu = action(UIActionIndexRT_M_Input)->menu();
+    AssertPtrReturnVoid(pMenu);
+    /* Clear contents: */
+    pMenu->clear();
+
+    /* Separator: */
+    bool fSeparator = false;
+
+    /* 'Keyboard' submenu: */
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Keyboard)) || fSeparator;
+    updateMenuInputKeyboard();
+    /* 'Mouse' submenu: */
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Mouse), false) || fSeparator;
+    updateMenuInputMouse();
+    /* 'Mouse Integration' action: */
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Mouse_T_Integration)) || fSeparator;
+
+    /* Mark menu as valid: */
+    m_invalidations.remove(UIActionIndexRT_M_Input);
+}
+
+void UIActionPoolRuntime::updateMenuInputKeyboard()
+{
+    /* Get corresponding menu: */
+    UIMenu *pMenu = action(UIActionIndexRT_M_Input_M_Keyboard)->menu();
+    AssertPtrReturnVoid(pMenu);
+    /* Clear contents: */
+    pMenu->clear();
+
+    /* Separator: */
+    bool fSeparator = false;
+
+    /* 'Keyboard Settings' action: */
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_M_Keyboard_S_Settings)) || fSeparator;
+
+    /* Separator: */
+    if (fSeparator)
+    {
+        pMenu->addSeparator();
+        fSeparator = false;
+    }
+
+    /* 'Type CAD' action: */
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_S_TypeCAD)) || fSeparator;
+#ifdef Q_WS_X11
+    /* 'Type CABS' action: */
+    fSeparator = addAction(pMenu, action(UIActionIndexRT_M_Input_S_TypeCABS)) || fSeparator;
+#endif /* Q_WS_X11 */
+
+    /* Mark menu as valid: */
+    m_invalidations.remove(UIActionIndexRT_M_Input_M_Keyboard);
+}
+
+void UIActionPoolRuntime::updateMenuInputMouse()
+{
+    /* Get corresponding menu: */
+    UIMenu *pMenu = action(UIActionIndexRT_M_Input_M_Mouse)->menu();
+    AssertPtrReturnVoid(pMenu);
+    /* Clear contents: */
+    pMenu->clear();
+
+    /* 'Machine Integration' action: */
+    addAction(pMenu, action(UIActionIndexRT_M_Input_M_Mouse_T_Integration));
+
+    /* Mark menu as valid: */
+    m_invalidations.remove(UIActionIndexRT_M_Input_M_Mouse);
+}
+
 void UIActionPoolRuntime::updateMenuDevices()
 {
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52937)
@@ -45,12 +45,4 @@
     UIActionIndexRT_M_Machine_S_TakeScreenshot,
     UIActionIndexRT_M_Machine_S_ShowInformation,
-    UIActionIndexRT_M_Machine_M_Keyboard,
-    UIActionIndexRT_M_Machine_M_Keyboard_S_Settings,
-    UIActionIndexRT_M_Machine_M_Mouse,
-    UIActionIndexRT_M_Machine_M_Mouse_T_Integration,
-    UIActionIndexRT_M_Machine_S_TypeCAD,
-#ifdef Q_WS_X11
-    UIActionIndexRT_M_Machine_S_TypeCABS,
-#endif /* Q_WS_X11 */
     UIActionIndexRT_M_Machine_T_Pause,
     UIActionIndexRT_M_Machine_S_Reset,
@@ -76,4 +68,15 @@
     UIActionIndexRT_M_View_M_StatusBar_S_Settings,
     UIActionIndexRT_M_View_M_StatusBar_T_Visibility,
+
+    /* 'Input' menu actions: */
+    UIActionIndexRT_M_Input,
+    UIActionIndexRT_M_Input_M_Keyboard,
+    UIActionIndexRT_M_Input_M_Keyboard_S_Settings,
+    UIActionIndexRT_M_Input_M_Mouse,
+    UIActionIndexRT_M_Input_M_Mouse_T_Integration,
+    UIActionIndexRT_M_Input_S_TypeCAD,
+#ifdef Q_WS_X11
+    UIActionIndexRT_M_Input_S_TypeCABS,
+#endif /* Q_WS_X11 */
 
     /* 'Devices' menu actions: */
@@ -158,4 +161,9 @@
     void setRestrictionForMenuView(UIActionRestrictionLevel level, UIExtraDataMetaDefs::RuntimeMenuViewActionType restriction);
 
+    /** Returns whether the action with passed @a type is allowed in the 'Input' menu. */
+    bool isAllowedInMenuInput(UIExtraDataMetaDefs::RuntimeMenuInputActionType type) const;
+    /** Defines 'Input' menu @a restriction for passed @a level. */
+    void setRestrictionForMenuInput(UIActionRestrictionLevel level, UIExtraDataMetaDefs::RuntimeMenuInputActionType restriction);
+
     /** Returns whether the action with passed @a type is allowed in the 'Devices' menu. */
     bool isAllowedInMenuDevices(UIExtraDataMetaDefs::RuntimeMenuDevicesActionType type) const;
@@ -211,8 +219,4 @@
     /** Update 'Machine' menu routine. */
     void updateMenuMachine();
-    /** Update 'Machine' : 'Keyboard' menu routine. */
-    void updateMenuMachineKeyboard();
-    /** Update 'Machine' : 'Mouse' menu routine. */
-    void updateMenuMachineMouse();
     /** Update 'View' menu routine. */
     void updateMenuView();
@@ -227,4 +231,10 @@
     /** Update 'View' : 'Virtual Screen #' @a pMenu routine (Fullscreen, Seamless). */
     void updateMenuViewMultiscreen(QMenu *pMenu);
+    /** Update 'Input' menu routine. */
+    void updateMenuInput();
+    /** Update 'Input' : 'Keyboard' menu routine. */
+    void updateMenuInputKeyboard();
+    /** Update 'Input' : 'Mouse' menu routine. */
+    void updateMenuInputMouse();
     /** Update 'Devices' menu routine. */
     void updateMenuDevices();
@@ -267,4 +277,6 @@
     /** Holds restricted action types of the View menu. */
     QMap<UIActionRestrictionLevel, UIExtraDataMetaDefs::RuntimeMenuViewActionType> m_restrictedActionsMenuView;
+    /** Holds restricted action types of the Input menu. */
+    QMap<UIActionRestrictionLevel, UIExtraDataMetaDefs::RuntimeMenuInputActionType> m_restrictedActionsMenuInput;
     /** Holds restricted action types of the Devices menu. */
     QMap<UIActionRestrictionLevel, UIExtraDataMetaDefs::RuntimeMenuDevicesActionType> m_restrictedActionsMenuDevices;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52937)
@@ -539,5 +539,5 @@
 
     /* Update action state: */
-    QAction *pAction = actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration);
+    QAction *pAction = actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration);
     pAction->setEnabled(fIsMouseSupportsAbsolute && fIsMouseSupportsRelative && !fIsMouseHostCursorNeeded);
     if (fIsMouseHostCursorNeeded)
@@ -851,8 +851,4 @@
 
     /* Move actions into running actions group: */
-    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCAD));
-#ifdef Q_WS_X11
-    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCABS));
-#endif
     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_Reset));
     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_Shutdown));
@@ -862,4 +858,8 @@
     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_View_T_GuestAutoresize));
     m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_View_S_AdjustWindow));
+    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCAD));
+#ifdef Q_WS_X11
+    m_pRunningActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCABS));
+#endif /* Q_WS_X11 */
 
     /* Move actions into running-n-paused actions group: */
@@ -869,8 +869,4 @@
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_TakeScreenshot));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation));
-    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard));
-    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard_S_Settings));
-    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse));
-    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Machine_T_Pause));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_MenuBar));
@@ -880,4 +876,8 @@
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_S_Settings));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_View_M_StatusBar_T_Visibility));
+    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard));
+    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_S_Settings));
+    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Mouse));
+    m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Devices_M_HardDrives));
     m_pRunningOrPausedActions->addAction(actionPool()->action(UIActionIndexRT_M_Devices_M_HardDrives_S_Settings));
@@ -914,14 +914,4 @@
     connect(actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation), SIGNAL(triggered()),
             this, SLOT(sltShowInformationDialog()));
-    connect(actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard_S_Settings), SIGNAL(triggered()),
-            this, SLOT(sltShowKeyboardSettings()));
-    connect(actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration), SIGNAL(toggled(bool)),
-            this, SLOT(sltToggleMouseIntegration(bool)));
-    connect(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCAD), SIGNAL(triggered()),
-            this, SLOT(sltTypeCAD()));
-#ifdef Q_WS_X11
-    connect(actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCABS), SIGNAL(triggered()),
-            this, SLOT(sltTypeCABS()));
-#endif
     connect(actionPool()->action(UIActionIndexRT_M_Machine_T_Pause), SIGNAL(toggled(bool)),
             this, SLOT(sltPause(bool)));
@@ -947,4 +937,16 @@
     connect(actionPool()->action(UIActionIndexRT_M_View_S_AdjustWindow), SIGNAL(triggered()),
             this, SLOT(sltAdjustWindow()));
+
+    /* 'Input' actions connections: */
+    connect(actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard_S_Settings), SIGNAL(triggered()),
+            this, SLOT(sltShowKeyboardSettings()));
+    connect(actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration), SIGNAL(toggled(bool)),
+            this, SLOT(sltToggleMouseIntegration(bool)));
+    connect(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCAD), SIGNAL(triggered()),
+            this, SLOT(sltTypeCAD()));
+#ifdef Q_WS_X11
+    connect(actionPool()->action(UIActionIndexRT_M_Input_S_TypeCABS), SIGNAL(triggered()),
+            this, SLOT(sltTypeCABS()));
+#endif /* Q_WS_X11 */
 
     /* 'Devices' actions connections: */
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMenuBarEditorWindow.cpp	(revision 52937)
@@ -100,4 +100,6 @@
     /** Prepare 'View' menu routine. */
     void prepareMenuView();
+    /** Prepare 'Input' menu routine. */
+    void prepareMenuInput();
     /** Prepare 'Devices' menu routine. */
     void prepareMenuDevices();
@@ -119,4 +121,6 @@
     /** Updates 'View' menu routine. */
     void updateMenuView();
+    /** Updates 'Input' menu routine. */
+    void updateMenuInput();
     /** Updates 'Devices' menu routine. */
     void updateMenuDevices();
@@ -231,4 +235,17 @@
             /* Save updated menu-bar restrictions: */
             gEDataManager->setRestrictedRuntimeMenuViewActionTypes(restrictions, vboxGlobal().managedVMUuid());
+            break;
+        }
+        case UIExtraDataMetaDefs::MenuType_Input:
+        {
+            /* Get sender type: */
+            const UIExtraDataMetaDefs::RuntimeMenuInputActionType type =
+                static_cast<UIExtraDataMetaDefs::RuntimeMenuInputActionType>(pAction->property("type").toInt());
+            /* Load current menu-bar restrictions: */
+            UIExtraDataMetaDefs::RuntimeMenuInputActionType restrictions = gEDataManager->restrictedRuntimeMenuInputActionTypes(vboxGlobal().managedVMUuid());
+            /* Invert restriction for sender type: */
+            restrictions = (UIExtraDataMetaDefs::RuntimeMenuInputActionType)(restrictions ^ type);
+            /* Save updated menu-bar restrictions: */
+            gEDataManager->setRestrictedRuntimeMenuInputActionTypes(restrictions, vboxGlobal().managedVMUuid());
             break;
         }
@@ -335,4 +352,5 @@
     prepareMenuMachine();
     prepareMenuView();
+    prepareMenuInput();
     prepareMenuDevices();
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -498,12 +516,4 @@
         prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_ShowInformation));
         pMenu->addSeparator();
-        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard));
-        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse_T_Integration));
-        pMenu->addSeparator();
-        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCAD));
-#ifdef Q_WS_X11
-        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_TypeCABS));
-#endif /* Q_WS_X11 */
-        pMenu->addSeparator();
         prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_T_Pause));
         prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Machine_S_Reset));
@@ -532,4 +542,15 @@
 //        prepareCopiedAction(pMenu, Resize);
 //        prepareCopiedAction(pMenu, MultiScreen);
+    }
+}
+
+void UIMenuBarEditorWidget::prepareMenuInput()
+{
+    /* Copy menu: */
+    QMenu *pMenu = prepareCopiedMenu(actionPool()->action(UIActionIndexRT_M_Input));
+    AssertPtrReturnVoid(pMenu);
+    {
+        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard));
+        prepareCopiedAction(pMenu, actionPool()->action(UIActionIndexRT_M_Input_M_Mouse_T_Integration));
     }
 }
@@ -629,4 +650,5 @@
     updateMenuMachine();
     updateMenuView();
+    updateMenuInput();
     updateMenuDevices();
 #ifdef VBOX_WITH_DEBUGGER_GUI
@@ -722,4 +744,33 @@
         /* Update action 'checked' state: */
         m_actions.value(strKey)->setChecked(!(restrictionsMenuView & enumValue));
+    }
+}
+
+void UIMenuBarEditorWidget::updateMenuInput()
+{
+    /* Recache menu-bar configuration: */
+    const UIExtraDataMetaDefs::RuntimeMenuInputActionType restrictionsMenuInput = gEDataManager->restrictedRuntimeMenuInputActionTypes(vboxGlobal().managedVMUuid());
+    /* Get static meta-object: */
+    const QMetaObject &smo = UIExtraDataMetaDefs::staticMetaObject;
+
+    /* We have UIExtraDataMetaDefs::RuntimeMenuInputActionType enum registered, so we can enumerate it: */
+    const int iEnumIndex = smo.indexOfEnumerator("RuntimeMenuInputActionType");
+    QMetaEnum metaEnum = smo.enumerator(iEnumIndex);
+    /* Handle other enum-values: */
+    for (int iKeyIndex = 0; iKeyIndex < metaEnum.keyCount(); ++iKeyIndex)
+    {
+        /* Get iterated enum-value: */
+        const UIExtraDataMetaDefs::RuntimeMenuInputActionType enumValue =
+            static_cast<const UIExtraDataMetaDefs::RuntimeMenuInputActionType>(metaEnum.keyToValue(metaEnum.key(iKeyIndex)));
+        /* Skip RuntimeMenuInputActionType_Invalid & RuntimeMenuInputActionType_All enum-value: */
+        if (enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid ||
+            enumValue == UIExtraDataMetaDefs::RuntimeMenuInputActionType_All)
+            continue;
+        /* Which key required action registered under? */
+        const QString strKey = gpConverter->toInternalString(enumValue);
+        if (!m_actions.contains(strKey))
+            continue;
+        /* Update action 'checked' state: */
+        m_actions.value(strKey)->setChecked(!(restrictionsMenuInput & enumValue));
     }
 }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineWindowNormal.cpp	(revision 52937)
@@ -192,6 +192,6 @@
         case IndicatorType_Display:       pAction = actionPool()->action(UIActionIndexRT_M_ViewPopup);                break;
         case IndicatorType_VideoCapture:  pAction = actionPool()->action(UIActionIndexRT_M_Devices_M_VideoCapture);   break;
-        case IndicatorType_Mouse:         pAction = actionPool()->action(UIActionIndexRT_M_Machine_M_Mouse);          break;
-        case IndicatorType_Keyboard:      pAction = actionPool()->action(UIActionIndexRT_M_Machine_M_Keyboard);       break;
+        case IndicatorType_Mouse:         pAction = actionPool()->action(UIActionIndexRT_M_Input_M_Mouse);            break;
+        case IndicatorType_Keyboard:      pAction = actionPool()->action(UIActionIndexRT_M_Input_M_Keyboard);         break;
         default: break;
     }
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp	(revision 52936)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineLogicSeamless.cpp	(revision 52937)
@@ -210,6 +210,6 @@
 
     /* Restrict 'Disable Mouse Integration' action for 'Machine' menu: */
-    actionPool()->toRuntime()->setRestrictionForMenuMachine(UIActionRestrictionLevel_Logic,
-                                                            UIExtraDataMetaDefs::RuntimeMenuMachineActionType_MouseIntegration);
+    actionPool()->toRuntime()->setRestrictionForMenuInput(UIActionRestrictionLevel_Logic,
+                                                          UIExtraDataMetaDefs::RuntimeMenuInputActionType_MouseIntegration);
     /* Restrict 'Adjust Window', 'Guest Autoresize', 'Status Bar' and 'Resize' actions for 'View' menu: */
     actionPool()->toRuntime()->setRestrictionForMenuView(UIActionRestrictionLevel_Logic,
@@ -341,6 +341,6 @@
 
     /* Allow 'Disable Mouse Integration' action for 'Machine' menu: */
-    actionPool()->toRuntime()->setRestrictionForMenuMachine(UIActionRestrictionLevel_Logic,
-                                                            UIExtraDataMetaDefs::RuntimeMenuMachineActionType_Invalid);
+    actionPool()->toRuntime()->setRestrictionForMenuInput(UIActionRestrictionLevel_Logic,
+                                                          UIExtraDataMetaDefs::RuntimeMenuInputActionType_Invalid);
     /* Allow 'Adjust Window', 'Guest Autoresize', 'Status Bar' and 'Resize' actions for 'View' menu: */
     actionPool()->toRuntime()->setRestrictionForMenuView(UIActionRestrictionLevel_Logic,
