Match ends, Reading 1, Millwall 1.
Liam Trotter's stoppage-time penalty helped Millwall to snatch a point against in-form Reading.
Sean Morrison's header early in the first half gave Reading, unbeaten at home this season, the lead.
Millwall were reduced to 10 men five minutes before the end as midfielder Jimmy Abdou received his second yellow card for a wild lunge on Jobi McAnuff.
But the visitors received a lifeline when Adam Federici fouled Scott McDonald, and Trotter levelled.
The draw lifts Millwall, who have won only once away from home this season, further clear of the relegation zone.
But Reading, who were aiming for a sixth victory in nine league games, lose ground on the Championship's top two Burnley and Leicester.
It took Reading just nine minutes to go in front as the Lions' defence gave Morrison the freedom to head home unchallenged for his first goal of the season.
A superb David Forde save prevented Alex Pearce from doubling the Royals' advantage with a close-range effort.
And after the break, only the post stopped Adam Le Fondre from scoring his 150th goal for the club.
Millwall responded positively, with Scott McDonald twice denied by Federici, while the offside flag brought a halt to Danny Shittu's celebrations after the defender thought he had scored at the far post.
A Millwall comeback seemed unlikely when Abdou was shown a red card, but the Londoners continued to battle and Trotter's driving spot-kick secured a dramatic point.
Reading manager Nigel Adkins:
"We have to be more ruthless but they're a young group of lads who are still learning. When we're on top, we have to capitalise on it.
"But Millwall worked very hard to justify that they should go away with something.
"You have to give them a lot of credit. We put ourselves in a position to take all three points but didn't take it.
"It was a penalty but we shouldn't really have put ourselves in a position where the referee had to make a decision."
Millwall manager Steve Lomas:
"We wanted to back up that good draw with QPR. We asked the lads if they could produce that same sort of performance away from home and they did.
"At 1-0 down, we still hung in there, took it to Reading and stayed in the game. When we show that spirit and play like that, we are a decent team.
"That is probably the best football that we've played this season. Liam was ice cool with his penalty, it was a great finish."
- 18BridgeSubstituted forKellyat 82'minutes
- 37ObitaSubstituted forMcAnuffat 68'minutes
- 12McClearyBooked at 54mins
- 9Le FondreBooked at 40minsSubstituted forRobson-Kanuat 63'minutes
- 15ConnollySubstituted forSmithat 19'minutes
- 28MaloneBooked at 45mins
- 10BaileyBooked at 7minsSubstituted forMorisonat 76'minutes
- 3ShittuBooked at 54mins
- 11WoolfordSubstituted forFeeneyat 70'minutes
- 26AbdouBooked at 85mins
- David Phillips
- Shots on Target
Second Half ends, Reading 1, Millwall 1.
Corner, Millwall. Conceded by Adam Federici.
Corner, Reading. Conceded by David Forde.
Goal! Reading 1, Millwall 1. Liam Trotter (Millwall) converts the penalty with a right footed shot to the top left corner.
Penalty Millwall. Scott McDonald draws a foul in the penalty area.
Penalty conceded by Adam Federici (Reading) after a foul in the penalty area.
Liam Feeney (Millwall) wins a free kick in the defensive half.
Foul by Jobi McAnuff (Reading).
Attempt missed. Steve Morison (Millwall) header from the centre of the box is close, but misses to the right. Assisted by Liam Feeney with a cross.
Foul by Martyn Waghorn (Millwall).
Hal Robson-Kanu (Reading) wins a free kick in the defensive half.
Offside, Reading. Jobi McAnuff tries a through ball, but Stephen Kelly is caught offside.
Delay over. They are ready to continue.
Delay in match Jobi McAnuff (Reading) because of an injury.
Second yellow card to Nadjim Abdou (Millwall) for a bad foul.
Foul by Nadjim Abdou (Millwall).
Jobi McAnuff (Reading) wins a free kick in the attacking half.
Foul by Liam Trotter (Millwall).
Pavel Pogrebnyak (Reading) wins a free kick on the left wing.