dynamic preference updating