Melvin Udall on neuroottinen kirjailija, joka ilkeilee jatkuvasti kaikille ja kiusaa muun muassa naapurinsa koiraa heittämällä tämän jätekuiluun. Melvinin elämä kuitenkin muuttuu, kun hänen naapurinsa, homoseksuaali taiteilija Simon (Greg Kinnear) joutuu sairaalaan ja Simonin ystävä, galleristi Frank pakottaa Melvininin huolehtimaan hänen koirastaan Verdellistä korvaukseksi ilkeilystään. Melvin inhoaa aluksi koiraa, mutta alkaa kuitenkin vähitellen pitää siitä ja alkaa hemmotella koiraa mm. antamalla sille pekonia. Koira vaikuttaa myös siihen, että Melvin alkaa suhtautua suvaitsemmin muihinkin ihmisiin. Melvin pyrkii kuitenkin aluksi salaamaan muuttuneen asenteensa muilta.
Melvin alkaa tutustua vakiokahvilansa tarjoilijaan Caroliin (Helen Hunt), joka ei aluksi voi sietää Melviniä tämän ilkeän käytöksen takia. Melvin kuitenkin muuttaa käytöstään saatuaan tietää Carolin pojan olevan vakavasti sairas, ja kustantaa tälle uuden yksityislääkärin. Carol epäilee Melvinin odottavan jotakin vastapalvelusta häneltä, ja ilmaantuu tämän ovelle keskellä yötä sanomaan että on kiitollinen, mutta ei aio koskaan maata Melvinin kanssa. Seuraavana päivänä Carolin käytöksestä järkyttynyt Melvin yrittää viimein etsiä apua neurooseihinsa.
Simon palaa takaisin sairaalasta, ja saa tietää olevansa vararikossa. Kun kukaan ei suostu lainaamaan rahaa, hän joutuu lähtemään vanhempiensa luo anomaan rahaa. Frank pyytää Melviniä ajamaan Simonin perille ja tarjoaa avoautoaan lainaan. Melvin puolestaan saa Carolin mukaan reissulle vetoamalla siihen, että tarvitsee vastapalveluksen Carolin pojalle antamastaan avusta.
Melvin, Simon ja Carol lähtevät parin päivän matkalle Baltimoreen. Matkan aikana selviää, että Simonin vanhemmat hylkäsivät poikansa vuosia sitten tämän seksuaalisen suuntautumisen takia. Perillä hotellissa Simon on niin jännittynyt tulevasta tapaamisesta, ettei halua lähteä illalla ulos Melvinin ja Carolin kanssa. Melvin ja Carol menevät ravintolaan syömään ja tunnelma kehkeytyy romanttiseksi. Melvin kuitenkin pilaa tunnelman loukkaamalla Carolia, joka lähtee ravintolasta Simonin luo.
Seuraavana päivänä Simon soittaa äidilleen, mutta päättää lopulta olla anomatta rahaa hänet hylänneiltä vanhemmilta, koska haluaa pärjätä itse. Kolmikko lähtee paluumatkalle. Matkan lopussa Carolista ja Simonista on tullut hyviä ystäviä, mutta Melvin on riidoissa Carolin kanssa, ja Simon on edelleen vararikossa. Melvin tarjoaa kuitenkin Simonille ja tämän koiralle majapaikan luotaan, ja myös Frank tarjoaa Simonille apuaan. Simonin ja Frankin suhde kehittyy romanttiseen suuntaan.
Melvin aikoo ensin tyytyä siihen, ettei voi korjata välejään Carolin kanssa, mutta Simon kannustaa häntä yrittämään uudelleen. Melvin menee Carolin asunnolle aamuyöstä ja tunnustaa rakkautensa. Carol pitää Melvinin temppua hulluna, mutta suostuu lopulta olemaan Melvinin kanssa. Pari lähtee viideltä aamulla ulos hakemaan sämpylöitä läheisestä leipomosta.