The film opens in early 1980s Canada where teenager Martin Asher (Paul Dano) is seen ambling about a bus station, seemingly uncertain of his destination. He befriends another teen on the bus, Matt Soulsby (Justin Chatwin) and the two talk about their plans for the future. When their bus breaks down, the two acquire a car from a nearby garage. While Martin is driving, a tire blows. Matt struggles to change the tire and Martin comments on how he and Matt are both about the same height, and kicks Matt into the path of an oncoming truck. He is last seen toting Matt's guitar and walking away singing in a voice similar to Matt's.
Twenty years later, a successful FBI profiler, Illeana Scott (Angelina Jolie), is summoned to help out Canadian law enforcement in Montreal, to apprehend Asher, who has been killing people for years and assuming their identities as he travels across North America. Scott has to adjust to working in a strange city with a police team that she does not really fit in with.
On a ferry to Quebec City, Martin's mother (Gena Rowlands) recognizes her son. After docking she locates a police officer and tells him that she saw her son on the ferry. Upon telling the officer her son died 19 years ago, she discusses the matter with a city official. She is convinced the man she saw was her son, and exclaims to the officer that her son is "dangerous". Based on Mrs. Asher's statement, the body believed to be that of her son is exhumed for an autopsy.
The team meets with art salesman James Costa (Ethan Hawke), an eyewitness who saw Asher kill his last victim. Costa makes a drawing of Asher and, within a couple of days, Asher's apartment is found. Scott discovers Asher's next target is Costa, so protecting him is priority number one. During the time they spend together, Scott and Costa begin to develop feelings for each other, though Scott refuses to become involved with him because of the ongoing case.
Asher flees with Costa as a hostage and Scott pursues them. Scott sees Asher die in a car accident and the case is closed. As Scott is packing up, preparing to return home, Costa visits her in her hotel room. Without saying anything, he undresses her and they make passionate love on a chest of drawers and the bed, surrounded by gruesome crime scene photos. The next morning, Scott awakes to find herself partly covered in Costa's blood. At first, she fears he is dead, but then he awakes and they discover he had merely popped the stitches in his arm that he received after the auto accident.
As Costa's stitches are repaired in the hospital, Scott is called down to the morgue as Mrs. Asher has come to identify the burned body of her son, killed in the accident. She says the body is not her son. Mrs. Asher and Scott realize that Asher is still alive. Mrs. Asher is shocked, leaves the morgue, and goes to the elevator, and Scott chases after her. Before Scott can reach her, the elevator door closes. Scott descends the stairs, hoping to intercept Mrs. Asher on the ground floor. When the elevator door opens, Scott sees Costa covered in blood, having killed Mrs. Asher - who Scott realizes is Costa's mother. The police try to capture Asher who escapes the hospital. Scott returns to her hotel room and frantically washes herself, in a state of manic disgust. An investigation shows that the man who died in the car accident, who the real Asher had identified as Asher, was actually Christopher Hart (Kiefer Sutherland), a drug dealer and art thief to whom Asher owed $80,000, and whom Asher murdered. The Montreal police chase Asher, but he escapes in a train station and boards a train headed east of Montreal, meanwhile setting up his next victim, a sports talent scout. After that, he calls Scott on the phone and taunts her. Scott admits to having consensual sex with Asher, and is consequently fired from the FBI.
Seven months later, Scott is living in an desolate farmhouse by herself in Carlisle, Pennsylvania and looking heavily pregnant with Asher's twin boys. One day as she sits alone in her home, she discovers Asher has broken into her house. She frantically tries to escape, but Asher quickly overpowers her and then reveals he has found all the guns she had hidden throughout the house. Asher makes her tea and tells her they could start over and live together as a family, but a disgusted Scott tells him she does not want to. Enraged, Asher begins beating and choking her and eventually stabs her in her belly with a pair of scissors. Scott, seemingly unharmed by the stabbing, shocks Asher by quickly stabbing him in the heart with the same scissors. As Asher is on his knees looking at her in disbelief, Scott removes a prosthetic pregnant belly, and tells him the past seven months have been a carefully planned trap. He falls over, dead. The film ends with Scott calling the police, saying "It's over," and staring out her window.

Question: What does Scott discover after Costa comes to visit her in her hotel room?
Answer: That Costa is in fact Martin.  
Alternative answer: Costa is Martin, the murderer