bool *selfsig, bool *othersig)
 {
        struct openpgp_packet_list *tmpsig;
-       struct openpgp_publickey *sigkey = NULL;
+       struct openpgp_publickey *sigkeys = NULL, *curkey;
        onak_status_t ret;
        uint8_t hashtype;
        uint8_t hash[64];
                                }
                        }
 
-                       if (remove && dbctx->fetch_key_id(dbctx, sigid,
-                                               &sigkey, false)) {
+                       if (remove) {
+                               dbctx->fetch_key_id(dbctx, sigid,
+                                               &sigkeys, false);
+                       }
+
+                       /*
+                        * A 64 bit collision is probably a sign of something
+                        * sneaky happening, but if the signature verifies we
+                        * should keep it.
+                        */
+                       for (curkey = sigkeys; curkey != NULL;
+                                       curkey = curkey->next) {
 
-                               ret = onak_check_hash_sig(sigkey,
+                               ret = onak_check_hash_sig(curkey,
                                                (*sigs)->packet,
                                                hash, hashtype);
 
                                        if (othersig != NULL) {
                                                *othersig = true;
                                        }
+                                       break;
                                }
-
-                               free_publickey(sigkey);
-                               sigkey = NULL;
                        }
+
+                       free_publickey(sigkeys);
+                       sigkeys = NULL;
                }
 #endif