Abstract The rate of Cd 2+ sorption by a calcareous aquifer sand was characterized by two reaction steps, with the first step reaching completion in 24 hours. The second step proceeded at a slow and nearly constant rate for at least seven days. The first step includes a fast adsorption reaction which is followed by diffusive transport into either a disordered surface film of hydrated calcium carbonate or into pore spaces. After 24 hours the rate of Cd 2+ sorption was constant and controlled by the rate of surface coprecipitation, as a solid solution of CdCO 3 in CaCO 3 formed in recrystallizing material. Desorption of Cd 2+ from the sand was slow. Clean grains of primary minerals, e.g. quartz and aluminosilicates. sorbed much less Cd 2+ than grains which had surface patches of secondary minerals, e.g. carbonates, iron and manganese oxides. Calcite grains sorbed the greatest amount of Cd 2+ on a weight-normalized basis despite the greater abundance of quartz. A method is illustrated for determining empirical binding constants for trace metals at in situ pH values without introducing the experimental problem of supersaturation. The binding constants are useful for solute transport models which include a computation of aqueous speciation.