I should really generalise this when I have time.