Pick a pot big enough to hold all the ingredients.
Heat the oil over medium low heat. Add the onions. Cook the onions, stirring occasionally, until they break down and turn light brown. This takes 15-20 minutes. You can't skip this step.
Push the onions over to one side. Give a squeeze against the side of the pot to get some of the oil out.
Add the whole spices. Cook for about 30-45 seconds. Now add the ground spices and stir to mix with the oil. You don't want the mix to be dry at this point. You want the spices wet. If it looks dry add another tablespoon of oil. Cook for about a minute. Be careful. Don't let your spices burn.
Add the garlic ginger paste. Stir everything together and cook, stirring regularly, for 3 minutes or so.
Add the tomatoes. Stir. Cook, stirring occasionally, until the tomatoes break down. This should take 5-7 minutes.
Add the chicken stock and the potatoes. Cover and simmer (adjust your heat accordingly) for 15-20 minutes. Your potatoes should be starting to soften.
Add the chicken. SImmer another 15 minutes or until the potatoes are tender and chicken is cooked. Taste and adjust for salt. It will likely need a bit more.
Garnish with cilantro if desired. Serve with basmati rice.