This book describes recent theoretical findings relevant to bilevel programming in general, and in mixed-integer bilevel programming in particular. New algorithms for solving linear and mixed-integer bilevel programming problems are presented and explained.