again futzing with abstraction