I tried an experiment to explore the behaviour of Eclipse TreeViewers when their input model was changed. I was hoping that if the new model was equivalent to the old using equals(), then the tree would not collapse and lose its selection. No such luck. The new model must be '==' the old model to retain tree state.