abstract out direction