With BAST, distributed applications are structured according to their needs in protocols: they are made of protocol objects, which act as distributed entities capable of executing various protocols. With this approach, it all comes down to choosing the right class for the right problem. We believe that inheritance is an appropriate tool to achieve this: by passing appropriate arguments to protocol operations and by implementing callback operations, programmers have the ability to tailor generic protocol classes to their needs. However, we claim that inheritance alone is not sufficient as far as protocol composition goes, because it does not offer enough flexibility. For example, inheritance does not allow to easily implement a new algorithm for some existing protocol, and then to use it in various protocol classes that are scattered in the class hierarchy. Furthermore, inheritance is not appropriate when it comes to choosing among several protocol algorithms at runtime. These limitations lead us to seek an alternative solution for flexible protocol composition.