todo & refactor