  
  	/**
  	 * 
-@@ -178,11 +179,23 @@
- 				return oldConnection;
- 			}
- 		}
-+		IFigureProvider figureProvider = null;
-+		if (getLabelProvider() instanceof IFigureProvider) {
-+			figureProvider = (IFigureProvider) getLabelProvider();
-+		}
- 		if (sn == null) {
--			sn = createNode(graph, source);
-+			if (figureProvider != null) {
-+				sn = createNode(graph, source, figureProvider.getFigure(source));
-+			} else {
-+				sn = createNode(graph, source);
-+			}
- 		}
- 		if (dn == null) {
--			dn = createNode(graph, dest);
-+			if (figureProvider != null) {
-+				dn = createNode(graph, dest, figureProvider.getFigure(dest));
-+			} else {
-+				dn = createNode(graph, dest);
-+			}
- 		}
- 		GraphConnection c = viewer.addGraphModelConnection(element, sn, dn);
- 		styleItem(c);
-@@ -282,20 +295,20 @@
+@@ -302,20 +303,20 @@
  		// rebuild the whole thing.
  
  		Map oldMap = viewer.getNodesMap();

 				if (oldNode != null) {
 					nodes[i].setLocation(oldNode.getLocation().x, oldNode.getLocation().y);
 					if (oldNode.isSizeFixed()) {
@@ -304,11 +317,11 @@
 				}
 			}
 		} else {

 			}
 			// remove the relationship from the model
-			relationship.dispose();
+//			relationship.dispose();
+			removeGraphModelConnection(connection);
 		}
 	}
 
@@ -666,6 +670,14 @@
 			// create the new node
 			getFactory().createNode(getGraphControl(), element);
 
+			if (getLabelProvider() instanceof IFigureProvider) {
+				// create the new node with a custom figure
+				IFigureProvider figureProvider = (IFigureProvider) getLabelProvider();
