Using a food processor or stick blender, blend the onion, yoghurt, tomato, garlic, coriander, chilli, turmeric, garam masala and salt until smooth.
Mix together the mixture with the lamb chunks and refrigerate for 1 hour (overnight is even better).
Heat the vegetable oil in a large pan until hot. Add the cumin seeds, green and black cardamom pods, cloves and bay leaves and sizzle for 10 seconds before adding the onion. Fry for 4-5 minutes until soft and lightly golden.
Tip in all the lamb and its marinade and stir well for 5-6 minutes. Pour in 2 cups water and bring to a simmer. Reduce the heat to very low, cover and simmer very gently for 1½-2 hours until the lamb is tender. If the sauce is thin, remove the lid for 15 minutes to reduce slightly.