diff --git a/libempathy-gtk/empathy-chat-text-view.c b/libempathy-gtk/empathy-chat-text-view.c
index 95e67b7..48b8e22 100644
--- a/libempathy-gtk/empathy-chat-text-view.c
+++ b/libempathy-gtk/empathy-chat-text-view.c
@@ -339,7 +339,7 @@ chat_text_view_is_scrolled_down (EmpathyChatTextView *view)
 		
 		vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (sw));
 		
-		if (vadj->value + vadj->page_size / 2 < vadj->upper - vadj->page_size) {
+		if (gtk_adjustment_get_value (vadj) < gtk_adjustment_get_upper (vadj) - gtk_adjustment_get_page_size (vadj)) {
 			return FALSE;
 		}
 	}
diff --git a/libempathy-gtk/empathy-theme-adium.c b/libempathy-gtk/empathy-theme-adium.c
index 321d199..c836047 100644
--- a/libempathy-gtk/empathy-theme-adium.c
+++ b/libempathy-gtk/empathy-theme-adium.c
@@ -39,6 +39,9 @@
 
 #define GET_PRIV(obj) EMPATHY_GET_PRIV (obj, EmpathyThemeAdium)
 
+static void
+theme_adium_scroll_down (EmpathyChatView*);
+
 typedef struct {
 	EmpathySmileyManager *smiley_manager;
 	EmpathyContact       *last_contact;
@@ -441,6 +444,25 @@ theme_adium_append_html (EmpathyThemeAdium *theme,
 	g_free (script);
 }
 
+static gboolean
+theme_adium_is_scrolled_down (EmpathyChatView *view)
+{
+	GtkWidget *sw;
+	
+	sw = gtk_widget_get_parent (GTK_WIDGET (view));
+	if (GTK_IS_SCROLLED_WINDOW (sw)) {
+		GtkAdjustment *vadj;
+		
+		vadj = gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (sw));
+		
+		if (gtk_adjustment_get_value (vadj) < gtk_adjustment_get_upper (vadj) - gtk_adjustment_get_page_size (vadj)) {
+			return FALSE;
+		}
+	}
+	
+	return TRUE;
+}
+
 static void
 theme_adium_append_message (EmpathyChatView *view,
 			    EmpathyMessage  *msg)
@@ -457,12 +479,16 @@ theme_adium_append_message (EmpathyChatView *view,
 	gchar                 *html = NULL;
 	gsize                  len = 0;
 	const gchar           *func;
+	gboolean               bottom;
 
 	if (!priv->page_loaded) {
 		priv->message_queue = g_list_prepend (priv->message_queue,
 						      g_object_ref (msg));
 		return;
 	}
+	
+	/* Get the current position of the GtkAdkustment value to remember the scroll position */
+	bottom = theme_adium_is_scrolled_down (view);
 
 	/* Get information */
 	sender = empathy_message_get_sender (msg);
@@ -531,6 +557,10 @@ theme_adium_append_message (EmpathyChatView *view,
 		g_object_unref (priv->last_contact);
 	}
 	priv->last_contact = g_object_ref (sender);
+	
+	if (bottom) {
+		theme_adium_scroll_down (view);
+	}
 
 	g_free (dup_body);
 }
