diff --git a/configure.ac b/configure.ac
index b909dcb..6a04c85 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,7 +30,7 @@ AC_COPYRIGHT([
 
 # Minimal version required
 GLIB_REQUIRED=2.22.0
-GTK_REQUIRED=2.16.0
+GTK_REQUIRED=2.18.0
 GCONF_REQUIRED=1.2.0
 LIBPANELAPPLET_REQUIRED=2.10.0
 TELEPATHY_GLIB_REQUIRED=0.7.35
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index 3931115..50b4a1b 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -574,7 +574,16 @@ chat_property_changed_cb (EmpathyTpChat *tp_chat,
 		if (EMP_STR_EMPTY (priv->subject)) {
 			gtk_widget_hide (priv->hbox_topic);
 		} else {
-			gtk_label_set_text (GTK_LABEL (priv->label_topic), priv->subject);
+			gchar *markup_text;
+			GtkLabel *label = GTK_LABEL (priv->label_topic);
+
+			if (empathy_add_link_markup (priv->subject, &markup_text, TRUE)) {
+				gtk_label_set_markup (label, markup_text);
+				g_free (markup_text);
+			}
+			else {
+				gtk_label_set_text (label, priv->subject);
+			}
 			gtk_widget_show (priv->hbox_topic);
 		}
 		if (priv->block_events_timeout_id == 0) {
diff --git a/libempathy-gtk/empathy-contact-widget.c b/libempathy-gtk/empathy-contact-widget.c
index 17bed72..8a36b9f 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -898,8 +898,19 @@ contact_widget_name_notify_cb (EmpathyContactWidget *information)
 static void
 contact_widget_presence_notify_cb (EmpathyContactWidget *information)
 {
-  gtk_label_set_text (GTK_LABEL (information->label_status),
-      empathy_contact_get_status (information->contact));
+  gchar       *markup_text;
+  const gchar *status = empathy_contact_get_status (information->contact);
+  GtkLabel    *label = GTK_LABEL (information->label_status);
+
+  if (! (information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP) &&
+      empathy_add_link_markup (status, &markup_text, TRUE)) {
+        gtk_label_set_markup (label, markup_text);
+        g_free (markup_text);
+  }
+  else {
+    gtk_label_set_text (label, status);
+  }
+
   gtk_image_set_from_icon_name (GTK_IMAGE (information->image_state),
       empathy_icon_name_for_contact (information->contact),
       GTK_ICON_SIZE_BUTTON);
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index 35c216d..6c43a4b 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -200,56 +200,23 @@ theme_adium_parse_body (EmpathyThemeAdium *theme,
 	GSList                *smileys, *l;
 	GString               *string;
 	gint                   i;
-	GRegex                *uri_regex;
-	GMatchInfo            *match_info;
-	gboolean               match;
-	gchar                 *ret = NULL;
+	gchar                 *ret, *tmp;
 	gint                   prev;
 
 	empathy_conf_get_bool (empathy_conf_get (),
 			       EMPATHY_PREFS_CHAT_SHOW_SMILEYS,
 			       &use_smileys);
 
-	/* Add <a href></a> arround links */
-	uri_regex = empathy_uri_regex_dup_singleton ();
-	match = g_regex_match (uri_regex, text, 0, &match_info);
-	if (match) {
-		gint last = 0;
-		gint s = 0, e = 0;
+	/* escape the text */
+	text = ret = tmp = g_markup_escape_text (text, -1);
 
-		string = g_string_sized_new (strlen (text));
-		do {
-			gchar *real_url;
-
-			g_match_info_fetch_pos (match_info, 0, &s, &e);
-
-			if (s > last) {
-				/* Append the text between last link (or the
-				 * start of the message) and this link */
-				g_string_append_len (string, text + last, s - last);
-			}
-
-			/* Append the link inside <a href=""></a> tag */
-			real_url = empathy_make_absolute_url_len (text + s, e - s);
-
-			g_string_append (string, "<a href=\"");
-			g_string_append (string, real_url);
-			g_string_append (string, "\">");
-			g_string_append_len (string, text + s, e - s);
-			g_string_append (string, "</a>");
-
-			g_free (real_url);
-			last = e;
-		} while (g_match_info_next (match_info, NULL));
-
-		if (e < (gint) strlen (text)) {
-			/* Append the text after the last link */
-			g_string_append_len (string, text + e, strlen (text) - e);
-		}
+	/* add <a href> */
+	if (empathy_add_link_markup (text, &ret, FALSE)) {
+		g_free (tmp);
+		text = ret;
+	}
 
-		g_free (ret);
-		text = ret = g_string_free (string, FALSE);
-	} else if (use_smileys) {
+	if (use_smileys) {
 		/* Replace smileys by a <img/> tag */
 		string = g_string_sized_new (strlen (text));
 		smileys = empathy_smiley_manager_parse (priv->smiley_manager, text);
@@ -262,11 +229,7 @@ theme_adium_parse_body (EmpathyThemeAdium *theme,
 							"<abbr title='%s'><img src=\"%s\"/ alt=\"%s\"/></abbr>",
 							smiley->str, smiley->path, smiley->str);
 			} else {
-				gchar *str;
-
-				str = g_markup_escape_text (smiley->str, -1);
-				g_string_append (string, str);
-				g_free (str);
+				g_string_append (string, smiley->str);
 			}
 			empathy_smiley_free (smiley);
 		}
@@ -276,9 +239,6 @@ theme_adium_parse_body (EmpathyThemeAdium *theme,
 		text = ret = g_string_free (string, FALSE);
 	}
 
-	g_match_info_free (match_info);
-	g_regex_unref (uri_regex);
-
 	/* Replace \n by <br/> */
 	string = NULL;
 	prev = 0;
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c
index 4bbc3b8..b49a02a 100644
--- a/libempathy-gtk/empathy-ui-utils.c
+++ b/libempathy-gtk/empathy-ui-utils.c
@@ -1559,3 +1559,80 @@ empathy_receive_file_with_file_chooser (EmpathyFTHandler *handler)
 
 	gtk_widget_show (widget);
 }
+
+/**
+ * empathy_add_link_markup:
+ * @text: the text you want to analyze.
+ * @result: the pointer where result of the operation should be stored. (must not be %NULL)
+ * @escape: %TRUE if you want to escape @text before the operation.
+ *
+ * Analyzes @text to search any link regex, and swaps each one with an HTML "a href" markup,
+ * storing the result of the operation in @result (it will be %NULL if no link is found).
+ * The text is previously escaped using g_markup_escape_text is @escape = %TRUE.
+ *
+ * Returns: %FALSE if @text does not contain any link, or if @result is NULL. %TRUE otherwise.
+ **/
+gboolean
+empathy_add_link_markup (const gchar *text, gchar **result, gboolean escape)
+{
+	GRegex     *uri_regex;
+	GMatchInfo *match_info;
+	gboolean    match;
+	GString    *string;
+	gchar      *escaped = NULL;
+
+	g_return_val_if_fail (result != NULL, FALSE);
+
+	/* escape the text */
+	if (escape) {
+		text = escaped = g_markup_escape_text (text, -1);
+	}
+
+	/* Add <a href></a> arround links */
+	uri_regex = empathy_uri_regex_dup_singleton ();
+	match = g_regex_match (uri_regex, text, 0, &match_info);
+	if (match) {
+		gint last = 0;
+		gint s = 0, e = 0;
+
+		string = g_string_sized_new (strlen (text));
+		do {
+			gchar *real_url;
+
+			g_match_info_fetch_pos (match_info, 0, &s, &e);
+
+			if (s > last) {
+				/* Append the text between last link (or the
+				 * start of the message) and this link */
+				g_string_append_len (string, text + last, s - last);
+			}
+
+			/* Append the link inside <a href=""></a> tag */
+			real_url = empathy_make_absolute_url_len (text + s, e - s);
+
+			g_string_append (string, "<a href=\"");
+			g_string_append (string, real_url);
+			g_string_append (string, "\">");
+			g_string_append_len (string, text + s, e - s);
+			g_string_append (string, "</a>");
+
+			g_free (real_url);
+			last = e;
+		} while (g_match_info_next (match_info, NULL));
+
+		if (e < (gint) strlen (text)) {
+			/* Append the text after the last link */
+			g_string_append_len (string, text + e, strlen (text) - e);
+		}
+
+		g_free (escaped);
+		*result = g_string_free (string, FALSE);
+	} else {
+		*result = NULL;
+	}
+
+	g_match_info_free (match_info);
+	g_regex_unref (uri_regex);
+
+	return match;
+}
diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h
index 39baeaf..5ed5798 100644
--- a/libempathy-gtk/empathy-ui-utils.h
+++ b/libempathy-gtk/empathy-ui-utils.h
@@ -113,6 +113,11 @@ gchar *     empathy_make_absolute_url                   (const gchar *url);
 gchar *     empathy_make_absolute_url_len               (const gchar *url,
 							 guint len);
 
+/* URL */
+gboolean    empathy_add_link_markup                     (const gchar *text,
+							 gchar **result,
+							 gboolean escape);
+
 G_END_DECLS
 
 #endif /*  __EMPATHY_UI_UTILS_H__ */
