final todo: refactor