diff -ur vinagre-2.26.1/data/vinagre.glade vinagre-2.26.1/data/vinagre.glade
--- vinagre-2.26.1/data/vinagre.glade	2009-03-20 15:02:20.000000000 +0200
+++ vinagre-2.26.1/data/vinagre.glade	2009-07-24 11:17:32.000000000 +0200
@@ -162,8 +162,8 @@
               </packing>
             </child>
             <child>
-              <widget class="GtkCheckButton" id="scaling_check">
-                <property name="label" translatable="yes">_Scaling</property>
+              <widget class="GtkCheckButton" id="lossyencoding_check">
+                <property name="label" translatable="yes">_Lossy encoding</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
@@ -178,6 +178,22 @@
               </packing>
             </child>
             <child>
+              <widget class="GtkCheckButton" id="scaling_check">
+                <property name="label" translatable="yes">_Scaling</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+              </packing>
+            </child>
+            <child>
               <placeholder/>
             </child>
             <child>
@@ -656,8 +672,8 @@
               </packing>
             </child>
             <child>
-              <widget class="GtkCheckButton" id="edit_scaling_check">
-                <property name="label" translatable="yes">_Scaling</property>
+              <widget class="GtkCheckButton" id="edit_lossyencoding_check">
+                <property name="label" translatable="yes">_Lossy encoding</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
                 <property name="receives_default">False</property>
@@ -672,6 +688,22 @@
               </packing>
             </child>
             <child>
+              <widget class="GtkCheckButton" id="edit_scaling_check">
+                <property name="label" translatable="yes">_Scaling</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">False</property>
+                <property name="use_underline">True</property>
+                <property name="draw_indicator">True</property>
+              </widget>
+              <packing>
+                <property name="left_attach">1</property>
+                <property name="right_attach">2</property>
+                <property name="top_attach">3</property>
+                <property name="bottom_attach">4</property>
+              </packing>
+            </child>
+            <child>
               <placeholder/>
             </child>
             <child>
diff -ur vinagre-2.26.1/data/vinagre-ui.xml vinagre-2.26.1/data/vinagre-ui.xml
--- vinagre-2.26.1/data/vinagre-ui.xml	2008-12-11 18:58:34.000000000 +0200
+++ vinagre-2.26.1/data/vinagre-ui.xml	2009-07-24 10:44:08.000000000 +0200
@@ -49,6 +49,7 @@
       <menuitem name="ViewOriginalSizeMenu" action="ViewOriginalSize"/>
       <menuitem name="ViewScalingMenu" action="ViewScaling"/>
       <menuitem name="ViewReadOnlyMenu" action="ViewReadOnly"/>
+      <menuitem name="ViewLossyEncodingMenu" action="ViewLossyEncoding"/>
     </menu>
 
     <menu name="BookmarksMenu" action="Bookmarks">
diff -ur vinagre-2.26.1/src/vinagre-bookmarks.c vinagre-2.26.1/src/vinagre-bookmarks.c
--- vinagre-2.26.1/src/vinagre-bookmarks.c	2009-03-20 17:15:23.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-bookmarks.c	2009-07-24 11:07:14.000000000 +0200
@@ -218,6 +218,7 @@
 	    xmlTextWriterWriteElement (writer, "host", vinagre_connection_get_host (conn));
 	    xmlTextWriterWriteFormatElement (writer, "port", "%d", vinagre_connection_get_port (conn));
 	    xmlTextWriterWriteFormatElement (writer, "view_only", "%d", vinagre_connection_get_view_only (conn));
+	    xmlTextWriterWriteFormatElement (writer, "lossy_encoding", "%d", vinagre_connection_get_lossy_encoding (conn));
 	    xmlTextWriterWriteFormatElement (writer, "scaling", "%d", vinagre_connection_get_scaling (conn));
 	    xmlTextWriterWriteFormatElement (writer, "fullscreen", "%d", vinagre_connection_get_fullscreen (conn));
 
@@ -261,6 +262,8 @@
 	vinagre_connection_set_port (conn, atoi (s_value));
       else if (!xmlStrcmp(curr->name, (const xmlChar *)"view_only"))
 	vinagre_connection_set_view_only (conn, vinagre_bookmarks_parse_boolean (s_value));
+      else if (!xmlStrcmp(curr->name, (const xmlChar *)"lossy_encoding"))
+	vinagre_connection_set_lossy_encoding (conn, vinagre_bookmarks_parse_boolean (s_value));
       else if (!xmlStrcmp(curr->name, (const xmlChar *)"scaling"))
 	vinagre_connection_set_scaling (conn, vinagre_bookmarks_parse_boolean (s_value));
       else if (!xmlStrcmp(curr->name, (const xmlChar *)"fullscreen"))
diff -ur vinagre-2.26.1/src/vinagre-bookmarks-migration.c vinagre-2.26.1/src/vinagre-bookmarks-migration.c
--- vinagre-2.26.1/src/vinagre-bookmarks-migration.c	2008-12-11 17:22:42.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-bookmarks-migration.c	2009-07-24 11:01:51.000000000 +0200
@@ -62,6 +62,7 @@
 	    xmlTextWriterWriteElement (writer, "host", vinagre_connection_get_host (conn));
 	    xmlTextWriterWriteFormatElement (writer, "port", "%d", vinagre_connection_get_port (conn));
 	    xmlTextWriterWriteFormatElement (writer, "view_only", "%d", vinagre_connection_get_view_only (conn));
+	    xmlTextWriterWriteFormatElement (writer, "lossy_encoding", "%d", vinagre_connection_get_lossy_encoding (conn));
 	    xmlTextWriterWriteFormatElement (writer, "scaling", "%d", vinagre_connection_get_scaling (conn));
 	    xmlTextWriterWriteFormatElement (writer, "fullscreen", "%d", vinagre_connection_get_fullscreen (conn));
 
@@ -180,6 +181,9 @@
       b_value = g_key_file_get_boolean (kf, conns[i], "view_only", NULL);
       vinagre_connection_set_view_only (conn, b_value);
 
+      b_value = g_key_file_get_boolean (kf, conns[i], "lossy_encoding", NULL);
+      vinagre_connection_set_lossy_encoding (conn, b_value);
+
       b_value = g_key_file_get_boolean (kf, conns[i], "fullscreen", NULL);
       vinagre_connection_set_fullscreen (conn, b_value);
 
diff -ur vinagre-2.26.1/src/vinagre-bookmarks-ui.c vinagre-2.26.1/src/vinagre-bookmarks-ui.c
--- vinagre-2.26.1/src/vinagre-bookmarks-ui.c	2009-03-20 17:31:44.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-bookmarks-ui.c	2009-07-24 10:48:23.000000000 +0200
@@ -123,7 +123,7 @@
   gint               port;
   GladeXML          *xml;
   GtkWidget         *dialog, *host_entry, *name_entry;
-  GtkWidget         *fs_check, *sc_check, *vo_check;
+  GtkWidget         *fs_check, *sc_check, *vo_check, *lossy_check;
   GtkWidget         *box, *tree, *save_button;
   VinagreConnection *conn;
   const gchar       *name;
@@ -137,6 +137,7 @@
   fs_check   = glade_xml_get_widget (xml, "edit_fullscreen_check");
   sc_check   = glade_xml_get_widget (xml, "edit_scaling_check");
   vo_check   = glade_xml_get_widget (xml, "edit_viewonly_check");
+  lossy_check   = glade_xml_get_widget (xml, "edit_lossyencoding_check");
   box        = glade_xml_get_widget (xml, "folder_box");
   save_button= glade_xml_get_widget (xml, "save_button");
 
@@ -158,6 +159,8 @@
 				vinagre_connection_get_scaling (conn));
   gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (vo_check),
 				vinagre_connection_get_view_only (conn));
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (lossy_check),
+				vinagre_connection_get_lossy_encoding (conn));
 
   g_signal_connect (name_entry, "changed", G_CALLBACK (control_save_button_visibility), save_button);
 
@@ -216,6 +219,8 @@
   vinagre_connection_set_port (conn, port);
   vinagre_connection_set_view_only  (conn,
 				     gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (vo_check)));
+  vinagre_connection_set_lossy_encoding  (conn,
+				     gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (lossy_check)));
   vinagre_connection_set_scaling    (conn,
 				     gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (sc_check)));
   vinagre_connection_set_fullscreen (conn,
diff -ur vinagre-2.26.1/src/vinagre-commands.c vinagre-2.26.1/src/vinagre-commands.c
--- vinagre-2.26.1/src/vinagre-commands.c	2008-12-11 18:56:43.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-commands.c	2009-07-24 10:43:46.000000000 +0200
@@ -300,6 +300,21 @@
   vinagre_tab_set_readonly (tab, active);
 }
 
+void
+vinagre_cmd_view_lossy_encoding (GtkAction     *action,
+			   VinagreWindow *window)
+{
+  gboolean active;
+  VinagreTab *tab;
+
+  tab = vinagre_window_get_active_tab (window);
+  if (!tab)
+    return;
+
+  active = gtk_toggle_action_get_active (GTK_TOGGLE_ACTION (action));
+  vinagre_tab_set_lossy_encoding (tab, active);
+}
+
 /* Bookmarks Menu */
 void
 vinagre_cmd_open_bookmark (VinagreWindow     *window,
diff -ur vinagre-2.26.1/src/vinagre-commands.h vinagre-2.26.1/src/vinagre-commands.h
--- vinagre-2.26.1/src/vinagre-commands.h	2008-12-11 18:43:56.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-commands.h	2009-07-24 10:43:46.000000000 +0200
@@ -63,6 +63,8 @@
 						 VinagreWindow *window);
 void		vinagre_cmd_view_readonly	(GtkAction     *action,
 						 VinagreWindow *window);
+void		vinagre_cmd_view_lossy_encoding	(GtkAction     *action,
+						 VinagreWindow *window);
 
 void		vinagre_cmd_open_bookmark	(VinagreWindow     *window,
 						 VinagreConnection *conn);
diff -ur vinagre-2.26.1/src/vinagre-connect.c vinagre-2.26.1/src/vinagre-connect.c
--- vinagre-2.26.1/src/vinagre-connect.c	2009-02-20 20:14:30.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-connect.c	2009-07-24 10:47:50.000000000 +0200
@@ -45,6 +45,7 @@
   GtkWidget *fullscreen_check;
   GtkWidget *scaling_check;
   GtkWidget *viewonly_check;
+  GtkWidget *lossyencoding_check;
 } VinagreConnectDialog;
 
 enum {
@@ -234,6 +235,7 @@
   dialog.find_button = glade_xml_get_widget (dialog.xml, "find_button");
   dialog.fullscreen_check = glade_xml_get_widget (dialog.xml, "fullscreen_check");
   dialog.viewonly_check = glade_xml_get_widget (dialog.xml, "viewonly_check");
+  dialog.lossyencoding_check = glade_xml_get_widget (dialog.xml, "lossyencoding_check");
   dialog.scaling_check = glade_xml_get_widget (dialog.xml, "scaling_check");
 
   setup_combo (dialog.host_entry);
@@ -269,6 +271,7 @@
 	  g_object_set (conn,
 			"scaling", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog.scaling_check)),
 			"view-only", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog.viewonly_check)),
+			"lossy-encoding", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog.lossyencoding_check)),
 			"fullscreen", gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON (dialog.fullscreen_check)),
 			NULL);
 	}
diff -ur vinagre-2.26.1/src/vinagre-connection.c vinagre-2.26.1/src/vinagre-connection.c
--- vinagre-2.26.1/src/vinagre-connection.c	2009-02-19 22:11:18.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-connection.c	2009-07-24 11:11:28.000000000 +0200
@@ -38,6 +38,7 @@
   gchar *desktop_name;
   gint   shared;
   gboolean view_only;
+  gboolean lossy_encoding;
   gboolean scaling;
   gboolean fullscreen;
 };
@@ -361,6 +362,17 @@
                                                         G_PARAM_STATIC_NAME |
                                                         G_PARAM_STATIC_BLURB));
   g_object_class_install_property (object_class,
+                                   PROP_VIEW_ONLY,
+                                   g_param_spec_boolean ("lossy-encoding",
+                                                        "Lossy encoded connection",
+	                                                "Whether this connection is a lossy encoded one",
+                                                        FALSE,
+	                                                G_PARAM_READWRITE |
+                                                        G_PARAM_CONSTRUCT |
+                                                        G_PARAM_STATIC_NICK |
+                                                        G_PARAM_STATIC_NAME |
+                                                        G_PARAM_STATIC_BLURB));
+  g_object_class_install_property (object_class,
                                    PROP_SCALING,
                                    g_param_spec_boolean ("scaling",
                                                         "Use scaling",
@@ -375,7 +387,7 @@
                                    PROP_FULLSCREEN,
                                    g_param_spec_boolean ("fullscreen",
                                                         "Full screen connection",
-	                                                "Whether this connection is a view-only one",
+	                                                "Whether this connection is a full-screen one",
                                                         FALSE,
 	                                                G_PARAM_READWRITE |
                                                         G_PARAM_CONSTRUCT |
@@ -821,6 +833,22 @@
 }
 
 void
+vinagre_connection_set_lossy_encoding (VinagreConnection *conn,
+				  gboolean value)
+{
+  g_return_if_fail (VINAGRE_IS_CONNECTION (conn));
+
+  conn->priv->lossy_encoding = value;
+}
+gboolean
+vinagre_connection_get_lossy_encoding (VinagreConnection *conn)
+{
+  g_return_val_if_fail (VINAGRE_IS_CONNECTION (conn), FALSE);
+
+  return conn->priv->lossy_encoding;
+}
+
+void
 vinagre_connection_set_scaling (VinagreConnection *conn,
 				gboolean value)
 {
diff -ur vinagre-2.26.1/src/vinagre-connection.h vinagre-2.26.1/src/vinagre-connection.h
--- vinagre-2.26.1/src/vinagre-connection.h	2008-11-16 12:44:59.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-connection.h	2009-07-24 10:57:02.000000000 +0200
@@ -100,6 +100,10 @@
 void		    vinagre_connection_set_view_only	(VinagreConnection *conn,
 							 gboolean value);
 
+gboolean	    vinagre_connection_get_lossy_encoding	(VinagreConnection *conn);
+void		    vinagre_connection_set_lossy_encoding	(VinagreConnection *conn,
+							 gboolean value);
+
 gboolean	    vinagre_connection_get_scaling	(VinagreConnection *conn);
 void		    vinagre_connection_set_scaling	(VinagreConnection *conn,
 							 gboolean value);
diff -ur vinagre-2.26.1/src/vinagre-tab.c vinagre-2.26.1/src/vinagre-tab.c
--- vinagre-2.26.1/src/vinagre-tab.c	2009-02-20 19:56:05.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-tab.c	2009-07-24 10:43:46.000000000 +0200
@@ -50,6 +50,7 @@
   GtkWidget         *layout;
   GtkWidget         *toolbar;
   GtkWidget         *ro_button;
+  GtkWidget         *lossy_button;
   GtkWidget         *scaling_button;
   gboolean           pointer_grab;
 };
@@ -850,6 +851,19 @@
 }
 
 static void
+lossy_button_clicked (GtkToggleToolButton *button,
+		      VinagreTab          *tab)
+{
+  GtkAction *action;
+
+  vinagre_tab_set_lossy_encoding (tab, gtk_toggle_tool_button_get_active (button));
+
+  action = gtk_action_group_get_action (vinagre_window_get_connected_action (tab->priv->window), "ViewLossyEncoding");
+  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+				vinagre_tab_get_lossy_encoding (tab));
+}
+
+static void
 scaling_button_clicked (GtkToggleToolButton *button,
 			VinagreTab          *tab)
 {
@@ -921,6 +935,16 @@
   g_signal_connect (button, "toggled", G_CALLBACK (ro_button_clicked), tab);
   tab->priv->ro_button = button;
 
+  /* Lossy encoding */
+  button = GTK_WIDGET (gtk_toggle_tool_button_new ());
+  gtk_tool_button_set_label (GTK_TOOL_BUTTON (button), _("Lossy encoding"));
+  gtk_tool_item_set_tooltip_text (GTK_TOOL_ITEM (button), _("Lossy encoding"));
+  gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (button), "emblem-web");
+  gtk_widget_show (GTK_WIDGET (button));
+  gtk_toolbar_insert (GTK_TOOLBAR (tab->priv->toolbar), GTK_TOOL_ITEM (button), 0);
+  g_signal_connect (button, "toggled", G_CALLBACK (lossy_button_clicked), tab);
+  tab->priv->lossy_button = button;
+
   /* Screenshot */
   button = GTK_WIDGET (gtk_tool_button_new (NULL, NULL));
   gtk_tool_button_set_icon_name (GTK_TOOL_BUTTON (button), "applets-screenshooter");
@@ -1244,6 +1268,23 @@
   return vnc_display_get_read_only (VNC_DISPLAY (tab->priv->vnc));
 }
 
+void
+vinagre_tab_set_lossy_encoding (VinagreTab *tab, gboolean active) {
+  g_return_if_fail (VINAGRE_IS_TAB (tab));
+
+  vnc_display_set_lossy_encoding (VNC_DISPLAY (tab->priv->vnc), active);
+  gtk_toggle_tool_button_set_active (GTK_TOGGLE_TOOL_BUTTON (tab->priv->lossy_button),
+				     active);
+
+}
+
+gboolean
+vinagre_tab_get_lossy_encoding (VinagreTab *tab) {
+  g_return_val_if_fail (VINAGRE_IS_TAB (tab), FALSE);
+
+  return vnc_display_get_lossy_encoding (VNC_DISPLAY (tab->priv->vnc));
+}
+
 VinagreTabState
 vinagre_tab_get_state (VinagreTab *tab)
 {
diff -ur vinagre-2.26.1/src/vinagre-tab.h vinagre-2.26.1/src/vinagre-tab.h
--- vinagre-2.26.1/src/vinagre-tab.h	2008-10-17 22:47:03.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-tab.h	2009-07-24 10:43:46.000000000 +0200
@@ -93,6 +93,8 @@
 gboolean	  vinagre_tab_get_scaling	(VinagreTab *tab);
 void	          vinagre_tab_set_readonly	(VinagreTab *tab, gboolean active);
 gboolean	  vinagre_tab_get_readonly	(VinagreTab *tab);
+void	          vinagre_tab_set_lossy_encoding	(VinagreTab *tab, gboolean active);
+gboolean	  vinagre_tab_get_lossy_encoding	(VinagreTab *tab);
 
 gint		  vinagre_tab_get_original_width  (VinagreTab *tab);
 gint		  vinagre_tab_get_original_height (VinagreTab *tab);
diff -ur vinagre-2.26.1/src/vinagre-ui.h vinagre-2.26.1/src/vinagre-ui.h
--- vinagre-2.26.1/src/vinagre-ui.h	2008-12-11 18:40:11.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-ui.h	2009-07-24 10:43:46.000000000 +0200
@@ -104,7 +104,10 @@
     G_CALLBACK (vinagre_cmd_view_scaling), FALSE },
   { "ViewReadOnly", NULL, N_("_Read only"), NULL,
     N_("Disable mouse and keyboard"),
-    G_CALLBACK (vinagre_cmd_view_readonly), FALSE }
+    G_CALLBACK (vinagre_cmd_view_readonly), FALSE },
+  { "ViewLossyEncoding", NULL, N_("_Lossy encoding"), NULL,
+    N_("Use lower-bandwidth lossy encoding"),
+    G_CALLBACK (vinagre_cmd_view_lossy_encoding), FALSE }
 };
 
 static const GtkToggleActionEntry vinagre_always_sensitive_toggle_menu_entries[] =
diff -ur vinagre-2.26.1/src/vinagre-window.c vinagre-2.26.1/src/vinagre-window.c
--- vinagre-2.26.1/src/vinagre-window.c	2009-03-06 19:23:04.000000000 +0200
+++ vinagre-2.26.1/src/vinagre-window.c	2009-07-24 10:43:46.000000000 +0200
@@ -835,6 +835,10 @@
   gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
 				vinagre_tab_get_readonly (VINAGRE_TAB (window->priv->active_tab)));
 
+  action = gtk_action_group_get_action (window->priv->machine_connected_action_group, "ViewLossyEncoding");
+  gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action),
+				vinagre_tab_get_lossy_encoding (VINAGRE_TAB (window->priv->active_tab)));
+
 }
 
 static void
