add FunctionalInterface