Walter (Kevin Bacon), a convicted child molester, returns home to Philadelphia after serving 12 years in prison. His friends and family have abandoned him, with the exception of his brother-in-law, Carlos (Benjamin Bratt). Walter's apartment is just across the street from an elementary school an obvious source of temptation. He gets a job at a local lumber mill and meets Vicki (Kyra Sedgwick), one of the few women working there. After sleeping with Vicki, Walter tells her that he molested little girls, but rationalizes his crimes by saying "I didn't hurt them." Vicki is clearly shocked and disturbed by this new information, but before she can consider how to respond to it, Walter tells her to leave his apartment.
Walter receives frequent visits from a suspicious, verbally abusive police officer named Lucas (Mos Def). Lucas makes it clear that he is waiting to catch Walter reoffending. Watching the school, Walter sees a man offering candy to little boys in an apparent effort to gain their confidence. He realizes that this man, whom he nicknames "Candy" (Kevin Rice), is another child molester. Walter also meets an apparently lonely young girl named Robin (Hannah Pilkes) who is a bird watcher. Walter sees Candy abduct a boy; however, he does not report this to the police. Walter's life takes a further downturn when a suspicious co-worker, Mary-Kay (Eve), learns of his conviction and alerts the entire mill. Some of the employees attack Walter, but Vicki and the boss of the mill come to his defense.
Ostracized and frustrated, Walter leaves his workplace and goes to the park. Vicki, fearing the worst, begins to search for him. Walter ends up meeting with Robin at the park. As they talk, he begins to succumb to his desires and invites Robin to sit on his lap. She politely refuses, but then begins to confide in him. As she begins to cry, Walter realizes that she is being molested by her father. In her anguish, and sensing a similarity between her father and Walter, she offers to sit on Walter's lap, wanting his approval. Walter finally understands the pain he caused his victims, and tells Robin to go home; as she leaves, she gives him a hug. On his way home, he sees Candy dropping off a young boy near the school at night. In a fit of rage and self-hatred, Walter gives Candy a thorough beating. Afterwards, he goes to Vicki's home, and she accepts him.
Soon after, Lucas visits Walter's apartment as Walter is packing to move in with Vicki and tells him that a man was beaten across the street the night before, and asks if he knows anything about it. Walter denies any knowledge, but Lucas knows better. He reveals that the boy gave a very good description of the assailant, which fits Walter. He also reveals that "Candy" is wanted in Virginia for raping a young boy. Lucas decides not to charge Walter with the assault. With Carlos' help, Walter is reunited with his sister, whom he has not seen in years. However, she refuses to forgive him and leaves. In a voice-over discussion in which his therapist (Michael Shannon) tells him that eventual forgiveness may take several years, Walter replies that he understands and accepts her anger, and expresses optimism for his own future.
Output: Who is molesting Robin?