Peel onions and slice fine, wash the tomatoes, chop fine and keep aside.
Heat oil in a large saucepan; add cinnamon, cardamom, cloves and sauté for half a minute; add sliced onions and sauté over medium heat, stirring occasionally, until golden brown.
Add the lamb shanks and cook over high heat for five minutes, stirring constantly.
Add ginger & garlic paste, stir well for a couple of minutes and add the turmeric, chilli, cumin and coriander powders and salt, sauté for a further five minutes. Add yoghurt and sauté for a further 5 minutes over high heat.
Add the chopped tomato, stir and allow to simmer for 5 minutes or until the oil separates from the masala.
Add enough hot water to cover the shanks and bring to a boil, cover with a lid, simmer and cook until the lamb is done (approximately 1 hour). Remove from the flame, remove the shanks using a pair of tongs and strain the cooking liquid.
Cook the strained liquid for a further 10 minutes or until reduced to the desired consistency and check seasoning.
To finish, add the cooked shanks back into the sauce, cover and simmer for a further 15 minutes, sprinkle garam masala powder (optional) and chopped, washed coriander leaves and serve hot.