added a bunch more functionality

untested