Wales were made to toil but stayed on course for a tilt at a third Six Nations Grand Slam in eight years with a scratchy win over Italy in Cardiff.
The Azzurri defence held firm in the first half, the hosts restricted to three Leigh Halfpenny penalties.
Mirco Bergamasco landed one for Italy before Jamie Roberts charged clear to score 10 minutes into the second half.
But Wales had to wait until three minutes from time before Alex Cuthbert grabbed a second try.
Their only other score was a Rhys Priestland penalty, while Halfpenny was in the sin-bin after a clumsy challenge on Italy captain Sergio Parisse in the air.
While Wales will turn their sights to completing a clean sweep against France, the Azzurri will aim to avoid another Wooden Spoon when they take on Scotland in Rome.
Whoever wins Sunday's encounter between France and England in Paris will also have a chance of taking the title.
But a France win will see Les Bleus come to Cardiff knowing victory will clinch the Six Nations, while Wales can claim the trophy and the Grand Slam on home turf if they triumph.
Halfpenny and Bergamasco, playing his first game for Italy since suffering a shoulder injury at the World Cup, exchanged early penalties.
But Wales were applying all the early pressure, although the Italian defence did well to pick up and at least half-stop charges from Jon Davies and George North in particular.
It was a red letter day for North as the 19-year-old became the youngest player in rugby history to play in 20 Tests, beating the mark set by the then 20-year-old James O'Connor of Australia.
Wales won a second penalty when a huge scrum fractured the Azzurri eight, although this time captain Gethin Jenkins - taking the armband in Sam Warburton's absence - asked Priestland to kick for a five-metre line-out.
Matthew Rees threw to Ian Evans as the front jumper but Italy defended well, albeit with a suspicion of dragging the driving maul down.
Referee George Clancy allowed that to pass but punished Italy for offside as they attempted to smother Wales' work when the backs were released to the right.
Halfpenny kicked that from in front of the posts, followed by a slightly more difficult attempt to give Wales a 9-3 lead at half-time.
A six-point lead was not the advantage that Wales' dominance deserved, with an attacking line-out the closest that Italy had come to threatening the home try line.
Ten minutes into the second half Wales got the try they deserved, seizing on a spilled ball to launch a swift counter down the left.
Roberts received the ball just inside his own half and stepped between Bergamasco and hooker Leonardo Ghiraldini to streak upfield and go under the posts.
Halfpenny continued his 100% kicking record with the simple conversion for a 16-3 lead.
But the full-back's fortunes dipped 12 minutes when he challenged Parisse for a high ball. The Italy skipper was left writhing on the floor and Halfpenny was shown a yellow card.
Italy enjoyed their best spell in the game but were unable to make their man advantage count as Wales held their shape and their discipline.
Gatland sent on the reinforcements to help shore things up, with the most notable the return of lock Luke Charteris for his first Test since his wrist injury at the World Cup. Ospreys youngster Rhys Webb also came on to win his first cap, replacing Mike Phillips at scrum-half.
Just before Wales came back to full strength, with James Hook getting a run out instead of Halfpenny returning, Priestland extended Wales' lead to 16 points with a penalty.
Wales were denied a second try when another defence-busting Roberts run was called back for blocking by Webb.
But a quick tap-penalty saw Jenkins feed Cuthbert - off his wing into midfield - and the wing just had the strength to slip one tackle to touch down in the right corner for an unconverted try.
Wales: 15-Leigh Halfpenny, 14-Alex Cuthbert, 13-Jonathan Davies, 12-Jamie Roberts, 11-George North, 10-Rhys Priestland, 9-Mike Phillips-; 1-Gethin Jenkins (c) , 2-Matthew Rees, 3-Adam Jones, 4-Alun Wyn Jones, 5-Ian Evans, 6-Dan Lydiate, 7-Justin Tipuric, 8-Toby Faletau
Replacements: 16-Ken Owens (for Owens, 62), 17-Paul James, 18-Luke Charteris (for AW Jones, 62), 19-Ryan Jones (for Faletau, 66), 20-Rhys Webb (for Phillips, 71) 21-James Hook (for Halfpenny, 74), 22-Scott Williams (for Davies, 69)
Italy: 15-Andrea Masi, 14-Luke McLean, 13-Gonzalo Canale, 12-Alberto Sgarbi, 11-Mirco Bergamasco, 10-Kristopher Burton, 9-Fabio Semenzato; 1-Andrea Lo Cicero, 2-Leonardo Ghiraldini, 3-Lorenzo Cittadini, 4-Quintin Geldenhuys, 5-Cornelius van Zyl, 6-Alessandro Zanni, 7-Simone Favaro, 8-Sergio Parisse (c)
Replacements: 16-Tommaso D'Apice (for Ghiraldini, 54), 17-Fabio Staibano (for Cittadini, 51, Staibano for Lo Cicero, 72) 18-Marco Bortolami (for Van Zyl, 51), 19-Robert Barbieri (for Favaro, 63), 20-Tobias Botes (for Semenzato, 66), 21-Tommaso Benvenuti (for Canale, 66), 22-Giulio Toniolatti
Referee: George Clancy (IRE)
Touch judges: Peter Fitzgibbon (IRE) & Peter Allan (SCO)
TV: Geoff Hughes (ENG)