Take a non stick pan or wok.
Add oil and heat it.
Add whole garam masala such as cardamoms, cloves, cinnamon, bay leaf and shahi zeera.
Saute for few seconds.
Add sliced onions and cook them until they turn golden brown in color.
Add ginger garlic paste and saute for few minutes on low flame to get rid of raw smell.
Add the lamb/ mutton into it and roast until the color of mutton changes.
Add dry spices such as salt, red chilli powder, turmeric powder, mix well.
Cook the masala until oil leaves the sides on low flame.
Add the tomato puree into the mutton and give a mix.
Cook the tomato puree masala for 10-15 minutes on low flame and oil should start leaving the sides.
Add beaten yogurt/ dahi and mix well.
Cook the gravy until oil leaves the sides on low flame.
Add water approximately 2 glasses, check for salt at this stage and add as per taste if required and mix well.
Cover and cook the mutton on low heat until it gets tender.
Keep stirring and keep checking in between.
If not stirred in between masala sticks to the bottom and may burn.
Once the mutton is about to tenderize, add garam masala powder, coriander powder and black pepper powder.
Give a good mix.
Cook until mutton is perfectly tenderized.
Once the mutton is almost done and soft, cook the mutton uncovered on low heat until the gravy is nicely roasted and let all the water get absorbed if there is any.
Keep stirring in between.
When mutton gets soft and roasted, add some chopped coriander leaves and cook for few minutes.
Lastly, add lemon extract, mix and switch off the flame.
Serve hot with roti, chapathi or paratha...