Pre-soak the urad dal, preferably overnight, in cold water. Cover them by about an inch with the water.
Simmer the lentils in 4 cups water until tender - this could be a couple hours. Urad dal takes forever.
Drain the lentils. Puree about 1/2 the lentils and return to the pot with the remaining whole lentils
Warm your curry base.
Pre-heat a frying pan over medium heat. Add the ghee.
Add the whole dried chilies, cardamom and cinnamon to the pan and let them sizzle for about 15 seconds. The chilies will start to change colour.
Add garlic/ginger paste and cook until sizzling subsides.
Turn the heat down to medium low. Add the kasoor methi and cook 20 seconds.
Add the Indian restaurant spice mix and salt. Cook over medium low heat about 30 seconds.
Add tomato paste, increase heat to medium and cook until oil separates and craters form.
Add 3 oz of the curry base. Raise heat and cook until craters form and oil separates.
Add 6 oz of the curry base and cook until craters form and oil separates.
Add another 6 oz of the curry base and cook until craters form and oil separates.
Simmer 5 minutes.
Return the pot with the lentils to the stove over medium low heat.. Add contents of the pan to the pot with the urad dal and stir to combine.
Mix in butter until melted.
Stir in heavy cream. Continue to heat until the dal makhani comes back to temperature.
Adjust salt to taste and garnish with a bit more cream (optional) and cilantro.