In a bowl, combine the chicken, 1 tablespoon of the garam masala and the juice of half of a lemon. Toss well to combine and set aside to marinate for 10-20 minutes, or cover and place in the fridge for up to overnight.
Heat the oil in a large heavy-bottomed pot set over medium heat. Once hot, add the onion and cook 2-3 minutes or until lightly charred on the edges.
Add the garlic and ginger, cook 30 seconds. Add the remaining 1 tablespoon garam masala, curry powder, Thai red curry paste, paprika, turmeric, cayenne, cinnamon and salt, continue cooking for another minute or until the curry is fragrant.
Stir in the tomato paste and cook 30 seconds. Slowly pour in the coconut milk. Stir to combine and then bring the mixture to a boil.
Once boiling, add the marinated chicken. Reduce the heat to a simmer, cover and cook for 15-25 minutes or until the chicken is fully cooked through. Stir in the yogurt and heavy cream, continue cooking uncovered for another 5 minutes. If your sauce thickens too much, add coconut milk to thin it a bit.
Remove from the heat and stir in the butter + cilantro.
To serve, divide the rice among plates and top with the butter chicken. Garnish with fresh cilantro.