revised functional.h