add producer pattern