general abstraction funcs