convert to Furl, refactor some