I refined the distinction between "content stores" and "content providers". The concept is fairly central to the architecture, so I'm trying to get it right. I think what I've settled on now is that the content filter pipeline actually has two stages: before parsing and after parsing. So there are two interfaces IParsedContentProvider and IUnparsedContentProvider. Unparsed content providers are generally intended to provide "synthetic" topics. For example, the built-in topics like _ContentBaseDefinition and HomePage come from BuiltInTopicProvider, not from the filesystem or SQL providers. Parsed content providers, on the other hand, run after the parser, and therefore need to deal with parsing any new content they introduce. But most of them won't introduce new content - they'll just filter what comes out of the unparsed stage. Examples of parsed content providers include things like security and caching.