Index: mail/em-folder-view.c
===================================================================
--- mail/em-folder-view.c	(revision 37052)
+++ mail/em-folder-view.c	(working copy)
@@ -2734,37 +2734,6 @@ emfv_format_link_clicked(EMFormatHTMLDis
 	}
 }
 
-static gchar *
-url_unescape_amp (const gchar *url)
-{
-	gchar *buff;
-	int i, j, amps;
-
-	if (!url)
-		return NULL;
-
-	amps = 0;
-	for (i = 0; url [i]; i++) {
-		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
-			amps++;
-	}
-
-	buff = g_strdup (url);
-
-	if (!amps)
-		return buff;
-
-	for (i = 0, j = 0; url [i]; i++, j++) {
-		buff [j] = url [i];
-
-		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
-			i += 4;
-	}
-	buff [j] = 0;
-
-	return buff;
-}
-
 static void
 emp_uri_popup_link_copy(EPopup *ep, EPopupItem *pitem, void *data)
 {
@@ -2772,7 +2741,7 @@ emp_uri_popup_link_copy(EPopup *ep, EPop
 	struct _EMFolderViewPrivate *p = emfv->priv;
 
 	g_free(p->selection_uri);
-	p->selection_uri = url_unescape_amp(pitem->user_data);
+	p->selection_uri = em_utils_url_unescape_amp(pitem->user_data);
 
 	gtk_selection_owner_set(p->invisible, GDK_SELECTION_PRIMARY, gtk_get_current_event_time());
 	gtk_selection_owner_set(p->invisible, GDK_SELECTION_CLIPBOARD, gtk_get_current_event_time());
Index: mail/em-utils.c
===================================================================
--- mail/em-utils.c	(revision 37052)
+++ mail/em-utils.c	(working copy)
@@ -2442,3 +2442,34 @@ em_utils_show_info_silent (GtkWidget *wi
 		g_signal_connect(widget, "response", G_CALLBACK(error_response), NULL);
 	e_activity_handler_make_error (handler, "mail", E_LOG_WARNINGS, widget);
 }
+
+gchar *
+em_utils_url_unescape_amp (const gchar *url)
+{
+	gchar *buff;
+	int i, j, amps;
+
+	if (!url)
+		return NULL;
+
+	amps = 0;
+	for (i = 0; url [i]; i++) {
+		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
+			amps++;
+	}
+
+	buff = g_strdup (url);
+
+	if (!amps)
+		return buff;
+
+	for (i = 0, j = 0; url [i]; i++, j++) {
+		buff [j] = url [i];
+
+		if (url [i] == '&' && strncmp (url + i, "&amp;", 5) == 0)
+			i += 4;
+	}
+	buff [j] = 0;
+
+	return buff;
+}
Index: mail/em-utils.h
===================================================================
--- mail/em-utils.h	(revision 37052)
+++ mail/em-utils.h	(working copy)
@@ -117,6 +117,9 @@ const char *em_utils_snoop_type(struct _
 /* clears flag 'get_password_canceled' at every known accounts, so if needed, get_password will show dialog */
 void em_utils_clear_get_password_canceled_accounts_flag (void);
 
+/* Unescapes &amp; back to a real & in URIs */
+gchar *em_utils_url_unescape_amp (const gchar *url);
+
 #ifdef __cplusplus
 }
 #endif /* __cplusplus */
Index: mail/em-popup.c
===================================================================
--- mail/em-popup.c	(revision 37052)
+++ mail/em-popup.c	(working copy)
@@ -585,9 +585,11 @@ static void
 emp_uri_popup_link_open(EPopup *ep, EPopupItem *item, void *data)
 {
 	EMPopupTargetURI *t = (EMPopupTargetURI *)ep->target;
+	gchar *unescaped_uri = em_utils_url_unescape_amp (t->uri);
 
 	/* FIXME Pass a parent window. */
-	e_show_uri (NULL, t->uri);
+	e_show_uri (NULL, unescaped_uri);
+	g_free (unescaped_uri);
 }
 
 static void
