initial commit and structure. needs some refactoring