Millwall 1 Bradford City 0

(after extra time)

As trilogies go, this one went on longer than Lord of the Rings.

But City suffered a sting in the tail that no film-maker would have dared written.

For 90 minutes at least, this was as good a performance as they have produced in a long while and considerably better than the 2-0 league defeat they suffered in the same stadium just three days earlier or the goalless draw in their first FA Cup encounter with the Lions at Valley Parade.

But it is Millwall who head for Stoke in the third round thanks to a season's load of good fortune and an extra-time own goal by Nathan Doyle that should never have stood.

Colin Todd had called for a marked improvement after Saturday and City began in a breezy fashion, carving out four chances inside the first 15 minutes.

The return of Dean Windass gave the visitors that cutting edge they had lacked on Saturday. And straight away he was in the thick of it, flashing a header wide from Ben Parker's cross.

Windass then turned provider with a chipped pass for Steve Schumacher, who beat the offside trap but put his header straight at keeper Lenny Pidgeley.

But it was encouraging stuff from the Bantams, who went even closer when, out of nothing, Doyle let fly from 30 yards and saw his shot cannon off the bar. With Millwall nerves still tingling, Windass looped another header just over.

Having survived those scares, Millwall responded with two efforts from Chris Zebroski, although City were fuming that his first burst, which was defused by David Wetherall shepherding him wide of goal, was not pulled up short by an offside flag and Doyle complained bitterly to the assistant referee.

Jermaine Johnson, criticised by Colin Todd at the weekend, forced City's first corner after 28 minutes with a cross-cum-shot which Pidgeley carefully fingered away. And City should have made the corner count as Eddie Johnson raced in to meet the ball six yards out but hammered his header straight at the keeper.

They remained in the ascendancy as Tommy Black's clever pass released Parker on the overlap. Windass received the left back's cross but could not keep his volley down.

Steve Schumacher screwed another effort wide as the Millwall fans started to vent their frustration.

Todd's side should have been ahead and having wasted some good chances on Saturday, the small knot of away fans must have wondered if they were going to be made to pay once again.

A loose Millwall pass in midfield gave City another opportunity to break menacingly but Black's pass for the unmarked Windass was a fraction too strong and the striker then failed to pick out a team-mate in the box.

With half-time approaching, JJ slipped between Zak Whitbread and Richard Shaw as the route to goal opened up invitingly but he snatched at the shot and another one had gone begging.

After such a one-sided first half, it was amazing the sides trooped off level - a moral victory for Willie Donachie's over-run Lions.

Donachie, not surprisingly, made a couple of changes at the break and Millwall offered their first real threat soon after the re-start with Filipe Morais firing over and Alan Dunne forcing a first save from Donovan Ricketts.

JJ used his burning pace to track back well and thwart Morais and as City responded, sub Ali Fuseini was shown the first yellow card for scything down Eddie Johnson.

His namesake was causing havoc on the right flank and set off on a blistering run over halfway as the game passed the hour point. Weaving in and out of blue shirts, the Jamaican looked certain to score a candidate for City goal of the season.

But with only Pidgeley to beat, he drove the wrong side of the post from ten yards. Windass was not the only City on-looker holding his head in disbelief.

Nothing had been seen of Millwall centre forward Ben May, who had caused all sorts of problems in the two previous games. But he suddenly came to life with a thumping header across goal, though he clearly looked to have taken a ride on Wetherall's shoulders.

And City almost suffered when Black was caught out by Fuseini on the byline but the shot from Morais deflected wide.

Joe Colbeck came on for Black as extra-time loomed but there was a flashpoint on the other wing where Morais caught Doyle late, provoking an angry reaction from City. The Portuguese was rightly booked - and substituted.

Time was virtually up when Mark Phillips jumped for a free header from a Millwall corner - and turned it straight back out to the wing.

Matt Clarke replaced Parker for extra-time and slotted in at left back. Mark Bower stayed in the middle and continued a solid game with a well-timed clearance from danger midway through the first added period.

City, and JJ in particular, were flagging from their exertions and they were doing most of the defending. As the crowd tried to lift Millwall, Doyle almost gifted them a winner with a header on to the top of his own goal.

Suddenly City conjured a break as Bridge-Wilkinson fed JJ but Pidgeley smothered at the near post. And the roof immediately caved in as Doyle, clearly shoved in the back by Dunne, could only divert another cross into his own net with his head.

City were seething and Wetherall led a posse of fuming players towards the referee's assistant but the goal had been given.

City had five minutes to save it but Millwall sub Poul Hubertz should have put the game beyond doubt when clean through. Wetherall was thrown up front but City's legs, drained by the London triple-header, were gone.

They summoned one final effort - only to see Schumacher's late shot deflect against the bar. It was a cruel end to an unfair night for the shattered Bantams.