3-D volumes of data can be efficiently flattened with Fourier domain methods as long as the reflections are continuous and depth invariant. To handle faults (discontinuous reflections), I pose the flattening problem in the time-space (T-X) domain to apply a weight. This ignores fitting equations that are affected by the faults. This approach successfully flattens a synthetic faulted model. Also, the flattening method is applied repeatedly in the T-X domain to flatten a synthetic model that has pinch-outs and structure that varies with depth. There are two possible schemes for handling unconformities. One scheme requires that the unconformity be picked, the data separated into different volumes, flattened individually, and then recombined. Another scheme is to apply the flattening method which picks travel-times for all horizons at once without being restricted to time-slices. It is expected that this method will be much more computationally intensive but will require less initial picking. Both of these methods need more development and testing.