added FunctionalInterface annotations