diff --git a/vncviewer/OptionsDialog.cxx b/vncviewer/OptionsDialog.cxx
index 58f2fd7..d3ed333 100644
--- a/vncviewer/OptionsDialog.cxx
+++ b/vncviewer/OptionsDialog.cxx
@@ -271,8 +271,24 @@
       menuKeyChoice->value(i + 1);
 
   /* Screen */
+  int width, height;
+
+  if (sscanf(desktopSize.getValueStr(), "%dx%d", &width, &height) != 2) {
+    desktopSizeCheckbox->value(false);
+    desktopWidthInput->value("1024");
+    desktopHeightInput->value("768");
+  } else {
+    char buf[32];
+    desktopSizeCheckbox->value(true);
+    snprintf(buf, sizeof(buf), "%d", width);
+    desktopWidthInput->value(buf);
+    snprintf(buf, sizeof(buf), "%d", height);
+    desktopHeightInput->value(buf);
+  }
   fullScreenCheckbox->value(fullScreen);
 
+  handleDesktopSize(desktopSizeCheckbox, this);
+
   /* Misc. */
   sharedCheckbox->value(shared);
   dotCursorCheckbox->value(dotWhenNoCursor);
@@ -360,6 +376,17 @@
   }
 
   /* Screen */
+  int width, height;
+
+  if (desktopSizeCheckbox->value() &&
+      (sscanf(desktopWidthInput->value(), "%d", &width) == 1) &&
+      (sscanf(desktopHeightInput->value(), "%d", &height) == 1)) {
+    char buf[64];
+    snprintf(buf, sizeof(buf), "%dx%d", width, height);
+    desktopSize.setParam(buf);
+  } else {
+    desktopSize.setParam("");
+  }
   fullScreen.setParam(fullScreenCheckbox->value());
 
   /* Misc. */
@@ -693,11 +720,26 @@
 
 void OptionsDialog::createScreenPage(int tx, int ty, int tw, int th)
 {
+  int x;
+
   Fl_Group *group = new Fl_Group(tx, ty, tw, th, _("Screen"));
 
   tx += OUTER_MARGIN;
   ty += OUTER_MARGIN;
 
+  desktopSizeCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
+                                                     CHECK_MIN_WIDTH,
+                                                     CHECK_HEIGHT,
+                                                     _("Resize remote session on connect")));
+  desktopSizeCheckbox->callback(handleDesktopSize, this);
+  ty += CHECK_HEIGHT + TIGHT_MARGIN;
+
+  desktopWidthInput = new Fl_Int_Input(tx + INDENT, ty, 50, INPUT_HEIGHT);
+  x = desktopWidthInput->x() + desktopWidthInput->w() + \
+      gui_str_len("x") + 3 * 2;
+  desktopHeightInput = new Fl_Int_Input(x, ty, 50, INPUT_HEIGHT, "x");
+  ty += INPUT_HEIGHT + TIGHT_MARGIN;
+
   fullScreenCheckbox = new Fl_Check_Button(LBLRIGHT(tx, ty,
                                                   CHECK_MIN_WIDTH,
                                                   CHECK_HEIGHT,
@@ -785,6 +827,19 @@
 }
 
 
+void OptionsDialog::handleDesktopSize(Fl_Widget *widget, void *data)
+{
+  OptionsDialog *dialog = (OptionsDialog*)data;
+
+  if (dialog->desktopSizeCheckbox->value()) {
+    dialog->desktopWidthInput->activate();
+    dialog->desktopHeightInput->activate();
+  } else {
+    dialog->desktopWidthInput->deactivate();
+    dialog->desktopHeightInput->deactivate();
+  }
+}
+
 void OptionsDialog::handleCancel(Fl_Widget *widget, void *data)
 {
   OptionsDialog *dialog = (OptionsDialog*)data;
