diff --git a/plugins/gtkgui/config.py b/plugins/gtkgui/config.py
index 74f6f433c5fd08cbcdc93d4a67df84e5870f5dc0..24f50042e67ad9d93908802c81c267c25cf8de05 100644
--- a/plugins/gtkgui/config.py
+++ b/plugins/gtkgui/config.py
@@ -1147,6 +1147,10 @@ class Account_modification_window:
 					self.plugin.roster.groups[self.account]
 				self.plugin.roster.contacts[name] = \
 					self.plugin.roster.contacts[self.account]
+				self.plugin.roster.newly_added[name] = \
+					self.plugin.roster.newly_added[self.account]
+				self.plugin.roster.to_be_removed[name] = \
+					self.plugin.roster.to_be_removed[self.account]
 				self.plugin.sleeper_state[name] = \
 					self.plugin.sleeper_state[self.account]
 				#upgrade account variable in opened windows
@@ -1211,6 +1215,8 @@ class Account_modification_window:
 		self.plugin.connected[name] = 0
 		self.plugin.roster.groups[name] = {}
 		self.plugin.roster.contacts[name] = {}
+		self.plugin.roster.newly_added[name] = []
+		self.plugin.roster.to_be_removed[name] = []
 		self.plugin.nicks[name] = login
 		self.plugin.sleeper_state[name] = 0
 		#refresh accounts window
diff --git a/plugins/gtkgui/gtkgui.py b/plugins/gtkgui/gtkgui.py
index 1d866fa0b8e86f0a1d1799af0a4704a9e78506a9..a8d9c95e9b651e89132b0d98a2f5a4251eb00931 100644
--- a/plugins/gtkgui/gtkgui.py
+++ b/plugins/gtkgui/gtkgui.py
@@ -370,6 +370,18 @@ class plugin:
 						user1.priority, user1.keyID)
 					luser.append(user1)
 				user1.resource = resource
+			if old_show == 0 and statuss.index(array[1]) > 1:
+				if not user1.jid in self.roster.newly_added[account]:
+					self.roster.newly_added[account].append(user1.jid)
+				if user1.jid in self.roster.to_be_removed[account]:
+					self.roster.to_be_removed[account].remove(user1.jid)
+				gobject.timeout_add(5000, self.roster.remove_newly_added, user1.jid, account)
+			if old_show > 1 and statuss.index(array[1]) == 0 and self.connected[account] > 1:
+				if not user1.jid in self.roster.to_be_removed[account]:
+					self.roster.to_be_removed[account].append(user1.jid)
+				if user1.jid in self.roster.newly_added[account]:
+					self.roster.newly_added[account].remove(user1.jid)
+				gobject.timeout_add(5000, self.roster.really_remove_user, user1, account)
 			user1.show = array[1]
 			user1.status = array[2]
 			user1.priority = priority
diff --git a/plugins/gtkgui/roster_window.py b/plugins/gtkgui/roster_window.py
index ebd6427f3ec31e2431c06f32c6f25daa4cf71af6..4d4e6fa1f95141b9cee809b019bd23cfdc0bbdb2 100644
--- a/plugins/gtkgui/roster_window.py
+++ b/plugins/gtkgui/roster_window.py
@@ -113,6 +113,11 @@ class Roster_window:
 		model.append(None, (self.pixbufs[status], account, 'account', account,\
 			account, False))
 
+	def remove_newly_added(self, jid, account):
+		if jid in self.newly_added[account]:
+			self.newly_added[account].remove(jid)
+			self.redraw_jid(jid, account)
+
 	def add_user_to_roster(self, jid, account):
 		"""Add a user to the roster and add groups if they aren't in roster"""
 		showOffline = self.plugin.config['showoffline']
@@ -157,8 +162,15 @@ class Roster_window:
 				self.tree.expand_row(model.get_path(iterG), False)
 		self.redraw_jid(jid, account)
 	
+	def really_remove_user(self, user, account):
+		if user.jid in self.to_be_removed[account]:
+			self.to_be_removed[account].remove(user.jid)
+			self.remove_user(user, account)
+	
 	def remove_user(self, user, account):
 		"""Remove a user from the roster"""
+		if user.jid in self.to_be_removed[account]:
+			return
 		model = self.tree.get_model()
 		for i in self.get_user_iter(user.jid, account):
 			parent_i = model.iter_parent(i)
@@ -1181,8 +1193,15 @@ class Roster_window:
 			renderer.set_property('font', self.plugin.config['groupfont'])
 			renderer.set_property('xpad', 4)
 		else:
-			renderer.set_property('foreground', \
-				self.plugin.config['usertextcolor'])
+			jid = model.get_value(iter, 3)
+			account = model.get_value(iter, 4)
+			if jid in self.newly_added[account]:
+				renderer.set_property('foreground', 'green')
+			elif jid in self.to_be_removed[account]:
+				renderer.set_property('foreground', 'red')
+			else:
+				renderer.set_property('foreground', \
+					self.plugin.config['usertextcolor'])
 			renderer.set_property('cell-background', \
 				self.plugin.config['userbgcolor'])
 			renderer.set_property('font', self.plugin.config['userfont'])
@@ -1307,10 +1326,14 @@ class Roster_window:
 		self.window.show_all()
 		self.groups = {}
 		self.contacts = {}
+		self.newly_added = {}
+		self.to_be_removed = {}
 		self.popups_height = 0
 		for a in self.plugin.accounts.keys():
 			self.contacts[a] = {}
 			self.groups[a] = {}
+			self.newly_added[a] = []
+			self.to_be_removed[a] = []
 		#(icon, name, type, jid, account, editable)
 		model = gtk.TreeStore(gtk.Image, str, str, str, str, gobject.TYPE_BOOLEAN)
 		model.set_sort_func(1, self.compareIters)