only run on product state