Add default constructors; use Uris instead of strings; refactor