Updated

Mark Cavendish beat Italy's Elia Viviani to win the penultimate stage of the Tour of Britain on Saturday.

The British national champion just did enough to hold off the fast-finishing Viviani in Guildford, south of London, in a 155km stage that started Saturday at Epsom racecourse.

Britain's Bradley Wiggins, the 2012 Olympic and Tour de France champion, finished in the pack to retain his overall lead heading into Sunday's final stage in London.

Wiggins, seeking a first victory in his home tour, is 26 seconds ahead of Swiss rider Martin Elmiger, with Britain's Simon Yates third, 66 seconds back, following his victory on Dartmoor on Friday.

Cavendish won in Guildford last year but said the experience almost proved more of a hindrance than a help on Saturday.

"I just mis-timed it a little bit," the Isle of Man rider told ITV4.

"I was maybe over-confident. I remembered last year kicking out on the cobbles and I thought I'd do the same but maybe I didn't get it right.

"I saw (Viviani) coming and just moved across to put him on the rough part of the road.

"The second kick really takes so much out of me so we'll have to see about tomorrow (Sunday)", Cavendish added.