minor refactor, will need to switch to interfaces for inplace alterations