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:   private
      fObservers: TObjectList;
      fSubjects: TObjectList;
      fUpdatesCount: Integer;
      procedure tryUpdate;
      procedure updateEntities;
  
negative.code:   Classes, SysUtils, Contnrs;
  
  type
  
    (**
     * interface for a single Coedit service (many to one relation).
     * A service is valid during the whole application life-time and
     * is mostly designed to avoid messy uses clauses or to limit
     * the visibility of the implementer methods.
     *)
    ICESingleService = interface
      function singleServiceName: string;
    end;
  
    (**
     * Manages the connections between the observers and their subjects in the whole program.
  