Recently, there has been increased interest in the development of autonomous flying vehicles. However, as most of the proposed approaches are suitable for outdoor operation, only a few techniques have been designed for indoor environments, where the systems cannot rely on the Global Positioning System (GPS) and, therefore, have to use their exteroceptive sensors for navigation. In this paper, we present a general navigation system that enables a small-sized quadrotor system to autonomously operate in indoor environments. To achieve this, we systematically extend and adapt techniques that have been successfully applied on ground robots. We describe all algorithms and present a broad set of experiments, which illustrate that they enable a quadrotor robot to reliably and autonomously navigate in indoor environments.