Given a network and a set of connection requests on it, we consider the maximum edge-disjoint paths and related generalizations and routing problems that arise in assigning paths for these requests. We present improved approximation algorithms and/or integrality gaps for all problems considered; the central theme of this work is the underlying multi-commodity flow relaxation. Applications of these techniques to approximating families of packing integer programs are also presented. Key words and phrases. Disjoint paths, approximation algorithms, unsplittable flow, routing, packing, integer programming, multicommodity flow, randomized algorithms, rounding, linear programming.