diff --git a/win/vncviewer/DesktopWindow.cxx b/win/vncviewer/DesktopWindow.cxx
index 517d3ab..8460f58 100644
--- a/win/vncviewer/DesktopWindow.cxx
+++ b/win/vncviewer/DesktopWindow.cxx
@@ -308,6 +308,7 @@
   bool maximized = GetWindowLong(handle, GWL_STYLE) & WS_MAXIMIZE;
 
   if (showToolbar && !tb.isVisible()) {
+    refreshToolbarButtons();
     tb.show();
     if (!maximized) r.bottom += tb.getHeight();
   } else if (!showToolbar && tb.isVisible()) {
@@ -320,6 +321,24 @@
   else SetWindowPos(handle, NULL, 0, 0, r.right-r.left, r.bottom-r.top, SWP_NOMOVE | SWP_NOZORDER);
 }
 
+void DesktopWindow::refreshToolbarButtons() {
+  int scale = getDesktopScale();
+  if (scale == 100) tb.enableButton(ID_ACTUAL_SIZE, false);
+  else tb.enableButton(ID_ACTUAL_SIZE, true);
+  if (scale <= 10) {
+    tb.enableButton(ID_ZOOM_IN, true);
+    tb.enableButton(ID_ZOOM_OUT, false);
+  } else if (scale >= 200) {
+    tb.enableButton(ID_ZOOM_IN, false);
+    tb.enableButton(ID_ZOOM_OUT, true);
+  } else {
+    tb.enableButton(ID_ZOOM_IN, true);
+    tb.enableButton(ID_ZOOM_OUT, true);
+  }
+  if (isAutoScaling()) tb.pressButton(ID_AUTO_SIZE, true);
+  else tb.pressButton(ID_AUTO_SIZE, false);
+}
+
 void DesktopWindow::setDisableWinKeys(bool dwk) {
   // Enable low-level event hooking, so we get special keys directly
   if (dwk)
@@ -949,10 +968,16 @@
   calculateScrollBars();
 }
 
+void DesktopWindow::setAutoScaling(bool as) { 
+  autoScaling = as;
+  if (as) fitBufferToWindow();
+}
+
 void DesktopWindow::setDesktopScale(int scale) {
   buffer->setScale(scale);
   InvalidateRect(frameHandle, 0, FALSE);
   calculateScrollBars();
+  if (isToolbarEnabled()) refreshToolbarButtons();
 }
 
 void DesktopWindow::fitBufferToWindow(bool repaint) {
@@ -975,6 +1000,7 @@
   }
   buffer->setScaleRatio(scale_ratio);
   if (repaint) InvalidateRect(frameHandle, 0, TRUE);
+  if (isToolbarEnabled()) refreshToolbarButtons();
 }
 
 void
