FBI Special Agent Sean Archer (John Travolta) survives an assassination attempt by freelance domestic terrorist and homicidal psychopath Castor Troy (Nicolas Cage), but the bullet pierces through Archer's chest and hits his son Michael, killing the boy.
Six years later, Archer's vendetta against Castor culminates in his team's ambush of Troy and his younger brother/accomplice Pollux (Alessandro Nivola) at Los Angeles International Airport. Castor goads Archer with knowledge of a bomb located somewhere in the city set to go off in a few days, but he is knocked into a coma before Archer can learn more.
Archer affirms the threat is real, but is unable to convince Pollux to reveal where the bomb is located. At suggestion of his partner Tito Biondi (Robert Wisdom), Archer secretly undergoes a highly experimental face transplant procedure by Dr. Malcolm Walsh (Colm Feore) to take on Castor's face and appearance. Archer (now played by Cage) is taken to the same high-security prison where Pollux is, and slowly convinces Pollux that he is Castor, gaining information on the bomb's location. Meanwhile, Castor wakes up from his coma prematurely and discovers his face missing. He calls his gang, and they force Dr. Walsh to put Archer's face on him.
Castor (now played by Travolta) visits the prison and surprises Archer. He taunts his nemesis with how he burned down Dr. Walsh's lab with Walsh and Tito inside to eliminate all evidence of their switch and will take over Archer's life. He leaves Archer to languish while he convinces Pollux to "reveal" the bomb's location in exchange for release from prison. Disarming his bomb in a dramatic fashion, Castor-as-Archer gains respect from Archer's fellow FBI colleagues. Castor gets close to Archer's family that Archer neglected over his vendetta: he romances his wife Eve (Joan Allen) and saves his daughter Jamie (Dominique Swain) from an attempted rapist.
Archer starts a prison riot that allows him to escape, and he then retreats to Castor's headquarters. There, Archer meets Sasha (Gina Gershon), the sister of Castor's primary drug kingpin, and her son Adam whom reminds Archer of Michael. Archer learns that Adam is Castor's son, whom he once had planned to put under foster care. Castor learns of Archer's escape and hastily assembles a team to raid his headquarters. The raid turns bloody, killing many FBI agents and many of Castor's gang, including Pollux; Archer, Sasha, and Adam are able to escape. Archer's supervisor Director Victor Lazarro (Harve Presnell) blames Castor for the numerous deaths. Castor, angered over Pollux's death, kills Victor and makes it look like a heart attack. Castor-as-Archer is promoted to Acting Director as plans are made for Lazarro's funeral.
Archer finds safety for Sasha and Adam and approaches Eve. He persuades her to take a sample of Castor's blood and his own to compare their blood types at the hospital where she works to prove he is Archer. Convinced of her husband's identity, she tells him that Castor will be vulnerable at Lazarro's funeral. At the funeral, Archer finds that Castor has anticipated his actions and takes Eve hostage. Sasha arrives, and a gunfight ensues; Sasha manages to save Eve after fatally taking a bullet. Before she dies, Archer promises to take care of Adam for her and not allow him to grow up with a life of crime.
Castor flees the church with Archer following him. After killing two FBI agents, Castor briefly takes Jamie hostage, but she escapes by stabbing him with a butterfly knife Castor ironically provided to her for self-defense. A speedboat chase ensues wherein Archer forces Castor to shore by collision, then bests Castor in a melee fight. Castor mutilates his/Archer's face to taunt him but Archer kills him with a spear gun. FBI agents arrive and address Archer by name, having been convinced by Eve of Archer's true identity. After the face transplant surgery is undone, Archer (back to Travolta) returns home, with Adam having been adopted into his family to keep his promise to Sasha.
Output: What happens when Castor wakes up from a coma?