Port Adelaide has moved to third on the AFL ladder after upsetting competition leader St Kilda by seven points at Docklands.
Jason Horne-Francis racked up 11 clearances and 18 contested possessions as the Power posted their fourth straight win on Friday night, 12.11 (83) to 11.10 (76).
The Saints were held goalless in the second term, the first time that has happened to them this season.
With the clash in the balance, key position player Jeremy Finlayson went into defence and took two crucial marks late in the last term.
Finlayson also snapped the goal in the last term that gave the Power the lead again after the Saints had kicked the first two goals of the quarter.
Key forward Charlie Dixon then laid a big smother on Saints defender Josh Battle that set up Sam Powell-Pepper for a goal, before marking and kicking a major to give the Power a match-winning buffer.
St Kilda started the match predictably, having two less inside 50s in the first quarter, but squeezing Port Adelaide defensively.
The home side led by as much as 19 points and had a three-goal lead at the first break.
Adding to the Power's woes, midfielder Xavier Duursma hurt his knee in a heavy collision with Saints ruckman Rowan Marshall and was emotional when he had to be subbed out of the match during quarter-time.
But just when it looked like the match was following a familiar script, the Power changed the course of the contest.
After their shaky start, the visitors steadied and went to work to crack open the Saints.
With Horne-Francis racking up clearances, the Power kicked four goals in the second term and took a seven-point lead into half-time.
Saints captain Jack Steele was on fire in the first quarter with 11 disposals, but only managed three in the second.
The Saints hit back with three goals in the third and briefly regained the lead, only for Power forward Junior Rioli to kick two himself and help his side lead by eight points at three-quarter time.
Ross Lyon's troops were left ruing poor decisions when they went into attack.
They ended up with five more inside 50s, but lacked system when the match was in the balance.
St Kilda's Jack Sinclair had a match-high 33 disposals, while Power on-baller Travis Boak racked up 30 and Marshall impressed for the Saints in the ruck.
AAP