basically closes #117. Still needs usability work but it does a lot of what we need.