update according to recommendation(not finished, not tested)