Ridges are characteristic curves of a surface that mark salient intrinsic features of its shape and are therefore valuable for shape matching, surface quality control, visualization and various other applications. Ridges are loci of points on a surface where either of the principal curvatures attain a critical value in its respective principal direction. These curves have complex behavior near umbilics on a surface, and may also pass through certain turning points causing added complexity for ridge computation. We present a new algorithm for numerically tracing ridges on B-Spline surfaces that also accurately captures ridge behavior at umbilics and ridge turning points. The algorithm traverses ridge segments by detecting ridge points while advancing and sliding in principal directions on a surface in a novel manner, thereby computing connected curves of ridge points. The output of the algorithm is a set of curve segments, some or all of which, may be selected for other applications such as those mentioned above. The results of our technique are validated by comparison with results from previous research and with a brute-force domain sampling technique.