Refactor into separate projects for resuability