Fetch Refactoring

Opening this to get feedback on approach. It currently passes all tests, but more test coverage is probably needed.