diff --git a/internal.c b/internal.c
index fa45798..2e2d166 100644
--- a/internal.c
+++ b/internal.c
@@ -28,65 +28,49 @@
 
 struct pci_dev *pci_dev_find_vendorclass(uint16_t vendor, uint16_t devclass)
 {
-	struct pci_dev *temp;
+	struct pci_dev *temp = NULL;
 	struct pci_filter filter;
 	uint16_t tmp2;
 
 	pci_filter_init(NULL, &filter);
 	filter.vendor = vendor;
 
-	for (temp = pacc->devices; temp; temp = temp->next)
-		if (pci_filter_match(&filter, temp)) {
-			/* Read PCI class */
-			tmp2 = pci_read_word(temp, 0x0a);
-			if (tmp2 == devclass) {
-				pci_fill_info(temp, PCI_FILL_IDENT);
-				return temp;
-			}
-		}
+	while ((temp = pcidev_scandev(&filter, temp))) {
+		/* Read PCI class */
+		tmp2 = pci_read_word(temp, 0x0a);
+		if (tmp2 == devclass)
+			return temp;
+	}
 
 	return NULL;
 }
 
 struct pci_dev *pci_dev_find(uint16_t vendor, uint16_t device)
 {
-	struct pci_dev *temp;
 	struct pci_filter filter;
 
 	pci_filter_init(NULL, &filter);
 	filter.vendor = vendor;
 	filter.device = device;
 
-	for (temp = pacc->devices; temp; temp = temp->next) {
-		if (pci_filter_match(&filter, temp)) {
-			pci_fill_info(temp, PCI_FILL_IDENT);
-			return temp;
-		}
-	}
-
-	return NULL;
+	return pcidev_scandev(&filter, NULL);
 }
 
 struct pci_dev *pci_card_find(uint16_t vendor, uint16_t device,
 			      uint16_t card_vendor, uint16_t card_device)
 {
-	struct pci_dev *temp;
+	struct pci_dev *temp = NULL;
 	struct pci_filter filter;
 
 	pci_filter_init(NULL, &filter);
 	filter.vendor = vendor;
 	filter.device = device;
 
-	for (temp = pacc->devices; temp; temp = temp->next)
-		if (pci_filter_match(&filter, temp)) {
-			if ((card_vendor ==
-			     pci_read_word(temp, PCI_SUBSYSTEM_VENDOR_ID))
-			    && (card_device ==
-				pci_read_word(temp, PCI_SUBSYSTEM_ID))) {
-				pci_fill_info(temp, PCI_FILL_IDENT);
-				return temp;
-			}
-		}
+	while ((temp = pcidev_scandev(&filter, temp))) {
+		if ((card_vendor == pci_read_word(temp, PCI_SUBSYSTEM_VENDOR_ID))
+		    && (card_device == pci_read_word(temp, PCI_SUBSYSTEM_ID)))
+			return temp;
+	}
 
 	return NULL;
 }
diff --git a/pcidev.c b/pcidev.c
index 1ec6455..a20d24b 100644
--- a/pcidev.c
+++ b/pcidev.c
@@ -148,6 +148,18 @@
 	return (uintptr_t)addr;
 }
 
+struct pci_dev *pcidev_scandev(struct pci_filter *filter, struct pci_dev *start)
+{
+	struct pci_dev *temp;
+	for (temp = start ? start->next : pacc->devices; temp; temp = temp->next) {
+		if (pci_filter_match(filter, temp)) {
+			pci_fill_info(temp, PCI_FILL_IDENT);
+			return temp;
+		}
+	}
+	return NULL;
+}
+
 static int pcidev_shutdown(void *data)
 {
 	if (pacc == NULL) {
diff --git a/programmer.h b/programmer.h
index 8d324d5..40c47ad 100644
--- a/programmer.h
+++ b/programmer.h
@@ -114,6 +114,7 @@
 
 #if NEED_PCI == 1
 struct pci_dev;
+struct pci_filter;
 
 /* pcidev.c */
 // FIXME: This needs to be local, not global(?)
@@ -121,6 +122,7 @@
 int pci_init_common(void);
 uintptr_t pcidev_readbar(struct pci_dev *dev, int bar);
 struct pci_dev *pcidev_init(const struct dev_entry *devs, int bar);
+struct pci_dev *pcidev_scandev(struct pci_filter *filter, struct pci_dev *start);
 /* rpci_write_* are reversible writes. The original PCI config space register
  * contents will be restored on shutdown.
  * To clone the pci_dev instances internally, the `pacc` global
