new functions using quaternions