It's the mid 1940s and Maurice Bendrix (RALPH FIENNES) is a brooding novelist who one night runs into Henry Miles (STEPHEN REA) a former acquaintance of his that he hasn't seen for two years. It turns out that Henry, a reserved and somewhat boorish civil servant, is concerned enough about what his wife, Sarah (JULIANNE MOORE), may be up to that he's considered hiring a private detective to follow her.
Although he eventually decides not to do that, Maurice does, and meets with Mr. Savage (JAMES BOLAM) who runs such a detective firm, telling him that all reports should come back to Maurice and that Henry should know nothing of their activities. While this seems like the actions of a thoughtful friend, it turns out that Maurice and Sarah had an affair those two years ago, until a miracle of sorts and a promise she made had her reluctantly put an end to it.
Despite having not seen her since that parting, the thought of Sarah possibly fooling around with others stirs up deep feelings of jealousy within Maurice. As such, he welcomes the reports of one of Savage's men, Mr. Parkis (IAN HART), who also uses his son Lance (SAM BOULD) to spy upon and collect information about Sarah.
As their investigation continues, we see various flashbacks of Maurice and Sarah's love affair along with their subsequent activities, all told from their unique perspectives that eventually shed light on the truths regarding their relationship.