initial commit, needs refactor