diff --git a/capplets/network/gnome-network-properties.c b/capplets/network/gnome-network-properties.c
index d874146..e1c207b 100644
--- a/capplets/network/gnome-network-properties.c
+++ b/capplets/network/gnome-network-properties.c
@@ -922,6 +922,89 @@ cb_delete_button_clicked (GtkWidget *button,
 	g_object_unref (client);
 }
 
+/* When using the same proxy for all protocols, updates every host_entry
+ * as the user types along */
+static void
+synchronize_hosts (GtkEntry *widget,
+		   gpointer data)
+{
+	const gchar *hosts[] = {
+		"secure_host_entry",
+		"ftp_host_entry",
+		"socks_host_entry",
+		NULL };
+	GtkBuilder *builder;
+	GtkEntry *entry;
+	const gchar **host, *http_host;
+
+	builder = GTK_BUILDER (data);
+	http_host = gtk_entry_get_text (widget);
+
+	for (host = hosts; *host != NULL; ++host)
+	{
+		entry = GTK_ENTRY (gtk_builder_get_object (builder, *host));
+		gtk_entry_set_text (entry, http_host);
+	}
+
+}
+
+/* When using the same proxy for all protocols, copies the value of the
+ * http port to the other spinbuttons */
+static void
+synchronize_ports (GtkEntry *entry,
+		   gpointer data)
+{
+	GtkSpinButton *spinbutton = GTK_SPIN_BUTTON (entry);
+	const gchar *ports[] = {
+		"secure_port_spinbutton",
+		"ftp_port_spinbutton",
+		"socks_port_spinbutton",
+		NULL };
+	gdouble http_port;
+	const gchar **port;
+	GtkBuilder *builder;
+
+	builder = GTK_BUILDER (data);
+	http_port = gtk_spin_button_get_value (spinbutton);
+
+	for (port = ports; *port != NULL; ++port)
+	{
+		spinbutton = GTK_SPIN_BUTTON (
+			gtk_builder_get_object (builder, *port));
+		gtk_spin_button_set_value (spinbutton, http_port);
+	}
+}
+
+/* Synchronizes all hosts and ports */
+static void
+synchronize_entries (GtkBuilder *builder)
+{
+	g_signal_connect (
+		gtk_builder_get_object (builder, "http_host_entry"),
+		"changed",
+		G_CALLBACK (synchronize_hosts),
+		builder);
+	g_signal_connect (
+		gtk_builder_get_object (builder, "http_port_spinbutton"),
+		"changed",
+		G_CALLBACK (synchronize_ports),
+		builder);
+}
+
+/* Unsynchronize hosts and ports */
+static void
+unsynchronize_entries (GtkBuilder *builder)
+{
+	g_signal_handlers_disconnect_by_func (
+		gtk_builder_get_object (builder, "http_host_entry"),
+		synchronize_hosts,
+		builder);
+	g_signal_handlers_disconnect_by_func (
+		gtk_builder_get_object (builder, "http_port_spinbutton"),
+		synchronize_ports,
+		builder);
+}
+
 static void
 cb_use_same_proxy_checkbutton_clicked (GtkWidget *checkbutton,
 				       GtkBuilder *builder)
@@ -968,6 +1051,9 @@ cb_use_same_proxy_checkbutton_clicked (GtkWidget *checkbutton,
 
 		gconf_client_set_string (client, SOCKS_PROXY_HOST_KEY, http_proxy, NULL);
 		gconf_client_set_int (client, SOCKS_PROXY_PORT_KEY, http_port, NULL);
+
+		/* Synchronize entries */
+		synchronize_entries (builder);
 	}
 	else
 	{
@@ -988,6 +1074,9 @@ cb_use_same_proxy_checkbutton_clicked (GtkWidget *checkbutton,
 		gconf_client_set_int (client, SOCKS_PROXY_PORT_KEY,
 			gconf_client_get_int (client, OLD_SOCKS_PROXY_PORT_KEY, NULL), NULL);
 		g_free (host);
+
+		/* Hosts and ports should not be synchronized any more */
+		unsynchronize_entries (builder);
 	}
 
 	/* Set the proxy entries insensitive if we are using the same proxy for all */
@@ -1222,7 +1311,8 @@ setup_dialog (GtkBuilder *builder)
 			_gtk_builder_get_widget (builder, "socks_port_spinbutton"),
 			NULL));
 
-	/* Set the proxy entries insensitive if we are using the same proxy for all */
+	/* Set the proxy entries insensitive if we are using the same proxy for all,
+	   and make sure they are all synchronized */
 	if (gconf_client_get_bool (client, USE_SAME_PROXY_KEY, NULL))
 	{
 		gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "secure_host_entry"), FALSE);
@@ -1231,6 +1321,8 @@ setup_dialog (GtkBuilder *builder)
 		gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "ftp_port_spinbutton"), FALSE);
 		gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "socks_host_entry"), FALSE);
 		gtk_widget_set_sensitive (_gtk_builder_get_widget (builder, "socks_port_spinbutton"), FALSE);
+
+		synchronize_entries (builder);
 	}
 
 	/* Autoconfiguration */
