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:     if  not (aSharedTransaction is TmDatabaseConnection) then
        raise TmDataConnectionException.Create('Shared transaction is not a TmDatabaseConnection. Don''t know how to handle it.');
  
      if ((aSharedTransaction as TmDatabaseConnection).ConnectionInfo.DatabaseName = FConnectionInfo.DatabaseName) and
        ((aSharedTransaction as TmDatabaseConnection).ConnectionInfo.VendorType = FConnectionInfo.VendorType) then
        Self.SetSharedConnection(aSharedTransaction as TmDatabaseConnection);
    end;
  end;
  
  
negative.code:   TmDatabaseConnectionsTandem = class
    strict private
      FOwnedConnection : TmDatabaseConnection;
      FAncestorConnection : TmDatabaseConnection;
      FSharedConnection : TmDatabaseConnection;
      FConnectionInfo : TmDatabaseConnectionInfo;
      procedure SetSharedConnection (aConnection : TmDatabaseConnection);
  