functional abstraction so that we can daisy chain