The Vikings aren't playing the perfect game, but they've sure fixed the first-half red-zone woes that cost them the game last week at Washington.

They're 2-for-2 in scoring touchdowns in the red zone while leading the Cardinals 14-7 at halftime at Mall of America Field. The first red-zone play of the game saw Adrian Peterson take a handoff to his left, cut back to the middle, run through a gap and blast through two Cardinals defenders inside the 5-yard line and reach the ball across the goal line for a 7-0 lead at the 8:38 mark of the first quarter.

Percy Harvin, who didn't touch the ball in nine red-zone plays in the first half a week ago at Washington, gave the Vikings a 14-7 lead with a 3-yard touchdown reception on third-and-goal with 6:26 left in the half. A holding penalty on Cardinals defensive end Darnell Dockett on an earlier third-down red-zone incompletion kept the drive alive.

Harvin lined up in the slot to the left, ran down the line at the snap and caught the ball on the right side. A quick inside cut made cornerback Patrick Peterson miss and allowed Harvin to score.

It would have been Harvin's second touchdown of the game, but an illegal block in the back negated his game-opening 103-yard kickoff return for a touchdown.

The Cardinals' lone touchdown was set up by Christian Ponder's sixth turnover in the past 10 quarters. He escaped two defenders near his goal line, but then overthrew Kyle Rudolph and was intercepted by linebacker Paris Lenin, giving the Cardinals a first down at the Vikings' 16-yard line.

That led to a LaRod Stephens-Howling 3-yard touchdown run.

Ponder's interception came two plays after Vikings defensive end Brian Robison recorded a strip sack of John Skelton. Kevin Williams fell on the ball to stop a 76-yard drive that had taken 8:12 off the clock.

Ponder threw another pick with 5 seconds left in the half. Flushed to he left, he threw an ill-advised pass that Sam Acho intercepted. The Cardinals couldn't convert it into points because Jay Feely missed a 47-yard field goal attempt on the next play.