Matt Schaub threw a pair of touchdown passes and Arian Foster scored a rushing touchdown for the 10th straight game as host Houston held off stubborn Buffalo.

The Texans (7-1) had the only touchdown of the first half as Schaub worked the play-action to perfection, finding tight end Owen Daniels all alone for a 39-yard score. The Bills (3-5) cut the deficit to 7-6 late in the first half on a pair of Rian Lindell field goals.

Foster capped a five-play drive to start the second half with a 3-yard run to give AFC-leading Houston a 14-6 lead. Foster finished with 111 yards on 24 carries.

Buffalo surprisingly kept things close and cut the lead to 14-9 on Lindell's third field goal. But Schaub responded with his second touchdown pass of the day, a 5-yarder to Garrett Graham, to put the Texans in control 21-9 with 11:25 left to play.

Schaub finished the day 19-for-27 for 268 yards. Andre Johnson led all receivers with eight catches for 118 yards, the 40th time in his career he's eclipsed the 100-yard mark.

Game notebook: Bills QB Ryan Fitzpatrick was 25-for-38 for 239 yards but he lost a fumble in Houston territory in the fourth quarter, ending any Buffalo comeback hopes. ...Bills' DE Mario Williams had one sack in his return to Houston. Williams, who signed a $100 million deal with Buffalo in the offseason, had wrist surgery a week ago. ... J.J. Watt had a sack for Houston, increasing his season total to 10.5.