Contrast normalization models are extremely successful at describing the responses of neurons in visual cortex. They consist of two stages. A linear spatio-temporal filter (the receptive field) generates stimulus selectivity, such as orientation and direction preference. A non-selective, contrast-dependent, gain-control stage then normalizes the output of the linear filter. The models can quantitatively describe a variety of response nonlinearities, including contrast saturation, contrast invariance of orientation tuning, cross-orientation suppression, contrast-dependent changes in preferred temporal frequency, and modulation of neuronal responses by attention. In the standard model of contrast normalization, the normalization step is performed by a contrast-dependent shunting inhibition, which scales the size of the EPSPs generated at the linear stage. This shunt must be large, contrast-dependent, and only weakly selective for stimulus orientation and direction. Because we have rarely observed inhibition of this description in intracellular recordings from simple cells, we have investigated alternative mechanisms that might underlie contrast normalization. We applied the measured responses of LGN neurons to a feed-forward model of a simple cell that includes a variety of nonlinear properties of neurons and synapses that we measured directly. These include spike threshold, contrast saturation in the LGN responses, synaptic depression, contrast-dependent changes in trial-to-trial variability, and diversity in the timing of LGN responses. The model makes predictions of the synaptic input to simple cells, which we then compared to the membrane potential responses of simple cells recorded intracellularly in vivo. The model is highly constrained, with only two free parameters: the number of presynaptic LGN cells, and the aspect ratio of the simple cell subfield. And yet nearly all of observed aspects of contrast normalization emerge with considerable precision. We conclude that while the brain may find it advantageous to implement contrast normalization in the spike output of cortical simple cells, it uses a variety of underlying mechanisms to do so.