Guillaume Latendresse, Craig Rivet and Chris Higgins also scored for the Canadiens (21-8-5), who have earned at least a point in eight straight games (6-0-2). Mike Knuble and Jeff Carter scored for the last-place Flyers (8-21-4), who extended their franchise-worst losing streak to eight games and have won only three of their last 15.
David Aebischer made 26 saves for Montreal, including a big one on Sami Kapanen early in the third to maintain a 3-2 Canadiens lead, to win his second straight start and improve his record to 7-5-2.
Antero Niittymaki made 33 saves and was generally solid for the Flyers, but still took his eighth straight loss.
Montreal's top-ranked power play went 2-for-7 and has converted at least twice in six of its last nine games. On the bright side for the Flyers, they also scored two on the power play to snap an 0-for-17 slump over the previous four games.
Philadelphia gave Montreal six power-play chances in the first, but it was the Flyers who had a chance to take a 1-0 lead when R.J. Umberger was hooked by Francis Bouillon while on a short-handed breakaway at 14:26. Umberger tried to deke
Aebischer stick side, but couldn't get it past the Montreal netminder.
The Canadiens power play finally struck for two quick goals in just over a minute late in the first.
Latendresse scored his eighth of the year at 16:40, converting a Sergei Samsonov rebound with Montreal on a two-man advantage. On the same power play, Rivet worked a give-and-go with Michael Ryder for his fourth of the year at 17:49.
Philadelphia made it 2-1 at 5:41 of the second with a power-play goal by Knuble on a Simon Gagne rebound for his 14th of the year.
Montreal went ahead 3-1 at 19:11 with its league-leading 10th short-handed goal of the year coming from Johnson. But Philadelphia countered with Carter's power-play goal at 19:30.
Higgins made it 4-2 at 13:57 of the third when he took a Saku Koivu pass streaking down the left wing and scored his 11th of the season in only 16 games.
NOTES: Flyers centre Peter Forsberg missed his second game with a concussion. Philadelphia dropped to 0-8-3 this season when playing without its captain . . . Montreal D Mathieu Dandenault missed his second game with a left forearm injury . . . Canadiens forward Garth Murray returned to the lineup after being a healthy scratch for two games, taking demoted rookie Maxim Lapierre's spot on the fourth line . . . Canadiens centre Radek Bonk shed the full facial cage he had been wearing the past two games because of a broken nose and replaced with a half shield . . . Carter's goal was his first since Oct. 17 in his second game since returning from a 20-game absence with a fractured left shin . . . Mike York, acquired from the New York Islanders on Wednesday for Randy Robitaille and a fifth-round draft pick, made his Flyers debut.