We have described Cassandra, a partial-order contingency planner that can represent uncertain outcomes and construct contingency plans for those outcomes. The design of Cassandra is based on a coherent view of the issues arising in planning under uncertainty. It recognizes that, in an uncertain world, a distinction must be drawn between the actual state of the world and the planner's model of it; it instantiates an intuitively natural account of why knowledge goals exist and how they arise; and it bases its treatment of plan branching on the requirements of the agent that will execute the plan. As a result, Cassandra explicitly plans to gather information and allows information-gathering actions to be fully general. The coherence of its design provides a solid base for more advanced capabilities such as the use of varying decision-making procedures.