implemented preference system