work in progress, refactor