Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp	(revision 45401)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.cpp	(revision 45402)
@@ -61,4 +61,5 @@
 const char* UIDefs::GUI_VirtualScreenToHostScreen = "GUI/VirtualScreenToHostScreen";
 const char* UIDefs::GUI_AutoresizeGuest = "GUI/AutoresizeGuest";
+const char* UIDefs::GUI_AutomountGuestScreens = "GUI/AutomountGuestScreens";
 const char* UIDefs::GUI_SaveMountedAtRuntime = "GUI/SaveMountedAtRuntime";
 const char* UIDefs::GUI_PassCAD = "GUI/PassCAD";
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h	(revision 45401)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/UIDefs.h	(revision 45402)
@@ -138,4 +138,5 @@
     extern const char* GUI_VirtualScreenToHostScreen;
     extern const char* GUI_AutoresizeGuest;
+    extern const char* GUI_AutomountGuestScreens;
     extern const char* GUI_SaveMountedAtRuntime;
     extern const char* GUI_PassCAD;
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 45401)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.cpp	(revision 45402)
@@ -3735,4 +3735,25 @@
     /* 'true' if hiding is not approved by the extra-data: */
     return !isApprovedByExtraData(machine, GUI_HideDetails);
+}
+
+/* static */
+bool VBoxGlobal::shouldWeAutoMountGuestScreens(CMachine &machine,
+                                               bool fIncludingSanityCheck /*= true*/)
+{
+    if (fIncludingSanityCheck)
+    {
+        /* 'false' for null machines,
+         * there is nothing to start anyway: */
+        if (machine.isNull())
+            return false;
+
+        /* 'false' for inaccessible machines,
+         * we can't start them anyway: */
+        if (!machine.GetAccessible())
+            return false;
+    }
+
+    /* 'true' if guest-screen auto-mounting approved by the extra-data: */
+    return isApprovedByExtraData(machine, GUI_AutomountGuestScreens);
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 45401)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxGlobal.h	(revision 45402)
@@ -379,4 +379,5 @@
     static bool shouldWeShowDetails(CMachine &machine,
                                     bool fIncludingMachineGeneralCheck = false);
+    static bool shouldWeAutoMountGuestScreens(CMachine &machine, bool fIncludingSanityCheck = true);
 
 #ifdef RT_OS_LINUX
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp	(revision 45401)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.cpp	(revision 45402)
@@ -30,4 +30,5 @@
 #include "UISession.h"
 #include "UIMessageCenter.h"
+#include "VBoxGlobal.h"
 
 /* COM includes: */
@@ -75,4 +76,6 @@
      * and all guests screens need there own host screen. */
     CMachine machine = m_pMachineLogic->session().GetMachine();
+    CDisplay display = m_pMachineLogic->session().GetConsole().GetDisplay();
+    bool fShouldWeAutoMountGuestScreens = VBoxGlobal::shouldWeAutoMountGuestScreens(machine, false);
     QDesktopWidget *pDW = QApplication::desktop();
     foreach (int iGuestScreen, m_guestScreens)
@@ -135,4 +138,31 @@
             availableScreens.removeOne(iHostScreen);
         }
+        /* Do we have opinion about what to do with excessive guest-screen? */
+        else if (fShouldWeAutoMountGuestScreens)
+        {
+            /* Then we have to disable excessive guest-screen: */
+            display.SetVideoModeHint(iGuestScreen, false, false, 0, 0, 0, 0, 0);
+        }
+    }
+
+    /* Are we still have available host-screens
+     * and have opinion about what to do with disabled guest-screens? */
+    if (!availableScreens.isEmpty() && fShouldWeAutoMountGuestScreens)
+    {
+        /* How many excessive host-screens do we have? */
+        int cExcessiveHostScreens = availableScreens.size();
+        /* How many disabled guest-screens do we have? */
+        int cDisabledGuestScreens = m_disabledGuestScreens.size();
+        /* We have to try to enable disabled guest-screens if any: */
+        int cGuestScreensToEnable = qMin(cExcessiveHostScreens, cDisabledGuestScreens);
+        for (int iGuestScreenIndex = 0; iGuestScreenIndex < cGuestScreensToEnable; ++iGuestScreenIndex)
+        {
+            /* Get corresponding guest-screen: */
+            int iGuestScreen = m_disabledGuestScreens[iGuestScreenIndex];
+            /* Re-enable guest-screen with the old arguments: */
+            ULONG iWidth, iHeight, iBpp;
+            display.GetScreenResolution(iGuestScreen, iWidth, iHeight, iBpp);
+            display.SetVideoModeHint(iGuestScreen, true, false, 0, 0, iWidth, iHeight, iBpp);
+        }
     }
 
@@ -254,9 +284,12 @@
     /* Get machine: */
     CMachine machine = m_pMachineLogic->session().GetMachine();
-    /* Enumerate all the visible guest screens: */
+    /* Enumerate all the guest screens: */
     m_guestScreens.clear();
+    m_disabledGuestScreens.clear();
     for (uint iGuestScreen = 0; iGuestScreen < machine.GetMonitorCount(); ++iGuestScreen)
         if (m_pMachineLogic->uisession()->isScreenVisible(iGuestScreen))
             m_guestScreens << iGuestScreen;
+        else
+            m_disabledGuestScreens << iGuestScreen;
 }
 
Index: /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.h
===================================================================
--- /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.h	(revision 45401)
+++ /trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMultiScreenLayout.h	(revision 45402)
@@ -82,4 +82,5 @@
     UIMachineLogic *m_pMachineLogic;
     QList<int> m_guestScreens;
+    QList<int> m_disabledGuestScreens;
     int m_cHostScreens;
     QMap<int, int> m_screenMap;
