Hi netultra, it was kind of a conscious decision :) Basically, instead of Sops being shared between viewers, it is now these Sop data sources that are shared and each viewer has it's own Sops that reference the shared data source. When the pixel data is 'unloaded' on a Sop, it's really only it's own reference that gets cleared. The data source maintains a weak reference cache of pixel data so that when all the sops referencing it have cleared their pixel data, only then will the memory actually be freed by the garbage collector. It's an optimization.
I admit I forgot about the case where someone might apply a filter in place. Ideally, filtering would be a presentation level thing, where filters can be added to an image dynamically and when the image is drawn, the filters are applied and the output is rendered. This way, the original pixel data would be preserved.
Applying filters in-place can be problematic because the filtering effects will be present everywhere that image is drawn. However, since we don't actually have framework support for adding filters to images, I'll change it back to the way it was. I've entered a ticket here.
Thanks for pointing it out,
Stewart