FIX : NPE in local history
diff --git a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java
index caeddfa..1008a28 100644
--- a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java
+++ b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/contentmergeviewer/ModelContentMergeViewer.java
@@ -99,7 +99,7 @@
 
 	private RGB removedColor;
 
-	private IPropertyChangeListener structureSelectionListener;
+	private IPropertyChangeListener structurePropertyListener;
 
 	private IPropertyChangeListener preferenceListener;
 
@@ -141,7 +141,7 @@
 		// disables diff copy from either side
 		switchCopyState(false);
 
-		structureSelectionListener = new IPropertyChangeListener() {
+		structurePropertyListener = new IPropertyChangeListener() {
 			public void propertyChange(PropertyChangeEvent event) {
 				if (event.getProperty().equals(EMFCompareConstants.PROPERTY_STRUCTURE_SELECTION)) {
 					Object selected = null;
@@ -151,10 +151,12 @@
 					if (selected instanceof DiffElement && !(selected instanceof DiffGroup && ((DiffGroup)selected).getSubDiffElements().size() == 0)) {
 						setSelection((DiffElement)selected);
 					}
+				} else if (event.getProperty().equals(EMFCompareConstants.PROPERTY_STRUCTURE_INPUT_CHANGED)) {
+					setInput(event.getNewValue());
 				}
 			}
 		};
-		configuration.addPropertyChangeListener(structureSelectionListener);
+		configuration.addPropertyChangeListener(structurePropertyListener);
 
 		preferenceListener = new IPropertyChangeListener() {
 			public void propertyChange(PropertyChangeEvent event) {
@@ -181,7 +183,8 @@
 	 * Redraws the center Control.
 	 */
 	public void updateCenter() {
-		getCenterPart().redraw();
+		if (getCenterPart() != null)
+			getCenterPart().redraw();
 	}
 
 	/**
@@ -199,7 +202,7 @@
 	 * @return The center {@link Canvas}.
 	 */
 	public Canvas getCenterPart() {
-		if (canvas == null)
+		if (canvas == null && !getControl().isDisposed())
 			canvas = new AbstractBufferedCanvas((Composite)getControl()) {
 				public void doPaint(GC gc) {
 					// Draw lines on the left and right edges
@@ -207,12 +210,14 @@
 					gc.drawLine(0, 0, 0, getBounds().height);
 					gc.drawLine(getBounds().width - 1, 0, getBounds().width - 1, getBounds().height);
 
-					for (final DiffElement diff : ((ModelCompareInput)getInput()).getDiffAsList()) {
+					final ModelCompareInput input = (ModelCompareInput)getInput();
+					for (final DiffElement diff : input.getDiffAsList()) {
 						drawLine(gc, getLeftItem(diff), getRightItem(diff), diff);
 					}
 				}
 			};
-		canvas.moveAbove(null);
+		if (canvas != null)
+			canvas.moveAbove(null);
 		return canvas;
 	}
 
@@ -341,8 +346,10 @@
 	 */
 	public void setSelection(DiffElement diff) {
 		currentDiff = diff;
-		leftPart.navigateToDiff(currentDiff);
-		rightPart.navigateToDiff(currentDiff);
+		if (leftPart != null)
+			leftPart.navigateToDiff(currentDiff);
+		if (rightPart != null)
+			rightPart.navigateToDiff(currentDiff);
 		switchCopyState(true);
 	}
 
@@ -534,9 +541,12 @@
 	@Override
 	protected void updateToolItems() {
 		super.updateToolItems();
-		copyDiffRightToLeft.setEnabled(configuration.isLeftEditable());
-		copyDiffLeftToRight.setEnabled(configuration.isRightEditable());
-		CompareViewerPane.getToolBarManager(getControl().getParent()).update(true);
+		if (copyDiffRightToLeft != null)
+			copyDiffRightToLeft.setEnabled(configuration.isLeftEditable());
+		if (copyDiffLeftToRight != null)
+			copyDiffLeftToRight.setEnabled(configuration.isRightEditable());
+		if (!getControl().isDisposed())
+			CompareViewerPane.getToolBarManager(getControl().getParent()).update(true);
 	}
 
 	/**
@@ -572,8 +582,8 @@
 	 */
 	protected void handleDispose(DisposeEvent event) {
 		super.handleDispose(event);
-		configuration.removePropertyChangeListener(structureSelectionListener);
-		structureSelectionListener = null;
+		configuration.removePropertyChangeListener(structurePropertyListener);
+		structurePropertyListener = null;
 		EMFCompareUIPlugin.getDefault().getPreferenceStore().removePropertyChangeListener(preferenceListener);
 		preferenceListener = null;
 		leftPart = null;
@@ -600,7 +610,8 @@
 	@Override
 	protected void handleResizeLeftRight(int x, int y, int leftWidth, int centerWidth, int rightWidth,
 			int height) {
-		getCenterPart().setBounds(leftWidth - (CENTER_WIDTH / 2), y, CENTER_WIDTH, height);
+		if (getCenterPart() != null)
+			getCenterPart().setBounds(leftWidth - (CENTER_WIDTH / 2), y, CENTER_WIDTH, height);
 		leftPart.setBounds(x, y, leftWidth - (CENTER_WIDTH / 2), height);
 		rightPart.setBounds(x + leftWidth + (CENTER_WIDTH / 2), y, rightWidth - (CENTER_WIDTH / 2), height);
 		update();
diff --git a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java
index 5753970..69c96c2 100644
--- a/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java
+++ b/plugins/org.eclipse.emf.compare.ui/src/org/eclipse/emf/compare/ui/viewerpart/ModelContentMergeViewerPart.java
@@ -455,7 +455,7 @@
 							}
 						}
 					}
-					if (selected.getData() instanceof EObject)
+					if (!selected.isDisposed() && selected.getData() instanceof EObject)
 						properties.setInput(findMatchFromElement((EObject)selected.getData()));
 				}
 			}