In a bowl, combine all the marinade ingredients and coat the chicken well. Cover and marinate in the fridge for at least 30 minutes (overnight is best).
Heat oil in a pan over medium heat. Add the chicken and cook until lightly browned on both sides. Remove and set aside.
In the same pan, melt 2 tbsp butter. Add onions and cook until soft and translucent.
Stir in ginger-garlic paste and cook until fragrant. Add chili powder, paprika, cumin, sugar, and garam masala. Mix well.
Pour in the tomato sauce and simmer for a few minutes. Add the cooked chicken back to the pan and let it simmer until chicken cooks through and the sauce comes together.
Lower the heat and stir in heavy cream until smooth and creamy.
Add a slice of butter.
Optional: drizzle extra cream on top and swirl for that classic butter chicken look.
Garnish with chopped cilantro and serve with rice or naan.