Begin by heating oil in a deep kadhai or pan on medium heat. Once the oil is hot, add in the whole spices one by one. Stir well.
Next, add in finely chopped onion, fry till it gets a brown colour. As the colour develops, add in the ginger garlic paste and cook till the raw flavour of the pastes is gone. Once the pastes are cooked, add in some water to stop the cooking of onions.
Now, add in the dry masalas. Stir well on medium heat to roast the spices.
Once he spices are cooked, add in some sour yoghurt. Keep stirring while cooking till the oil begins to come above the masala. Now, add in the sliced green chilli and the tomato puree.
Cook the tomato puree for about 5 min on medium heat until the oil begins to leave the masala again. Once the masala is cooked, add in the remaining water and leave to simmer.
Meanwhile, in another pan, heat the butter along with a dash of oil, on high flame and add in the diced onions. Sprinkle with salt and turmeric. Toss these onions until they soften yet remain a little bite.
Next add in slit green chilli and toss for about 2 min. Take off from the heat and reserve.
In the same pan, that was used to cook the onions, add a little more oil and toss in the cubed paneer, on high heat. Sprinkle with salt and cook till the sides of the paneer begin to get a nice golden colour.
The gravy must be close to getting ready at this point. If the curry is a little too thin then add in 4 tbsp of cashew paste. You can alternatively also use Magas paste or poppy seed paste or almond paste. Dilute the cashewnuts paste before adding to the gravy to avoid forming of lumps.
Simmer the gravy with the cashewnuts paste till it thickens, at which point you can add in the paneer, and the cooked cubed onions.
Finish with coriander powder and a sprinkle of garam masala. Stir to mix and serve hot.