For much of the football season, Lake Oswego has bullied its opponents, putting them in a headlock and not letting go. On Saturday, Tigard hit back.

After opening a three-touchdown lead by early in the second quarter, the reigning Class 6A champion Lakers had to dig deep before pulling away late for a 42-21 win over the relentless Tigers in the semifinals of the OSAA Class 6A playoffs at Jeld-Wen Field.

"We took a punch and we just kept fighting," said junior defensive back Jordan Horak, who had two interceptions in the fourth quarter to help repel the Tigers. "We did our job, stayed as a family."

No. 2 Lake Oswego (13-0) won its 27th consecutive game to advance to the Class 6A final against Sheldon. With one more win, the Lakers can repeat as champions and become the first big-school team to complete back-to-back perfect seasons since Roseburg in 1995 and 1996.

"It's been our goal all year," senior running back JB Holmes said. "We felt like anything else would be sort of a failure."

No. 3 Tigard (11-2), playing in its first semifinal since winning the 2003 title, trailed 21-0 but twice rallied to within a touchdown. Down 28-21 in the fourth quarter, the Tigers had the ball twice but couldn't sustain a drive against Lake Oswego's state-leading defense.

"We got ourselves in quite a hole," Tigard coach Craig Ruecker said. "Lake Oswego deserves the credit. The most impressive thing is their defense. Without a doubt, by far, the best defense we've played against."

The Lakers held Tigard senior tailback Zach Floyd, who rushed for 643 yards in the previous two games, to 122 yards and two touchdowns on 31 carries. The Tigers, who entered averaging 479.5 yards per game, finished with 288.

Lake Oswego scored touchdowns on its first three possessions as it took to the air behind senior quarterback Justen Ruppe, who finished 10 of 13 for 194 yards and two touchdowns.

Ruppe lofted a 33-yard touchdown pass to senior tight end Mitch Lomax to start the scoring and threw passes of 32 yards to senior Connor Griffin and 25 yards to senior Nick Palermini on the next series, which ended on a three-yard touchdown run by senior JB Holmes.

Lakers senior Jack Anderson, from the wildcat formation, rolled out and threw a 46-yard touchdown pass to junior Nick Underwood for a 21-0 lead.

"I think they really tried to stuff our run," Ruppe said. "And we took advantage of their man-to-man coverage."

The Tigers countered with a 14-play, 80-drive that ended with a four-yard touchdown run by Floyd. After a Ruppe fumble, Tigard raced 54 yards in four plays to score on an 11-yard pass from junior Jett Even to senior Kaz Greene, and it was 21-14 with 18 seconds left in the half.

"I think what happened, honestly, is we got a little complacent, like, 'We have some room now,'" Ruppe said. "We came out strong in the second half."

Ruppe and Griffin connected on a 56-yard touchdown pass to open the third quarter, making it 28-14, but Tigard answered with an eight-yard touchdown run by Floyd to draw within 28-21 late in the third quarter.

The Tigers came up empty on their next two series, however, and Lake Oswego iced the game with two touchdowns - a 21-yard run by Anderson and a 38-yard burst by Lomax on an end-around.