add a more generic producer wrapper