Heat oil and half the butter in a large, heavy-based saucepan over high heat. Cook chicken, in batches, until browned. Remove to a plate.
Reduce heat to medium and add remaining butter. Add ginger and cook for 1 minute. Add coriander, cumin, garam masala and chilli powder and cook for 30 seconds. Add tomato puree and a pinch of salt and simmer for 10 minutes.
Return chicken to saucepan with yoghurt and cream. Simmer a further 10 minutes or until chicken is cooked. Ladle into bowls, sprinkle with coriander and serve with roti or basmati rice.