Yep, the doc is all okay.
I discovered an interesting thing, though: If you run a new thread, and intend to call IHTMLWindow there, it *needs* to be STA thread (when you create the thread, you must set the apartment state, which is one-liner). All of this is cool and stuff, doc and window resolved, but the IElementBehaviorSiteOM just doesn't want to cast. And I actually need this interface and noticed the problem with the window on the way.
The really strange thing is, that I have and assembly, that is older, and does not have the problem. There I use a BackgroundWorker to do the async stuff, and it resolved the problem back then. The problem is that I don't see any difference in the old code and current code, but it *must* be something I did somewhere.
Actually it bothers me more that I don't understand why, than the fact I have this problem. How come it worked when I put the worker and then stopped working (with the worker still there)??
Oh, and I don't have the Adam Nathan's book