Availability of a wide variety of Web services over the Internet offers opportunities of providing new value added services built by composing them out of existing ones. However, for this composition to be effective, Web services should be semantically described and developed tools must enable to select appropriate services based on functional requirements that deal with the desired functionality of the composite service, and nonfunctional concerns that relate to issues like performance and availability. This presents a challenging task due to the increasing number of available Web services with their descriptions remaining in the syntactic level. In this paper, we propose a semantic Web services composition framework to address this challenge. The key features of this framework are: a semantic description of Web services and user queries taking into account non-functional concerns, a separation between service type and instances to enable working with large collections of Web services, and an efficient composition algorithm. The paper presents also experimental results of the proposed approach and compares its performance with that of some existing approaches.