The Grid provides infrastructure that allows an arbitrary application to be executed on a range of different computational resources. When input files are very large, or when fault tolerance is important, the data may be replicated. Existing Grid data replication middleware suffers from two shortcomings. First, it typically requires modification to existing applications. Second, there is no automatic resource selection and a user must choose the replica manually to optimize the performance of the system. In this paper we discuss a middleware layer called the GriddLeS Replication Service (GRS) that sits above existing replication services, solving both of these shortcomings. Two case studies are presented that illustrate the effectiveness of the approach.