The AQUA architecture provides adaptive fault tolerance to CORBA applicatio
ns by replicating objects and providing a high-level method that an applica
tion can use to specify its desired level of dependability. This paper pres
ents the algorithms that AQUA uses. when an application's dependability req
uirements can change at runtime, to tolerate both value faults in applicati
ons and crash failures simultaneously. In particular, we provide an active
replication communication scheme that maintains data consistency among repl
icas, detects crash failures, collates the messages generated by replicated
objects. and delivers the result of each vote. We also present an adaptive
majority voting algorithm that enables the correct ongoing vote while both
the number of replicas and the majority size dynamically change. Together,
these two algorithms form the basis of the mechanism for tolerating and re
covering from value faults and crash failures in AQuA.