some more abstractions