A tense, enjoyable final, ends with Toronto avenging last season's MLS Cup final defeat by Seattle. It's a sweet moment for Greg Vanney's side. Thanks for your company - I'll see you soon.
- Toronto complete domestic treble
- Repeat of 2016 final - which Seattle won on penalties
History is made. Toronto become the first MLS side to complete a domestic treble: Supporters' Shield, Canadian Championship and MLS Cup. Over the season, and on the day, it was deserved.
Seattle throw players forward in search of an equaliser - and get caught. Sebastian Giovinco has all the time he wants to play in Armando Cooper, who goes round the goalkeeper and somehow hits the post when it seems easier to score. No matter. Victor Vazquez runs into the rebound - the ball hits him rather than vice versa - but he bundles it over the line. And Toronto are over the line.
Nouhou Tolo has replaced Joevin Jones for Seattle; Toronto want to get Benoit Cheyrou on - he's the younger brother of former Liverpool defender Bruno - and he has now replaced Marco Delgado.
Spaces are opening up now as Seattle chase the equaliser, and that leaves them open to the counter. Sebastian Giovinco is racing away down the left and is all set to seal victory - only for Cristian Roldan to bowl him over with the shoulder charge. Referee Allen Chapman takes a look, and decides it isn't a penalty. Giovinco is aghast.
Cristian Roldan angles a cross from the left for Seattle, but Toronto clear. Ramon Torres, the centre-back now out on the right wing, hits a hopeful cross that Chris Mavinga boots against Toronto team-mate Chris Mavinga - it almost runs lose to Clint Dempsey, but keeper Alex Bono is quick off his line to gather.
Toronto boss Greg Vanney makes two substitutions in quick succession. Armando Cooper is on for Jonathan Osorio, before centre-back Nick Hagglund replaces goalscorer Jozy Altidore. Toronto go to a back three, with Hagglund on the right side. It seems as if the priority for Toronto is just to see this out now.
A wire suspending the spider cam above the pitch has snapped. We have to get this cleared up - we can't have a camera falling on someone's head.
Anyway, after a short delay, we can resume, and the corner is headed behind for a second one by Drew Moor,. Then Toronto clear that too, and the danger passes. Whether the spider cam danger has passed, we can only hope.
Time running out for Seattle - and they finally seem to have realised it. Nicolas Lodeiro, back to goal on the penalty spot, can't work an angle for a shot, and hooks it left for Jordan Morris instead. In the flurry that follows, Clint Dempsey just fails to connect with the overhead kick. It's a corner. But we have a technical problem...
For clarity, Fifa states that, in judging if a player is offside, "consideration should be given to any part of the head, body or feet of the attacker in relation to the second last defender" but that "for the purposes of the decision, the arms are not considered to be part of the body". I think that Altidore's head and upper body were beyond the second last defender. Maybe Seattle have a case for feeling hard done by.
Seattle have to attack now. Jordan Morris plays a ball in from the left. Nicolas Lodeiro, who has not had a great game, times the run well but diverts his effort well wide of the near post from around 15 yards.
Just having a look at Altidore's goal again. There is a question as to whether the striker was offside when Sebastian Giovinco played the ball through. It looks as if his feet were in line with the last defender, but his upper body was beyond. Which would be offside. Not given, though, and that's what counts.
Change for Seattle, Jordan Morris replaces Victor Rodriguez, as Brian Schmetzer seeks to engineer a revival.
The very least that Toronto deserve for their dominance. Michael Bradley starts the move just outside his own penalty area, and the ball is worked via Victor Vazquez to Sebastian Giovinco on halfway. Giovinco's through ball is beautifully judged to send Jozy Altidore clear, and the striker sees off the two Seattle centre-backs to lift his shot beyond the advancing Stefan Frei.
Altidore, who scored the goal against Columbus Crew that got Toronto into the MLS Cup final, has put them on course for victory.
Great move by Toronto. Steven Beitashour breaks down the right, feeds the ball inside to Jozy Altidore on the edge of the box - and he controls and touches left to Sebastian Giovinco, who swings to hit it first time with the right foot. Stefan Frei gets down low to push it aside - and in my view, that's his best save of the game.
Altidore claims he was caught by Roman Torres after playing the ball - and it was inside the area. The two players square up, with the Seattle captain claiming it was a dive. The referee tells them to cool it.
Clint Dempsey makes a rare break for Seattle. Is the 34-year-old about to remind us of his greatest days? Not if Chris Mavinga has anything to do with it. The former Liverpool man times his challenge well to halt Dempsey a good 15 yards outside the Toronto penalty area.
Beitashour again down the right for Toronto, with a looping cross that is cleared by Roman Torres towards Michael Bradley, 25 yards out. The United States captain hits a bouncer that Stefan Frei cannot hold - but Torres gets to the lose ball to clear before Jozy Altidore can pounce.
A half-hearted penalty appeal from Toronto, as Steven Beitashour bends a low pass in from the right. It's intended for Jozy Altidore, who is about five yards too late for it, but Justin Morrow surges in down the left, as he's done all game, and goes to ground under Kelvin Leerdam's challenge. Having studied the replays, I think Leerdam got the ball. Toronto don't loo to annoyed at being refused by the referee.
Sebastian Giovinco takes on Jozy Altidore's return pass, but his first touch is heavy... it's a race to the byeline, and the attempted cutback is blocked by Chad Marshall. It's a corner, but Toronto can make little of it.
Chad Hawsman: Cheers for following the MLS final! Nice to see MLS recognized outside US.