Factored out non-HTTP functionality from resources into collections