diff --git a/gajim/common/modules/caps.py b/gajim/common/modules/caps.py
index 959060a3791babb0c68ff9446630b30ea1cc317d..23433cbd25bfa539d50f1b5ac95ba8b0a1ad19f0 100644
--- a/gajim/common/modules/caps.py
+++ b/gajim/common/modules/caps.py
@@ -42,6 +42,15 @@ class Caps:
         self._create_suitable_client_caps = caps_cache.create_suitable_client_caps
 
     def _presence_received(self, _con, stanza):
+        if stanza.getType() in ('unavailable', 'error'):
+            return
+
+        from_ = stanza.getFrom()
+        if from_ is None:
+            # Presence from ourself
+            return
+        full_jid = str(from_)
+
         hash_method = node = caps_hash = None
 
         caps = stanza.getTag('c', namespace=nbxmpp.NS_CAPS)
@@ -50,8 +59,6 @@ class Caps:
             node = caps['node']
             caps_hash = caps['ver']
 
-        from_ = stanza.getFrom()
-        full_jid = str(from_)
         show = parse_show(stanza)
         type_ = parse_type(stanza)
 
diff --git a/gajim/common/modules/chatstates.py b/gajim/common/modules/chatstates.py
index 29e7d7cf5909950de59cc8dec6bdf3d48cf154a7..f01268d2e438306e73b437777e8a212b0ad1d659 100644
--- a/gajim/common/modules/chatstates.py
+++ b/gajim/common/modules/chatstates.py
@@ -74,8 +74,8 @@ class Chatstate:
             return
 
         full_jid = stanza.getFrom()
-
-        if self._con.get_own_jid().bareMatch(full_jid):
+        if full_jid is None or self._con.get_own_jid().bareMatch(full_jid):
+            # Presence from ourself
             return
 
         contact = app.contacts.get_gc_contact(
diff --git a/gajim/common/modules/vcard_avatars.py b/gajim/common/modules/vcard_avatars.py
index b08eddb55d8263a3356740fb376e9de8a7c35410..a0a764f367c6e6d289527096e20c8b2e27117d8d 100644
--- a/gajim/common/modules/vcard_avatars.py
+++ b/gajim/common/modules/vcard_avatars.py
@@ -51,12 +51,15 @@ class VCardAvatars:
             app.config.set_per('accounts', self._account, 'avatar_sha', '')
 
     def _presence_received(self, _con, stanza):
-        update = stanza.getTag('x', namespace=nbxmpp.NS_VCARD_UPDATE)
-        if update is None:
+        if stanza.getType() in ('unavailable', 'error'):
             return
 
         jid = stanza.getFrom()
 
+        update = stanza.getTag('x', namespace=nbxmpp.NS_VCARD_UPDATE)
+        if update is None:
+            return
+
         avatar_sha = update.getTagData('photo')
         if avatar_sha is None:
             log.info('%s is not ready to promote an avatar', jid)