diff --git a/src/gtkgui_helpers.py b/src/gtkgui_helpers.py
index 047e6e5ed9cdb04dca89aa112da3ab83127ef4e8..1f2973b2a113598fd219b330789be7c0c893da88 100644
--- a/src/gtkgui_helpers.py
+++ b/src/gtkgui_helpers.py
@@ -301,3 +301,16 @@ def get_invisible_cursor():
 	color = gtk.gdk.Color()
 	cursor = gtk.gdk.Cursor(pixmap, pixmap, color, color, 0, 0)
 	return cursor
+
+def get_current_desktop(window):
+	'''returns the current virtual desktop for given window
+	NOTE: window is GDK window'''
+	prop = window.property_get('_NET_CURRENT_DESKTOP')
+	if prop is None: # it means it's normal window (not root window)
+		# so we look for it's current virtual desktop in another property
+		prop = window.property_get('_NET_WM_DESKTOP')
+
+	if prop is not None:
+		# f.e. prop is ('CARDINAL', 32, [0]) we want 0 or 1.. from [0]
+		current_virtual_desktop_no = prop[2][0]
+		return current_virtual_desktop_no
diff --git a/src/systray.py b/src/systray.py
index b9cb2c5090b4949988c74cad53977fa0150509a2..616313fb7c11d5163211a36c51a6e06f185c41ea 100644
--- a/src/systray.py
+++ b/src/systray.py
@@ -25,6 +25,7 @@ import dialogs
 import os
 
 import tooltips
+import gtkgui_helpers
 
 from gajim import Contact
 from common import gajim
@@ -261,8 +262,30 @@ class Systray:
 	def on_left_click(self):
 		win = gajim.interface.roster.window
 		if len(self.jids) == 0:
-			if win.get_property('visible'):
-				win.hide()
+			# no pending events, so toggle visible/hidden for roster window
+			if win.get_property('visible'): # visible in ANY virtual desktop?
+				win.hide() # we hide it from VD that was visible in
+				# but we could be in another VD right now. eg vd2
+				# and we want not only to hide it in vd1 but also show it in vd2
+
+				if os.name != 'nt':
+					root_window = gtk.gdk.screen_get_default().get_root_window()
+					# current user's vd
+					current_virtual_desktop_no = gtkgui_helpers.get_current_desktop(
+						root_window)
+				
+					# vd roster window is in
+					window_virtual_desktop = gtkgui_helpers.get_current_desktop(
+						win.window)
+				
+				# if one of those is None, something went wrong and we cannot know
+				# VD info, just hide it (default action) and not show it afterwards
+				if None not in (window_virtual_desktop, current_virtual_desktop_no):
+					if current_virtual_desktop_no != window_virtual_desktop:
+						# we are in another VD that the window was
+						# so show it in current VD
+						win.show()
+						
 			else:
 				win.present()
 		else: