I am trying hard to wrap my head around the various players, and I think it's a bit more convoluted than it needs to be. I believe that `TextPresentationProxy` does not need to be a hierarchy:

* you really need the `ScalaPresentationIProxy` implementation (no references to `TextPreferences`, only in conjunction with `InteractiveCompilationUnitEditor`, which is basically `ScalaPresnetationProxy`)
* `updateTextPresentation` needs to be split in two: the one in the base class, that deals only with document positions, is conceptually different from the UI one. Currently, the threading issue that you mention seem to apply only to the document-based updater
* I think calling 'super' in the middle of the method is an indicator that it should probably be extracted to a different method