People protested across France on Thursday against President Emmanuel Macron's economic reforms but low turnout suggested that resistance to an agenda seen as too pro-business was losing steam.
The demonstrations are the fourth in a series launched in September that have done little to dent the president's ambitions, given his hefty majority in parliament.
"Macron and the bosses are waging a social war, let's plan the counterattack", read a banner of the far-left Lutte Ouvriere (Workers' Struggle) party in Paris, where about 8,000 people turned out, according to police.
That compared with about 200,000 who participated in a September 12 protest.
The Force Ouvriere union, one of France's largest, backed the demos for the first time, having previously shown a wait-and-see attitude toward the centrist Macron government.
But in a sign of continued division between France's unions Force Ouvriere held a separate demonstration in Marseille to the main leftist CGT union.
Leftist leader Jean-Luc Melenchon believes that lack of unity between unions is one of the reasons why the movement has failed to stop Macron's reforms.
"Union division has cost us dearly as well as the separation of unions from politics," said Melenchon. "There are thousands, millions of political militants ready for action but only on the condition that we call on them to act."
Head of the CGT union Philippe Martinez agreed: "When unions are united we have a better chance of succeeding."
So too if France's opposition on the left was united. But with the Socialist party in disarray and many on the left unwilling to back Melenchon's more radical France Insoumise party, there is no clear political opposition to Macron.
Laurent Neumann, political commentator for BFM TV said the weak mobilization against Macron was also down to the lack of a clear cause.
"When you tell people to come and protest against "liberal reforms", what are "liberal reforms"? There are many subjects and many to come but that doesn't make a clear call to strike," said Neumann.
Another reason for the lack of numbers on Thursday was due to the failure of students to back the protests in big numbers as unions had hoped.
Macron claims to have a mandate for change after handily winning the presidency in May and leading his centrist Republic on the Move party to a sweeping victory in the June parliamentary elections.
The government says its overhaul of labour laws is necessary to lower unemployment, which is stuck at around 9.6 percent -- about twice that of Britain or Germany -- but opponents accuse Macron of trampling on cherished workers' rights.
Macron has scored major legislative triumphs including flagship reforms to France's complex labour code, which took effect in September after he used executive decrees to push them through.
The strikes and street protests sparked by the labour reforms paled in comparison with those that have thwarted similar attempts by Macron's predecessors.
Nearly 400,000 turned out against president Francois Hollande in March 2016 at the height of protests against his reform efforts.
Additional sensitive changes -- of the unemployment benefits system and pensions -- are on Macron's frenetic agenda.
In the southern city of Marseille, the radical-left firebrand Jean-Luc Melenchon said "thousands, millions of political activists... are ready to spring into action."
But even Melenchon, head of the France Insoumise (France Unbowed) party, acknowledged recently that Macron "has the upper hand, for now".
Protests were also held in dozens of other cities including Lyon, Nantes, Bordeaux and Strasbourg.