Rinse tofu, pat dry, wrap in dish towel and place something heavy on top, like a heavy pot or book.
Keep pressed for 20-30 minutes to remove excess water, this will result in better adsorption of flavors.
Preheat the oven to 400 degrees, and place the top rack close to the top of the oven, and the other rack in the middle of the oven.
Combine yogurt (or non-dairy yogurt) with all the tofu marinade ingredients, and mix well.
Add tofu and coat well, cover and place in the refrigerator for 8-24 hours.
Heat 3 tbsp of oil in a large skillet or medium pot on medium-high heat.
Add onions and cook for 7-8 minutes, stir often, until caramelized.
Reduce heat to medium-low and add serrano pepper, garlic, ginger, and sauté for about 2 minutes.
Add additional 2 tbsp of oil and stir well.
Quickly add coriander, garam masala, chili powder, cumin, turmeric, cardamom, cayenne, and paprika. Stir until well combined, about 2-3 minutes, and do not burn spices.
Pour 2 cups of Zoup Vegan Savory Broth in a skillet and reduce for 3-4 minutes.
Add tomatoes and the other 2 cups of the Zoup Vegan Savory Broth, simmer for about 20-25 minutes, until sauce starts to thicken, stirring occasionally.
While the sauce is simmering, place tofu 1 inch apart on a baking sheet with all the marinade, and bake on the middle rack for 20 minutes, flip tofu on the other side half way through cooking.
Place the oven on broil and put the tofu on the top rack under the broiler for 2-4 minutes, until a little golden brown, do not burn. Set aside.
When the sauce has thickened some, add cream (or cashew milk), simmer for 5 minutes, taste and add sugar if necessary (cashew milk is a little sweet).
Add tofu, lemon juice, salt and pepper, and adjust seasoning as needed.
Garnish with cilantro leaves.