without rating function