Discovery of service providers that are useful to service requesters is a common problem in large, dynamic serviceoriented systems, such as Grids. Simple service indices do not address this problem adequately when the service requesters need to describe complex conditions to be met by the service providers. Furthermore, the problem of sharing services among multiple service providers in order to enable the system to serve as many independent requesters as possible while still meeting their conditions is not addressed by such systems. This paper presents an architecture of a service discovery system for Grids, that allows dynamic registration of services and their provided capabilities. Discovery is based on matching of requested and provided capabilities. The matching process enables trading the degree of satisfaction of requested capabilities for availability of the system to multiple requesters. The discovery service seamlessly integrates with existing Grid infrastructure and speciï...