more flexible route helper