Soak the lentils in water overnight or 5-6 hours. Rinse them well before cooking.
In a pressure cooker, add the soaked lentils, and pour enough water to cover the lentils, salt, asafoetida/hing and turmeric powder. Cook until they become soft and well-cooked. (approximately 4-5 whistles in a pressure cooker)
After it is cooled, take a portion of cooked lentils and blend it in a blender or a food processor.
In a separate pan, heat butter/ghee, add the finely chopped ginger and garlic and saute until it turns light brown.
Add the chopped onions and sauté until golden brown.
Add the chopped tomatoes, cover and cook until the tomatoes are cooked well.
Add Kashmiri chilly powder, turmeric powder and garam masala. Add ¼ cup water and cook for a few more minutes until the raw smell of the masala disappears.
Add the cooked lentils and the ground lentils to this masala mixture. Adjust to the desired consistency by adding hot water. Add a teaspoon of sugar to balance all the flavours. Mix well and let it simmer for about 10 minutes until all the flavours blend well. Adjust the salt according to the taste.
Switch off the flame and add fresh cream.
Add a blob of butter on the top of Dal makhani before serving warm.
Garnish with chopped coriander leaves.
Serve hot with naan or rice.