Yes, at first look this looks difficult. But this two lists `exclusions` & `inclusions` are sync. If you `include` some filter using FilterManager you should add some key-value to `inclusions` and remove this value from `exclusions`. The same situation with `FilterManager.exclude` and other actions - every time you change one, you should update opposite. If remove link between `exclusions` & `inclusions` - we need to update all method add and `opposite` as a seconds argument. It brings a more code and sign of smell, as for me.