Tens of thousands of peaceful protesters took to the streets to demonstrate against the G20 summit in Hamburg, hours after masked rioters clashed with police, burned cars and looted businesses.
Marching on a route close to where some of the worst violence unfolded overnight, protesters chanted, sang, danced and played music as world leaders wrapped up their two-day summit in the German port city.
An eclectic crowd of families pushing baby carriages, Kurdish groups, Scottish socialists and anarchists waving flags and shouting anti-capitalist slogans progressed through the city accompanied by thousands of police officers.
Despite the mayhem on Friday night and Saturday morning, many officers patrolling the march removed their helmets and appeared relaxed as the huge crowds passed by.
Organisers said some 78,000 demonstrators participated, while police estimated the crowds at 30,000.
The big gathering came after aggressive riots overnight in the city's Schanzenviertel neighbourhood, which is only a few hundred yards away from the summit grounds.
Hundreds of special riot police went into buildings to arrest rioters wearing black masks from rooftops while being attacked with iron rods and Molotov cocktails.
About 500 people looted a supermarket in the area as well as smaller shops. Cars were torched and street fires lit as activists built barricades with garbage cans and bikes.
German chancellor Angela Merkel expressed shock and anger about "violence and uninhibited brutality" that broke out in Hamburg.
"There is not the slightest justification for looting, arson and brutal attacks on the life of police officers," she said, adding that the security forces had carried out "excellent work" and thanked them on behalf of all the summit participants.
A few thousand rioters, some of them from elsewhere in Europe, created havoc in the city.
They battled riot police for two consecutive days and nights, expressing rage against capitalism and globalisation and calling for open borders to let all refugees enter Europe.
Their anger was not so much focused against US president Donald Trump or other leaders, but directed against police as symbols of authority.
Police arrested 143 people, and 122 activists were temporarily detained.
Some 213 officers were injured since the protests started on Thursday night. Police and firefighters said they did not have information about how many protesters and other civilians were hurt.
Hamburg, Germany's second-largest city, has a strong radical left scene and many critics had warned well before the summit that its dense streets would be almost impossible to control and clashes would be likely.
However, German interior minister Thomas de Maiziere said "any criticism of the location of the meeting misjudges cause and effect".
"These were unbounded violent excesses out of a desire for destruction and brutality," he added, explaining that police and judicial authorities must take a tough stance against such crimes and that the arrests were appropriate.
Mrs Merkel also defended the choice of Hamburg as venue for the summit, saying a big city was needed to accommodate all the participants at hotels.
She said she and her finance minister would consult with Hamburg's city government as to how they can help people affected by the violence repair the damage.
Police called on witnesses of the riots to upload photos and video footage on their server to help with the investigation and prosecution of violent activists.
However, most protesters expressed their views peacefully, asking for quick action on climate change and solutions to the migration crisis.
During the protest marches on Saturday afternoon, activists of the Attac group rolled a giant globe along the road, while others carried signs with slogans such as: "Money For Bread, Not Bombs", and: "We are many, you are 20".