general add route, with broken out functions