anchor.diff:    end;
   end;
   
  +function TmDatabaseConnection.FindAncestorConnection(const aConnectionInfo: TmDatabaseConnectionInfo): TmDatabaseConnection;
  +var
  +  currentAncestor : TmDatabaseConnection;
  +begin
  +  Result := nil;
  +  currentAncestor := Self.FAncestor;
  +  while Assigned(currentAncestor) do
  +  begin
  +    if currentAncestor.ConnectionInfo.IsEqual(aConnectionInfo) then
  +    begin
  +      Result := currentAncestor;
  +      exit;
  +    end
  +    else
  +      currentAncestor := currentAncestor.FAncestor;
  +  end;
  +end;
  +
   constructor TmDatabaseConnection.Create;
   begin
     FImplementation := nil;
     FOwnsConnectionInfo:= false;
     FCached:= false;
     FLocked:= false;
  +  FAncestor := nil;
   end;
   
   constructor TmDatabaseConnection.Create(aConnectionInfo: TmDatabaseConnectionInfo; const aOwnsConnectionInfo: boolean);
  
positive.code:     FOwnsConnectionInfo : boolean;
      FLocked : boolean;
      FCached : boolean;
  
      FImplementation : TmDatabaseConnectionImpl;
      procedure CreateImplementation;
    public
      constructor Create; overload;
      constructor Create(aConnectionInfo : TmDatabaseConnectionInfo; const aOwnsConnectionInfo: boolean = false); overload;
  
negative.code:   TmDatabaseConnectionsTandem = class
    strict private
      FOwnedConnection : TmDatabaseConnection;
      FAncestorConnection : TmDatabaseConnection;
      FSharedConnection : TmDatabaseConnection;
      FConnectionInfo : TmDatabaseConnectionInfo;
      procedure SetSharedConnection (aConnection : TmDatabaseConnection);
  