added some useful abstractions