provide return type for on_first