packing link filters into a list not a set
using dict of fn's instead of sets of if/else checks