For indoor pedestrian navigation with a shoe-mounted inertial measurement unit (IMU), the zero velocity update (ZUPT) technique is implemented to constrain the sensors' error. ZUPT uses the fact that a stance phase appears in each step at zero velocity to correct IMU errors periodically. This paper introduces three main contributions we have achieved based on ZUPT. Since correct stance phase detection is critical for the success of applying ZUPT, we have developed a new approach to detect the stance phase of different gait styles, including walking, running and stair climbing. As the extension of ZUPT, we have proposed a new concept called constant velocity update (CUPT) to correct IMU errors on a moving platform with constant velocity, such as elevators or escalators where ZUPT is infeasible. A closed-loop step-wise smoothing algorithm has also been developed to eliminate discontinuities in the trajectory caused by sharp corrections. Experimental results demonstrate the effectiveness of the proposed algorithms.