some changes on quaternion