The project investigates the theoretical boundaries of efficient computation. Which computational problems can be solved with a reasonable amount of computational resources, and for which computational problems is this hopeless? We primarily studied so-called constraint satisfaction problems, which is a very large class of problems that appear for example in scheduling, artificial intelligence, temporal and spatial reasoning, computational linguistics, phylogenetic reconstruction, and optimisation. The project explores the power of existing algorithmic paradigms (such as constraint propagation or least fixed point computation) but also developed powerful theoretical results about computational hardness. A major aspect of the project are complete classifications for large classes of problems; these classifications indicate which problems are easy and which are hard to solve. These complexity classifications lead to the discovery of completely new and unexpected polynomial-time algorithms. Such algorithms and more generally insights into the nature of polynomial-time computation has an impact in all of the application fields mentioned above.