diff --git a/src/common/xmpp/idlequeue.py b/src/common/xmpp/idlequeue.py
index c6e484641bd9b71f0c960793fdd1cc2a178e1ec8..b38118495001b8c396c3fc34eca9ce636ddd4a11 100644
--- a/src/common/xmpp/idlequeue.py
+++ b/src/common/xmpp/idlequeue.py
@@ -16,21 +16,39 @@
 Idlequeues are Gajim's network heartbeat. Transports can be plugged as 
 idle objects and be informed about possible IO.
 '''
-
+import os
 import select
 import logging
-import gobject
 log = logging.getLogger('gajim.c.x.idlequeue')
+try:
+	import gobject
+	HAVE_GOBJECT = True
+except ImportError:
+	HAVE_GOBJECT = False
+
 
-FLAG_WRITE 			= 20 # write only
-FLAG_READ 			= 19 # read only 
-FLAG_READ_WRITE 	= 23 # read and write
-FLAG_CLOSE 			= 16 # wait for close
+FLAG_WRITE			= 20 # write only
+FLAG_READ			= 19 # read only 
+FLAG_READ_WRITE	= 23 # read and write
+FLAG_CLOSE			= 16 # wait for close
 
 PENDING_READ		= 3 # waiting read event
-PENDING_WRITE 		= 4 # waiting write event
+PENDING_WRITE		= 4 # waiting write event
 IS_CLOSED			= 16 # channel closed 
 
+def get_idlequeue():
+	''' Get an appropriate idlequeue '''
+	if os.name == 'nt':
+		# gobject.io_add_watch does not work on windows
+		return SelectIdleQueue()
+	else:
+		if HAVE_GOBJECT:
+			# Gajim's default Idlequeue
+			return GlibIdleQueue()
+		else:
+			# GUI less implementation
+			return SelectIdleQueue()
+
 
 class IdleObject:
 	'''
@@ -66,6 +84,10 @@ class IdleQueue:
 		3. Check file descriptor of plugged objects for read, write and error
 		events 
 	'''
+	# (timeout, boolean)
+	# Boolean is True if timeout is specified in seconds, False means miliseconds
+	PROCESS_TIMEOUT = (200, False) 
+
 	def __init__(self):
 		self.queue = {}
 
@@ -315,6 +337,9 @@ class GlibIdleQueue(IdleQueue):
 	Extends IdleQueue to use glib io_add_wath, instead of select/poll
 	In another 'non gui' implementation of Gajim IdleQueue can be used safetly.
 	'''
+	# (timeout, boolean)
+	# Boolean is True if timeout is specified in seconds, False means miliseconds
+	PROCESS_TIMEOUT = (2, True) 
 
 	def _init_idle(self):
 		'''
diff --git a/src/gajim.py b/src/gajim.py
index 306a38210c6fd292f1b65954c707398f75c9192a..5129f653f8dfd274e0330025eb07ca48b76deafe 100644
--- a/src/gajim.py
+++ b/src/gajim.py
@@ -2856,16 +2856,16 @@ class Interface:
 		helpers.launch_browser_mailer(kind, url)
 
 	def process_connections(self):
-		''' called each foo (200) miliseconds. Check for idlequeue timeouts.
-		'''
+		''' Called each foo (200) miliseconds. Check for idlequeue timeouts.	'''
 		try:
 			gajim.idlequeue.process()
 		except Exception:
 			# Otherwise, an exception will stop our loop
-			if gajim.idlequeue.__class__ == idlequeue.GlibIdleQueue:
-				gobject.timeout_add_seconds(2, self.process_connections)
+			timeout, in_seconds = gajim.idlequeue.PROCESS_TIMEOUT
+			if in_seconds:
+				gobject.timeout_add_seconds(timeout, self.process_connections)
 			else:
-				gobject.timeout_add(200, self.process_connections)
+				gobject.timeout_add(timeout, self.process_connections)
 			raise
 		return True # renew timeout (loop for ever)
 
@@ -3110,15 +3110,7 @@ class Interface:
 		else:
 			gajim.log.setLevel(None)
 
-		# pygtk2.8+ on win, breaks io_add_watch.
-		# We use good old select.select()
-		if os.name == 'nt':
-			gajim.idlequeue = idlequeue.SelectIdleQueue()
-		else:
-			# in a nongui implementation, just call:
-			# gajim.idlequeue = IdleQueue() , and
-			# gajim.idlequeue.process() each foo miliseconds
-			gajim.idlequeue = idlequeue.GlibIdleQueue()
+		gajim.idlequeue = idlequeue.get_idlequeue()
 		# resolve and keep current record of resolved hosts
 		gajim.resolver = resolver.get_resolver(gajim.idlequeue)
 		gajim.socks5queue = socks5.SocksQueue(gajim.idlequeue,
@@ -3270,10 +3262,11 @@ class Interface:
 		self.last_ftwindow_update = 0
 
 		gobject.timeout_add(100, self.autoconnect)
-		if gajim.idlequeue.__class__ == idlequeue.GlibIdleQueue:
-			gobject.timeout_add_seconds(2, self.process_connections)
+		timeout, in_seconds = gajim.idlequeue.PROCESS_TIMEOUT
+		if in_seconds:
+			gobject.timeout_add_seconds(timeout, self.process_connections)
 		else:
-			gobject.timeout_add(200, self.process_connections)
+			gobject.timeout_add(timeout, self.process_connections)
 		gobject.timeout_add_seconds(gajim.config.get(
 			'check_idle_every_foo_seconds'), self.read_sleepy)