added empty functional abstraction