A method for locating and tracking a mobile device, the method comprising: reading sensor data from each of a plurality of sensors within the mobile device, wherein the plurality of sensors comprises a magnetometer, an accelerometer and a gyroscope; classifying activity of the mobile device as motion or static; and in response to classifying activity of the mobile device as motion, determining a velocity of the mobile device, wherein the classifying activity of the mobile device comprises: collecting sensor data from each of the plurality of sensors over a time period; fusing the sensor data to produce estimates for each of a plurality of indications related to orientation and acceleration of the mobile device; normalizing an estimate for acceleration and an estimate for orientation; generating a feature vector using a plurality of scalars, the plurality of scalars comprising the normalized estimate for acceleration and the normalized estimate for orientation; comparing the generated feature vector to a reference data set; assigning the generated feature vector to a cluster of the reference data set based on said comparing; and determining a velocity of the mobile device based on the cluster to which the generated feature vector is assigned, and determining a heading of the mobile device based on the sensor data. reading sensor data from each of a plurality of sensors within the mobile device, wherein the plurality of sensors comprises a magnetometer, an accelerometer and a gyroscope; classifying activity of the mobile device as motion or static; and in response to classifying activity of the mobile device as motion, determining a velocity of the mobile device, wherein the classifying activity of the mobile device comprises: collecting sensor data from each of the plurality of sensors over a time period; fusing the sensor data to produce estimates for each of a plurality of indications related to orientation and acceleration of the mobile device; normalizing an estimate for acceleration and an estimate for orientation; generating a feature vector using a plurality of scalars, the plurality of scalars comprising the normalized estimate for acceleration and the normalized estimate for orientation; comparing the generated feature vector to a reference data set; assigning the generated feature vector to a cluster of the reference data set based on said comparing; and determining a velocity of the mobile device based on the cluster to which the generated feature vector is assigned, and determining a heading of the mobile device based on the sensor data. collecting sensor data from each of the plurality of sensors over a time period; fusing the sensor data to produce estimates for each of a plurality of indications related to orientation and acceleration of the mobile device; normalizing an estimate for acceleration and an estimate for orientation; generating a feature vector using a plurality of scalars, the plurality of scalars comprising the normalized estimate for acceleration and the normalized estimate for orientation; comparing the generated feature vector to a reference data set; assigning the generated feature vector to a cluster of the reference data set based on said comparing; and determining a velocity of the mobile device based on the cluster to which the generated feature vector is assigned, and determining a heading of the mobile device based on the sensor data.