Building reliable distributed systems is a challenging task, as one has to deal with many complex issues, e.g., reliable communications, failure detections, distributed consensus, replication management, transactions management, etc. Each of these issues corresponds to some distributed protocol and there are many. In such a protocol ``jungle'', programmers have to choose the right protocol for the right need. Besides, when more than one protocol is necessary, comes the problem of their interactions, which further complexifies programmers' task. The BAST framework aims at structuring reliable distributed systems by allowing complex distributed protocols to be composed in a flexible manner. For example, by adequately composing reliable multicast protocols with transactional protocols, BAST makes it possible to transparently support transactions on groups of replicated objects. It relies heavily on the Strategy pattern, which is recursively used to get around the limitations of inheritance as far as protocol composition goes. Our first prototype is written in Smalltalk [8] and is fully operational. It is currently being used for teaching reliable distributed systems and for prototyping new fault-tolerant distributed protocols. Adding more and more protocol classes will help us to further test our approach. BAST has also been recently ported on the Java [9] programming environment. Performances are not yet good enough for practical application development, but we are currently working on performance evaluations and code optimization [7].