refactor + more