Initial Commit

Initial commit with proper design pattern but limited functionality