moved filtering into a Filter subclass