refactoring :v: