diff --git a/src/common/connection_handlers.py b/src/common/connection_handlers.py
index 4b93ffd019f588136327e52a982be691007215e4..12192a388fa9185dbaaf36f4ac97c9d3d980cfdd 100644
--- a/src/common/connection_handlers.py
+++ b/src/common/connection_handlers.py
@@ -2765,6 +2765,7 @@ class ConnectionHandlers(ConnectionVcard, ConnectionBytestream, ConnectionDisco,
 		con.RegisterHandler('iq', self._PrivacySetCB, 'set',
 			common.xmpp.NS_PRIVACY)
 		con.RegisterHandler('iq', self._PubSubCB, 'result')
+		con.RegisterHandler('iq', self._PubSubErrorCB, 'error')
 		con.RegisterHandler('iq', self._ErrorCB, 'error')
 		con.RegisterHandler('iq', self._IqCB)
 		con.RegisterHandler('iq', self._StanzaArrivedCB)
diff --git a/src/common/pubsub.py b/src/common/pubsub.py
index 354d6f97e19404bb84059566a29d541c96e0b363..d253d548e1ace86d64e1d6f9ded6a176559e9720 100644
--- a/src/common/pubsub.py
+++ b/src/common/pubsub.py
@@ -166,6 +166,18 @@ class ConnectionPubSub:
 			if ns == 'storage:bookmarks':
 				self._parse_bookmarks(storage, 'pubsub')
 
+	def _PubSubErrorCB(self, conn, stanza):
+		gajim.log.debug('_PubsubErrorCB')
+		pubsub = stanza.getTag('pubsub')
+		if not pubsub:
+			return
+		items = pubsub.getTag('items')
+		if not items:
+			return
+		if items.getAttr('node') == 'storage:bookmarks':
+			# Receiving bookmarks from pubsub failed, so take them from xml
+			self.get_bookmarks(storage_type='xml')
+
 	def request_pb_configuration(self, jid, node):
 		if not self.connection or self.connected < 2:
 			return