This survey introduces a link between BPEL and a more abstract BPEL-like language. It is tutorial in nature, focusing on features particular to BPEL, like scope-based compensation and fault-handling. Such features are demonstrated here with a number of executable BPEL programs. Although BPEL also provides features common to other programming languages, it contains three important components: the BPEL program (program algebra), XSD (Data types) and WSDL (Input/Output). This survey concentrates on clarifying program logic and algebra instead of syntax. In doing so an undesirable feature of compensation in BPEL is observed and a correction for it proposed. It is argued that such observations justify the more abstract view of BPEL taken here which facilitates accountable correctness.