Wash and dry the chicken and cut into 50 mm x 25 mm cubes.
Grind the cinnamon, cardamoms, cloves, dried chilies and peppercorns to a fine powder.
Combine the yoghurt, lemon juice and ground spices and beat until smooth. Add the chicken, mix, cover the container and leave in the refrigerator for 4 hours or overnight.
Liquidise the onion, ginger and garlic to a smooth paste and mix in the salt. Heat the oil in a wok over a medium heat and stir fry the onion/ginger/garlic paste for 1 minute. Add the marinated chicken and stir fry for 10 minutes.
Add the tomato puree and butter and cook on a low heat, uncovered, for 10 minutes. Remove from the heat, cover and keep aside.
Mix the tomatoes, cinnamon and cayenne pepper in a separate pan, bring to the boil then cover and simmer for 10 minutes. Remove the lid and increase the heat to medium. Cook for 6 to 8 minutes until the liquid is reduced a little. Remove from the heat and allow the tomatoes to cool slightly.
Sieve the cooked tomatoes and discard the cinnamon. Add the tomatoes to the chicken and bring to the boil over a medium heat. Simmer, uncovered, for 5 minutes.
Gently stir in the cream (or yoghurt) 1 tablespoon at a time then simmer, uncovered, for a further 5 minutes.