begin abstracting away router