Match ends, Sunderland 2, West Bromwich Albion 0.
Sunderland ensured their Premier League status with victory over West Bromwich Albion, effectively relegating Norwich.
Jack Colback's stabbed finish and a neat Fabio Borini volley secured the win for the Black Cats, who have won four games in a row to stay up.
Jozy Altidore missed from six yards but Sunderland could not add to a lead the visitors rarely threatened to narrow.
But despite losing, West Brom are three points clear of 18th placed Norwich with a vastly superior goal difference.
The Canaries must beat Arsenal on the final day, hope West Brom lose against Stoke, and manage a 17-goal swing in the process if they are to avoid slipping into the Championship for the first time since 2011.
Defeat against West Brom would have left Sunderland just two points above Norwich, but a fourth consecutive top-flight win for the first time in 14 years means they can now finish as high as 12th.
Such a finish looked unlikely when they were beaten 5-1 at Tottenham one month ago, prompting manager Gus Poyet to say his side needed a "miracle" to stay in the Premier League.
Defeat at Everton followed and left the Uruguayan's side seven points from safety, but 13 points from a possible 15 - including wins at Chelsea and Manchester United - have led to a stunning escape.
Poyet was jubilant on the final whistle after completing an achievement he said would be the "greatest of his career" ahead of kick-off.
His side started with purpose and vigour but dangerous crosses into the box yielded no reward before Marcos Alonso's left footed delivery saw Colback prod in the opener.
The 24-year-old, out of contract in the summer, guided his third goal of the season right footed past Ben Foster, prompting an early celebration from Poyet on the touchline.
Borini, on loan from Liverpool, was busy and had forced an earlier tipped save from Foster before he beat the West Brom keeper with a hooked effort on the half hour mark.
The Italian has had more shots at goal than any Sunderland player this season and his enthusiasm was rewarded when he volleyed home Sebastian Larsson's delightfully flicked through ball.
The Black Cats' control of the first half laid the foundations for a win which leaves Fulham as the worst home side in the season's Premier League, while West Brom played with the intensity of a team who do not expect Norwich to produce a miracle of their own on Sunday.
Aside from a curling Saido Berahino effort which forced Vito Mannone into a diving save, the visitors' threat was timid.
Since beating Sunderland in September they have only won six times, but 15 draws - the most in the top flight - look likely to prove vital in securing a fifth consecutive season in the top flight.
Early second-half improvement saw Berahino and Stephane Sessegnon fire efforts wide, before Altidore - on the field for less than five minutes - turned a glorious chance wide from six yards for the home side.
Full-back Santiago Vergini drilled wide after a flowing Sunderland attack, but the miss proved meaningless as the Black Cats became only the second team in Premier League history to be bottom on Christmas Day but survive.
For reaction from Sunderland manager Gus Poyet see here.
West Bromwich Albion manager Pepe Mel: "In the first half we played with little intensity. We were better in the second half but Sunderland beat us with that intensity.
"We have managed to keep the team up but I believe we could have done things better. Especially in today's game."
- 33CattermoleSubstituted forGiaccheriniat 88'minutes
- 10WickhamSubstituted forAltidoreat 61'minutes
- 11JohnsonSubstituted forBridcuttat 61'minutes
- 2ReidSubstituted forDawsonat 45'minutes
- 38BerahinoSubstituted forVydraat 78'minutes
- 5YacobSubstituted forMulumbuat 45'minutes
- Lee Mason
- Shots on Target
Second Half ends, Sunderland 2, West Bromwich Albion 0.
Foul by Chris Brunt (West Bromwich Albion).
Jozy Altidore (Sunderland) wins a free kick in the defensive half.
Attempt blocked. Victor Anichebe (West Bromwich Albion) right footed shot from outside the box is blocked. Assisted by Graham Dorrans.
Victor Anichebe (West Bromwich Albion) wins a free kick in the defensive half.
Foul by Santiago Vergini (Sunderland).
Foul by Graham Dorrans (West Bromwich Albion).
Liam Bridcutt (Sunderland) wins a free kick in the attacking half.
Attempt saved. James Morrison (West Bromwich Albion) right footed shot from outside the box is saved in the top centre of the goal. Assisted by Graham Dorrans.
Substitution, Sunderland. Emanuele Giaccherini replaces Lee Cattermole because of an injury.
Offside, West Bromwich Albion. Chris Brunt tries a through ball, but Matej Vydra is caught offside.
Delay over. They are ready to continue.
Delay in match Lee Cattermole (Sunderland) because of an injury.
Attempt blocked. Lee Cattermole (Sunderland) right footed shot from outside the box is blocked. Assisted by Jozy Altidore.
Attempt blocked. Chris Brunt (West Bromwich Albion) left footed shot from outside the box is blocked.
James Morrison (West Bromwich Albion) wins a free kick in the attacking half.
Dangerous play by John O'Shea (Sunderland).
Diego Lugano (West Bromwich Albion) wins a free kick in the defensive half.
Foul by Fabio Borini (Sunderland).