diff --git a/libempathy-gtk/Makefile.am b/libempathy-gtk/Makefile.am
index c9736ac..6ec319e 100644
--- a/libempathy-gtk/Makefile.am
+++ b/libempathy-gtk/Makefile.am
@@ -65,6 +65,7 @@ libempathy_gtk_handwritten_source =            	\
 	empathy-sound.c				\
 	empathy-spell.c				\
 	empathy-status-preset-dialog.c		\
+	empathy-string-parser.c			\
 	empathy-theme-boxes.c			\
 	empathy-theme-irc.c			\
 	empathy-theme-manager.c			\
@@ -111,6 +112,7 @@ libempathy_gtk_headers =			\
 	empathy-sound.h				\
 	empathy-spell.h				\
 	empathy-status-preset-dialog.h		\
+	empathy-string-parser.h			\
 	empathy-theme-boxes.h			\
 	empathy-theme-irc.h			\
 	empathy-theme-manager.h			\
diff --git a/libempathy-gtk/empathy-chat-text-view.c b/libempathy-gtk/empathy-chat-text-view.c
index 07f8f6c..7f16ab9 100644
--- a/libempathy-gtk/empathy-chat-text-view.c
+++ b/libempathy-gtk/empathy-chat-text-view.c
@@ -42,6 +42,7 @@
 #include "empathy-conf.h"
 #include "empathy-ui-utils.h"
 #include "empathy-smiley-manager.h"
+#include "empathy-string-parser.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CHAT
 #include <libempathy/empathy-debug.h>
diff --git a/libempathy-gtk/empathy-chat.c b/libempathy-gtk/empathy-chat.c
index bec1d77..4db9e45 100644
--- a/libempathy-gtk/empathy-chat.c
+++ b/libempathy-gtk/empathy-chat.c
@@ -56,6 +56,7 @@
 #include "empathy-theme-manager.h"
 #include "empathy-smiley-manager.h"
 #include "empathy-ui-utils.h"
+#include "empathy-string-parser.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CHAT
 #include <libempathy/empathy-debug.h>
@@ -1212,7 +1213,12 @@ 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;
+
+			markup_text = empathy_add_link_markup (priv->subject);
+			gtk_label_set_markup (GTK_LABEL (priv->label_topic), markup_text);
+			g_free (markup_text);
+
 			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 9cb493f..500a387 100644
--- a/libempathy-gtk/empathy-contact-widget.c
+++ b/libempathy-gtk/empathy-contact-widget.c
@@ -47,6 +47,7 @@
 #include "empathy-avatar-chooser.h"
 #include "empathy-avatar-image.h"
 #include "empathy-ui-utils.h"
+#include "empathy-string-parser.h"
 #include "empathy-kludge-label.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CONTACT
@@ -948,8 +949,21 @@ 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));
+  const gchar *status;
+
+  status = empathy_contact_get_status (information->contact);
+  if (!(information->flags & EMPATHY_CONTACT_WIDGET_FOR_TOOLTIP))
+    {
+      gchar *markup_text;
+
+      markup_text = empathy_add_link_markup (status);
+      gtk_label_set_markup (GTK_LABEL (information->label_status), markup_text);
+      g_free (markup_text);
+  }
+  else {
+    gtk_label_set_text (GTK_LABEL (information->label_status), 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-string-parser.c b/libempathy-gtk/empathy-string-parser.c
new file mode 100644
index 0000000..1f9f5f2
--- /dev/null
+++ b/libempathy-gtk/empathy-string-parser.c
@@ -0,0 +1,209 @@
+/*
+ * Copyright (C) 2010 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#include <config.h>
+
+#include <string.h>
+
+#include "empathy-string-parser.h"
+#include "empathy-smiley-manager.h"
+#include "empathy-ui-utils.h"
+
+#define SCHEMES           "([a-zA-Z\\+]+)"
+#define INVALID_CHARS     "\\s\"'"
+#define INVALID_CHARS_EXT INVALID_CHARS "\\[\\]<>(){},;:?"
+#define BODY              "([^"INVALID_CHARS"]+)"
+#define BODY_END          "([^"INVALID_CHARS"]*)[^"INVALID_CHARS_EXT".]"
+#define BODY_STRICT       "([^"INVALID_CHARS_EXT"]+)"
+#define URI_REGEX         "("SCHEMES"://"BODY_END")" \
+		          "|((www|ftp)\\."BODY_END")" \
+		          "|((mailto:)?"BODY_STRICT"@"BODY"\\."BODY_END")"
+
+static GRegex *
+uri_regex_dup_singleton (void)
+{
+	static GRegex *uri_regex = NULL;
+
+	/* We intentionally leak the regex so it's not recomputed */
+	if (!uri_regex) {
+		uri_regex = g_regex_new (URI_REGEX, 0, 0, NULL);
+	}
+
+	return g_regex_ref (uri_regex);
+}
+
+void
+empathy_string_parser_substr (const gchar *text,
+			      gssize len,
+			      EmpathyStringParser *parsers,
+			      gpointer user_data)
+{
+	if (parsers != NULL && parsers[0].match_func != NULL) {
+		parsers[0].match_func (text, len,
+				       parsers[0].replace_func, parsers + 1,
+				       user_data);
+	}
+}
+
+void
+empathy_string_match_link (const gchar *text,
+			   gssize len,
+			   EmpathyStringReplace replace_func,
+			   EmpathyStringParser *sub_parsers,
+			   gpointer user_data)
+{
+	GRegex     *uri_regex;
+	GMatchInfo *match_info;
+	gboolean    match;
+	gint        last = 0;
+
+	uri_regex = uri_regex_dup_singleton ();
+	match = g_regex_match_full (uri_regex, text, len, 0, 0, &match_info, NULL);
+	if (match) {
+		gint s = 0, e = 0;
+
+		do {
+			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 */
+				empathy_string_parser_substr (text + last,
+							      s - last,
+							      sub_parsers,
+							      user_data);
+			}
+
+			replace_func (text + s, e - s, NULL, user_data);
+
+			last = e;
+		} while (g_match_info_next (match_info, NULL));
+	}
+
+	empathy_string_parser_substr (text + last, len - last,
+				      sub_parsers, user_data);
+
+	g_match_info_free (match_info);
+	g_regex_unref (uri_regex);
+}
+
+void
+empathy_string_match_smiley (const gchar *text,
+			     gssize len,
+			     EmpathyStringReplace replace_func,
+			     EmpathyStringParser *sub_parsers,
+			     gpointer user_data)
+{
+	guint last = 0;
+	EmpathySmileyManager *smiley_manager;
+	GSList *hits, *l;
+
+	smiley_manager = empathy_smiley_manager_dup_singleton ();
+	hits = empathy_smiley_manager_parse_len (smiley_manager, text, len);
+
+	for (l = hits; l; l = l->next) {
+		EmpathySmileyHit *hit = l->data;
+
+		if (hit->start > last) {
+			/* Append the text between last smiley (or the
+			 * start of the message) and this smiley */
+			empathy_string_parser_substr (text + last,
+						      hit->start - last,
+						      sub_parsers, user_data);
+		}
+
+		replace_func (text + hit->start, hit->end - hit->start,
+			      hit, user_data);
+
+		last = hit->end;
+
+		empathy_smiley_hit_free (hit);
+	}
+	g_slist_free (hits);
+	g_object_unref (smiley_manager);
+
+	empathy_string_parser_substr (text + last, len - last,
+				      sub_parsers, user_data);
+}
+
+void
+empathy_string_match_all (const gchar *text,
+			  gssize len,
+			  EmpathyStringReplace replace_func,
+			  EmpathyStringParser *sub_parsers,
+			  gpointer user_data)
+{
+	replace_func (text, len, NULL, user_data);
+}
+
+void
+empathy_string_replace_link (const gchar *text,
+                             gssize len,
+                             gpointer match_data,
+                             gpointer user_data)
+{
+	GString *string = user_data;
+	gchar *real_url;
+	gchar *escaped;
+
+	real_url = empathy_make_absolute_url_len (text, len);
+
+	/* The thing we are making a link of may contain
+	 * characters which need escaping */
+	escaped = g_markup_escape_text (text, len);
+
+	/* Append the link inside <a href=""></a> tag */
+	g_string_append_printf (string, "<a href=\"%s\">%s</a>",
+				real_url, escaped);
+
+	g_free (real_url);
+	g_free (escaped);
+}
+
+void
+empathy_string_replace_escaped (const gchar *text,
+				gssize len,
+				gpointer match_data,
+				gpointer user_data)
+{
+	GString *string = user_data;
+	gchar *escaped;
+
+	escaped = g_markup_escape_text (text, len);
+	g_string_append (string, escaped);
+	g_free (escaped);
+}
+
+gchar *
+empathy_add_link_markup (const gchar *text)
+{
+	static EmpathyStringParser parsers[] = {
+		{empathy_string_match_link, empathy_string_replace_link},
+		{empathy_string_match_all, empathy_string_replace_escaped},
+		{NULL, NULL}
+	};
+	GString *string;
+
+	string = g_string_sized_new (strlen (text));
+	empathy_string_parser_substr (text, -1, parsers, string);
+
+	return g_string_free (string, FALSE);
+}
+
diff --git a/libempathy-gtk/empathy-string-parser.h b/libempathy-gtk/empathy-string-parser.h
new file mode 100644
index 0000000..aec741a
--- /dev/null
+++ b/libempathy-gtk/empathy-string-parser.h
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2010 Collabora Ltd.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
+ *
+ * Authors: Xavier Claessens <xclaesse@gmail.com>
+ */
+
+#ifndef __EMPATHY_STRING_PARSER_H__
+#define __EMPATHY_STRING_PARSER_H__
+
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EmpathyStringParser EmpathyStringParser;
+
+typedef void (*EmpathyStringReplace) (const gchar *text,
+				      gssize len,
+				      gpointer match_data,
+				      gpointer user_data);
+typedef void (*EmpathyStringMatch) (const gchar *text,
+				    gssize len,
+				    EmpathyStringReplace replace_func,
+				    EmpathyStringParser *sub_parsers,
+				    gpointer user_data);
+
+struct _EmpathyStringParser {
+	EmpathyStringMatch match_func;
+	EmpathyStringReplace replace_func;
+};
+
+void
+empathy_string_parser_substr (const gchar *text,
+			      gssize len,
+			      EmpathyStringParser *parsers,
+			      gpointer user_data);
+
+void
+empathy_string_match_link (const gchar *text,
+			   gssize len,
+			   EmpathyStringReplace replace_func,
+			   EmpathyStringParser *sub_parsers,
+			   gpointer user_data);
+
+void
+empathy_string_match_smiley (const gchar *text,
+			     gssize len,
+			     EmpathyStringReplace replace_func,
+			     EmpathyStringParser *sub_parsers,
+			     gpointer user_data);
+
+void
+empathy_string_match_all (const gchar *text,
+			  gssize len,
+			  EmpathyStringReplace replace_func,
+			  EmpathyStringParser *sub_parsers,
+			  gpointer user_data);
+
+/* Replace functions assume user_data is a GString */
+void
+empathy_string_replace_link (const gchar *text,
+                             gssize len,
+                             gpointer match_data,
+                             gpointer user_data);
+
+void
+empathy_string_replace_escaped (const gchar *text,
+				gssize len,
+				gpointer match_data,
+				gpointer user_data);
+
+gchar *
+empathy_add_link_markup (const gchar *text);
+
+G_END_DECLS
+
+#endif /*  __EMPATHY_STRING_PARSER_H__ */
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index 5c67af8..7736be2 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -40,6 +40,7 @@
 #include "empathy-conf.h"
 #include "empathy-ui-utils.h"
 #include "empathy-plist.h"
+#include "empathy-string-parser.h"
 
 #define DEBUG_FLAG EMPATHY_DEBUG_CHAT
 #include <libempathy/empathy-debug.h>
@@ -221,30 +222,6 @@ theme_adium_match_newline (const gchar *text,
 }
 
 static void
-theme_adium_replace_link (const gchar *text,
-			  gssize len,
-			  gpointer match_data,
-			  gpointer user_data)
-{
-	GString *string = user_data;
-	gchar *real_url;
-	gchar *escaped;
-
-	real_url = empathy_make_absolute_url_len (text, len);
-
-	/* The thing we are making a link of may contain
-	 * characters which need escaping */
-	escaped = g_markup_escape_text (text, len);
-
-	/* Append the link inside <a href=""></a> tag */
-	g_string_append_printf (string, "<a href=\"%s\">%s</a>",
-				real_url, escaped);
-
-	g_free (real_url);
-	g_free (escaped);
-}
-
-static void
 theme_adium_replace_smiley (const gchar *text,
 			    gssize len,
 			    gpointer match_data,
@@ -259,32 +236,18 @@ theme_adium_replace_smiley (const gchar *text,
 				hit->path, (int)len, text, (int)len, text);
 }
 
-static void
-theme_adium_replace_escaped (const gchar *text,
-			     gssize len,
-			     gpointer match_data,
-			     gpointer user_data)
-{
-	GString *string = user_data;
-	gchar *escaped;
-
-	escaped = g_markup_escape_text (text, len);
-	g_string_append (string, escaped);
-	g_free (escaped);
-}
-
 static EmpathyStringParser string_parsers[] = {
-	{empathy_string_match_link, theme_adium_replace_link},
+	{empathy_string_match_link, empathy_string_replace_link},
 	{theme_adium_match_newline, NULL},
-	{empathy_string_match_all, theme_adium_replace_escaped},
+	{empathy_string_match_all, empathy_string_replace_escaped},
 	{NULL, NULL}
 };
 
 static EmpathyStringParser string_parsers_with_smiley[] = {
-	{empathy_string_match_link, theme_adium_replace_link},
+	{empathy_string_match_link, empathy_string_replace_link},
 	{empathy_string_match_smiley, theme_adium_replace_smiley},
 	{theme_adium_match_newline, NULL},
-	{empathy_string_match_all, theme_adium_replace_escaped},
+	{empathy_string_match_all, empathy_string_replace_escaped},
 	{NULL, NULL}
 };
 
diff --git a/libempathy-gtk/empathy-ui-utils.c b/libempathy-gtk/empathy-ui-utils.c
index dcba5fe..8819cb5 100644
--- a/libempathy-gtk/empathy-ui-utils.c
+++ b/libempathy-gtk/empathy-ui-utils.c
@@ -50,16 +50,6 @@
 #include <libempathy/empathy-idle.h>
 #include <libempathy/empathy-ft-factory.h>
 
-#define SCHEMES           "([a-zA-Z\\+]+)"
-#define INVALID_CHARS     "\\s\"'"
-#define INVALID_CHARS_EXT INVALID_CHARS "\\[\\]<>(){},;:?"
-#define BODY              "([^"INVALID_CHARS"]+)"
-#define BODY_END          "([^"INVALID_CHARS"]*)[^"INVALID_CHARS_EXT".]"
-#define BODY_STRICT       "([^"INVALID_CHARS_EXT"]+)"
-#define URI_REGEX         "("SCHEMES"://"BODY_END")" \
-		          "|((www|ftp)\\."BODY_END")" \
-		          "|((mailto:)?"BODY_STRICT"@"BODY"\\."BODY_END")"
-
 void
 empathy_gtk_init (void)
 {
@@ -75,19 +65,6 @@ empathy_gtk_init (void)
 	initialized = TRUE;
 }
 
-GRegex *
-empathy_uri_regex_dup_singleton (void)
-{
-	static GRegex *uri_regex = NULL;
-
-	/* We intentionally leak the regex so it's not recomputed */
-	if (!uri_regex) {
-		uri_regex = g_regex_new (URI_REGEX, 0, 0, NULL);
-	}
-
-	return g_regex_ref (uri_regex);
-}
-
 static GtkBuilder *
 builder_get_file_valist (const gchar *filename,
 			 const gchar *first_object,
@@ -1555,19 +1532,6 @@ empathy_link_button_new (const gchar *url,
 }
 
 void
-empathy_toggle_button_set_state_quietly (GtkWidget *widget,
-					GCallback  callback,
-					gpointer   user_data,
-					gboolean   active)
-{
-	g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));
-
-	g_signal_handlers_block_by_func (widget, callback, user_data);
-	g_object_set (widget, "active", active, NULL);
-	g_signal_handlers_unblock_by_func (widget, callback, user_data);
-}
-
-void
 empathy_send_file (EmpathyContact *contact, GFile *file)
 {
 	EmpathyFTFactory *factory;
@@ -1727,106 +1691,15 @@ empathy_receive_file_with_file_chooser (EmpathyFTHandler *handler)
 }
 
 void
-empathy_string_parser_substr (const gchar *text,
-			      gssize len,
-			      EmpathyStringParser *parsers,
-			      gpointer user_data)
-{
-	if (parsers != NULL && parsers[0].match_func != NULL) {
-		parsers[0].match_func (text, len,
-				       parsers[0].replace_func, parsers + 1,
-				       user_data);
-	}
-}
-
-void
-empathy_string_match_link (const gchar *text,
-			   gssize len,
-			   EmpathyStringReplace replace_func,
-			   EmpathyStringParser *sub_parsers,
-			   gpointer user_data)
-{
-	GRegex     *uri_regex;
-	GMatchInfo *match_info;
-	gboolean    match;
-	gint        last = 0;
-
-	uri_regex = empathy_uri_regex_dup_singleton ();
-	match = g_regex_match_full (uri_regex, text, len, 0, 0, &match_info, NULL);
-	if (match) {
-		gint s = 0, e = 0;
-
-		do {
-			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 */
-				empathy_string_parser_substr (text + last,
-							      s - last,
-							      sub_parsers,
-							      user_data);
-			}
-
-			replace_func (text + s, e - s, NULL, user_data);
-
-			last = e;
-		} while (g_match_info_next (match_info, NULL));
-	}
-
-	empathy_string_parser_substr (text + last, len - last,
-				      sub_parsers, user_data);
-
-	g_match_info_free (match_info);
-	g_regex_unref (uri_regex);
-}
-
-void
-empathy_string_match_smiley (const gchar *text,
-			     gssize len,
-			     EmpathyStringReplace replace_func,
-			     EmpathyStringParser *sub_parsers,
-			     gpointer user_data)
+empathy_toggle_button_set_state_quietly (GtkWidget *widget,
+					GCallback  callback,
+					gpointer   user_data,
+					gboolean   active)
 {
-	guint last = 0;
-	EmpathySmileyManager *smiley_manager;
-	GSList *hits, *l;
-
-	smiley_manager = empathy_smiley_manager_dup_singleton ();
-	hits = empathy_smiley_manager_parse_len (smiley_manager, text, len);
-
-	for (l = hits; l; l = l->next) {
-		EmpathySmileyHit *hit = l->data;
-
-		if (hit->start > last) {
-			/* Append the text between last smiley (or the
-			 * start of the message) and this smiley */
-			empathy_string_parser_substr (text + last,
-						      hit->start - last,
-						      sub_parsers, user_data);
-		}
-
-		replace_func (text + hit->start, hit->end - hit->start,
-			      hit, user_data);
-
-		last = hit->end;
-
-		empathy_smiley_hit_free (hit);
-	}
-	g_slist_free (hits);
-	g_object_unref (smiley_manager);
-
-	empathy_string_parser_substr (text + last, len - last,
-				      sub_parsers, user_data);
-}
+	g_return_if_fail (GTK_IS_TOGGLE_BUTTON (widget));
 
-void
-empathy_string_match_all (const gchar *text,
-			  gssize len,
-			  EmpathyStringReplace replace_func,
-			  EmpathyStringParser *sub_parsers,
-			  gpointer user_data)
-{
-	replace_func (text, len, NULL, user_data);
+	g_signal_handlers_block_by_func (widget, callback, user_data);
+	g_object_set (widget, "active", active, NULL);
+	g_signal_handlers_unblock_by_func (widget, callback, user_data);
 }
 
diff --git a/libempathy-gtk/empathy-ui-utils.h b/libempathy-gtk/empathy-ui-utils.h
index 925ecc5..097976a 100644
--- a/libempathy-gtk/empathy-ui-utils.h
+++ b/libempathy-gtk/empathy-ui-utils.h
@@ -47,7 +47,6 @@ G_BEGIN_DECLS
 					    (y) < gdk_screen_height ())
 
 void            empathy_gtk_init                        (void);
-GRegex *        empathy_uri_regex_dup_singleton         (void);
 
 /* Glade */
 GtkBuilder *    empathy_builder_get_file                (const gchar      *filename,
@@ -110,15 +109,18 @@ void        empathy_window_present                      (GtkWindow        *windo
 void        empathy_window_iconify                      (GtkWindow        *window,
 							 GtkStatusIcon    *status_icon);
 GtkWindow * empathy_get_toplevel_window                 (GtkWidget        *widget);
+
+/* URL */
+gchar *     empathy_make_absolute_url                   (const gchar      *url);
+
+gchar *     empathy_make_absolute_url_len               (const gchar      *url,
+							 guint             len);
 void        empathy_url_show                            (GtkWidget        *parent,
 							 const char       *url);
-void        empathy_toggle_button_set_state_quietly     (GtkWidget        *widget,
-							 GCallback         callback,
-							 gpointer          user_data,
-							 gboolean          active);
 GtkWidget * empathy_link_button_new                     (const gchar      *url,
 							 const gchar      *title);
 
+/* File transfer */
 void        empathy_send_file                           (EmpathyContact   *contact,
 							 GFile            *file);
 void        empathy_send_file_from_uri_list             (EmpathyContact   *contact,
@@ -126,54 +128,11 @@ void        empathy_send_file_from_uri_list             (EmpathyContact   *conta
 void        empathy_send_file_with_file_chooser         (EmpathyContact   *contact);
 void        empathy_receive_file_with_file_chooser      (EmpathyFTHandler *handler);
 
-gchar *     empathy_make_absolute_url                   (const gchar *url);
-gchar *     empathy_make_absolute_url_len               (const gchar *url,
-							 guint len);
-
-/* String parser */
-typedef struct _EmpathyStringParser EmpathyStringParser;
-
-typedef void (*EmpathyStringReplace) (const gchar *text,
-				      gssize len,
-				      gpointer match_data,
-				      gpointer user_data);
-typedef void (*EmpathyStringMatch) (const gchar *text,
-				    gssize len,
-				    EmpathyStringReplace replace_func,
-				    EmpathyStringParser *sub_parsers,
-				    gpointer user_data);
-
-struct _EmpathyStringParser {
-	EmpathyStringMatch match_func;
-	EmpathyStringReplace replace_func;
-};
-
-void
-empathy_string_parser_substr (const gchar *text,
-			      gssize len,
-			      EmpathyStringParser *parsers,
-			      gpointer user_data);
-
-void
-empathy_string_match_link (const gchar *text,
-			   gssize len,
-			   EmpathyStringReplace replace_func,
-			   EmpathyStringParser *sub_parsers,
-			   gpointer user_data);
-
-void
-empathy_string_match_smiley (const gchar *text,
-			     gssize len,
-			     EmpathyStringReplace replace_func,
-			     EmpathyStringParser *sub_parsers,
-			     gpointer user_data);
-
-void
-empathy_string_match_all (const gchar *text,
-			  gssize len,
-			  EmpathyStringReplace replace_func,
-			  EmpathyStringParser *sub_parsers,
-			  gpointer user_data);
+/* Misc */
+void        empathy_toggle_button_set_state_quietly     (GtkWidget        *widget,
+							 GCallback         callback,
+							 gpointer          user_data,
+							 gboolean          active);
 
 G_END_DECLS
 
