@Override
 public void delete() {
   if (foreground != null) {
     foreground.deleteObserver(this);
   }
   super.delete();
   disableStartObjectObserving();
   disableEndObjectObserving();
 }
  protected void enableStartObjectObserving(ShapeGraphicalRepresentation<?> aStartObject) {

    if (aStartObject == null || !aStartObject.isValidated()) {
      return;
    }

    if (enabledStartObjectObserving) {
      disableStartObjectObserving();
    }

    if (aStartObject != null /*&& !enabledStartObjectObserving*/) {
      aStartObject.addObserver(this);
      observedStartObjects.add(aStartObject);
      if (!isDeserializing()) {
        for (Object o : aStartObject.getAncestors(true)) {
          if (getGraphicalRepresentation(o) != null) {
            getGraphicalRepresentation(o).addObserver(this);
            observedStartObjects.add(getGraphicalRepresentation(o));
          }
        }
      }
      enabledStartObjectObserving = true;
    }
  }