We discuss how to use the structure of lattices to reformulate and solve integer programming problems. We take a closer look at integer knapsack problems and illustrate how it is possible to use the structure of lattices to prove properties of certain classes of knapsack problems, and how these properties can be used in designing practically efficient algorithms.