A branch vertex in a tree is a vertex of degree at least three. We prove that, for all s ≥ 1, every connected graph on n vertices with minimum degree at least ( 1 s+3 + o(1))n contains a spanning tree having at most s branch vertices. Asymptotically, this is best possible and solves a problem of Flandrin, Kaiser, Kuzel, Li and Ryjácek, which was originally motivated by an optimization problem in the design of optical networks.