We do things in the world by exploiting our knowledge of what causes what. But in trying to reason formally about causality, there is a difficulty: to reason with certainty we need complete knowledge of all the relevant events and circumstances, whereas in everyday reasoning tasks we need a more serviceable but looser notion that does not make such demands on our knowledge. In this work we introduce the notion of ``causal complex'' for a complete set of events and conditions necessary for the causal consequent to occur, and use the term ``cause'' for the makeshift, nonmonotonic notion we require for everyday tasks such as planning and language understanding. Like all interesting concepts, neither of these can be defined with necessary and sufficient conditions, but they can be more or less tightly constrained by necessary conditions or sufficient conditions. We discuss the issue of how to distinguish between what is in a causal complex from what is outside it, and within a causal complex, how to distinugish the eventualities that deserve to be called ``causes'' from those that do not, in particular circumstances. In addition, we discuss some general properties of causality, such as transitivity, and how related notions such as ``prevent'', ``enable'', and ``maintain'', can be defined in terms of ``cause''.