Instead of using macros, use iterators built-in on each list for filtering and traversing.
Make distinctions between internal and external (downloaded from third-party servers).