2.0 refactor