diff --git a/src/common/connection.py b/src/common/connection.py
index e512ba612ee9d43d2d7f0bce1f69fd3092e9dc43..968244981d18e9c5ba72be8a82fa115d0066ec40 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -880,6 +880,10 @@ class Connection(ConnectionHandlers):
 	def request_os_info(self, jid, resource):
 		if not self.connection:
 			return
+		# If we are invisible, do not request
+		if self.connected == gajim.SHOW_LIST.index('invisible'):
+			self.dispatch('OS_INFO', (jid, resource, _('Not fetched because of invisible status'), _('Not fetched because of invisible status')))
+			return
 		to_whom_jid = jid
 		if resource:
 			to_whom_jid += '/' + resource
diff --git a/src/vcard.py b/src/vcard.py
index f9decf5e678da3268bb7b0468767727a823c40e2..2708ac7e25489f9ff3871a2f8ffbfb60f83c9397 100644
--- a/src/vcard.py
+++ b/src/vcard.py
@@ -372,8 +372,8 @@ class VcardWindow:
 
 		# Request os info in contact is connected
 		if self.contact.show not in ('offline', 'error'):
-			gajim.connections[self.account].request_os_info(self.contact.jid,
-				self.contact.resource)
+			gobject.idle_add(gajim.connections[self.account].request_os_info,
+				self.contact.jid, self.contact.resource)
 		self.os_info = {0: {'resource': self.contact.resource, 'client': '',
 			'os': ''}}
 		i = 1
@@ -386,7 +386,8 @@ class VcardWindow:
 					uf_resources += '\n' + c.resource + \
 						_(' resource with priority ') + unicode(c.priority)
 					if c.show not in ('offline', 'error'):
-						gajim.connections[self.account].request_os_info(c.jid,
+						gobject.idle_add(
+							gajim.connections[self.account].request_os_info, c.jid,
 							c.resource)
 					gajim.connections[self.account].request_last_status_time(c.jid,
 						c.resource)