refactor @BOOtak