The movie opens on a flashback to 2002 when Marni Olson (Kristen Bell) was in high school. She was pimply with awful bangs and big glasses, and was teased and tormented by J.J. (Odette Yustman) the most beautiful and popular girl in school. She and her friends would sing “We Are the Champions” and when they got to “no time for losers” would make an L with their fingers at Marni. The worst of it was when Marni, as the mascot for the high school basketball team, was shoved onto the court by J.J., where she promptly fell into her brother Will (James Wolk) knocking him over, causing him to miss his shot and lose the game. Later, Marni climbs up into the family’s tree house to find Will, and asks if he’s even speaking to her. She admits that the girls were right, that she is a loser. Will assures her that she is beautiful, and that she just can’t see it.
Which leads to today, where Marti is a successful PR person in Los Angeles, relaying the story of her past to young interns to show how all the hard times she went through led her to be where she is today. Afterwards, she receives a promotion to the new VP of the New York office. As she gets on a plane to go home for Will’s wedding, she talks on the phone with her mother Gail (Jamie Lee Curtis) about how she’s shocked she hasn’t met Will’s fiancé Joanna yet. Gail points out that they went to high school together. Marni wonders how they never crossed paths, being from the same small town, and Gail tells her she went by a different name then, J.J. Marni freaks out completely, panicking and getting out of her seat. After being told repeatedly to sit down, an air marshal (Dwayne “The Rock” Johnson) intervenes, and has a heart-to-heart with a now handcuffed Marni.
Marni gets home and sees her mom, Will, younger brother Ben (Billy Unger), and dad Mark (Victor Garber). She quickly learns that everyone thinks Joanna is perfect, and has almost replaced Marni at home. Finally, Joanna returns, and while Marni braces for an awkward encounter, Joanna says “nice to meet you”. Marni is shocked that Joanna doesn’t remember her, and throughout the family dinner pokes and prods Joanna for information, but Joanna stays consistent. She tells Marni that her parents died right after high school, and she re-examined herself and started working as a nurse and on charitable foundations and for non-profit organizations. Marni is more and more agitated with how perfect Joanna appears, and even the family dog likes Joanna more than Marni. Eventually, Joanna’s wealthy Aunt Ramona (Sigourney Weaver) shows up, and Gail is shocked to discover that she was her high school best friend, who she knew at the time as “Mona”. A quick flashback reveals that on prom night, Mona shoved Gail into a pool. Mona is now incredibly wealthy and in the process of a second divorce, appearing on the Forbes list, and lavishes the entire group with incredible gifts. The rest of the night proceeds awkwardly but cordially, ending with Gail, who was the queen bee and head cheerleader in high school, redoing an old cheerleading routine with Joanna.
The next day, Marni, Will, and Joanna go to pick up grandma Bunny (Betty White). On the way there, Marni continues pressing Joanna about high school, sure that she must remember something. Marni pushes Joanna, brining up nasty rumors about J.J. from high school, until Joanna decides to switch the music from her and Will’s song, Hall and Oates’s “Kiss on My List”, to “We Are the Champions”. Marni is stunned, and realizes that Joanna knows exactly who she is. At Bunny’s house, Marni helps her get ready, which includes helping her with her dentures. Some glue gets caught in Marni’s hair, and Bunny quickly snaps her hair off with scissors, leaving her with the same awful bangs she had in high school. The four are on their way to dance rehearsal for the wedding when they run into Tim (Kyle Bornheimer), Joanna’s ex-boyfriend. Joanna claims it was casual but Tim is clearly not only still in love with her but severely unhinged. At dance rehearsal, wedding planner Georgia (Kristin Chenoweth) pairs Marni up with Charlie (Sean Wing), one of Will’s friends. The dance rehearsal quickly becomes an incredibly competitive dance off between the two pairs of women.
Later, Marni talks with Ben about how she can get Will to see who Joanna really is. She decides she’ll have to just talk with Will about it, alone. Meanwhile, Gail goes to see Ramona at her hotel. Ramona is on the phone with her husband finishing divorce proceedings, so Gail goes to the bathroom, and while looking at one of Ramona’s earrings, drops it down the sink. She tears out the piping to retrieve it and sprays water everywhere. She reaches for a towel to dry herself, but grabs Ramona’s dress and tears it. She leaves the bathroom and sees Ramona again. She hastily tells Ramona she just wanted to make sure that what’s past is past, and Ramona agrees.
Marni goes to talk to will, who is finally alone, but Will is going for a run, so Marni agrees to go with him so they can talk, She does not realize that Charlie is also going with them. Will tells Marni he’s taking their tree house and moving it to the new house he and Joanna will have. Before Marni can tell Will how she feels about Joanna, he thanks her for being so supportive. At the end of the run, Marni falls of the trail and into some fire ants. Charlie helps her home but she continuously and clumsily injures him.
The next day, Marni is covered in zit-like ant bites, which combined with her losing her contacts and being forced to wear glasses and her bangs, makes her look just like she did in high school. On the way to the bridal shower, Marni and Gail come up to Ramona at a stoplight. Ramona revs her engines, so when the light turns green Gail floors it, thinking they are racing, but Gail is immediately pulled over and ticketed. At the bridal shower, it’s all of the same mean girls from high school, and Marni feels awful. She follows Joanna into the bathroom and tells her enough is enough, her little act has everybody fooled, and if she just apologizes Marni will let the whole thing go. Joanna says, “I’m sorry”, but in an incredibly bitchy and clearly not meaningful way. Marni has had enough, and goes with Ben to the old high school to dig up the time capsule from the class of 2002.
At the rehearsal dinner, Marni brings Tim as her date, which Will thinks should be fine since he only went on a couple dates with Joanna, according to Joanna. Gail, intimidated by Ramona, shows up in a hot new dress… only for Ramona to show up wearing the exact same one. First, Joanna performs a musical number with her friends for Will. As the wedding speeches begin, Tim gets up to make a speech, and talks about even though Joanna left him at the altar, through therapy he’s gotten a little bit better. He starts singing and crying and has to be taken off the microphone. Will is shocked to discover Joanna was engaged, but before she can say anything, a video from Joanna’s friends starts playing only it has been replaced with a video from the class of 2002 time capsule, showing just how awful Joanna was, including showing her pushing Marni into the basketball game. Will can’t believe it and leaves, upset. The AV guy gives Marni back the tape, so everyone sees she was the one who played it.
Marni finds Joanna crying outside, and before she can even speak, Joanna tells her she has a lot of nerve. Marni tells her she’s the one with the nerve, considering how she made her life hell every day for four years. Meanwhile, Ramona finds Gail and tells her she can’t believe her daughter ruined the happiest day of Joanna’s life. The two begin arguing about their past, and Ramona reveals how Gail had everything, cheerleader, homecoming queen, she even auditioned for the musical and got the lead when she doesn’t sing, and she knew Ramona wanted to be Sandy. Gail notes that it wasn’t her job to slow down so Ramona could catch up, and the two fight until they fall into the pool. Ramona finally reveals how she was so upset that her best friend stole Richie Phillips, who Gail went to prom with. Gail points out that he asked Gail, but Ramona says a good friend would have said no. Gail admits that Ramona is right and is sorry, and Ramona admits her faults too. She notes how she works so hard in the business world because some part of her wanted to be a winner after always losing out to Ramona. The two reconcile and hug. But Joanna and Marni are still fighting, throwing plates and wedding presents at each other. Will enters and tells then how disgusted he is with both of them, and can’t believe how much Joanna lied to him.
That night, Marni comes downstairs to find Joanna eating junk food out of the fridge in her wedding dress and crying. Joanna says she’s a horrible person, and tells Marni she should have apologized the second she saw her, but she’s spent so much time trying to distance herself from the person she was in high school, trying to be a person her parents would be proud of, that she didn’t know how to say sorry. Marni apologizes for her part in ruining her wedding. The next day she finds will and says sorry, and tells him she was just trying to protect him from the girl she thought Joanna was, but Joanna isn’t that girl anymore. Will and Joanna make up in the tree house, while Ben reveals to Marni that he loosened the bolts in the tree house when he found out Will was going to move it. The tree house collapses, putting Will and Joanna in the hospital with broken bones. Marni moves the whole wedding into the hospital cafeteria, and Will and Joanna get married. At the reception, Gail reintroduces Ramona to someone she thinks she’d like to meet, Richie Phillips (Patrick Duffy). Bunny meets Joanna’s grandmother (Cloris Leachman), her high school nemesis, and manages to beat her by snagging the man they were both after. As a final wedding gift, Marni uses her PR connections to get Hall and Oates to play at the reception, where they play “Kiss on My List”, and Marni kisses Charlie, Ramona kisses Richie, and Gloria kisses Tim.
Everyone dances as the credits roll.
You can send in your spoiler to other movies by going here.