Given the numerous, potentially reusable, Web services available on the Internet, search and composition techniques that efficiently discover viable services will be a strong requirement. A major challenge for dynamic Web service composition will be the ability to measure the quality or reliability of services that are delivered. In this paper, we present a solution for dynamic Web service composition that leverages non-functional attributes provided in the form of Service-Level Agreements (SLA's). The objective of our work is to understand the most efficient algorithms for discovering and composing web services into capabilities with predictable quality. As such, we analyze different approaches to composition when web service composition routines must take into account functional and nonfunctional information. We present our algorithm, a prototype implementation, and experimental results obtained from the various approaches to "weaving" attributes (of different dimensions) as a part of the composition process.