Position-based routing has proven to be a scalable and efficient way for packet routing in mobile ad-hoc networks. To enable position-based routing, a node must be able to discover the location of the node it wants to communicate with. This task is typically accomplished by a location service. In this paper, we propose a novel location service called HLS (Hierarchical Location Service). HLS divides the area covered by the network into a hierarchy of regions. The top level region covers the complete network. A region is subdivided into several regions of the next lower level until the lowest level is reached. We call a lowest level region a cell. For a given node A, one specific cell is selected on each level of the hierarchy by means of a hash function. As A changes its position it transmits position updates to these responsible cells. If another node wants to determine the position of A it uses the same hash function to determine the cells that may hold information about the position of A. It then proceeds to query the nodes in these cells in the order of the hierarchy until it receives a reply containing the current position of A. Because of its hierarchical approach HLS is highly scalable and particularly well suited for networks where communication partners tend to be close to each other. Due to the inherent scaling limitations of ad-hoc networks it is very likely that most ad hoc networks will display this property. Furthermore HLS is very robust to node mobility and node failures since it uses regions to select location servers and not a chain of mobile nodes as it is the case, e.g., for the well known Grid Location Service (GLS). We demonstrate these traits by providing extensive simulation data on the behaviour of HLS in a wide range of scenarios and by using GLS as a benchmark.