Tropical forests contain large reserves of carbon that are vulnerable to perturbation linked to human activities, including deforestation and climate change. Accurate estimates of forest carbon are therefore required urgently to support efforts to conserve tropical forests. We quantified carbon stocks in primary and 60-year-old secondary forest plots located on infertile Ultisols in Bukit Timah Nature Reserve, one of the few remaining areas of forest in Singapore. We used tree census data for 24.2 ha of primary forest and 23 ha of secondary forest, together with allometric equations, to estimate aboveground and coarse root biomass. Coarse woody debris stocks were censused along 2.44 km and 2.12 km of transects in primary and secondary forest, respectively. Soil carbon and fine root carbon stocks were assessed from soil samples taken to 3 m depth in a 2-ha secondary forest plot and a 2-ha primary forest plot, combined with bulk density measured in a nearby soil profile pit. Total estimated carbon stock in the primary forest, which was located on the hilltop and upper slopes (80–115 m elevation), was 337 Mg C ha−1, of which 50% was aboveground biomass, 33% in soil, 12% in coarse roots, 4.6% in coarse woody debris, and 0.8% in fine roots. In the secondary forest, located on lower slopes and valley (50–85 m elevation), the total carbon stock was 274 Mg C ha−1 and the relative importance of aboveground biomass and soil were reversed, with 38% in aboveground biomass, 52% in soil, 6.9% in coarse roots, 1.5% in coarse woody debris, and 1.3% in fine roots. Including carbon in deep subsoil (i.e. to 3 m) increased soil carbon stocks by ∼40% compared to 1 m depth. Overall, the 60-year-old secondary forest contained 60% as much biomass as the primary forest, while the primary forest had lower carbon stocks than other primary forests in the region.