Heat oil in thick-bottomed pan and sauté cardamom, peppercorns, bay leaves, cinnamon, and cloves until they begin to sizzle.
Add onions, green chillis, and fry 3-5 minutes on medium high heat, until onions turn pink and tender. Add ginger and garlic and saute 1-2 minutes until mixture begins to express oil.
Add red chilli powder, cumin, tumeric, coriander and garam masala, and fry 1 minute. Mix in tomatoes and salt, and cook a few minutes until tomatoes pulp and release oil around sides of pan. Slowly stir in yogurt to form a smooth gravy base.
Add chicken pieces and cook covered 10-15 minutes on medium low heat until done. If using spinach - toss in spinach at the end - last few minutes so it has time to wilt.
Garnish with coriander leaves (cilantro) and serve hot with a side of rotis bread or rice and a salad.