refactoring generic parameters
update TODOs