Sri Lanka made it three wins in their last three matches with a successful run-chase against Australia in Hobart on Friday.
The three-wicket win sees the tourists move to the top of the CB Series table with three group matches remaining.
Thisara Perera proved the hero for Sri Lanka, striking Dan Christian for 10 runs in two balls in the penultimate over after his side had threatened to throw away a good position.
Mahela Jayawardene (85) and Dinesh Chandimal (80) were the mainstays of the reply but Christian's three wickets threatened to derail them after Peter Forrest had led Australia to 280-6 with a maiden century.
Forrest was brought into the squad for this series despite having not scored a domestic one-day ton, but passed 50 in each of first two ODI innings and went one better as he scored 104 off 138 balls.
His partnership of 154 with Michael Clarke (72 off 79) helped the hosts recover from 27-2 but, having scored at a pedestrian rate, it was left for the lower-middle order to add quick runs at the end.
Openers Matthew Wade and David Warner both fell within the opening seven overs, the former driving Nuwan Kulasekara to mid-off and the latter caught behind off Farveez Maharoof.
Clarke announced his arrival with a four and a six off Maharoof in his first full over at the crease, and Forrest dispatched Rangana Herath for a maximum.
But those shots were the exception as the pair found scoring tough against the changes of pace of the Sri Lanka attack.
Forrest powered Perera for four to reach 50 off 84 balls, and, after Australia passed 100 in the 26th over, Clarke followed his partner to the landmark.
The captain was out to an excellent catch from Perera off Angelo Mathews, before Forrest reached 100 with a quick single.
Forrest smashed his next ball for four, but the next delivery, in attempting a rare extravagant shot, sliced Mathews to Maharoof at deep cover.
Thereafter Dave Hussey (40 not out off 28), Mike Hussey (21 off 14) and Brett Lee (20 not out off 15) swung the bat to boost Australia's total, but the ease with which they found quick runs suggested Sri Lanka had a good chance of a successful chase.
And so it proved, with man-of-the-match Jayawardene setting an upbeat tempo early on, dominating the strike and the opening stand of 55 which ended when Tillakaratne Dilshan was out for just three.
Kumar Sangakkara made a run-a-ball 22 before he became Christian's first victim, caught by David Warner, before Chandimal joined his captain in a 63-run stand.
Jayawardene was out 15 runs short of his century, Xavier Doherty getting one to turn past his outside edge with Matthew Wade whipping off the bails.
But the skipper left his side in good shape and Chandimal continued the good work in a 49-run partnership with Lahiru Thirimanne (24) and a stand of 41 with Angelo Mathews (24).
Christian returned to have Thirimanne caught by Ben Hilfenhaus and then Chandimal was out lbw to Ryan Harris having hit seven boundaries in his 80 from 100 balls.
At that point Sri Lanka required 39 from 34 balls but when Farveez Maharoof was caught off Hilfenhaus in the next over the pendulum started to swing Australia's way.
Perera joined Mathews with the match firmly in the balance, but when the latter hit Christian straight to Warner at long-off the tourists needed another 14 off nine - advantage Australia.
But Perera held his nerve against the seamer, hacking the next ball to the boundary before smashing a six over mid-wicket to effectively seal the win.
Perera finished with 21 not out off 11 balls but it was Nuwan Kulasekara who hit the winning runs off the first ball he faced from Brett Lee.
The win puts Sri Lanka top of the CB Series with 15 points, with Australia on 14 and India 10.