Heat the oil in a large heavy pan then add the chopped onion and stir for a few minutes with the heat on high
Add the cinnamon, cardamoms, cloves and fennel seeds and stir a little then turn the heat down to low and cook for 10 minutes
Add the ginger and garlic stir and cook for another 10 minutes on low heat stirring regularly.
Add the turmeric, coriander and chilli powder and fry gently for a minute
Add 1 tablespoon of yoghurt stir round and turn the heat up so the yoghurt sizzles in the oil.
When the yoghurt has lost a lot of its moisture then you can add another tablespoon.
Stir and fry as before.
Repeat until all the yoghurt is incorporated.
Add the tomato purée and stir in.
Stir in plenty of hot water enough to make the mixture very fluid.
Bring to the boil and simmer stirring occasionally for 20 minutes.
Add salt to taste.
Heat a little oil in a large heavy frying pan and stir-fry the tofu pieces over a moderate heat until they are sealed.
Add the tofu to the sauce and simmer gently for another 10 minutes until the tofu is cooked.
Stir from time to time and if the sauce gets too dry add a little hot water
10 minutes from the end add the creamed coconut pieces and stir to melt it in.
Remove the cassia and cardamoms
Serve.