This paper provides an introductory survey of a class of optimization problems known as bilevel programming. We motivate this class through a simple application, and then proceed with the general formulation of bilevel programs. We consider various cases (linear, linear-quadratic, nonlinear), describe their main properties and give an overview of solution approaches. Key words: Bilevel programming, Mathematical programs with equilibrium constraints, Nonlinear programming, Optimal pricing MSC classification: 90C05, 90C11, 90C20, 90C27, 90C3D, 65K05