added generic product model