Refactored to use Filter classes instead of callbacks alone