Index: trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/Arc.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/Arc.cs	(revision 11241)
+++ trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/Arc.cs	(revision 11248)
@@ -25,7 +25,5 @@
 
 namespace HeuristicLab.Core {
-  /// <summary>
-  /// An arc that can have a weight, a label, and a data object for holding additional info
-  /// </summary>
+  [Item("Arc", "A graph arc connecting two graph vertices, that can have a weight, label, and data object for holding additional info")]
   [StorableClass]
   public class Arc : Item, IArc {
Index: trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/DirectedGraph.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/DirectedGraph.cs	(revision 11241)
+++ trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/DirectedGraph.cs	(revision 11248)
@@ -71,6 +71,6 @@
     private void AfterDeserialization() {
       foreach (var vertex in vertices) {
-        vertex.ArcAdded += OnArcAdded;
-        vertex.ArcRemoved += OnArcRemoved;
+        vertex.ArcAdded += OnVertexArcAdded;
+        vertex.ArcRemoved += OnVertexArcRemoved;
       }
 
@@ -91,6 +91,7 @@
       vertices.Add(vertex);
       // register event handlers
-      vertex.ArcAdded += OnArcAdded;
-      vertex.ArcRemoved += OnArcRemoved;
+      vertex.ArcAdded += OnVertexArcAdded;
+      vertex.ArcRemoved += OnVertexArcRemoved;
+      OnVertedAdded(this, EventArgs.Empty);
     }
 
@@ -102,6 +103,7 @@
         RemoveArc(arc);
       // deregister event handlers
-      vertex.ArcAdded -= OnArcAdded;
-      vertex.ArcRemoved -= OnArcRemoved;
+      vertex.ArcAdded -= OnVertexArcAdded;
+      vertex.ArcRemoved -= OnVertexArcRemoved;
+      OnVertexRemoved(this, EventArgs.Empty); // do not pass the removed vertex in the event as we don't need it anymore
     }
 
@@ -118,4 +120,5 @@
       target.AddArc(arc);
       arcs.Add(arc);
+      OnArcAdded(this, EventArgs.Empty);
     }
 
@@ -126,10 +129,10 @@
       source.RemoveArc(arc);
       target.RemoveArc(arc);
+      OnArcRemoved(this, EventArgs.Empty);
     }
 
-    public event EventHandler ArcAdded;
-    protected virtual void OnArcAdded(object sender, EventArgs<IArc> args) {
+    protected virtual void OnVertexArcAdded(object sender, EventArgs<IArc> args) {
       var arc = args.Value;
-      // the ArcAdded event is fired by a vertex when an arc from or towards another vertex is added to his list of connections
+      // the ArcAdded event is fired by a vertex when an arc from/to another vertex is added to its list of connections
       // because the arc is added in both directions by both the source and the target, this event will get fired twice 
       // here, we only want to add the arc once, so if its already contained, we return without complaining
@@ -138,7 +141,5 @@
     }
 
-
-    public event EventHandler ArcRemoved;
-    protected virtual void OnArcRemoved(object sender, EventArgs<IArc> args) {
+    protected virtual void OnVertexArcRemoved(object sender, EventArgs<IArc> args) {
       var arc = args.Value;
       if (!arcs.Contains(arc)) return; // the same rationale as above 
@@ -148,5 +149,30 @@
     // events
     public event EventHandler VertexAdded;
+    protected virtual void OnVertedAdded(object sender, EventArgs args) {
+      var added = VertexAdded;
+      if (added != null)
+        added(sender, args);
+    }
+
     public event EventHandler VertexRemoved;
+    protected virtual void OnVertexRemoved(object sender, EventArgs args) {
+      var removed = VertexRemoved;
+      if (removed != null)
+        removed(sender, args);
+    }
+
+    public event EventHandler ArcAdded;
+    protected virtual void OnArcAdded(object sender, EventArgs args) {
+      var added = ArcAdded;
+      if (added != null)
+        added(sender, args);
+    }
+
+    public event EventHandler ArcRemoved;
+    protected virtual void OnArcRemoved(object sender, EventArgs args) {
+      var removed = ArcRemoved;
+      if (removed != null)
+        removed(sender, args);
+    }
   }
 }
Index: trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/Vertex.cs
===================================================================
--- trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/Vertex.cs	(revision 11241)
+++ trunk/sources/HeuristicLab.Core/3.3/Collections/DirectedGraph/Vertex.cs	(revision 11248)
@@ -27,4 +27,5 @@
 
 namespace HeuristicLab.Core {
+  [Item("Vertex", "An object representing a vertex in the graph. It can have a text label, a weight, and an additional data object.")]
   [StorableClass]
   public class Vertex : Item, IVertex {
