updated product loop