Index: trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/VirtualBox1.qrc	(revision 52186)
@@ -270,4 +270,5 @@
         <file alias="os_type_16px.png">images/os_type_16px.png</file>
         <file alias="os_ubuntu.png">images/os_ubuntu.png</file>
+        <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file>
     </qresource>
 </RCC>
Index: trunk/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/VirtualBox1_hidpi.qrc	(revision 52186)
@@ -247,4 +247,5 @@
         <file alias="os_openbsd_hidpi.png">images/hidpi/os_openbsd_hidpi.png</file>
         <file alias="os_opensuse_64_hidpi.png">images/hidpi/os_opensuse_64_hidpi.png</file>
+        <file alias="os_opensuse_hidpi.png">images/hidpi/os_opensuse_hidpi.png</file>
     </qresource>
 </RCC>
Index: trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/VirtualBox2.qrc	(revision 52186)
@@ -1,5 +1,4 @@
 <RCC>
     <qresource prefix="/">
-        <file alias="os_ubuntu_64.png">images/os_ubuntu_64.png</file>
         <file alias="os_win2k.png">images/os_win2k.png</file>
         <file alias="os_win2k12_64.png">images/os_win2k12_64.png</file>
@@ -185,4 +184,6 @@
         <file alias="usb_remove_16px.png">images/usb_remove_16px.png</file>
         <file alias="usb_remove_disabled_16px.png">images/usb_remove_disabled_16px.png</file>
+        <file alias="usb_settings_16px.png">images/usb_settings_16px.png</file>
+        <file alias="usb_settings_disabled_16px.png">images/usb_settings_disabled_16px.png</file>
         <file alias="usb_unavailable_16px.png">images/usb_unavailable_16px.png</file>
         <file alias="usb_unavailable_disabled_16px.png">images/usb_unavailable_disabled_16px.png</file>
Index: trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/VirtualBox2_hidpi.qrc	(revision 52186)
@@ -1,5 +1,4 @@
 <RCC>
     <qresource prefix="/">
-        <file alias="os_opensuse_hidpi.png">images/hidpi/os_opensuse_hidpi.png</file>
         <file alias="os_oracle_64_hidpi.png">images/hidpi/os_oracle_64_hidpi.png</file>
         <file alias="os_oracle_hidpi.png">images/hidpi/os_oracle_hidpi.png</file>
@@ -179,4 +178,6 @@
         <file alias="usb_remove_16px_hidpi.png">images/hidpi/usb_remove_16px_hidpi.png</file>
         <file alias="usb_remove_disabled_16px_hidpi.png">images/hidpi/usb_remove_disabled_16px_hidpi.png</file>
+        <file alias="usb_settings_16px_hidpi.png">images/hidpi/usb_settings_16px_hidpi.png</file>
+        <file alias="usb_settings_disabled_16px_hidpi.png">images/hidpi/usb_settings_disabled_16px_hidpi.png</file>
         <file alias="usb_unavailable_16px_hidpi.png">images/hidpi/usb_unavailable_16px_hidpi.png</file>
         <file alias="usb_unavailable_disabled_16px_hidpi.png">images/hidpi/usb_unavailable_disabled_16px_hidpi.png</file>
Index: trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/src/converter/UIConverterBackendGlobal.cpp	(revision 52186)
@@ -565,4 +565,5 @@
         case RuntimeMenuDevicesActionType_FloppyDevices:         strResult = "FloppyDevices"; break;
         case RuntimeMenuDevicesActionType_USBDevices:            strResult = "USBDevices"; break;
+        case RuntimeMenuDevicesActionType_USBDevicesSettings:    strResult = "USBDevicesSettings"; break;
         case RuntimeMenuDevicesActionType_WebCams:               strResult = "WebCams"; break;
         case RuntimeMenuDevicesActionType_SharedClipboard:       strResult = "SharedClipboard"; break;
@@ -597,4 +598,5 @@
     keys << "FloppyDevices";         values << RuntimeMenuDevicesActionType_FloppyDevices;
     keys << "USBDevices";            values << RuntimeMenuDevicesActionType_USBDevices;
+    keys << "USBDevicesSettings";    values << RuntimeMenuDevicesActionType_USBDevicesSettings;
     keys << "WebCams";               values << RuntimeMenuDevicesActionType_WebCams;
     keys << "SharedClipboard";       values << RuntimeMenuDevicesActionType_SharedClipboard;
Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataDefs.h	(revision 52186)
@@ -435,15 +435,16 @@
     RuntimeMenuDevicesActionType_FloppyDevices         = RT_BIT(3),
     RuntimeMenuDevicesActionType_USBDevices            = RT_BIT(4),
-    RuntimeMenuDevicesActionType_WebCams               = RT_BIT(5),
-    RuntimeMenuDevicesActionType_SharedClipboard       = RT_BIT(6),
-    RuntimeMenuDevicesActionType_DragAndDrop           = RT_BIT(7),
-    RuntimeMenuDevicesActionType_Network               = RT_BIT(8),
-    RuntimeMenuDevicesActionType_NetworkSettings       = RT_BIT(9),
-    RuntimeMenuDevicesActionType_SharedFolders         = RT_BIT(10),
-    RuntimeMenuDevicesActionType_SharedFoldersSettings = RT_BIT(11),
-    RuntimeMenuDevicesActionType_VRDEServer            = RT_BIT(12),
-    RuntimeMenuDevicesActionType_VideoCapture          = RT_BIT(13),
-    RuntimeMenuDevicesActionType_VideoCaptureSettings  = RT_BIT(14),
-    RuntimeMenuDevicesActionType_InstallGuestTools     = RT_BIT(15),
+    RuntimeMenuDevicesActionType_USBDevicesSettings    = RT_BIT(5),
+    RuntimeMenuDevicesActionType_WebCams               = RT_BIT(6),
+    RuntimeMenuDevicesActionType_SharedClipboard       = RT_BIT(7),
+    RuntimeMenuDevicesActionType_DragAndDrop           = RT_BIT(8),
+    RuntimeMenuDevicesActionType_Network               = RT_BIT(9),
+    RuntimeMenuDevicesActionType_NetworkSettings       = RT_BIT(10),
+    RuntimeMenuDevicesActionType_SharedFolders         = RT_BIT(11),
+    RuntimeMenuDevicesActionType_SharedFoldersSettings = RT_BIT(12),
+    RuntimeMenuDevicesActionType_VRDEServer            = RT_BIT(13),
+    RuntimeMenuDevicesActionType_VideoCapture          = RT_BIT(14),
+    RuntimeMenuDevicesActionType_VideoCaptureSettings  = RT_BIT(15),
+    RuntimeMenuDevicesActionType_InstallGuestTools     = RT_BIT(16),
     RuntimeMenuDevicesActionType_All                   = 0xFFFF
 };
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.cpp	(revision 52186)
@@ -216,5 +216,5 @@
     void retranslateUi()
     {
-        setName(QApplication::translate("UIActionPool", "Configure &Shortcuts..."));
+        setName(QApplication::translate("UIActionPool", "&Keyboard Settings..."));
         setStatusTip(QApplication::translate("UIActionPool", "Display the global settings window to configure shortcuts"));
     }
@@ -915,4 +915,30 @@
     {
         setName(QApplication::translate("UIActionPool", "&USB Devices"));
+    }
+};
+
+class UIActionSimpleShowUSBDevicesSettingsDialog : public UIActionSimple
+{
+    Q_OBJECT;
+
+public:
+
+    UIActionSimpleShowUSBDevicesSettingsDialog(UIActionPool *pParent)
+        : UIActionSimple(pParent, ":/usb_settings_16px.png", ":/usb_settings_disabled_16px.png")
+    {
+        retranslateUi();
+    }
+
+protected:
+
+    QString shortcutExtraDataID() const
+    {
+        return QString("USBDevicesSettingsDialog");
+    }
+
+    void retranslateUi()
+    {
+        setName(QApplication::translate("UIActionPool", "&USB Settings..."));
+        setStatusTip(QApplication::translate("UIActionPool", "Change the settings of USB devices"));
     }
 };
@@ -1570,4 +1596,5 @@
     m_pool[UIActionIndexRT_M_Devices_M_FloppyDevices] = new UIActionMenuFloppyDevices(this);
     m_pool[UIActionIndexRT_M_Devices_M_USBDevices] = new UIActionMenuUSBDevices(this);
+    m_pool[UIActionIndexRT_M_Devices_M_USBDevices_S_Settings] = new UIActionSimpleShowUSBDevicesSettingsDialog(this);
     m_pool[UIActionIndexRT_M_Devices_M_WebCams] = new UIActionMenuWebCams(this);
     m_pool[UIActionIndexRT_M_Devices_M_SharedClipboard] = new UIActionMenuSharedClipboard(this);
@@ -1642,5 +1669,5 @@
     /* Recache reconfiguration action restrictions: */
     bool fReconfigurationAllowed = gEDataManager->machineReconfigurationEnabled(strMachineID);
-    if (fReconfigurationAllowed)
+    if (!fReconfigurationAllowed)
     {
         m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] = (RuntimeMenuMachineActionType)
@@ -1648,4 +1675,6 @@
         m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] = (RuntimeMenuDevicesActionType)
             (m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] | RuntimeMenuDevicesActionType_HardDrivesSettings);
+        m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] = (RuntimeMenuDevicesActionType)
+            (m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] | RuntimeMenuDevicesActionType_USBDevicesSettings);
         m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] = (RuntimeMenuDevicesActionType)
             (m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] | RuntimeMenuDevicesActionType_NetworkSettings);
@@ -1658,5 +1687,5 @@
     /* Recache snapshot related action restrictions: */
     bool fSnapshotOperationsAllowed = gEDataManager->machineSnapshotOperationsEnabled(strMachineID);
-    if (fSnapshotOperationsAllowed)
+    if (!fSnapshotOperationsAllowed)
     {
         m_restrictedActionsMenuMachine[UIActionRestrictionLevel_Base] = (RuntimeMenuMachineActionType)
@@ -1667,5 +1696,5 @@
     CExtPack extPack = vboxGlobal().virtualBox().GetExtensionPackManager().Find(GUI_ExtPackName);
     bool fExtensionPackOperationsAllowed = !extPack.isNull() && extPack.GetUsable();
-    if (fExtensionPackOperationsAllowed)
+    if (!fExtensionPackOperationsAllowed)
     {
         m_restrictedActionsMenuDevices[UIActionRestrictionLevel_Base] = (RuntimeMenuDevicesActionType)
@@ -2177,4 +2206,5 @@
         fSeparator1 = true;
     }
+    updateMenuDevicesUSBDevices();
 
     /* 'Web Cams' submenu: */
@@ -2277,4 +2307,19 @@
     if (fAllowToShowActionHardDrivesSettings)
         pMenu->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_HardDrives_S_Settings));
+}
+
+void UIActionPoolRuntime::updateMenuDevicesUSBDevices()
+{
+    /* Get corresponding menu: */
+    QMenu *pMenu = gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices)->menu();
+    AssertPtrReturnVoid(pMenu);
+    /* Clear contents: */
+    pMenu->clear();
+
+    /* 'USB Devices Settings' action: */
+    const bool fAllowToShowActionUSBDevicesSettings = isAllowedInMenuDevices(RuntimeMenuDevicesActionType_USBDevicesSettings);
+    gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices_S_Settings)->setEnabled(fAllowToShowActionUSBDevicesSettings);
+    if (fAllowToShowActionUSBDevicesSettings)
+        pMenu->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices_S_Settings));
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIActionPoolRuntime.h	(revision 52186)
@@ -75,4 +75,5 @@
     UIActionIndexRT_M_Devices_M_FloppyDevices,
     UIActionIndexRT_M_Devices_M_USBDevices,
+    UIActionIndexRT_M_Devices_M_USBDevices_S_Settings,
     UIActionIndexRT_M_Devices_M_WebCams,
     UIActionIndexRT_M_Devices_M_SharedClipboard,
@@ -200,4 +201,6 @@
     /** Update 'Devices' : 'Hard Drives' menu routine. */
     void updateMenuDevicesHardDrives();
+    /** Update 'Devices' : 'USB' menu routine. */
+    void updateMenuDevicesUSBDevices();
     /** Update 'Devices' : 'Network' menu routine. */
     void updateMenuDevicesNetwork();
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.cpp	(revision 52186)
@@ -858,4 +858,5 @@
     m_pRunningOrPausedActions->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_FloppyDevices));
     m_pRunningOrPausedActions->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices));
+    m_pRunningOrPausedActions->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices_S_Settings));
     m_pRunningOrPausedActions->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_WebCams));
     m_pRunningOrPausedActions->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_SharedClipboard));
@@ -924,4 +925,6 @@
     connect(gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices)->menu(), SIGNAL(aboutToShow()),
             this, SLOT(sltPrepareUSBMenu()));
+    connect(gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices_S_Settings), SIGNAL(triggered()),
+            this, SLOT(sltOpenUSBDevicesSettingsDialog()));
     connect(gpActionPool->action(UIActionIndexRT_M_Devices_M_WebCams)->menu(), SIGNAL(aboutToShow()),
             this, SLOT(sltPrepareWebCamMenu()));
@@ -933,7 +936,7 @@
             this, SLOT(sltPrepareNetworkMenu()));
     connect(gpActionPool->action(UIActionIndexRT_M_Devices_M_Network_S_Settings), SIGNAL(triggered()),
-            this, SLOT(sltOpenNetworkAdaptersDialog()));
+            this, SLOT(sltOpenNetworkSettingsDialog()));
     connect(gpActionPool->action(UIActionIndexRT_M_Devices_M_SharedFolders_S_Settings), SIGNAL(triggered()),
-            this, SLOT(sltOpenSharedFoldersDialog()));
+            this, SLOT(sltOpenSharedFoldersSettingsDialog()));
     connect(gpActionPool->action(UIActionIndexRT_M_Devices_T_VRDEServer), SIGNAL(toggled(bool)),
             this, SLOT(sltToggleVRDE(bool)));
@@ -1524,5 +1527,11 @@
 }
 
-void UIMachineLogic::sltOpenNetworkAdaptersDialog()
+void UIMachineLogic::sltOpenUSBDevicesSettingsDialog()
+{
+    /* Machine settings: Storage page: */
+    sltOpenVMSettingsDialog("#usb");
+}
+
+void UIMachineLogic::sltOpenNetworkSettingsDialog()
 {
     /* Open VM settings : Network page: */
@@ -1530,5 +1539,5 @@
 }
 
-void UIMachineLogic::sltOpenSharedFoldersDialog()
+void UIMachineLogic::sltOpenSharedFoldersSettingsDialog()
 {
     /* Do not process if additions are not loaded! */
@@ -1623,4 +1632,7 @@
     /* Clear menu initially: */
     pMenu->clear();
+
+    /* Add settings action: */
+    pMenu->addAction(gpActionPool->action(UIActionIndexRT_M_Devices_M_USBDevices_S_Settings));
 
     /* Get current host: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineLogic.h	(revision 52186)
@@ -87,5 +87,5 @@
 
     /* Wrapper to open Machine settings / Network page: */
-    void openNetworkAdaptersDialog() { sltOpenNetworkAdaptersDialog(); }
+    void openNetworkSettingsDialog() { sltOpenNetworkSettingsDialog(); }
 
 #ifdef Q_WS_MAC
@@ -220,6 +220,7 @@
     void sltOpenVMSettingsDialog(const QString &strCategory = QString(), const QString &strControl = QString());
     void sltOpenStorageSettingsDialog();
-    void sltOpenNetworkAdaptersDialog();
-    void sltOpenSharedFoldersDialog();
+    void sltOpenUSBDevicesSettingsDialog();
+    void sltOpenNetworkSettingsDialog();
+    void sltOpenSharedFoldersSettingsDialog();
     void sltPrepareStorageMenu();
     void sltMountStorageMedium();
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 52185)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UISession.cpp	(revision 52186)
@@ -982,4 +982,5 @@
     const CHost host = vboxGlobal().host();
     const CMachine machine = session().GetConsole().GetMachine();
+    RuntimeMenuDevicesActionType restriction = RuntimeMenuDevicesActionType_Invalid;
 
     /* Storage stuff: */
@@ -1000,9 +1001,7 @@
         pFloppyDevicesMenu->setData(iDevicesCountFD);
         if (!iDevicesCountCD)
-            gpActionPool->toRuntime()->setRestrictionForMenuDevices(UIActionPool::UIActionRestrictionLevel_Session,
-                                                                    RuntimeMenuDevicesActionType_OpticalDevices);
+            restriction = (RuntimeMenuDevicesActionType)(restriction | RuntimeMenuDevicesActionType_OpticalDevices);
         if (!iDevicesCountFD)
-            gpActionPool->toRuntime()->setRestrictionForMenuDevices(UIActionPool::UIActionRestrictionLevel_Session,
-                                                                    RuntimeMenuDevicesActionType_FloppyDevices);
+            restriction = (RuntimeMenuDevicesActionType)(restriction | RuntimeMenuDevicesActionType_FloppyDevices);
     }
 
@@ -1023,6 +1022,5 @@
         }
         if (!fAtLeastOneAdapterActive)
-            gpActionPool->toRuntime()->setRestrictionForMenuDevices(UIActionPool::UIActionRestrictionLevel_Session,
-                                                                    RuntimeMenuDevicesActionType_Network);
+            restriction = (RuntimeMenuDevicesActionType)(restriction | RuntimeMenuDevicesActionType_Network);
     }
 
@@ -1034,6 +1032,5 @@
                                  && machine.GetUSBProxyAvailable();
         if (!fUSBEnabled)
-            gpActionPool->toRuntime()->setRestrictionForMenuDevices(UIActionPool::UIActionRestrictionLevel_Session,
-                                                                    RuntimeMenuDevicesActionType_USBDevices);
+            restriction = (RuntimeMenuDevicesActionType)(restriction | RuntimeMenuDevicesActionType_USBDevices);
     }
 
@@ -1044,7 +1041,9 @@
         const bool fWebCamsEnabled = host.isOk() && !machine.GetUSBControllers().isEmpty();
         if (!fWebCamsEnabled)
-            gpActionPool->toRuntime()->setRestrictionForMenuDevices(UIActionPool::UIActionRestrictionLevel_Session,
-                                                                    RuntimeMenuDevicesActionType_WebCams);
-    }
+            restriction = (RuntimeMenuDevicesActionType)(restriction | RuntimeMenuDevicesActionType_WebCams);
+    }
+
+    /* Apply cumulative restriction: */
+    gpActionPool->toRuntime()->setRestrictionForMenuDevices(UIActionPool::UIActionRestrictionLevel_Session, restriction);
 
 #ifdef Q_WS_MAC
@@ -1563,5 +1562,5 @@
     {
         if (msgCenter().UIMessageCenter::cannotStartWithoutNetworkIf(machine.GetName(), failedInterfaceNames.join(", ")))
-            machineLogic()->openNetworkAdaptersDialog();
+            machineLogic()->openNetworkSettingsDialog();
         else
         {
