Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.cpp	(revision 53389)
@@ -3568,4 +3568,7 @@
                  strKey == GUI_StatusBar_IndicatorOrder)
             emit sigStatusBarConfigurationChange(strMachineID);
+        /* Scale-factor change: */
+        else if (strKey == GUI_ScaleFactor)
+            emit sigScaleFactorChange(strMachineID);
     }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/extradata/UIExtraDataManager.h	(revision 53389)
@@ -75,4 +75,7 @@
     /** Notifies about HID LEDs synchronization state change. */
     void sigHidLedsSyncStateChange(bool fEnabled);
+
+    /** Notifies about the scale-factor change. */
+    void sigScaleFactorChange(const QString &strMachineID);
 
 #ifdef RT_OS_DARWIN
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.cpp	(revision 53389)
@@ -764,6 +764,17 @@
 #endif /* VBOX_WITH_VIDEOHWACCEL */
 
+void UIFrameBuffer::sltHandleScaleFactorChange(const QString &strMachineID)
+{
+    /* Skip unrelated machine IDs: */
+    if (strMachineID != vboxGlobal().managedVMUuid())
+        return;
+
+    /* Fetch new scale-factor: */
+    m_dScaleFactor = gEDataManager->scaleFactor(vboxGlobal().managedVMUuid());
+}
+
 void UIFrameBuffer::prepareConnections()
 {
+    /* EMT connections: */
     connect(this, SIGNAL(sigNotifyChange(int, int)),
             m_pMachineView, SLOT(sltHandleNotifyChange(int, int)),
@@ -778,8 +789,13 @@
             m_pMachineView, SLOT(sltHandle3DOverlayVisibilityChange(bool)),
             Qt::QueuedConnection);
+
+    /* Extra-data manager connections: */
+    connect(gEDataManager, SIGNAL(sigScaleFactorChange(const QString&)),
+            this, SLOT(sltHandleScaleFactorChange(const QString&)));
 }
 
 void UIFrameBuffer::cleanupConnections()
 {
+    /* EMT connections: */
     disconnect(this, SIGNAL(sigNotifyChange(int, int)),
                m_pMachineView, SLOT(sltHandleNotifyChange(int, int)));
@@ -790,4 +806,8 @@
     disconnect(this, SIGNAL(sigNotifyAbout3DOverlayVisibilityChange(bool)),
                m_pMachineView, SLOT(sltHandle3DOverlayVisibilityChange(bool)));
+
+    /* Extra-data manager connections: */
+    disconnect(gEDataManager, SIGNAL(sigScaleFactorChange(const QString&)),
+               this, SLOT(sltHandleScaleFactorChange(const QString&)));
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIFrameBuffer.h	(revision 53389)
@@ -223,4 +223,9 @@
     void setBackingScaleFactor(double dBackingScaleFactor) { m_dBackingScaleFactor = dBackingScaleFactor; }
 
+protected slots:
+
+    /** Handles the scale-factor change. */
+    void sltHandleScaleFactorChange(const QString &strMachineID);
+
 protected:
 
@@ -278,5 +283,5 @@
      * @{ */
     /** Holds the scale-factor used by the scaled-size. */
-    const double m_dScaleFactor;
+    double m_dScaleFactor;
     /** Holds the frame-buffer's scaled-size. */
     QSize m_scaledSize;
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.cpp	(revision 53389)
@@ -316,4 +316,16 @@
 {
     setMaxGuestSize();
+}
+
+void UIMachineView::sltHandleScaleFactorChange(const QString &strMachineID)
+{
+    /* Skip unrelated machine IDs: */
+    if (strMachineID != vboxGlobal().managedVMUuid())
+        return;
+
+    /* Adjust frame-buffer, machine-window and guest-screen size if necessary: */
+    sltHandleNotifyChange(frameBuffer()->width(), frameBuffer()->height());
+    machineWindow()->normalizeGeometry(true /* adjust position */);
+    adjustGuestScreenSize();
 }
 
@@ -540,4 +552,7 @@
     connect(QApplication::desktop(), SIGNAL(resized(int)), this,
             SLOT(sltDesktopResized()));
+    /* Scale-factor change: */
+    connect(gEDataManager, SIGNAL(sigScaleFactorChange(const QString&)),
+            this, SLOT(sltHandleScaleFactorChange(const QString&)));
 }
 
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/UIMachineView.h	(revision 53389)
@@ -113,4 +113,7 @@
     /* Watch dog for desktop resizes: */
     void sltDesktopResized();
+
+    /** Handles the scale-factor change. */
+    void sltHandleScaleFactorChange(const QString &strMachineID);
 
     /* Console callback handlers: */
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/fullscreen/UIMachineViewFullscreen.cpp	(revision 53389)
@@ -37,4 +37,5 @@
 # include "UIMachineViewFullscreen.h"
 # include "UIFrameBuffer.h"
+# include "UIExtraDataManager.h"
 
 #endif /* !VBOX_WITH_PRECOMPILED_HEADERS */
@@ -144,8 +145,13 @@
 void UIMachineViewFullscreen::adjustGuestScreenSize()
 {
+    /* Acquire working-area size: */
+    const QSize workingAreaSize = workingArea().size();
+    /* Acquire frame-buffer size: */
+    QSize frameBufferSize(frameBuffer()->width(), frameBuffer()->height());
+    /* Take the scale-factor into account: */
+    frameBufferSize *= gEDataManager->scaleFactor(vboxGlobal().managedVMUuid());
     /* Check if we should adjust guest-screen to new size: */
     if (frameBuffer()->isAutoEnabled() ||
-        (int)frameBuffer()->width() != workingArea().size().width() ||
-        (int)frameBuffer()->height() != workingArea().size().height())
+        frameBufferSize != workingAreaSize)
         if (m_bIsGuestAutoresizeEnabled &&
             uisession()->isGuestSupportsGraphics() &&
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/normal/UIMachineViewNormal.cpp	(revision 53389)
@@ -168,8 +168,12 @@
 void UIMachineViewNormal::adjustGuestScreenSize()
 {
+    /* Acquire central-widget size: */
+    const QSize centralWidgetSize = machineWindow()->centralWidget()->size();
+    /* Acquire frame-buffer size: */
+    QSize frameBufferSize(frameBuffer()->width(), frameBuffer()->height());
+    /* Take the scale-factor into account: */
+    frameBufferSize *= gEDataManager->scaleFactor(vboxGlobal().managedVMUuid());
     /* Check if we should adjust guest-screen to new size: */
-    const QSize centralWidgetSize = machineWindow()->centralWidget()->size();
-    if ((int)frameBuffer()->width() != centralWidgetSize.width() ||
-        (int)frameBuffer()->height() != centralWidgetSize.height())
+    if (frameBufferSize != centralWidgetSize)
         if (m_bIsGuestAutoresizeEnabled && uisession()->isGuestSupportsGraphics())
             sltPerformGuestResize(centralWidgetSize);
Index: trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp
===================================================================
--- trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp	(revision 53388)
+++ trunk/src/VBox/Frontends/VirtualBox/src/runtime/seamless/UIMachineViewSeamless.cpp	(revision 53389)
@@ -36,4 +36,5 @@
 # include "UIMachineViewSeamless.h"
 # include "UIFrameBuffer.h"
+# include "UIExtraDataManager.h"
 
 /* COM includes: */
@@ -161,8 +162,13 @@
 void UIMachineViewSeamless::adjustGuestScreenSize()
 {
+    /* Acquire working-area size: */
+    const QSize workingAreaSize = workingArea().size();
+    /* Acquire frame-buffer size: */
+    QSize frameBufferSize(frameBuffer()->width(), frameBuffer()->height());
+    /* Take the scale-factor into account: */
+    frameBufferSize *= gEDataManager->scaleFactor(vboxGlobal().managedVMUuid());
     /* Check if we should adjust guest-screen to new size: */
     if (frameBuffer()->isAutoEnabled() ||
-        (int)frameBuffer()->width() != workingArea().size().width() ||
-        (int)frameBuffer()->height() != workingArea().size().height())
+        frameBufferSize != workingAreaSize)
         if (uisession()->isGuestSupportsGraphics() &&
             uisession()->isScreenVisible(screenId()))
