produce functions