diff --git a/src/common/connection.py b/src/common/connection.py
index bcbdc459afcae9716b8451c1e03a288a5e503960..6485cd8254163a52b43b66a06b438d974f6ca35d 100644
--- a/src/common/connection.py
+++ b/src/common/connection.py
@@ -1603,6 +1603,16 @@ class Connection(ConnectionHandlers):
 		iq2.addChild(name='gajim', namespace='gajim:prefs')
 		self.connection.send(iq)
 
+	def _request_bookmarks_xml(self):
+		iq = common.xmpp.Iq(typ='get')
+		iq2 = iq.addChild(name='query', namespace=common.xmpp.NS_PRIVATE)
+		iq2.addChild(name='storage', namespace='storage:bookmarks')
+		self.connection.send(iq)
+
+	def _check_bookmarks_received(self):
+		if not self.bookmarks:
+			self._request_bookmarks_xml()
+
 	def get_bookmarks(self, storage_type=None):
 		'''Get Bookmarks from storage or PubSub if supported as described in
 		XEP 0048
@@ -1611,11 +1621,11 @@ class Connection(ConnectionHandlers):
 			return
 		if self.pubsub_supported and storage_type != 'xml':
 			self.send_pb_retrieve('', 'storage:bookmarks')
+			# some server (ejabberd) are so slow to answer that we request via XML
+			# if we don't get answer in the next 30 seconds
+			gajim.idlequeue.set_alarm(self._check_bookmarks_received, 30)
 		else:
-			iq = common.xmpp.Iq(typ='get')
-			iq2 = iq.addChild(name='query', namespace=common.xmpp.NS_PRIVATE)
-			iq2.addChild(name='storage', namespace='storage:bookmarks')
-			self.connection.send(iq)
+			self._request_bookmarks_xml()
 
 	def store_bookmarks(self, storage_type=None):
 		''' Send bookmarks to the storage namespace or PubSub if supported