private void transferListeners(IModel source, IModel target) { if (source instanceof IModelChangeProviderExtension && target instanceof IModelChangeProviderExtension) { IModelChangeProviderExtension smodel = (IModelChangeProviderExtension) source; IModelChangeProviderExtension tmodel = (IModelChangeProviderExtension) target; // first fire one last event to all the listeners to // refresh smodel.fireModelChanged(new ModelChangedEvent(smodel, IModelChangedEvent.WORLD_CHANGED, null, null)); // now pass the listener to the target model smodel.transferListenersTo(tmodel, listener -> { if (listener instanceof IFormPart || listener instanceof FormOutlinePage) return true; return false; }); } }