A detailed description of how the migration and modeling algorithm works is given in the previous report Bevc and Claerbout (1992). The subroutine kfastaax() is called with conj==0 for modeling and with conj==1 for migration. The version of kfastaax() presented here differs from the previous version in that the input is not transposed. This does not result in any substantial speed penalty but it allows velocity to vary with midpoint. In order to compensate for the Hankel tail, a causal half-order derivative is applied to the data before calling the subroutine in the modeling mode, and an anticausal half-order derivative is applied after calling the subroutine in the migration mode.