refactored the codebase for release 2.0.0