happy with the 2node function abstraction