add flatMap