Serie A leaders Juventus suffered a 2-1 defeat at mid-table Fiorentina on Sunday as the Serie A title race came alive following a niggly, bad-tempered but pulsating match.
Juve's fourth league reverse of the season, all away from home, meant their lead at the top was cut to one point after second-placed AS Roma beat Udinese 1-0 away despite a shocking penalty miss from their leading scorer Edin Dzeko.
Juventus still have a game in hand but the momentum now appears to be with Luciano Spalletti's Roma side who have won six of their last seven Serie A games and have 44 points.
Napoli beat Pescara 3-1 to stay third on 41 points with Lazio a further point back in fourth after a 2-1 win over Atalanta in which both coaches were sent to the stands.
Eighth-placed Fiorentina, who are one of the best teams in Serie A on their day but suffer from inconsistency, deservedly went ahead through Nikola Kalinic seven minutes before halftime.
Federico Bernardeschi won possession off Alex Sandro and slipped the ball through to Kalinic who guided a well-placed shot wide of Gianluigi Buffon.
Kalinic's fellow Croat Milan Badelj doubled Fiore's lead in the 54th with a cross that found the net as the Juve defence were distracted by Federico Chiesa's lunge at the ball.
Gonzalo Higuain pulled one back three minutes later with a typically opportunist goal, the Argentine's 13th in the league this season, to set up a tense final half hour.
Play was repeatedly interrupted by late tackles and the match finished with 38 fouls and eight yellow cards, but there were also chances for both sides.
Higuain had a header parried at point-blank range by Ciprian Tatarusanu who managed to gather the ball at the second attempt.
Shortly afterwards, Paulo Dybala got into an excellent scoring position but fired wildly over while Fiorentina's Josip Ilicic missed a golden chance on the break at the other end.
Radja Nainggolan gave Roma a 12th minute lead at Udinese, scoring on the half-volley, before Dzeko's penalty miss six minutes later when the Bosnia forward, who has scored 13 league goals this season, sent his effort high and wide of the goal.
Roma goalkeeper Wojciech Szczesny spared Dzeko's blushes soon after with a brilliant save to deny Felipe's close-range header and then managed to turn away Rodrigo de Paul's shot from under the bar in the next Udinese attack.
Francesco Totti passed another landmark when the 40-year-old came on for Roma in the second half as he has now played for them in each of the last 25 years.
Napoli broke loose after halftime against Pescara with goals from Lorenzo Tonelli, Marek Hamsik and Dries Mertens while Gianluca Caprari replied with a stoppage-time penalty.
Andrea Petagna gave Atalanta the lead at Lazio with a superb effort when he collected Stefan Radu's pass with his back to goal and scored with a half-volley on the turn.
Lazio coach Simone Inzaghi had already been sent off for dissent before Sergej Milinkovic-Savic headed in Lucas Biglia's free kick to equalise just before halftime and Immobile won and converted a penalty in the 68th to win the game for the hosts.
Inzaghi's opposite number Gian Piero Gasperini was also ordered from the touchline as his frustration boiled over.
Marco Boriello scored twice as Cagliari came from behind to beat Genoa 4-1 after the visitors went ahead with a goal by Giovanni Simeone, the son of Atletico Madrid coach Diego.
Sassuolo produced an almost replica performance as they beat Palermo by the same score, which left the Sicilians two places off the bottom and eight points adrift of the safety zone.