Couple of bugs from refactor
diff --git a/plugins/org.eclipse.tigerstripe.workbench.base/src/java/org/eclipse/tigerstripe/workbench/internal/core/TigerstripeRuntime.java b/plugins/org.eclipse.tigerstripe.workbench.base/src/java/org/eclipse/tigerstripe/workbench/internal/core/TigerstripeRuntime.java
index f816acf..978d7d9 100644
--- a/plugins/org.eclipse.tigerstripe.workbench.base/src/java/org/eclipse/tigerstripe/workbench/internal/core/TigerstripeRuntime.java
+++ b/plugins/org.eclipse.tigerstripe.workbench.base/src/java/org/eclipse/tigerstripe/workbench/internal/core/TigerstripeRuntime.java
@@ -10,10 +10,11 @@
  *******************************************************************************/
 package org.eclipse.tigerstripe.workbench.internal.core;
 
-import org.apache.log4j.Level;
-import org.apache.log4j.Logger;
-import org.apache.log4j.RollingFileAppender;
+import java.io.File;
+
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.tigerstripe.workbench.TigerstripeCore;
+import org.osgi.framework.Bundle;
 import org.osgi.framework.Constants;
 
 /**
@@ -48,16 +49,9 @@
 	// Path to the Tigerstripe Runtime Directory (containing plugins, etc...)
 	public static final String TIGERSTRIPE_RUNTIME_ROOT = "tigerstripe.runtime.root";
 
-//	// Version of the currently active tigerstripe feature
-//	public static final String TIGERSTRIPE_FEATURE_VERSION = "tigerstripe.feature.version";
-
 	// Base Eclipse Bundle id - DO NOT EDIT
 	public static final String BASEBUNDLE_ID = "org.eclipse.tigerstripe.workbench.base";
 
-	// // External API Eclipse Bundle id - DO NOT EDIT
-	// public static final String EXTERNALAPIBUNDLE_ID =
-	// "org.eclipse.tigerstripe.workbench.api.external";
-	//
 	// Base Workbench Feature bundle id - DO NOT EDIT
 	public static final String WORKBENCHFEATURE_ID = "org.eclipse.tigerstripe.workbench";
 
@@ -87,14 +81,16 @@
         return TigerstripeCore.getRuntimeDetails().getBaseBundleValue(Constants.BUNDLE_VERSION);
     }
 	
-	
 
 	/**
 	 * Returns the base bundle (org.eclipse.tigerstripe.workbench.base) root
 	 */
 	public static String getBaseBundleRoot() {
-		return getDefaultInstance().getProperty(BASEBUNDLE_ROOT);
-	}
-
-
+        Bundle baseBundle = Platform.getBundle(TigerstripeRuntime.BASEBUNDLE_ID);
+        if (baseBundle != null)
+            return Platform.getInstallLocation().getURL().getPath() + File.separator + baseBundle.getLocation()
+                    .substring(baseBundle.getLocation().indexOf("@") + 1, baseBundle.getLocation().length());
+        return "unknown_location_for_org.eclipse.tigerstripe.workbench.base";
+    }
+	
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.tigerstripe.workbench.ui.instancediagram.adaptation/src/org/eclipse/tigerstripe/workbench/ui/instancediagram/adaptation/InstanceDiagramSynchronizer.java b/plugins/org.eclipse.tigerstripe.workbench.ui.instancediagram.adaptation/src/org/eclipse/tigerstripe/workbench/ui/instancediagram/adaptation/InstanceDiagramSynchronizer.java
index fee1b33..30f6770 100644
--- a/plugins/org.eclipse.tigerstripe.workbench.ui.instancediagram.adaptation/src/org/eclipse/tigerstripe/workbench/ui/instancediagram/adaptation/InstanceDiagramSynchronizer.java
+++ b/plugins/org.eclipse.tigerstripe.workbench.ui.instancediagram.adaptation/src/org/eclipse/tigerstripe/workbench/ui/instancediagram/adaptation/InstanceDiagramSynchronizer.java
@@ -61,398 +61,405 @@
  */
 public class InstanceDiagramSynchronizer implements IArtifactChangeListener {
 
-	private FileDiagramEditor editor;
-	private Comparer comp = new Comparer();
+    private FileDiagramEditor editor;
+    private Comparer comp = new Comparer();
 
-	public InstanceDiagramSynchronizer(FileDiagramEditor editor) {
-		this.editor = editor;
-	}
+    public InstanceDiagramSynchronizer(FileDiagramEditor editor) {
+        this.editor = editor;
+    }
 
-	protected void doInitialRefresh() {
-		IRunnableWithProgress op = new IRunnableWithProgress() {
-			public void run(IProgressMonitor monitor) {
-				initialRefresh(monitor);
-			}
-		};
+    protected void doInitialRefresh() {
+        IRunnableWithProgress op = new IRunnableWithProgress() {
+            public void run(IProgressMonitor monitor) {
+                initialRefresh(monitor);
+            }
+        };
 
-		IWorkbench wb = PlatformUI.getWorkbench();
-		IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
-		Shell shell = win != null ? win.getShell() : null;
+        IWorkbench wb = PlatformUI.getWorkbench();
+        IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
+        Shell shell = win != null ? win.getShell() : null;
 
-		try {
-			ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
-			dialog.run(true, false, op);
-		} catch (InterruptedException e) {
-			EclipsePlugin.log(e);
-		} catch (InvocationTargetException e) {
-			EclipsePlugin.log(e);
-		}
-	}
+        try {
+            ProgressMonitorDialog dialog = new ProgressMonitorDialog(shell);
+            dialog.run(true, false, op);
+        } catch (InterruptedException e) {
+            EclipsePlugin.log(e);
+        } catch (InvocationTargetException e) {
+            EclipsePlugin.log(e);
+        }
+    }
 
-	public void startSynchronizing() {
-		try {
-			// not needed anymore ?
-			// doInitialRefresh();
+    public void startSynchronizing() {
+        try {
+            // not needed anymore ?
+            // doInitialRefresh();
 
-			// Register for changes in the Diagrams
-			registerModelAdapters();
-			startListeningToArtifactMgr();
-		} catch (TigerstripeException e) {
-			EclipsePlugin.log(e);
-		}
-	}
+            // Register for changes in the Diagrams
+            registerModelAdapters();
+            startListeningToArtifactMgr();
+        } catch (TigerstripeException e) {
+            EclipsePlugin.log(e);
+        }
+    }
 
-	public void stopSynchronizing() {
-		try {
+    public void stopSynchronizing() {
+        try {
 
-			// Don't bother un-registering if the project's been deleted
-			if (getTSProject() == null)
-				return;
+            // Don't bother un-registering if the project's been deleted
+            if (getTSProject() == null)
+                return;
 
-			((IArtifactManagerSessionInternal) getTSProject().getArtifactManagerSession())
-					.removeArtifactChangeListener(this);
+            ((IArtifactManagerSessionInternal) getTSProject().getArtifactManagerSession())
+            .removeArtifactChangeListener(this);
 
-			for (ITigerstripeModelProject project : getTSProject()
-					.getReferencedProjects()) {
-			    ((IArtifactManagerSessionInternal) project.getArtifactManagerSession())
-						.removeArtifactChangeListener(this);
-			}
-		} catch (TigerstripeException e) {
-			EclipsePlugin.log(e);
-		}
-	}
+            for (ITigerstripeModelProject project : getTSProject()
+                    .getReferencedProjects()) {
+                // Can't remove a listener to items that don;t support them  
+                if(project.getArtifactManagerSession() instanceof IArtifactManagerSessionInternal) {
+                    ((IArtifactManagerSessionInternal) project.getArtifactManagerSession())
+                    .removeArtifactChangeListener(this);
+                }
+            }
+        } catch (TigerstripeException e) {
+            EclipsePlugin.log(e);
+        }
+    }
 
-	protected ITigerstripeModelProject getTSProject() {
-		IEditorPart editorPart = ((DiagramEditDomain) editor
-				.getDiagramEditDomain()).getEditorPart();
+    protected ITigerstripeModelProject getTSProject() {
+        IEditorPart editorPart = ((DiagramEditDomain) editor
+                .getDiagramEditDomain()).getEditorPart();
 
-		InstanceDiagramEditorHelper dHelper = new InstanceDiagramEditorHelper(
-				editorPart);
-		ITigerstripeModelProject diagramProject = dHelper
-				.getCorrespondingTigerstripeProject();
-		return diagramProject;
-	}
+        InstanceDiagramEditorHelper dHelper = new InstanceDiagramEditorHelper(
+                editorPart);
+        ITigerstripeModelProject diagramProject = dHelper
+                .getCorrespondingTigerstripeProject();
+        return diagramProject;
+    }
 
-	private void startListeningToArtifactMgr() throws TigerstripeException {
-		((IArtifactManagerSessionInternal) getTSProject().getArtifactManagerSession()).addArtifactChangeListener(
-				this);
+    private void startListeningToArtifactMgr() throws TigerstripeException {
+        ((IArtifactManagerSessionInternal) getTSProject().getArtifactManagerSession()).addArtifactChangeListener(
+                this);
 
-		for (ITigerstripeModelProject project : getTSProject()
-				.getReferencedProjects()) {
-		    ((IArtifactManagerSessionInternal) project.getArtifactManagerSession()).addArtifactChangeListener(this);
-		}
-	}
+        for (ITigerstripeModelProject project : getTSProject()
+                .getReferencedProjects()) { 
 
-	/**
-	 * Creates and registers the initial adapters for this Synchronizer.
-	 * 
-	 * Initially we walk the content of the EModel to create adapters (@see
-	 * ETAdapter) for every single EObject in the model. These ETAdapters then
-	 * know to keep creating additional ETAdapters as EObjects are created in
-	 * the EModel
-	 * 
-	 */
-	private void registerModelAdapters() {
-		// all we've got to do is create the first adapter at the top level,
-		// on the Map...
-		Object obj = editor.getDiagram().getElement();
-		InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
-		// try {
+            // Can't add a listener to items that can't change (eg INstalled Modules)  
+            if(project.getArtifactManagerSession() instanceof IArtifactManagerSessionInternal) {
+                ((IArtifactManagerSessionInternal) project.getArtifactManagerSession()).addArtifactChangeListener(this);
+            }
+        }
+    }
 
-		initializeBasePackage(map);
+    /**
+     * Creates and registers the initial adapters for this Synchronizer.
+     * 
+     * Initially we walk the content of the EModel to create adapters (@see
+     * ETAdapter) for every single EObject in the model. These ETAdapters then
+     * know to keep creating additional ETAdapters as EObjects are created in
+     * the EModel
+     * 
+     */
+    private void registerModelAdapters() {
+        // all we've got to do is create the first adapter at the top level,
+        // on the Map...
+        Object obj = editor.getDiagram().getElement();
+        InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
+        // try {
 
-		// MapETAdapter adapter = (MapETAdapter) ETAdapterFactory
-		// .makeETAdapterFor(map, getTSProject()
-		// .getArtifactManagerSession().getIModelUpdater());
-		// } catch (TigerstripeException e) {
-		// EclipsePlugin.log(e);
-		// }
-	}
+        initializeBasePackage(map);
 
-	/**
-	 * The base package for the Map is the package in which artifacts are
-	 * created
-	 * 
-	 * It is set to the default package for the project if the diagram is saved
-	 * outside of any package in the src/ directory or is the given package
-	 * otherwise.
-	 * 
-	 * @param map
-	 */
-	private void initializeBasePackage(final InstanceMap map) {
+        // MapETAdapter adapter = (MapETAdapter) ETAdapterFactory
+        // .makeETAdapterFor(map, getTSProject()
+        // .getArtifactManagerSession().getIModelUpdater());
+        // } catch (TigerstripeException e) {
+        // EclipsePlugin.log(e);
+        // }
+    }
 
-		TransactionalEditingDomain editingDomain = editor.getEditingDomain();
-		IEditorPart editorPart = ((DiagramEditDomain) editor
-				.getDiagramEditDomain()).getEditorPart();
-		InstanceDiagramEditorHelper dHelper = new InstanceDiagramEditorHelper(
-				editorPart);
-		final String basePackage = dHelper.getInitialBasePackage();
+    /**
+     * The base package for the Map is the package in which artifacts are
+     * created
+     * 
+     * It is set to the default package for the project if the diagram is saved
+     * outside of any package in the src/ directory or is the given package
+     * otherwise.
+     * 
+     * @param map
+     */
+    private void initializeBasePackage(final InstanceMap map) {
 
-		Command cmd = new AbstractCommand() {
+        TransactionalEditingDomain editingDomain = editor.getEditingDomain();
+        IEditorPart editorPart = ((DiagramEditDomain) editor
+                .getDiagramEditDomain()).getEditorPart();
+        InstanceDiagramEditorHelper dHelper = new InstanceDiagramEditorHelper(
+                editorPart);
+        final String basePackage = dHelper.getInitialBasePackage();
 
-			@Override
-			public boolean canExecute() {
-				return true;
-			}
+        Command cmd = new AbstractCommand() {
 
-			public void execute() {
+            @Override
+            public boolean canExecute() {
+                return true;
+            }
 
-				if (map.getBasePackage() == null) {
-					map.setBasePackage(basePackage);
-				}
-			}
+            public void execute() {
 
-			public void redo() {
-				// TODO Auto-generated method stub
+                if (map.getBasePackage() == null) {
+                    map.setBasePackage(basePackage);
+                }
+            }
 
-			}
+            public void redo() {
+                // TODO Auto-generated method stub
 
-			@Override
-			public boolean canUndo() {
-				return false;
-			}
-		};
+            }
 
-		// try {
-		// BaseETAdapter.setIgnoreNotify(true);
-		editingDomain.getCommandStack().execute(cmd);
-		editingDomain.getCommandStack().flush();
-		IDiagramEditDomain editDomain = editor.getDiagramEditDomain();
-		editDomain.getDiagramCommandStack().flush();
-		// } finally {
-		// BaseETAdapter.setIgnoreNotify(false);
-		// }
-	}
+            @Override
+            public boolean canUndo() {
+                return false;
+            }
+        };
 
-	public void artifactAdded(IAbstractArtifact artifact) {
-	}
+        // try {
+        // BaseETAdapter.setIgnoreNotify(true);
+        editingDomain.getCommandStack().execute(cmd);
+        editingDomain.getCommandStack().flush();
+        IDiagramEditDomain editDomain = editor.getDiagramEditDomain();
+        editDomain.getDiagramCommandStack().flush();
+        // } finally {
+        // BaseETAdapter.setIgnoreNotify(false);
+        // }
+    }
 
-	public void artifactChanged(IAbstractArtifact artifact, IAbstractArtifact oldArtifact) {
-		// compare the old and new first
-		// This moight be better done in the client, so that they will only bother with
-		//changes that interest them
+    public void artifactAdded(IAbstractArtifact artifact) {
+    }
 
-		if (!isEnabled()) {
-			return;
-		}
+    public void artifactChanged(IAbstractArtifact artifact, IAbstractArtifact oldArtifact) {
+        // compare the old and new first
+        // This moight be better done in the client, so that they will only bother with
+        //changes that interest them
 
-		ArrayList<Difference> diffs = comp.compareArtifacts(oldArtifact,artifact , true);
-		if (diffs.size()>0){
-			TransactionalEditingDomain editingDomain = editor.getEditingDomain();
-			IDiagramEditDomain diagramEditDomain = editor.getDiagramEditDomain();
-			final InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
-			try {
-				InstanceDiagramSynchronizerUtils.handleArtifactChanged(editor
-						.getDiagram(), editor.getDiagramEditPart(), map, artifact,
-						editingDomain, diagramEditDomain);
-			} catch (TigerstripeException e) {
-				EclipsePlugin.log(e);
-			}
-		}
-		// handleArtifactChanged(artifact);
-	}
+        if (!isEnabled()) {
+            return;
+        }
 
-	public void artifactRemoved(IAbstractArtifact artifact) {
-		if (artifact == null)
-			return; // should never happen
+        ArrayList<Difference> diffs = comp.compareArtifacts(oldArtifact,artifact , true);
+        if (diffs.size()>0){
+            TransactionalEditingDomain editingDomain = editor.getEditingDomain();
+            IDiagramEditDomain diagramEditDomain = editor.getDiagramEditDomain();
+            final InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
+            try {
+                InstanceDiagramSynchronizerUtils.handleArtifactChanged(editor
+                        .getDiagram(), editor.getDiagramEditPart(), map, artifact,
+                        editingDomain, diagramEditDomain);
+            } catch (TigerstripeException e) {
+                EclipsePlugin.log(e);
+            }
+        }
+        // handleArtifactChanged(artifact);
+    }
 
-		if (!isEnabled()) {
-			return;
-		}
+    public void artifactRemoved(IAbstractArtifact artifact) {
+        if (artifact == null)
+            return; // should never happen
 
-		TransactionalEditingDomain editingDomain = editor.getEditingDomain();
-		IDiagramEditDomain diagramEditDomain = editor.getDiagramEditDomain();
-		final InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
-		try {
-			InstanceDiagramSynchronizerUtils.handleArtifactRemoved(map,
-					artifact.getFullyQualifiedName(), editingDomain,
-					diagramEditDomain);
-		} catch (TigerstripeException e) {
-			EclipsePlugin.log(e);
-		}
-	}
+        if (!isEnabled()) {
+            return;
+        }
 
-	public void artifactRenamed(IAbstractArtifact artifact, String fromFQN) {
+        TransactionalEditingDomain editingDomain = editor.getEditingDomain();
+        IDiagramEditDomain diagramEditDomain = editor.getDiagramEditDomain();
+        final InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
+        try {
+            InstanceDiagramSynchronizerUtils.handleArtifactRemoved(map,
+                    artifact.getFullyQualifiedName(), editingDomain,
+                    diagramEditDomain);
+        } catch (TigerstripeException e) {
+            EclipsePlugin.log(e);
+        }
+    }
 
-		if (!isEnabled()) {
-			return;
-		}
+    public void artifactRenamed(IAbstractArtifact artifact, String fromFQN) {
 
-	TransactionalEditingDomain editingDomain = editor.getEditingDomain();
-		IDiagramEditDomain diagramEditDomain = editor.getDiagramEditDomain();
-		final InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
-		try {
-			InstanceDiagramSynchronizerUtils.handleArtifactRenamed(map,
-					fromFQN, artifact.getFullyQualifiedName(), editingDomain,
-					diagramEditDomain);
-		} catch (TigerstripeException e) {
-			EclipsePlugin.log(e);
-		}
-	}
+        if (!isEnabled()) {
+            return;
+        }
 
-	public void managerReloaded() {
-	}
+        TransactionalEditingDomain editingDomain = editor.getEditingDomain();
+        IDiagramEditDomain diagramEditDomain = editor.getDiagramEditDomain();
+        final InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
+        try {
+            InstanceDiagramSynchronizerUtils.handleArtifactRenamed(map,
+                    fromFQN, artifact.getFullyQualifiedName(), editingDomain,
+                    diagramEditDomain);
+        } catch (TigerstripeException e) {
+            EclipsePlugin.log(e);
+        }
+    }
 
-	/**
-	 * Performs an initial refresh of this diagram against the model upon open
-	 * 
-	 * 
-	 */
-	protected void initialRefresh(IProgressMonitor monitor) {
+    public void managerReloaded() {
+    }
 
-		// We need to make sure the ArtifactManager finished loading before
-		// we start refreshing, or else the artifacts wouldn't be found and the
-		// content
-		// of the diagram would be deleted.
-		try {
-			monitor.beginTask("Building " + getTSProject().getName(), 10);
-			getTSProject().getArtifactManagerSession().refresh(monitor);
-			monitor.worked(2);
+    /**
+     * Performs an initial refresh of this diagram against the model upon open
+     * 
+     * 
+     */
+    protected void initialRefresh(IProgressMonitor monitor) {
 
-			for (ITigerstripeModelProject project : getTSProject()
-					.getReferencedProjects()) {
-				monitor.subTask("Building referenced project: "
-						+ project.getName());
-				project.getArtifactManagerSession().refresh(monitor);
-				monitor.worked(1);
-			}
-			monitor.done();
-		} catch (TigerstripeException e) {
-			EclipsePlugin.log(e);
-		}
+        // We need to make sure the ArtifactManager finished loading before
+        // we start refreshing, or else the artifacts wouldn't be found and the
+        // content
+        // of the diagram would be deleted.
+        try {
+            monitor.beginTask("Building " + getTSProject().getName(), 10);
+            getTSProject().getArtifactManagerSession().refresh(monitor);
+            monitor.worked(2);
 
-		InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
-		InstanceDiagramReferenceMapper.eINSTANCE.clear(map);
-		monitor.beginTask("Refreshing artifacts in Diagram", map
-				.getClassInstances().size());
-		List<String> forDeletion = new ArrayList<String>();
-		for (ClassInstance eArtifact : (List<ClassInstance>) map
-				.getClassInstances()) {
-			String fqn = eArtifact.getFullyQualifiedName();
-			try {
-				IArtifactManagerSession session = getTSProject()
-						.getArtifactManagerSession();
-				IAbstractArtifact iArtifact = session
-						.getArtifactByFullyQualifiedName(fqn);
-				if (iArtifact == null) {
-					forDeletion.add(fqn);
-				} else {
-					InstanceDiagramSynchronizerUtils.updateEArtifact(editor
-							.getDiagram(), editor.getDiagramEditPart(), editor
-							.getEditingDomain(), editor.getDiagramEditDomain(),
-							eArtifact, iArtifact);
-				}
-			} catch (TigerstripeException e) {
-				EclipsePlugin.log(e);
-			}
-			monitor.worked(1);
-		}
-		monitor.done();
+            for (ITigerstripeModelProject project : getTSProject()
+                    .getReferencedProjects()) {
+                monitor.subTask("Building referenced project: "
+                        + project.getName());
+                project.getArtifactManagerSession().refresh(monitor);
+                monitor.worked(1);
+            }
+            monitor.done();
+        } catch (TigerstripeException e) {
+            EclipsePlugin.log(e);
+        }
 
-		monitor.beginTask("Refreshing Associations in Diagram", map
-				.getAssociationInstances().size());
-		for (AssociationInstance eAssoc : (List<AssociationInstance>) map
-				.getAssociationInstances()) {
-			String fqn = eAssoc.getFullyQualifiedName();
-			try {
-				IArtifactManagerSession session = getTSProject()
-						.getArtifactManagerSession();
-				IAbstractArtifact iArtifact = session
-						.getArtifactByFullyQualifiedName(fqn);
-				if (iArtifact == null) {
-					forDeletion.add(fqn);
-				} else {
-					InstanceDiagramSynchronizerUtils.updateEArtifact(editor
-							.getDiagram(), editor.getDiagramEditPart(), editor
-							.getEditingDomain(), editor.getDiagramEditDomain(),
-							eAssoc, iArtifact);
-				}
-			} catch (TigerstripeException e) {
-				EclipsePlugin.log(e);
-			}
-			monitor.worked(1);
-		}
-		monitor.done();
+        InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
+        InstanceDiagramReferenceMapper.eINSTANCE.clear(map);
+        monitor.beginTask("Refreshing artifacts in Diagram", map
+                .getClassInstances().size());
+        List<String> forDeletion = new ArrayList<String>();
+        for (ClassInstance eArtifact : (List<ClassInstance>) map
+                .getClassInstances()) {
+            String fqn = eArtifact.getFullyQualifiedName();
+            try {
+                IArtifactManagerSession session = getTSProject()
+                        .getArtifactManagerSession();
+                IAbstractArtifact iArtifact = session
+                        .getArtifactByFullyQualifiedName(fqn);
+                if (iArtifact == null) {
+                    forDeletion.add(fqn);
+                } else {
+                    InstanceDiagramSynchronizerUtils.updateEArtifact(editor
+                            .getDiagram(), editor.getDiagramEditPart(), editor
+                            .getEditingDomain(), editor.getDiagramEditDomain(),
+                            eArtifact, iArtifact);
+                }
+            } catch (TigerstripeException e) {
+                EclipsePlugin.log(e);
+            }
+            monitor.worked(1);
+        }
+        monitor.done();
 
-		// Process the list of FQNs marked for deletion
-		monitor.beginTask("Removing deleted artifacts from Diagram",
-				forDeletion.size());
-		for (String fqn : forDeletion) {
-			try {
-				InstanceDiagramSynchronizerUtils.handleArtifactRemoved(map,
-						fqn, editor.getEditingDomain(), editor
-								.getDiagramEditDomain());
-				monitor.worked(1);
-			} catch (TigerstripeException e) {
-				EclipsePlugin.log(e);
-			}
-		}
-		monitor.done();
-	}
+        monitor.beginTask("Refreshing Associations in Diagram", map
+                .getAssociationInstances().size());
+        for (AssociationInstance eAssoc : (List<AssociationInstance>) map
+                .getAssociationInstances()) {
+            String fqn = eAssoc.getFullyQualifiedName();
+            try {
+                IArtifactManagerSession session = getTSProject()
+                        .getArtifactManagerSession();
+                IAbstractArtifact iArtifact = session
+                        .getArtifactByFullyQualifiedName(fqn);
+                if (iArtifact == null) {
+                    forDeletion.add(fqn);
+                } else {
+                    InstanceDiagramSynchronizerUtils.updateEArtifact(editor
+                            .getDiagram(), editor.getDiagramEditPart(), editor
+                            .getEditingDomain(), editor.getDiagramEditDomain(),
+                            eAssoc, iArtifact);
+                }
+            } catch (TigerstripeException e) {
+                EclipsePlugin.log(e);
+            }
+            monitor.worked(1);
+        }
+        monitor.done();
 
-	/**
-	 * This stores the appropriate ITigerstripeProject at the map level in a
-	 * custom variable. This becomes then very handy to perform late look-up
-	 * 
-	 * For some reason we never thought of that before although it would have
-	 * saved quite of few headaches...
-	 * 
-	 * @since 2.1
-	 */
-	public void initializeTSProjectInMap() {
+        // Process the list of FQNs marked for deletion
+        monitor.beginTask("Removing deleted artifacts from Diagram",
+                forDeletion.size());
+        for (String fqn : forDeletion) {
+            try {
+                InstanceDiagramSynchronizerUtils.handleArtifactRemoved(map,
+                        fqn, editor.getEditingDomain(), editor
+                        .getDiagramEditDomain());
+                monitor.worked(1);
+            } catch (TigerstripeException e) {
+                EclipsePlugin.log(e);
+            }
+        }
+        monitor.done();
+    }
 
-		// make sure the project is up2date before we do that or else
-		// icons may not be computable when GMF needs them because the
-		// corresponding
-		// project is still building
-		WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
-			@Override
-			public void execute(IProgressMonitor monitor) {
-				// We need to make sure the ArtifactManager finished loading
-				// before
-				// we start refreshing, or else the artifacts wouldn't be found
-				// and the
-				// content
-				// of the diagram would be deleted.
-				try {
+    /**
+     * This stores the appropriate ITigerstripeProject at the map level in a
+     * custom variable. This becomes then very handy to perform late look-up
+     * 
+     * For some reason we never thought of that before although it would have
+     * saved quite of few headaches...
+     * 
+     * @since 2.1
+     */
+    public void initializeTSProjectInMap() {
 
-					monitor.beginTask("Building " + getTSProject().getName(),
-							10);
-					for (ITigerstripeModelProject project : getTSProject()
-							.getReferencedProjects()) {
-						monitor.subTask("Building referenced project: "
-								+ project.getName());
-						project.getArtifactManagerSession().refresh(monitor);
-						monitor.worked(1);
-					}
-					getTSProject().getArtifactManagerSession().refresh(monitor);
-					monitor.worked(2);
-					monitor.done();
-				} catch (TigerstripeException e) {
-					EclipsePlugin.log(e);
-				}
-			}
-		};
+        // make sure the project is up2date before we do that or else
+        // icons may not be computable when GMF needs them because the
+        // corresponding
+        // project is still building
+        WorkspaceModifyOperation op = new WorkspaceModifyOperation() {
+            @Override
+            public void execute(IProgressMonitor monitor) {
+                // We need to make sure the ArtifactManager finished loading
+                // before
+                // we start refreshing, or else the artifacts wouldn't be found
+                // and the
+                // content
+                // of the diagram would be deleted.
+                try {
 
-		IProgressService service = PlatformUI.getWorkbench()
-				.getProgressService();
+                    monitor.beginTask("Building " + getTSProject().getName(),
+                            10);
+                    for (ITigerstripeModelProject project : getTSProject()
+                            .getReferencedProjects()) {
+                        monitor.subTask("Building referenced project: "
+                                + project.getName());
+                        project.getArtifactManagerSession().refresh(monitor);
+                        monitor.worked(1);
+                    }
+                    getTSProject().getArtifactManagerSession().refresh(monitor);
+                    monitor.worked(2);
+                    monitor.done();
+                } catch (TigerstripeException e) {
+                    EclipsePlugin.log(e);
+                }
+            }
+        };
 
-		try {
-			service.run(true, false, op);
-		} catch (InterruptedException e) {
-			EclipsePlugin.log(e);
-		} catch (InvocationTargetException e) {
-			EclipsePlugin.log(e);
-		}
+        IProgressService service = PlatformUI.getWorkbench()
+                .getProgressService();
 
-		// all we've got to do is create the first adapter at the top level,
-		// on the Map...
-		InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
-		map.setCorrespondingITigerstripeProject(getTSProject());
-	}
-	
-	protected boolean isEnabled() {
-		return DiagramSynchronizationManager.getInstance().isEnabled();
-	}
+        try {
+            service.run(true, false, op);
+        } catch (InterruptedException e) {
+            EclipsePlugin.log(e);
+        } catch (InvocationTargetException e) {
+            EclipsePlugin.log(e);
+        }
+
+        // all we've got to do is create the first adapter at the top level,
+        // on the Map...
+        InstanceMap map = (InstanceMap) editor.getDiagram().getElement();
+        map.setCorrespondingITigerstripeProject(getTSProject());
+    }
+
+    protected boolean isEnabled() {
+        return DiagramSynchronizationManager.getInstance().isEnabled();
+    }
 
 }
\ No newline at end of file