This article presents a very efficient SLAM algorithm that works by hierarchically dividing a map into local regions and subregions. At each level of the hierarchy each region stores a matrix representing some of the landmarks contained in this region. To keep those matrices small, only those landmarks are represented that are observable from outside the region. A measurement is integrated into a local subregion using O(k2 ) computation time for k landmarks in a subregion. When the robot moves to a different subregion a full least-square estimate for that region is computed in only O(k3 log n) computation time for n landmarks. A global least square estimate needs O(kn) computation time with a very small constant (12.37ms for n = 11300). The algorithm is evaluated for map quality, storage space and computation time using simulated and real experiments in an office environment.