Boil the paneer in plenty of water for 20 minutes.
Blanch the spinach until well wilted. Blend to a fine puree.
Heat the oil (and butter, if using) in a medium-sized non-stick saucepan. Add the onion and cook gently until golden. Meanwhile, blend together the tomatoes, ginger and garlic until smooth. Add to the cooked onion along with the salt and spices.
Cook over a moderate flame for 15 minutes or until the sauce releases droplets of oil back into the pan. You should be able to see these form on the base as you stir. Taste, it should taste cooked and harmonious.
Drain the paneer and add to the pan along with the spinach and cream. Cook for a further 5 minutes. Taste and adjust seasoning and serve.