A mobile computing device for determining a user's location, the mobile computing device comprising: a plurality of inertial sensors to sense inertial characteristics of the mobile computing device; a walk classification module to determine, based on the sensed inertial characteristics, a walking gait of a user of the mobile computing device, wherein the walking gait is one of a first gait indicative of the user holding the mobile computing device to the user's side while walking or a second gait indicative of the user swinging the mobile computing device along the user's side while walking; a step detection module to detect that the user has taken a physical step based on the sensed inertial characteristics and the determined walking gait of the user; a heading determination module to determine a raw directional heading of the mobile computing device indicative of a direction of the physical step; a location determination module to determine an estimated location of the user based on the determined raw directional heading of the user, an estimated step length of the user, and a previous location of the user at the previous physical step, characterized in that to detect that the user has taken the physical step further comprises to: determine, in response to a determination that the walking gait of the user is the second walking gait indicative of the user swinging the mobile computing device along the user's side while walking, an acceleration of the mobile computing device based on the sensed inertial characteristics; apply a first low-pass filter to the acceleration of the mobile computing device to generate a first acceleration function; apply a second low-pass filter to the acceleration of the mobile computing device to generate a second acceleration function, wherein the first low-pass filter has a higher cutoff frequency than the second low-pass filter; determine a sinusoidal function based on the first acceleration function and the second acceleration function; and identify each peak of the sinusoidal function as corresponding with a different physical step. a plurality of inertial sensors to sense inertial characteristics of the mobile computing device; a walk classification module to determine, based on the sensed inertial characteristics, a walking gait of a user of the mobile computing device, wherein the walking gait is one of a first gait indicative of the user holding the mobile computing device to the user's side while walking or a second gait indicative of the user swinging the mobile computing device along the user's side while walking; a step detection module to detect that the user has taken a physical step based on the sensed inertial characteristics and the determined walking gait of the user; a heading determination module to determine a raw directional heading of the mobile computing device indicative of a direction of the physical step; a location determination module to determine an estimated location of the user based on the determined raw directional heading of the user, an estimated step length of the user, and a previous location of the user at the previous physical step, characterized in that to detect that the user has taken the physical step further comprises to: determine, in response to a determination that the walking gait of the user is the second walking gait indicative of the user swinging the mobile computing device along the user's side while walking, an acceleration of the mobile computing device based on the sensed inertial characteristics; apply a first low-pass filter to the acceleration of the mobile computing device to generate a first acceleration function; apply a second low-pass filter to the acceleration of the mobile computing device to generate a second acceleration function, wherein the first low-pass filter has a higher cutoff frequency than the second low-pass filter; determine a sinusoidal function based on the first acceleration function and the second acceleration function; and identify each peak of the sinusoidal function as corresponding with a different physical step. determine, in response to a determination that the walking gait of the user is the second walking gait indicative of the user swinging the mobile computing device along the user's side while walking, an acceleration of the mobile computing device based on the sensed inertial characteristics; apply a first low-pass filter to the acceleration of the mobile computing device to generate a first acceleration function; apply a second low-pass filter to the acceleration of the mobile computing device to generate a second acceleration function, wherein the first low-pass filter has a higher cutoff frequency than the second low-pass filter; determine a sinusoidal function based on the first acceleration function and the second acceleration function; and identify each peak of the sinusoidal function as corresponding with a different physical step.