updates and documentation
DRY it up
update