Nico Rosberg had a fight on his hands for his third win of the season, with the Williams team's Valtteri Bottas keeping the Mercedes driver honest in the first half of the Austrian Grand Prix.
Even in the second half of the race, the Williams cars never lost sight of the silver Mercedes.
Daniel Ricciardo had a lacklustre weekend, the Red Bull team crashing back to earth after the Canada victory.
PRACTICE AND QUALIFYING
The return to what used to be called the A1 Ring was good to Mercedes, but the pesky (Mercedes-powered) Williams put on a good turn of speed in every session. The Red Bulls were nowhere but a hopeful McLaren looked promising.
The Saturday sessions were dry after the damp Friday outings, but it didn't stop the Williams from taking an incredible front-row lockout.
Hamilton fluffed his final lap with a spin that Rosberg in turn claimed foiled his final effort, but without much conviction.
Massa took the number one slot with a slightly disappointed Bottas in second. Daniel Ricciardo comprehensively out-qualified his teammate, taking fifth ahead of Vettel's thirteenth, twelfth after Perez's penalty was applied.
Beautiful alpine sunshine greeted the grid and Felipe Massa's first pole in many years.
Massa got away beautifully, as did Rosberg and Hamilton. Rosberg got ahead of Bottas but the Finn soon got it back by out-dragging the Mercedes up the hill.
Hamilton, though, was the big mover. He went from ninth to fourth in the first lap and took Vettel with him. The German, though, lasted just two more corners after the first lap and coasted to a halt.
The RB10 seemed to wake up as he came to a stop and Vettel proceeded to almost run Ricciardo off the road, a lap down.
The Williams immediately showed that their qualifying pace was no false dawn - Massa ended the second lap almost two seconds ahead of Rosberg and a second ahead of his fellow Williams driver.
By the time DRS was available to Massa's pursuers, the top four were covered by two seconds. Ricciardo got some bad news, his team telling him his "overtake" button was not to be used, sinking any chance he had of a strong race.
The super-soft tyres, which most of the field started on, were graining on the frontrunners by lap nine. Nico Hulkenberg switched to the soft tyre on lap 10, hoping to play an early strategic card and get out of sync with the leaders.
Magnussen followed him in, as did Kvyat and Ricciardo at the beginning of lap 11. Ricciardo had a great stop, except on his way down the lane, he was crowded out by Kvyat being released from his pit box.
Rosberg pitted next lap, stationary for just 2.6 seconds. Hamilton perservered, behind Bottas but couldn't make much of an impression, marooned a second behind Bottas.
Gutierrez's race almost came to an end in the pits after his wheel wasn't fitted correctly and he later suffered a penalty for an unsafe release.
Hamilton pitted a lap later than Rosberg on lap fourteen. The leader, Massa, stopped on lap fifteen, but it was too late. Massa came out behind Rosberg who was busy attacking Alonso and then got mugged by Hamilton at turn two.
Bottas pitted on lap 16 and dropped in behind Rosberg and in front of Hamilton. Despite going deep into turn two, the Finn held the Mercedes at bay.
As Alonso pitted, Rosberg went to work on Perez in the Force India. This allowed Bottas to close in, but Perez wasn't going to be an easybeat for the championship leader.
Hamilton ratcheted up the pressure on Bottas. The Mercedes driver had been told to be careful with his "on the limit" braking. And then a few laps later, he was told to lift and coast to save fuel.
Vettel stopped on lap twenty-two, a lap down and dead-last while Perez continued to lead having yet to stop - he had started on the soft tyre.
Daniil Kvyat found trouble on lap 26, ending his strong run. The young Russian told his team he'd run out of brakes and he limped off at turn five, but replays showed a failure of the right rear corner.
On lap 27, Perez's lead became third as both Rosberg and Bottas muscled past at turn two. Hamilton attached himself to the rear wing of the Force India, allowing Bottas again to pull away. Perez survived two laps in third before Hamilton nabbed him, again at turn two. He pitted for new tyres not long after.
Vettel then stopped again, this time for a new front wing. The world champion simply drove into Esteban Gutierrez's left rear and was investigated for the collision, but retired before a ruling was handed down.
Hamilton was back on Bottas' tail after being released from behind Perez. The Finn was coping well, more than matching Rosberg's times over the first half of the lap. The German's tyres were beginning to grain and he had run off at turn one, allowing the Williams driver to grab a chunk of time.
The Williams of Bottas was also very, very fast in a straight line - 14km/h quicker than Hamilton's formerly dominant Mercedes.
Hamilton was told by his engineer that it was - wait for it - "hammer time", releasing him from conservation mode before pitting for the second time. Williams told Massa to respond, perhaps hoping to jump Bottas.
Rosberg came in next lap, his stop a second quicker than Hamilton's four seconds.
Williams left Bottas out, also leaving him stuck in traffic. He finally came in on lap 42. There was nothing wrong with the stop, but the damage was done and Hamilton was ahead of the 77 Williams.
To rub it in, Hamilton put in a scorching lap and Alonso drew ever closer to the second Williams car, that of Massa. The Brazilian pitted on lap 44, as did Ricciardo, in from seventh.
The pit stops left Fernando Alonso out in front, but not for long, pitting on lap 47.
With Alonso out of the lead, the order was Rosberg, Hamilton, Bottas, Perez and Massa. With 22 laps to go, Perez still had to stop while Alonso was five seconds behind Massa in sixth.
Hamilton's conversations with his pit revealed a problem with the rear brakes, although it didn't seem to be as bad as it had been in Canada. The Mercedes drivers were still racing, however, if the radio messages were anything to go by.
Perez fitted the super-softs on lap 56, allowing Massa to give chase to Valtteri Bottas. The Finn was six seconds behind Hamilton, managing his tyres and hoping for another Mercedes meltdown.
Daniel Ricciardo's final laps of the race were spent chasing down Nico Hulkenberg's Force India. Hamilton seemed content with second, despite taking a tenth here or there from Rosberg.
The final two laps were tense for a fraying Rosberg. The leading Mercedes driver got a little frantic about a Marussia he need to lap and then had a big lock-up on the way to clinching the victory.
Daniel Ricciardo pinched eighth from Hulkenberg on the final lap with an audacious pass around the outside at turn five to salvage a few points from an ordinary weekend for Red Bull.
“It was frustrating today; it’s never nice going backwards on the first lap. Off the line, it was actually one of our better starts this year, although I think Kevin Magnussen on the inside got a better one," Ricciardo said.
"The last lap move put a little smile on my face, but other than that it wasn’t a great race for us – we’ve got a bit of work to do."
Valtteri Bottas brought the Wiliams home a well-deserved third place.
Mercedes may have returned to form, it wasn't an easy run and it proved that there is now a team to take the fight to the strength of Mercedes.
Formula 1 returns in two weeks for the British Grand Prix at Silverstone.
- Nico Rosberg - Mercedes - 1h27m54.967s
- Lewis Hamilton - Mercedes +1.932s
- Valtteri Bottas - Williams-Mercedes +8.172s
- Felipe Massa - Williams-Mercedes +17.358s
- Fernando Alonso - Ferrari +18.553s
- Sergio Perez - Force India-Mercedes +28.546s
- Kevin Magnussen - McLaren-Mercedes +32.031s
- Daniel Ricciardo - Red Bull-Renault +43.522s
- Nico Hulkenberg - Force India-Mercedes +44.137s
- Kimi Raikkonen - Ferrari +47.777s
- Jenson Button - McLaren-Mercedes +50.966s
- Pastor Maldonado - Lotus-Renault -1 lap
- Adrian Sutil - Sauber-Ferrari -1 lap
- Romain Grosjean - Lotus-Renault -1 lap
- Jules Bianchi - Marussia-Ferrari -2 laps
- Kamui Kobayashi - Caterham-Renault -2 laps
- Max Chilton - Marussia-Ferrari -2 laps
- Marcus Ericsson - Caterham-Renault -2 laps
- Esteban Gutierrez - Sauber-Ferrari -2 laps
- Jean-Eric Vergne - Toro Rosso-Renault 59 laps
- Sebastian Vettel - Red Bull-Renault 34 laps
- Daniil Kvyat - Toro Rosso-Renault 24 laps