Bayern Munich reached a third successive DFB-Pokal final thanks to a 2-1 win over Eintracht Frankfurt, with Robert Lewandowski's winner 16 minutes from time setting up a clash with Bayer Leverkusen.
Hansi Flick's men were made to work for the victory in the second half after seeing their standards slip, but their superior individual quality eventually shone through as Lewandowski netted his 45th goal of the season.
Ivan Perisic put Bayern in front with less than a quarter of an hour played by nodding in an inch-perfect pass from the excellent Thomas Muller and they should have been coasting to the win by half-time, with the defending champions spurning several opportunities.
Frankfurt looked to have capitalised with a deserved equaliser but Danny da Costa's strike restored parity for just five minutes – Lewandowski finishing off an incisive move to book Bayern's passage to another final.
Bayern, and Muller in particular, looked in the mood right from the start, and Frankfurt were fortunate with a couple of early escapes.
Muller met a Joshua Kimmich corner with a glancing header that was cleared off the line by Dominik Kohr, before the in-form forward played the ball across the face of goal for Lewandowski and saw it to go straight through the Pole's legs.
But Bayern took the lead in the 14th minute, Perisic meeting Muller's delicate pass with a diving header.
Chances continued to fall to the hosts, but Kingsley Coman spurned two presentable opportunities and Lewandowski missed again just past the half-hour mark.
Bayern failed to raise their game to a similar level after the break, with clear-cut chances drying up and Frankfurt took advantage with 21 minutes left.
Daichi Kamada turned into space in the box and his scuffed pass fell kindly to fellow substitute Da Costa, who slotted home emphatically.
But Bayern were soon in front again – Lewandowski steering in from close range following a well-worked move, after a VAR check for a potential offside in the build-up initially delayed their celebrations.