Spread option contracts are becoming increasingly important, as they frequently arise in the energy derivative markets, e.g. exchange electricity for oil. In this paper, we study the pricing of European and American spread options. We consider the two-dimensional Black-Scholes Partial Differential Equation (PDE), use finite difference discretization in space and consider Crank-Nicolson (CN) and Modified Craig-Sneyd (MCS) Alternating Direction Implicit (ADI) methods for time stepping. In order to handle the early exercise feature arising in American options, we employ the discrete penalty iteration method, introduced and studied in Forsyth and Vetzal (2002), for one-dimensional PDEs discretized in time by the CN method. The main novelty of our work is the incorporation of the ADI method into the discrete penalty iteration method, in a highly efficient way, so that it can be used for two or higher-dimensional problems. The results from spread option pricing are compared with those obtained from the closed-form approximation formulae of Kirk (1995), Venkatramanan and Alexander (2011), Monte Carlo simulations, and the Brennan-Schwartz ADI Douglas-Rachford method, as implemented in MATLAB. In all spread option test cases we considered, including American ones, our ADI-MCS method, implemented on appropriate non-uniform grids, gives more accurate prices and Greeks than the MATLAB ADI method.