Cut the tofu into cubes, and dry-fry in a skillet, until golden brown. Remove and set aside.
While the tofu is browning, blitz the chopped onion, ginger, and garlic in a food processor or a high-speed blender for couple of minutes, until you have a thick paste. Remove from the processor, and also set aside.
Add the tomatoes to the processor, and blitz for a few seconds, until you have a coarse purée.
Heat the oil in a wok or a kadai (or similar), add the bay leaf and the green chilli, and fry over a medium heat for a minute.
Add the onion, garlic, and ginger paste, and fry - stirring all the time - until the raw smell has gone, and the paste starts to turn golden-brown. This should take around 5-7 minutes.
Add the turmeric, and stir-fry for another 30 seconds or so.
Add the Kashmiri chilli powder and the cashew cream, and continue to stir-fry for another couple of minutes.
Add the puréed tomatoes and palm sugar, mix well, reduce the heat slightly, and continue to cook until the oil starts to separate out (around 5 mins).
Mix in the ground coriander and garam masala, and allow to cook in for another 2 mins or so.
Add the coconut milk and water, mix well, and leave to cook for another 5-7 minutes, until the oil rises to the surface of the gravy.
Add the tofu and the methi leaves, stir, reduce the heat to its lowest setting, and simmer for 5 mins to heat the tofu.
Turn off the heat, taste, stir in the vegan butter, and season with salt.
Place into a serving dish, and sprinkle the chopped coriander over the top.
If you don't have Indian bay, leave it out, do not sub Mediterranean bay - it's a completely different beast, and will not work in this recipe!