A method comprising: receiving, by a user device (110; 210; 310) comprising at least one processor, information associated with one or more access points (140, 142, 144; 240; 340, 342, 344), wherein the information comprises a respective received signal strength indicator, RSSI, and a respective identification of the one or more access points; determining, by the user device, an approximate location of the user device, the approximate location comprising a subset comprising one or more candidate stored locations of a set of stored locations, wherein determining the approximate location of the user device comprises implementing a first localization technique based at least in part on the received information to determine the subset of candidate stored locations; determining, by the user device, an error associated with the approximate location of the user device; increasing, by the user device, the subset of candidate locations by one or more additional candidate locations based at least in part on the error; determining, by the user device, one or more historical locations of the stored locations of the user device comprising previous locations of the user device based at least in part on the received RSSIs; adding, by the user device, the one or more historical locations to the subset of candidate locations; and determining, by the user device, a location of the user device, wherein determining the location of the user device comprises implementing a second localization technique to compare the received RSSIs to stored RSSIs associated with the subset of candidate locations to determine one or more possible locations of the user device by determining best matches. receiving, by a user device (110; 210; 310) comprising at least one processor, information associated with one or more access points (140, 142, 144; 240; 340, 342, 344), wherein the information comprises a respective received signal strength indicator, RSSI, and a respective identification of the one or more access points; determining, by the user device, an approximate location of the user device, the approximate location comprising a subset comprising one or more candidate stored locations of a set of stored locations, wherein determining the approximate location of the user device comprises implementing a first localization technique based at least in part on the received information to determine the subset of candidate stored locations; determining, by the user device, an error associated with the approximate location of the user device; increasing, by the user device, the subset of candidate locations by one or more additional candidate locations based at least in part on the error; determining, by the user device, one or more historical locations of the stored locations of the user device comprising previous locations of the user device based at least in part on the received RSSIs; adding, by the user device, the one or more historical locations to the subset of candidate locations; and determining, by the user device, a location of the user device, wherein determining the location of the user device comprises implementing a second localization technique to compare the received RSSIs to stored RSSIs associated with the subset of candidate locations to determine one or more possible locations of the user device by determining best matches.