refactor filter interface