Ten-man Exeter City were beaten at The New Den this afternoon in controversial circumstances.
Andy Marriott's stellar performance looked like it had earned the away side a welcome point until Neil Harris curled home a debatable free-kick on 81 minutes.
Barry Corr then picked up his third red card of the season in the dying minutes to cap a frustrating afternoon for the former Swindon man.
On the eve of the most romantic day in the calendar there was nothing heart-warming or pretty about this scrappy and ugly encounter in South Bermandsey.
Marriott was arguably the only person in the New Den showing any respect towards St Valentine in sporting his electric pink goalkeeping kit. And Exeter's number one was determined not to give any early gifts to the dangerous Millwall frontline with two superb saves. (And that's quite enough of the Valentines puns!)
There was only three minutes on the clock Alan Dunne swung in a cross and former Stevenage striker Steve Morison sent in a header destined for the top corner until City's 39-year-old keeper intervened and tipped it over the bar.
Then from the resulting corner Marriott rolled back the years again with a marvellous save from Shaun Batt's headed effort and he would go on to put in one of the best performances of his Exeter career during the remaining 84 minutes.
Adam Stansfield was ruled out for a month on Thursday after requiring minor surgery and his replacement was Marcus Stewart who lined up on the left-hand side of City's attack but his afternoon barely got started.
First he appeared to pick&nbsp;up&nbsp;a cut and had to leave the pitch to receive treatment from the Exeter medical team. Then shortly after re-entering the pitch he picked up a recurrence of his hamstring injury he suffered two weeks ago.
Paul Tisdale sent Bertie Cozic on in place of the experienced Stewart, who joins the worrying list of out of action strikers at the club.
Marriott was then called into action again on two occasions to deny left-winger Batt. Tisdale's gameplan seemed to be working and while the away side were soaking up the pressure and keeping the Lions at bay they were offering little going forward with Corr quite isolated as the lone-frontman.
Liam Sercombe had City's first real effort on 40 minutes but his long-shot was straight at former Cardiff keeper David Forde. The 677 travelling supporters in the upper tier behind the goal didn't have much to shout about in the first half but they would have been boosted by a solid defensive display.
Cozic created City's first real opening of the second period with a trademark forward run but he could only scuff a shot at Forde.&nbsp;
Morison was a familiar face to many of the travelling fans after appearing against the Grecians on many occasions for previous club Stevenage and he fired over on 47 minutes before his header was kept out again by Marriott.
There are moments in games when a shot heads towards goal and you just assume the opposition have scored and are stunned when the ball somehow stays out. And City's man of the match provided one of those on 55 minutes when he somehow kept out Batt's effort on the line.
A Tisdale substitution then, as so often has been the case down the years, helped swing the game in his side's favour as Stuart Fleetwood triggered a dangerous spell. His first participation came when he was involved in a footrace with a Millwall centre-back and his ball in looked to have been handled.
The Welshman then had a trio of chances that could have broken the deadlock. And although he couldn't test Forde he was providing some impetus in the final third.
The first chance was created himself, when he turned and sent an ambitious chip over the bar and minutes later he latched onto a lofted pass from Ryan Harley but shot wide. Millwall were denied three points earlier this season at The Park thanks to a Stanno cross-shot that looped in at the far post and Fleetwood almost pulled off a carbon-copy but his shot dropped just wide.
That man Marriott again denied Morison soon after when he showed unbelievably reflexes at the far post but the Welshman was finally beaten on 81 minutes.
The imperious Matt Taylor seemed to have legitimately won the ball off Spurs loanee Jon Obika on the edge of the City box but referee Phil Gibbs, who sent off Dan Seaborne on Boxing Day 2007 against Torquay, awarded Millwall a free-kick and booked the bemused skipper.
And predictably Harris, on his 300th appearance for the Lions, stepped up to curl a stunning 20-yard effort past the diving Marriott.
It was a cruel blow. City's backline didn't deserve to be on the losing side after putting in a tremendous shift. But there was still time for a comeback. Richard Logan was introduced as City looked to get another late equaliser like we'd seen in recent weeks.
Those hopes soon evaporated when the Grecians were reduced to ten men on 88 minutes. Corr had suffered a frustrating afternoon&nbsp;with many decisions not going his way and his late, high and&nbsp;ugly tackle on Dunne down on the touchline seemed borne out of this frustration.
After&nbsp;handing out a few bookings in the previous minutes Gibbs was quick to&nbsp;send the&nbsp;Irishman&nbsp;for his third early bath&nbsp;of the season and&nbsp;his subsequent suspension means it&nbsp;will be a long time before he will be able to pull on a red and white shirt again.
Exeter now face a vital match on Saturday when lowly Stockport come to Devon and Tisdale will have plenty to ponder in the coming days, especially after losing two key attackers this afternoon.
Keep visiting the Official Website for the views of Paul Tisdale.
Millwall Lined-Up: Forde, Dunne, Robinson, Craig, (Barron 60) Ward, Hackett, Batt, (Obika 67) Abdou, Trotter, Harris, Morison
Subs Not Used: Sullivan, Frampton, O'Connor, Grimes, Fuseini
Exeter Lined-Up: Marriott, Tully, Duffy, Taylor, Golbourne, Edwards, Harley, Sercombe, Burnell, (Fleetwood 61) Corr, Stewart (Cozic 15) (Logan 84)
Subs Not Used: Jones, Bennett, Saunders, Dunne
Crowd: 9,104 (677 away fans)