Heat oil to medium heat in large saucepan ordDutchoven.
Add onions and slowly cook for about 20minutes, until golden.
Reduce heat. Do not let them get crispy or burnt
Add garlic and cook until fragrant, about 1minute
Stir in garam masala, paprika, cinnamon and salt
Cook for 1 more minute – more fragrance
Add tomatoes: cook 2 minutes
Add cream and carefully purée the mixture, using an immersion blender (or standing blender).
Do this in batches or the steam will blow the lid off.
Put sauce back in saucepan to simmer.
With your slotted spoon, take chicken out of marinadeand put it in sauce (discarding remaining marinade).
Cover, the mixture in the pan and simmer overmedium-low heat until cooked, say about 12 minutes.
Take out a piece and check to make sure it isn't pink inside.
A slow simmer is needed to cook the breasts, sothey don't become tough; you don't want to overcook them.
Stir in the butter, and add more salt to taste. Serve sprinkled with cilantro, if desired.