Celtic survived a St Johnstone comeback at McDiarmid Park to book themselves a place in the semi-finals of the Co-operative Insurance Cup with a 3-2 victory.
An Anthony Stokes double and a Niall McGinn strike had the visitors three goals up after only 13 minutes but Sam Parkin reduced the deficit before the break.
Saints midfielder Murray Davidson headed in the second in the 54th minute to promise a remarkable fightback but while Parkin missed a decent chance to level and Fraser Forster saved brilliantly right at the end from Saints substitute Jennison Myrie-Williams, Celtic also passed up on opportunities to draw further ahead.
Stokes, who was playing through the middle with Gary Hooper, broke the deadlock in the eighth minute. The former Hibernian striker played the ball out to Ki Sung-yueng on the right and when the Saints defence failed to clear the South Korean's cross, Stokes quickly dispatched a low drive past Perth keeper Graeme Smith.
Three minutes later, after pulling off a decent save from a Ki free-kick, the keeper was helpless to prevent McGinn squeezing the loose ball in from the angle.
It seemed too easy for the Parkhead men and two minutes later the tie appeared over when McGinn, making his first start of the season, took a Hooper pass and played the ball across to Stokes who beat Smith from close range, the ball going in off the post. It looked like free-flowing Celtic could score at will as St Johnstone struggled to get any sort of foothold in the game.
Parkhead midfielder Joe Ledley had the ball in the net after racing on to a Hooper pass which split open the home defence only to be ruled offside, television pictures casting doubt on that decision.
However, in the 31st minute the Hoops' defensive frailties, which cost them dear against Rangers, were evident again when Parkin was allowed time and space to drive a left-footed volley past Forster from 16 yards.
In the 54th minute Saints were right back in the game when Danny Grainger's corner was met by the unmarked Davidson who powered a header high in to the net.
In the 61st minute Saints might have been level. Georgios Samaras initially lost possession but when Davidson set up Parkin, unmarked at the edge of the box, his right-footed shot was saved by Forster.