There's still a lot to do here. For example, the external code should probably go through the new Filter object directly instead of indirectly through the narrow module. (imported from commit 22dcd31cdebd51453f1658af52a4432b2fe7a4cb)