Initial commit. need to refactor