A return to the Atlantic Coast Conference title game slipped out of Duke's hands — in large part because the 25th-ranked Blue Devils couldn't keep hold of the ball.
North Carolina beat Duke 45-20 on Thursday night after forcing three turnovers and scoring three touchdowns off them.
In a six-day span, the Blue Devils had six turnovers and their opponents turned those miscues into 38 points during two losses that sent them tumbling out of the Coastal Division lead.
The Duke loss sends Georgia Tech to the ACC title game in Charlotte to face Florida State.
"We have a two-game season. We know that now," coach David Cutcliffe said, referring to the regular-season finale against Wake Forest and a bowl game.
"This is a two-game season that this team needs to go 2-0 in."
Marquise Williams threw for two touchdowns and rushed for two more for North Carolina (6-5, 4-3).
Williams was 18 of 27 for 276 yards with touchdown passes covering 3 yards to Quinshad Davis and 1 yard to Mack Hollins. He also had scoring runs of 1 and 16 yards.
Tim Scott returned an early fumble 10 yards for the tone-setting score.
"I think we finally put together a complete game," coach Larry Fedora said.
Anthony Boone was 22 of 40 for 262 yards with two touchdowns for the Blue Devils (8-3, 4-3), who managed 378 total yards against a defense that allows an ACC-worst 512 per game.
"We made mistakes early (and) they capitalized on our mistakes," Boone said. "We usually play mistake-free football, taking care of the football on offense, and they did a good job of capitalizing and creating turnovers."
T.J. Logan rushed for 116 yards and a 1-yard touchdown, and Ryan Switzer caught three passes for 109 yards for the Tar Heels.
They reached the six-win mark for the second straight year and seventh time in eight years while beating Duke for the first time since 2011 — earning the coveted bell that goes to the winner of this fierce backyard rivalry. They rang it repeatedly — and audibly — both on the field and in the locker room.
"They wanted to get it done for the guys from the last two years," Fedora said.
The offense kept clicking behind Williams, who had 98 yards rushing and has accounted for eight touchdowns in six days — he rushed for three and threw for another TD while beating Pittsburgh on Saturday. North Carolina rolled up 591 total yards — three shy of Duke's season worst — with 315 coming on the ground.
"The run game was just there, the offensive line was just pushing everybody," Williams said. "They took control and they let Duke's defensive linemen know, 'Hey, we're here all night and we're going to do some big things.'"
After Duke temporarily got back in the game on Boone's 10-yard scoring pass to Issac Blakeney, the Tar Heels broke off big plays to set up a couple of short touchdowns that put this one away.
Logan's 47-yard run to the Duke 1 led to the Williams-to-Hollins scoring pass that made it 21-7.
On the next drive, Williams' 45-yard pass to Switzer came four plays before his quarterback sneak made it 28-7 not even 2 minutes into the second quarter. Logan added his TD midway through the third.
The Tar Heels have 23 takeaways this season with at least one in every game.
The Blue Devils entered as the ACC's most careful team with the ball, but have three giveaways in each of their three losses.
And just as in last weekend's 17-16 loss to Virginia Tech, mistakes were a theme of this one.
Short-yardage QB Thomas Sirk fumbled on Duke's first possession and North Carolina went 78 yards on its first scoring drive, which ended on the touchdown pass to Davis.
Boone fumbled two plays later, giving Scott an easy scoop-and-score that made it 14-0.
Follow Joedy McCreary on Twitter at http://twitter.com/joedyap