added QP()