diff --git a/vinagre/vinagre-main.c b/vinagre/vinagre-main.c
index b2d224b..e2d9308 100644
--- a/vinagre/vinagre-main.c
+++ b/vinagre/vinagre-main.c
@@ -56,9 +56,14 @@ static gchar **remaining_args = NULL;
 static GSList *servers = NULL;
 static gboolean new_window = FALSE;
 static gboolean fullscreen = FALSE;
+static gchar* geometry = NULL;
 
 static const GOptionEntry options [] =
 {
+  { "geometry", 0, 0, G_OPTION_ARG_STRING, &geometry,
+  /* Translators: this is a command line option (run vinagre --help) */
+    N_("Specify geometry of the main vinagre window"), NULL },
+
   { "fullscreen", 'f', 0, G_OPTION_ARG_NONE, &fullscreen,
   /* Translators: this is a command line option (run vinagre --help) */
     N_("Open vinagre in fullscreen mode"), NULL },
@@ -206,8 +211,19 @@ int main (int argc, char **argv) {
   vinagre_cache_prefs_init ();
   app = vinagre_app_get_default ();
   window = vinagre_app_create_window (app, NULL);
-  gtk_widget_show (GTK_WIDGET(window));
+  gtk_widget_show_all (GTK_WIDGET(window));
 
+  if (geometry)
+    {
+      if (!gtk_window_parse_geometry (GTK_WINDOW(window), geometry))
+        {
+          g_print ("%s\n",
+                   _("Invalid geometry string passed to '--geometry'"));
+          return 1;
+        }
+      gtk_window_unmaximize (GTK_WINDOW(window));
+    }
+
   vinagre_utils_handle_debug ();
 
   for (l = servers; l; l = l->next)
