In this paper we investigate capacity optimization mechanisms for multi-beam satellite systems built on a realistic payload model. The first proposed mechanism deals with long term traffic variations, for which capacity optimization algorithms are proposed based on per-beam traffic requests. Due to the high asymmetry of the traffic, our algorithms provide time and spatial flexibility illuminating a specific set of beams within a window of several time-slots. Our algorithms maximize the amount of capacity actually offered while providing reduced power consumption. The second proposed mechanism deals with short-term traffic variations, for which we propose Network Coding (NC) based techniques at the link layer. The aim is to increase the offered capacity taking advantage of overlapping beam coverage, usually considered as a source of interference. This technique is meant to be applied not only in classical multi-beam systems, but also on top of the per-beam capacity optimization as a method to deal with fast traffic unbalances not evaluated in the first mechanism. Analysis and simulations results show that system capacity can be increased up to 13% in the first case and up to 90% in the second case.