HOUSTON -- While it's no big deal around the country, the Texans' backup quarterback job is huge news in the Houston area because it involves fan favorite Case Keenum.

Ryan Fitzpatrick has been firmly entrenched as the starter since the Texans signed him to a two-year deal that included $4 million guaranteed. Coach Bill O'Brien didn't make it official until after the OTAs.

But Keenum, who went 0-8 as a starter in place of Matt Schaub last season, appeared to be firmly entrenched as the backup.

Then rookie Tom Savage came off the bench in the fourth quarter at Denver and engineered the winning touchdown drive, throwing a touchdown pass and decisive two-point conversion pass to pull out an 18-17 victory.

Granted, it was preseason, and starters from both teams were on the bench. Many of the third-stringers were on the field. While the outcome didn't mean squat officially, it meant a lot mentally to the Texans, a team that lost its last 14 games last season to finish a league-worst 2-14.

On his one series, Savage was 5-for-6 for 68 yards, including a 31-yard touchdown pass to tight end Ryan Griffin and a two-point pass to Travis Labhart.

Keenum wasn't awful, going 11-of-18 for 74 yards, with no touchdowns or interceptions. He produced a field-goal drive, threw a few bad passes and should have been intercepted a couple of times.

A day later, O'Brien rekindled the backup quarterback controversy when he said, "I would say it's pretty close.

"I would say Keenum is still two, but it's a really tight race between two really good, competitive guys. Both guys had good moments (at Denver), but I think Tom definitely closed the gap."

Them's fightin' words for all those Keenumites who fell in love with him while he set NCAA records at the University of Houston before he went undrafted and signed with the Texans. He spent his rookie year on the practice squad, and former coach Gary Kubiak elevated him over T.J. Yates to replace the injured and ineffective Schaub last season.

"He's a guy that really wants to be good," O'Brien said. "He works hard to be good, and it's fun to coach a guy like that. He's improving."

There's a lot of speculation that Keenum could be cut if O'Brien finds a quarterback on the waiver wire he likes better. He has a complicated system that's been difficult for his players to master, including the Harvard-educated Fitzpatrick.

"All three quarterbacks are competitive," O'Brien said. "They're really good teammates. They communicate well. They compete against each other, but they support each other, which is pretty cool to see.

"They work very hard. They fit well in the meeting room. We gave the team a day off last week, but they were watching film together at 6 in the morning. I think a lot of that has to do with Fitzpatrick. He's taken a leadership role on the team, and that helps the whole room, not just the quarterbacks."

Savage, a fourth-round pick, is 6-4, 225. He's got a strong arm and a tremendous work ethic. He's improving slowly but surely.

"Savage is a poised guy," O'Brien said. "That was something that stood out to us before the draft. He had a calmness about him, and you saw that (against Denver). He didn't let his nerves get to him.

"He's a very bright guy, and he works hard. He's improved every day, but let's be real clear now: He's got a long way to go. We're not headed for Hawaii and the Pro Bowl right now."

NOTES: ILB Brian Cushing played against Denver, his first appearance since suffering a torn lateral collateral ligament in his knee and a fractured fibula in his lower leg against Kansas City last season. He played two series, had one tackle for loss and a penalty for illegal hands to the face. ... RB Arian Foster didn't play against Denver. That means he's missed eight consecutive preseason games -- the last one in 2012, all four in 2013 and the first three this season. O'Brien didn't rule out that Foster might play Thursday against San Francisco, but don't count on it. They need him healthy for the regular season. Foster has looked good in five practices against Atlanta and Denver the last two weeks. ... WR Andre Johnson made his preseason debut, playing in the first quarter against Denver. He caught three passes for 18 yards from Ryan Fitzpatrick.