refactoring + lots of changes. ready to roll