Sunderland's push for the promotion to the Premiership stuttered as Colchester blew the English Championship title race wide open with a 3-1 win.
Starting the day clear at the top of the table, Roy Keane's Black Cats needed two more wins to guarantee a return to the top flight at the first attempt.
They must have fancied claiming one of them at Layer Road after
going into the match unbeaten in 17, but two goals in a frantic
late spell gave the home side a deserved win - and provided more
hope for Derby and Birmingham in second and
third.
Sunderland's fate remains in their own hands as a maximum haul from their last two matches will ensure they go up.
It seemed to be a case of same old, same old when veteran Dwight Yorke drew Sunderland level nine minutes into the second period — cancelling out Wayne Brown's first-half opener with a clinical header and briefly sparking his side to life.
But with eight minutes left Richard Garcia spun in the box and drilled into the corner, before Jamie Cureton's last-gasp penalty settled it.
Southend look like joining Luton in League One next season after they were beaten by a stoppage-time Barry Hayles goal at Plymouth. Sylvan Ebanks-Blake gave the home side a sixth-minute lead and Peter Clarke levelled for the Shrimpers before the late drama.
Southend are now four points adrift of safety with only two games remaining.
Third-bottom Leeds' survival hopes also suffered a blow after they narrowly failed to hold out with 10 men at Southampton. Alan Thompson was sent off in the first half after a mass brawl but the visitors clung on until substitute Bradley Wright-Phillips' 84th-minute winner.
Leeds' woes were compounded when Nick Barmby came off the bench to rescue a 1-1 draw for Hull at Stoke. The former England midfielder pounced in stoppage-time to cancel out Liam Lawrence's opener and edge the Tigers one point clear of danger.
The final relegation place looks like a straight shootout between Leeds and Hull after Barnsley, Leicester and QPR all won.