WSO (Web-Services Orchestration) addresses a broad set of failure scenarios that become relevant when web-service implementations encapsulate multiple web-service calls to other systems. Network timeouts introduce uncertainty about the success or failure of a given API call: In certain scenarios, simply retrying the operation may make the situation worse. In order to guarantee pseudo-atomicity of a web-service call sequence, the failure of one API call implies that other, successfully completed, API calls may have to compensated for before retrying the original set of web-service calls. Even if no failure occurs, orchestration of a web-service to deal with edge-cases (such as expiration of credentials) can be difficult to implement correctly. In this paper we describe an approach to solving such scenarios which we have implemented in our WSO project. To facilitate use of WSO, the programming model is designed to wrap existing code rather than requiring rewriting code. We show the benefits of WSO in the context of a motivating scenario and also present a before/after comparison.