made some more abstractions...