refactor into separate projects