Added documentation & some design refactoring to ensure a more logical system