After an injury- and illness-plagued start to their campaign, England rallied impressively in the New Year to win three consecutive Tests for their first back-to-back series win in South Africa since the 1950s. It was a campaign notable for key performances from a series of familiar and not-so-familiar faces. Here are the marks out of ten:
Ben Stokes (318 runs at 45.42; 10 wickets at 22.00)
Immense. Having bowled England to victory in Cape Town - where he also made a brisk 72 to help set up the declaration - Stokes made a high-class century to help establish a match-defining position in Port Elizabeth. While he wasn't always at his best in the field - he dropped several chances - he still finished with 12 and batted and bowled selflessly as the position of the match demanded. Invariably, he was the man to whom his captain turned when all he had no other answers. Invariably, he delivered. Only five other players have ever claimed 10 wickets, taken 10 catches and scored over 300 runs in a series: it's a list that includes Sir Ian Botham and Sir Garfield Sobers. Stokes is in that company now.
Ollie Pope (266 runs at 88.66)
After missing the Centurion Test due to illness, Pope made an unbeaten 61 in Cape Town - adding 35 with Anderson for the tenth wicket - and a maiden Test century in Port Elizabeth. In doing so, Pope confirmed his status as England's most exciting batting talent since Root. He also caught brilliantly at short-leg - he took six catches during the Port Elizabeth Test - and rounded off the series with another half-century in Jo'burg during which he out-shone Root.
Mark Wood (95 runs at 47.50; 12 wickets at 13.58)
A triumphant return. Wood was only able to play two Tests, but made an impact in both with his unusually sharp pace. While he had to play a supporting role on a slow surface in Port Elizabeth, his hostility appeared to unsettle batsmen and may well have led to wickets at the other end. Underlining his new-found robustness - well, relatively - he appeared again in Jo'burg a few days later and this time won more reward with a five-wicket haul in South Africa's first innings. His match haul of 9 for 100 were the best overseas figures by an England bowler since 2012 (Monty Panesar) and the best by a seamer since 2008 (Ryan Sidebottom). He also thrashed quick runs - he hit eight sixes in his three innings - in an uplifting display.
James Anderson (9 wickets at 19.88; 4 runs at 4)
Off the pace in Centurion but immaculate in Cape Town, Anderson missed the final two Tests through injury. Hampered by illness and rust in that first Test, there were a few murmurs about his future before the Cape Town Test. But he responded by becoming the oldest seamer to claim a five-wicket haul for England in a Test since Freddie Brown in 1950-51. In obvious pain, he returned to the field even after it became clear he was injured to help in England's bid for victory in the second Test. You'd be insane to write him off.
Joe Root (317 runs at 45.28; 4 wickets at 47.50)
A series that started with some demanding that Root be sacked as captain, ended with his team having won three Tests in succession in South Africa for the first time in more than a century. While Root would have wanted to convert more of his starts - he made three half-centuries and a 48 but never made more than 61 - he was only seven runs away from being England's highest scorer of the series. He also showed the value of his off-spin in Port Elizabeth, too, where he claimed career-best figures (4 for 87). Most of all, despite the gripes about his captaincy, he has built a focused, united team who are committed to him and their shared goals. There's little doubt he will be at the helm when England go to Australia.
Dom Sibley (324 runs at 54.00)
Something of a breakthrough series. While the highlight was undoubtedly a match-shaping century in Cape Town, he also made scores of 29, 34, 36, 44 and 44 to finish the series as England's leading run-scorer and join a distinguished list of England openers - Geoff Boycott, Graham Gooch, Michael Atherton, Alec Stewart, Michael Vaughan, Marcus Trescothick, Andrew Strauss and Alastair Cook - to have made six consecutive 25+ scores in Test cricket in the last 50 years. Crucially, he consistently helped see the shine off the ball and tire the South Africa bowlers and formed an assured opening stand with Crawley.
Dom Bess (8 wickets at 25.75; 1 run at 0.33)
No one could reasonably have asked for more from Bess than he provided during this series. Called into the squad as back-up for the ailing Jack Leach, Bess was thrown into the Cape Town Test without a match on tour and performed a valuable holding role (he bowled 60 overs across both innings for a cost of just 119 runs). He went even better in Port Elizabeth, claiming a maiden five-wicket haul and cementing his place in the squad for Sri Lanka, even though he was omitted in Jo'burg. For a man who was struggling to maintain a place in his county team a few months ago, it was a breakthrough tour.
Stuart Broad (61 runs at 15.25; 14 wickets at 19.42)
While there was none of the drama of four years ago - no match-defining spells such as his five-for at the Wanderers - Broad still finished the series as England's top-wicket taker. Perhaps a little of the pace and menace has gone from Broad's bowling these days, but it says much for his hunger to continue to contribute at this stage that he has reinvented himself as a relentless seamer prepared to bowl dry and support more explosive bowlers. No England bowler delivered more overs and no England seamer had a lower economy-rate. If this proves to be his final tour - and with Sri Lanka and India next, that is a possibility - it represents a memorable finale.
Rory Burns (93 runs at 46.50)
Batted impressively in making 84 in the second innings in Centurion - his sixth score of 47 or more in his most recent nine Test innings - but was ruled out of the rest of the series after suffering a freak injury while playing football ahead of the second Test. Great first touch, mind …
Sam Curran (130 runs at 18.57; 10 wickets at 31.10)
Preferred to Chris Woakes by virtue of his left-arm variation, Curran benefited from taking the new ball for much of the series and responded with career-best figures in Centurion. He probably bowled better at other times without rewards and, by the end of the series, also appeared to be bowling with greater pace. He showed with the wickets of de Kock (a slower ball in Cape Town) and Malan, who was deceived by the change of angle in the same game, that he could contribute even when the ball was not swinging. Although you sometimes wish he would give himself a bit more time with the bat, he thrashed a selfless 44 in Port Elizabeth and similar 35 in Jo'burg. It's probably worth reminding ourselves that he is just 21.
Chris Woakes (32 runs at 16; 3 wickets at 28.33)
Probably unfortunate to appear in only one Test, Woakes still found a way to contribute with bat and ball. Belying a modest overseas record, he managed to gain appreciable movement with the Kookaburra ball and was unlucky to finish with only three wickets in Jo'burg. Batted in typically assured fashion in the first innings there, too.
Jofra Archer (7 runs at 3.50; 6 wickets at 27.83)
Claimed a five-for in Centurion - albeit an expensive one - but missed the three remaining Tests due to an elbow injury. Anyone doubting his desire to play need only have seen his obvious distress after he had to pull out of the final game.
Zak Crawley (163 runs at 32.60)
Taking advantage of the injury to Burns, Crawley helped give England some solid starts (70 and 33 in Port Elizabeth; 28 in Cape Town, 107 and 56 in Jo'burg) without going on to register the big individual score which might have made his place safe. He did, though, increase his own career-best score in five successive innings and top-score in the first innings in Jo'burg. The century opening stand in that final Test was England's first since December 2016. For a 21-year-old who was taken on the tour largely to gain experience, it was an impressively assured performance. One for the future.
Joe Denly (210 runs at 30; 2 wickets at 37.50)
A series of diminishing returns. After a fifty in the first innings at Centurion, Denly made consistent starts (31, 38, 31, 25 and 27) but was unable to go on a register a significant personal score. He did play his part in adding some solidity to England's top-order, however, and he did weigh in at Cape Town with two important wickets (the left-handers, Elgar and de Kock) with his leg-spin.
Jos Buttler (115 runs at 16.42, 14 catches)
Disappointing. Looked uncertain with the bat and managed a top score of just 29 in seven innings. Also kept untidily in Port Elizabeth. May well struggle to retain his place.
Jonny Bairstow (10 runs at 5)
Recalled at the last minute due to illness, Bairstow did little to show the improvement in his game after succumbing to yet another bowled dismissal in the first innings in Centurion. To be fair to Bairstow, the ball kept low and may well have dismissed many batsmen. He was more culpable for his second-innings dismissal, flashing at one outside off stump. He didn't play again in the series, but remained cheerful and constructive as a sub-fielder and squad member.