Jon McLaughlin: Starting for only the third time under Giovanni van Bronckhorst. His composure with the ball at his feet helped to play through any of the pressure Dundee exerted. Had nothing to do otherwise. 6

James Tavernier: This tie’s importance made a start for Zukowski unlikely and given the captain’s quality throughout a lack of rotation made perfect sense. Combined expertly with Ramsey, provided top-class delivery constantly from his high position and stuck another penalty into the top corner. An excellent all-around showing. 8

Connor Goldson: Scored the opener with a composed finish, getting over the top of the ball after Helander’s header clipped the bar. Stepped into midfield well and found Ramsey on a good few occasions as Tavernier pushed up. Comfortable whenever Dundee launched an attacking assault. 7

Filip Helander: Reinstated following Balogun’s start against Red Star, the Swede almost made an instant impact from the corner. Had to deal with the pace of Mullen and one foul aside, rose to the challenge well. 7

Calvin Bassey: Continued at left-back in place of Barisic and timed his overlaps around Kent perfectly. Quality of delivery didn’t match that of the right flank but nonetheless, Bassey provided width and aggression. Won every defensive duel with a mixture of brain and braun. 7

READ MORE: 3 burning Rangers issues as James Tavernier lights up Scottish Cup victory

James Sands: Came in for his first start since the previous round and moved the ball with composure, plugging gaps and playing simple football to good effect. Also helped to maintain pressure on the Dundee defence when possession was lost. A quietly excellent performance. 8

Ryan Jack: Since returning from injury Jack’s presence in the starting 11 has been a net positive, providing balance and leadership in the middle of the park. Wasn’t as advanced as in recent weeks in this game, often providing depth behind Tavernier and Ramsey. 7

Glen Kamara: Made good movement into the box and also pulled a marker away from Kent regularly, darting into space high on the left. Combined well in possession if sometimes lacking a piece of real attacking incision. 7

Aaron Ramsey: Making just his second start since his marquee January move, as soon as Ramsey worked his way into the game the quality he possesses became really obvious. Dropping inside the pitch and combining with Tavernier, the Welshman’s clever left-footed reverse in the lead up the penalty was a pass only he saw. Combined superbly in moments. 8

Alfredo Morelos: Many predicted Roofe would start in place of the Colombian, however, van Bronckhorst favoured his first-choice forward. Unfortunate to not meet a couple of crosses, Morelos often switched play intelligently to move the home defence. Replaced at half-time. 7

Ryan Kent: Played some of the best football of his year at Dens in the first 45, cruelly denied a goal by Kerr’s goalline clearance. Skipped beyond challenges, twisted out of each duel and matched that with end product. Untouchable when dribbling in this form, a goal just before his substitution was inches away. 8

Substitutes

Fashion Sakala: Came on at the interval to play from the right before moving to the left. Two strikes tested the keeper. Found the net excellently for the third. 7

Kemar Roofe: Following a winning goal last weekend, the 29-year-old was introduced at half-time for Morelos. A left-footed drive nearly added the third. 6

Amad Diallo: Arrived after the hour mark to play from the right. Looked tidy in moments. 5

Charlie McCann: Helped to see out the game. 5

Alex Lowry: An excellent assist for Sakala late on. 7