Fourth seed Viktoria Azarenka kept up her fine run of form with a 6-3 3-6 6-2 win over Lucie Safarova to reach the Madrid Open semi-finals.
The Belarus player won back-to-back titles in Miami and Marbella and will reach number four in the world if she wins through to the final in Madrid.
Standing in her way is Germany's Julia Goerges, conqueror of world number one Caroline Wozniacki.
Goerges beat Anastasia Pavlyuchenkova 6-4 6-2 to seal her semi-final spot.
Sixth seed Li Na of China joined them in the last four with a 6-4 3-6 6-4 win over unseeded American Bethanie Mattek-Sands.
The Australian Open finalist will play Petra Kvitova in the last four after the Czech player beat Dominika Cibulkova 3-6 6-3 7-5.