A woman is walking to her car in the parking garage. She gets in and has trouble starting her car. Three thugs appear, break into her car, force her out, and begin to rape her when Paul Kersey (Charles Bronson) appears out of nowhere. He shoots the first two thugs, but wounds the third. He follows the third mugger as he attempts to escape the parking garage, but Kersey quickly blocks the exit. The third mugger pleads for his life, but Paul shoots him dead. He rolls the criminal over with his foot, and reveals the criminal to be himself. It is then revealed that the whole assault was a dream as Paul wakes up in a cold sweat.
The next morning, a young woman enters Paul's architectural design office in Los Angeles, and it is revealed to be Erica (Dana Barron). Paul is dating her mother Karen Sheldon (Kay Lenz). Erica goes out later that evening with her boyfriend Randy Viscovich (Jesse Dobson) to the arcade to meet up with Jojo and his buddy. Jojo offers Erica crack, and she dies from an overdose. The next night (without any explanation), Paul follows Randy to the arcade where Randy confronts Jojo and threatens to go to the police and tell them everything. Jojo kills Randy to prevent this. Kersey shoots JoJo, who falls onto the electrified roof of the bumper-car ride.
Paul arrives back at his house where he receives a note and a phone call from publisher Nathan White (John P. Ryan), who tells him that he knows about the death of JoJo. Nathan explains to Kersey that after Nathan's wife died, his daughter became his whole life. Then she became addicted to drugs, and died of an overdose. Nathan wants to hire Kersey to wipe out the drug trade in L.A. and in particular to target Ed Zacharias (Perry Lopez) and Jack Romero (Mike Moroff), rival drug kingpins who are the city's two main drug suppliers. Kersey asks for a few days to think about it, and after a few days, he accepts Nathan's offer. Nathan supplies Kersey with weapons and information so Kersey can go after Zacharias and Romero. All the while, two L.A. detectives, Reiner (George Dickerson) and Phil Nozaki (Soon-Tek Oh), are on Paul's trail of destruction.
Paul infiltrates Zacharias's mansion where Ed Zacharias is throwing an elaborate birthday party. As Paul Kersey bugs Zacharias's phone, he unwittingly witnesses Zacharias murder one of his colleagues, Vincent, due to betrayal. Zacharias captures Paul, and tells him to help take Vincent's body out in order for his silence. Another of Zacharias's gang's members offers to help, and they take the body out and hide it in the trunk of the car. Knowing that he is to be killed, Paul kills the hired hitman in self defense and walks away from the crime scene. Paul kills three more men in an Italian restaurant, kills a drug dealer disguised as a video store owner and two of his assistants, as well as Romero's top hitman, Frank Bauggs (David Wolos-Fonteno). All the while Zacharias and the Romero brothers begin to suspect each other's involvement.
Eight more of Zacharias's men are killed at the fisherman's wharf by Kersey. Zacharias is informed by Nozaki, revealed to be corrupt, to kill whoever is setting him up. Nozaki tracks Kersey at work and tries to get information out of him. Nozaki attempts to kill Kersey, but Kersey shoots him dead. Detective Reiner learns about Nozaki's death (not knowing about his corruption) and swears vengeance on the vigilante Kersey.
In an act of retribution, Zacharias calls Jack and wants to talk to him. They arrange a meeting place at the oil fields. Kersey is already there and fires his rifle. Zacharias thinks that it is Jack's crew who is doing it and opens fire. They kill each other as Kersey kills Tony and Zacharias.
Nathan calls, congratulating Kersey on a job well done, and asks to meet with him tonight. Kersey arrives at the meeting place, but Nathan sends his limo driver instead. Kersey hops in the limo, and realizes he's been set-up after the limo driver jumps in White's car. Kersey shoots the back window with the PP and makes it out before the limo explodes. Kersey forces his way into Nathan's house demanding to see Nathan. An old man living there claims to be the real Nathan White, having returned from a three-month vacation. Kersey drives back to his apartment, only to be pulled over and arrested by two cops. On the way to the downtown police station, Paul immediately recognizes them as impostors. He flips over the car, killing one, and knocking the other unconscious.
Back at his apartment, Paul Kersey comes face-to-face with Reiner. Kersey tries to inform Reiner about his partner's corruption, but Reiner does not buy his story. The impostor Nathan White (his true name isn't revealed) is mad that Kersey is still alive, and uses Karen to lure him into a trap. He leaves a message, but hangs up before Kersey is given time to answer. To get away from Reiner, Kersey pretends to speak to him and knocks Reiner out cold. He pulls a rifle with a grenade launcher from his gun rack.
Kersey arrives with car at the meeting place. The car rolls forward as White orders his men to open fire. They spray the car with bullet holes before realizing Paul's not in the car. Kersey fires a grenade, killing three as the car explodes. He also shoots Jesse's car, with Jesse inside, as he makes his escape. Kersey follows them into the roller rink where he kills six more thugs.
White escapes through the back door as Kersey follows. Karen escapes his grasp, but is shot in the back while attempting to run. Realizing White is now out of bullets and distraught by Karen's death, Kersey fires a grenade that finishes him off. Reiner arrives and orders him to surrender, threatening to shoot as Kersey walks away. Kersey replies: "Do whatever you have to." Reiner lets him go.