I've been trying to think about this, how that common search for satisfier code could be refactored, but it's less obvious than I thought. The main problem is that there are many different use cases. First the places where we are looking for satisfier : 1) the whole local database 2) a list of targets 3) local database except a list of targets 4) all sync repos And then there is the result we want : 1) just the first satisfier 2) the actual package if it exists, otherwise the first provider 3) the list of all satisfiers 4) just to know if at least one satisfier exists So by combining all these, that's quite a lot of use cases. Maybe there should be a set of functions for the most common cases or something. Anyway, I didn't really find a proper way yet.