Place all marinade ingredients in a bowl and leave to marinate in the fridge for 30 minutes.
Heat olive oil in a non-stick skillet over medium-high heat. When hot, add the marinated chicken (work in two batches to not overcrowd the skillet) and cook until golden on both sides (2-3 minutes per side). Remove onto a clean plate and set aside.
Into the same skillet, add the butter. When melted, add the onions and cook until soft. Add the garlic, ginger, coriander, cumin, chili powder, and garam masala, then season with salt to taste. Cook for a minute, stirring occasionally.
Then, pour in the crushed tomatoes and cook just until it starts simmering. Transfer the hot mixture into a blender and pulse until the mixture is smooth.
Pour the sauce back onto the skillet and add the heavy cream. Mix well and taste. Add extra salt if needed.
Add the chicken and mix. Cook for 10 minutes or until the chicken is fully cooked and the sauce has thickened but is still pourable. If it’s too thick, add a splash of heavy cream and mix.
Serve right away with a side dish of your choice and freshly-chopped cilantro.