Scientific research is often concerned with questions of cause and effect. For example, does eating processed meat cause certain types of cancer?  Ideally, such questions are answered by randomized controlled experiments.   However, these experiments can be costly, time-consuming, unethical or impossible to conduct. Hence, often the only available data to answer causal questions is observational.   
 We consider the problem of identifying and estimating total causal effects from observational data by adjusting for confounders. We formulate a sound and complete graphical criterion for covariate adjustment that can be applied to graphs learned from observational data (with or without hidden confounders). Our criterion unifies covariate adjustment for a large set of graph classes. Moreover, we provide a straightforward way to construct a set that satisfies our criterion, if any set does. We also give scalable algorithms for listing all (and all minimal) adjustment sets. These algorithms are implemented in R packages dagitty and pcalg.