diff --git a/src/gajim.py b/src/gajim.py
index aaecaa5c84a607ac1eeab8d93cc5f163e841c375..5c87a1ef80ca94bc60c5241a54c162c8c4f69829 100755
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -988,6 +988,11 @@ class Interface:
 			gajim.contacts.add_contact(account, contact)
 			self.roster.add_contact_to_roster(jid, account)
 		else:
+			re_add = False
+			# if sub changed: remove and re-add, maybe observer status changed
+			if contacts[0].sub != sub:
+				self.roster.remove_contact(contacts[0], account)
+				re_add = True
 			for contact in contacts:
 				if not name:
 					name = ''
@@ -996,6 +1001,8 @@ class Interface:
 				contact.ask = ask
 				if groups:
 					contact.groups = groups
+			if re_add:
+				self.roster.add_contact_to_roster(jid, account)
 		self.roster.draw_contact(jid, account)
 		if self.remote_ctrl:
 			self.remote_ctrl.raise_signal('RosterInfo', (account, array))