breaking up device api / func shift idea