How to dynamically discover suitable Web services to support Web services composition has become a challenge. Run-time service discovery is a critical problem hindering Web service technology proliferation and that should be deeply investigated. However, little care has been taken to wards the need of execution environments that support the discovery of replacement services that become unavailable or fail to meet certain requirements at run-time. To adress this shortcoming, this paper proposes an extension to our semantic framework for engineering Web services compositions. This extension consists of a run-time service discovery tool. The key contribution of the paper is the combination of components for monitoring composition requirements at run-time, and components for discovering services at run-time. The former components detect violations of requirements at run-time. The framework uses the specifications of the violated requirements to generate queries for discovering services that could substitute for malfunctioning services. These queries incorporate both structural and behavioural aspects of the required services and are executed by the run-time service discovery component of the framework.