One by one, the families of the Charleston church shooting victims lined up to express grief, anger, bewilderment and love: Dylann Roof, charged with killing nine people in cold blood, betrayed none.
Murder suspect Roof, 21, making his first appearance in court via video link less than 48 hours after the massacre at Emanuel AME Church took place, spoke only to confirm his name, address and employment status - unemployed - to Judge James Gosnell Jr. Roof's voice was quiet, polite.
Then, hands cuffed behind his back, wearing a blue button-down prison jumpsuit, watched closely by his two guards, Roof listened to the statements of relatives of those killed, staring sometimes into the camera, sometimes down to his feet, at all times impassive.
Ethel Lance's daughter told Roof, who according to some reports has already confessed to the murders: "I will never be able to hold her again, but I forgive you, and have mercy on your soul. You hurt me. You hurt a lot of people but God forgives you, and I forgive you."
Myra Thompson's relative, Anthony Thompson told him: "We would like you to take this opportunity to repent. Repent. Confess. Give you life to Christ. So that he can change it. So that you can change your ways no matter hast happened to you, and you'll be OK."
Tywanza Sanders' mother Felicia said: "Every fibre in my body hurts, and I will never be the same. As we said in the Bible study, we enjoyed you. But may God have mercy on you."
Alana Simmons, granddaughter of Daniel Simmons, told Roof, who had reportedly told friends he wanted to start a race war: "Although my grandfather and the other victims died at the hands of hate, this is proof that they lived and loved. Hate won't win."
DePayne Middleton-Doctor's sister told Roof: "I'm a work in progress and I acknowledge that I'm very angry. [DePayne] taught that we are the family that love built. We have no room for hate. So we have to forgive. I pray God for your soul. May God bless you."
Throughout the intensely emotional hearing, as families and friends sobbed, Roof remained calm.
Judge Gosnell explained that he could not set bail on the nine murder charges, but could on the other charge: possession of a firearm. Bail was set at one million dollars.
Then Roof was led back to his cell. He will next appear in court on 23 October, then on 5 February 2016. The governor of South Carolina is calling for the death penalty if Roof is convicted.