closes #35 with initial implementation, untested