Liam (Gooding Jr.) is a lonely, sadsack garbage man who lost his wife in a car accident. Years after that, he rescues a little girl from a car wreck and becomes a local hero. While at a bank one day, he instantly falls in love with the teller, that is until a group of thieves storm the bank. (Their getaway driver is also Liam's work colleague, Swain, played by Norman Reedus). The heist is botched when the teller gets shot in the head and winds up in a coma.
Liam goes after the thieves in retaliation, also catching the attention of Detective Subcott (Liotta). However, it is finally revealed that Liam was actually responsible for the robbery. He had seen the teller at the graveyard while visiting his wife's grave, and became obsessed with her. Unable to work up the courage to actually talk to her, Liam came up with a (incredibly stupid) scheme: he enlisted Swain to hold up the bank while he was inside, as part of an act which would allow him to be a hero in the teller's eyes.
Swain in turn brought in his trigger-happy robber friends for the job, since he actually needed the money to realize his dreams of going to Florida. After the heist went wrong, Liam went after the thieves as a means of redemption. He kills two of them before the others come after him. They kidnap the little girl Liam had rescued in the car wreck and hold her hostage in an abandoned factory. In the ensuing shootout, the robbers, Swain, and a whole bunch of cops get killed, and after a standoff involving Subcott and the little girl, a badly injured Liam escapes and goes to the hospital just as the teller wakes up from the coma and warmly recognizes him.
Liam is ultimately arrested, but the ending suggests that he and the teller actually might have a future together when she visits him in prison.