Initial Commit. Currently under refactoring