refactored to use standard project structure