anchor.diff:  end;
   
   procedure TCEEntitiesConnector.removeSubject(aSubject: TObject);
  +
   begin
     fSubjects.Remove(aSubject);
     tryUpdate;
  +end;
  +
  +procedure TCEEntitiesConnector.addSingleService(aServiceProvider: TObject);
  +begin
  +  if fServices.IndexOf(aServiceProvider) <> -1 then
  +    exit;
  +  if not (aServiceProvider is ICESingleService) then
  +    exit;
  +  fServices.Add(aServiceProvider);
  +end;
  +
  +function TCEEntitiesConnector.getSingleService(const aName: string): TObject;
  +var
  +  i: Integer;
  +  serv: ICESingleService;
  +begin
  +  result := nil;
  +  for i := 0 to fServices.Count-1 do
  +  begin
  +    serv := fServices[i] as ICESingleService;
  +    if serv.singleServiceName = aName then
  +      exit(fServices[i]);
  +  end;
   end;
   {$ENDREGION}
   
  
positive.code:     procedure addSubject(aSubject: TObject);
      procedure removeObserver(anObserver: TObject);
      procedure removeSubject(aSubject: TObject);
      // should be tested before forceUpdate()
      property isUpdating: boolean read getIsUpdating;
    end;
  
    (**
     * Interface for a Coedit subject. Basically designed to hold a list of observer
     *)
    ICESubject = interface
    ['ICESubject']
      // an observer is proposed. anObserver is not necessarly compatible.
      procedure addObserver(anObserver: TObject);
      // anObserver must be removed.
  
negative.code:   private
      fObservers: TObjectList;
      fSubjects: TObjectList;
      fServices: TObjectList;
      fUpdatesCount: Integer;
      procedure tryUpdate;
      procedure updateEntities;
  