We present an approach that improves the robustness of web service compositions enabling their recovery from failures that can happen at different execution times. We first present a taxonomy of failures as an overview of previous research works on the topic of fault recovery of service compositions. The resulting classification is used to propose our self-healing method for web service compositions. The proposed method, based on the refinement process of compositions, takes user preferences into account to generate the best possible recovering compositions. In order to validate our approach, we produced a prototype implementation capable of simulating and analysing different scenarios of faults. Our work introduces algorithms for generating synthetic compositions and web services. In this setting, the recovery time, the user preference degradation and the impact of different locations of failure are investigated under different strategies, namely local, partial or total recovery. These strategies represent different levels of intervention on the composition.