Can't forward declare a typedef.
Refactored to ustilise new base class methods.
Added a refine list function with arbitrary predicate.