ByBrian Tallerico,
a film critic with over 20 years of experience covering movies and TV.He is the president of the Chicago Film Critics Association, the co-producer of the Chicago Critics Film Festival, and managing editor of RogerEbert.com.
Jacinda Barrett as Diana, Sissy Spacek as Sally.
Photo: Saeed Adyani/Netflix
Bloodline co-creator Todd A. Kessler returns to the director’s seat for “Part 20,” one of the best episodes of the second season. John Rayburn (Kyle Chandler) has been spinning so many plates since he murdered his brother Danny (Ben Mendelsohn), and they’re finally beginning to crash around him.
It’s telling that the episode opens with John washing his bloody hands in slow motion. It’s getting harder and harder to get them clean. At the end of “Part 19,” John beat extortionist Ozzy Delvecchio (John Leguizamo) outside the Red Reef motel. In a typically hypocritical way, John’s first line is “There’s no excuse for what your grandmother did.”
John is referring to the last episode’s other major incident: Sally Rayburn (Sissy Spacek) slapping her granddaughter, Jane (Taylor Rouviere), after the girl suggested she was responsible for her son’s death. Jane’s not done. The next morning, she mentions how much the Rayburns have been defined by violence. Remember the inciting incident of their problems? Sally was leaving her husband, Robert (Sam Shepard), so Danny fled with his sister on a boat, leading to her drowning. Rather than comfort his living son, Robert beat him so badly that he went to the hospital. Dad beat Danny. Kevin attacked him. Sally hit Jane. This violent family would feel at home on Game of Thrones. As Jane says, in perhaps the most truthful line of the season, “This family is so fucked up.”
Ozzy is badly beaten, but he’s alive, sitting in a chair across the room when Eve (Andrea Riseborough) wakes up. Eve has begun to realize that Ozzy’s aggression could derail her future. She’s getting closer to the Rayburns. She even calls them her family, which sets Ozzy off on a hair-pulling tantrum. “Why the fuck would you want them to be your family?” he asks. “They don’t deserve you.” Ozzy is an emotional creature, driven by how much he loves Eve and how much he hates the Rayburns. You’re on his good side or his bad side — there’s no in-between.
Meanwhile, Meg Rayburn (Linda Cardellini) is piecing together Marco’s involvement with the cover-up of Sheriff Aguirre’s domestic violence case. She’s holding onto that secret for now. Will she protect her ex-lover or use it against him? Until then, she has to keep running John’s campaign. She orders him to speak at a victim’s rights group, where he can capitalize on the negative press against Aguirre (David Zayas). John is hesitant, but his sister can be convincing. She orders him to bring his wife, Diana (Jacinda Barrett).
That might be tough. “Part 20” is Barrett’s juiciest episode of the season (and maybe even the series). Diana Rayburn is finally opening her eyes to this family, along with the tragic events of the last few months. When she drops stuff off at the inn, Sally comes out to talk, arms crossed — the preferred body language of the Rayburns. She was up all night after hitting Jane, but Diana doesn’t really care. She’s tired of the Rayburns. And she won’t force her daughter to make peace. Sally reveals that Jane accused her of killing Danny, then she spits out the truth: “We all had a hand in it! Even John!” She’s not wrong. Diana is married to the man most responsible for her brother-in-law’s demise.
Next, Norbert Leo Butz has a very good scene as Kevin opens up at a substance abuse meeting. As he says, reality is “crashing at my door.” The line that follows sums up the overall arc of the season, which has essentially tracked the Rayburns’ fall from grace: “I’m starting to see than I’m maybe not the person that I thought I was. My family’s not really who I thought they were.” Will Kevin’s guilt be the family’s downfall?
Not if Marco (Enrique Murciano) has anything to say about it. He tells Aguirre that he’s getting nowhere with Eric (Jamie McShane), so they’ll have to re-interview the Rayburns. Marco is getting closer to the truth about Danny, which he wouldn’t be investigating if Aguirre weren’t playing political games, which he wouldn’t be doing if John weren’t running for sheriff. John’s need for control will be his undoing. Marco warns John that they’ll bring in Kevin and Meg for questioning, and big brother warns them. They panic, but then John wonders if they can somehow use this. What’s he planning?
Nolan (Owen Teague) and Sally have a great scene together, too. She’s trying to get closer to her grandson, perhaps as penance for what she did to Jane. Spacek plays this scene well, knowing that the truth about Danny’s opinion of the family is hard to hear but understandable. Spacek is really a phenomenal actress, and it speaks to this era of “Peak TV” that we can so easily take for granted an Oscar winner’s presence on this show.
Diana and Jane fight, as mom argues that they were fearful for Jane’s life when Danny took her out on a boat last season. When Jane argues back, Diana realizes a few things: Her husband isn’t telling the whole truth, and he may have been lying for a long time.
Marco questions Kevin, trying to trip him up. Or is he? Kevin claims that he was high during Danny’s last days in the Keys. He says that he lied the day Marco asked him about the boat. He did know that boat and its owner — the guy is his dealer, as Kevin tells it. He frames Rafi Quintana, giving the cops a link from Lowry to Danny’s death. That’s how John plans to use these interrogations to close the case.
Meg is up next. Given her history with Marco, why is this interrogation happening? Are there no other cops in the Keys? Anyway, she seems to be getting tripped up, although that could be explained by their relationship. Marco was there that night that she came home from the hospital, when she put luggage in her trunk. At least that’s what she said. She’s defensive. “I’m done now,” she says. Of course, that’s not true.
Diana wants to know what happened to the necklace that Danny gave Jane. We know it was on the beach when John killed his brother. John gets aggressive and defensive. He yells and swears, then asks which tie to wear to a women’s rights meeting. It’s gross. Diana is tired of it. John is not the man he used to be. He’s cracking.
Meg goes to see Marco, who hesitantly lets her in. She opens up to him about the history of the Rayburn family. She tells the story of Robert beating up Danny as a kid. It’s impossible not to note the correlation: Meg, Kevin, and John lied to the cops to protect their father years ago, and now they’re doing it to protect themselves. That day is the the Rayburn family’s formative memory.
Somewhat unbelievably, the scene leads to romance, after which Marco isn’t done interrogating. He asks again about the night with the trunk. Was Danny there? She deflects, claiming that her lover was inside and that’s why she didn’t tell Marco. Is this the plan? Kevin sticks the murder on Lowry and Meg evades with a personal alibi? Won’t Marco check up on this?
Before the episode’s big closing scene, Ozzy comes into the Rayburn campaign office. Meg is the only one there. He’s lost his patience. He tells her about John beating him. He pushes the blackmail narrative over the woman most interested in keeping John’s reputation clean. “I just want to tell you a story about your brother John and the Red Reef motel,” he says.
Soon after, another Rayburn learns one of John’s dark secrets. Back at home, Diana yells at her husband. A speechless John, shell-shocked and battered, just listens. In a very well-written scene, Diana doesn’t demand answers about what John did to Danny. She just implies that she knows. She won’t ask the question because she can’t hear the answer. She has to keep her family together. John looks lost, but he doesn’t deny anything. Diana tells him, “What you’ve done could destroy us.” I’d say that bridge has already been burned.
Other Notes:
This was a strong episode, thanks to (previously underwritten) performances by Barrett and Spacek, but it was too long. Each episode of Bloodline does not need to be 60 minutes. The show would be wise to trim here and there.
As expected, the season’s themes are taking shape. It’s about choosing sides, what people are willing to do for the greater good, and how much a mother will ignore to keep her family together.
Let’s hope this caliber of writing continues for the last three episodes. Although episode length has been an issue, the 10-episode structure works well. A baker’s dozen was a bit too much last season.
By submitting your email, you agree to our
Terms and Privacy Notice
and to receive email correspondence from us. This site is protected by reCAPTCHA and the Google
Privacy Policy and
Terms of Service apply.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
or
Already a subscriber?
What is your email?
This email will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
Password must be at least 8 characters and contain:
Lower case letters (a-z)
Upper case letters (A-Z)
Numbers (0-9)
Special Characters (!@#$%^&*)
This password will be used to sign into all New York sites. By submitting your email, you agree to our Terms and Privacy Policy and to receive email correspondence from us.
You’re in!
As part of your account, you’ll receive occasional updates and offers from New York, which you can opt out of anytime.
Already a subscriber?
Already a subscriber?
`;
// integrate Sub(x) scripts and elements
if (hostname !== 'subs.nymag.com') { // do not integrate on this subdomain
document.head.appendChild(trackingScript);
document.body.insertAdjacentHTML('beforeend', subXAnimationElements);
}
There was an error processing the request. Please try again later."}).catch(e=>console.error("Error verifying email: ",e)))(r.querySelector(".content"),o.bannerCTAVerification)})):(l.remove(),s.remove()),o.dismissable||n.remove(),o.useAlertIcon||a.remove(),r.classList.add("show"),n.addEventListener("click",()=>{u(),r.classList.remove("show")})}else r.remove()}});
}, {"1":1,"6":6,"12":12,"35":35,"40":40}];
window.modules["global-nav.client"] = [function(require,module,exports){"use strict";const dom=require(4),auth=require(12),signInButton=dom.find(".user-signin"),signOutButton=dom.find(".user-signout"),globalNav=dom.find('[class^="global-nav"]'),body=dom.find("body"),dropdownItems=dom.findAll(".dropdown-wrap"),gtm=require(1),appendLandingPageParams=require(135),pageUri=require(124).getPageUri(),subscriptionPromoLinks=dom.findAll(".persist-params"),searchString=window.location.search||"";function closeDropdowns(e){let n=globalNav.querySelectorAll(".dropdown.open");dropdownItems.forEach(function(t){let o=t.querySelector(".dropdown");!n||t.contains(e.target)&&27!==e.keyCode||o.classList.remove("open")})}function gtmSendReport(e,n,t){let o={eventCategory:"ecommerce",eventAction:"componentClick",brand:e,dimension23:"global-nav",list:pageUri,pageZone:"header",variant:"nav-link"};"global-nav-link"===t&&(o.eventLabel=n.href),gtm.reportNow(o)}function updateElementTargetUrlsIfQueryStrings(e){if(searchString){const n=new URLSearchParams(searchString);let t=e.href;if(t.includes("?")){const o=t.split("?"),i=new URLSearchParams(o[1]);for(let e of n.entries())i.set(e[0],e[1]);t=`${o[0]}?${i.toString()}`,e.href=t}else e.href=`${t}?${n.toString()}`}}function init(e){const n=e.querySelectorAll(".to-landing-page");window.addEventListener("auth:init",()=>{signInButton.addEventListener("click",function(e){e.preventDefault(),auth.showEmbeddedLoginFlow("top navigation")}),signOutButton.addEventListener("click",function(e){e.preventDefault(),gtmSendReport("Sign Out",e.target,"user-info-link"),auth.logout()}),auth.isAuthenticated()&&e.classList.add("signed-in"),auth.isSubscriber()&&e.classList.add("subscribed"),e.querySelectorAll(".user-link").forEach(e=>{e.classList.add("active")}),subscriptionPromoLinks.forEach(e=>{updateElementTargetUrlsIfQueryStrings(e)}),appendLandingPageParams(n)})}dropdownItems.forEach(function(e){e.addEventListener("click",function(){e.querySelector(".dropdown").classList.toggle("open")})}),body.addEventListener("click",closeDropdowns),document.addEventListener("keydown",closeDropdowns),globalNav.addEventListener("click",function(e){let n=e.target;n.classList.contains("global-nav-track")&>mSendReport(n.text,n,"global-nav-link")}),module.exports=init;
}, {"1":1,"4":4,"12":12,"124":124,"135":135}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(406),Fingerprint2=require(408),DS=require(407),Eventify=require(246);function registerGlobals(){window.DS=DS,window.Eventify=Eventify,window.Fingerprint2=Fingerprint2,DS.value("Eventify",Eventify),DS.value("Fingerprint2",Fingerprint2),DS.value("$document",window.document),DS.value("$window",window)}function mountDollarSliceComponents(){DS.service("components",["$document","$module",function(e,n){var o=_pickBy(n.definitions,e=>e.providerStrategy===n.providers.controller),r=Object.keys(o);function t(e){return o=>{try{n.get(e,o)}catch(e){logMountError(o,e)}}}_each(r,n=>{var o=e.querySelectorAll('[data-uri*="/_components/'+n+'/"]'),r=e.querySelectorAll('[data-uri$="/_components/'+n+'"]');_each(o,t(n)),_each(r,t(n))}),this.components=r}]),DS.get("components")}function logMountError(e,n){const o=e.outerHTML.slice(0,e.outerHTML.indexOf(e.innerHTML));console.error("Error attaching controller to "+o,n)}registerGlobals(),"loading"===document.readyState?document.addEventListener("DOMContentLoaded",()=>{mountDollarSliceComponents()}):mountDollarSliceComponents();
}, {"221":221,"246":246,"406":406,"407":407,"408":408}];
window.modules["ads.legacy"] = [function(require,module,exports){"use strict";const _map=require(118),_forEach=require(107),_isString=require(268),_intersectionWith=require(409),_isEqual=require(274),_each=require(406),_debounce=require(182),_sortBy=require(205),page=require(124),visit=require(114);DS.service("adService",["Eventify","$cid","$document","$window",function(e,t,a,i){var o,n,s,r,d,c,u,l,g={},p=this,h=[],f=visit.getQueryParamsObject(["utm_campaign"]),m=document.querySelector('script[data-type="ad-a9"]'),b=[],w=!1,v=[],y=document.querySelector('script[data-name="ad-doubleverify"]');document.querySelector('script[data-name="concert-ads"]')||(i.NYM={},i.NYM.analytics={},i.NYM.analytics.adStartTime=i.performance.now(),i.googletag=i.googletag||{},i.googletag.cmd=i.googletag.cmd||[],u=i.googletag,(m||y)&&(i.googletag.cmd=i.googletag.cmd||[],i.googletag.cmd.push(function(){i.googletag.pubads().disableInitialLoad()})),m&&(l=i.setInterval(function(){void 0!==window.apstag&&void 0!==window.apstag.timeout&&(i.clearInterval(l),window.apstag.cleared=!0,l=null)},10),setTimeout(function(){l&&(i.clearInterval(l),i.googletag.pubads().refresh(),window.apstag||console.log("MESSAGE: Timeout for A9 load exceeded, aborting"))},500)),y&&(b.push(new Promise(function(e){w?e():v.push(e)})),c=i.setTimeout(T,2500)),o=function(e){var t,a,o=e.data,n=[];return o.loaded?e:(o.loaded=!0,t=null,(t=o.sizes?u.defineSlot(o.name,o.sizes,o.id).addService(u.pubads()):u.defineOutOfPageSlot(o.name,o.id).addService(u.pubads())).setTargeting("adid",o.id),f.hasOwnProperty("utm_campaign")&&t.setTargeting("utmcamp",f.utm_campaign),a=p.getAdCount(o.label),t.setTargeting("label",o.label+"_"+o.site+"-"+a),u.display(o.id),u.pubads().addEventListener("slotOnload",function(){i.NYM.analytics.firstAdLoadTime||(i.NYM.analytics.firstAdLoadTime=i.performance.now(),i.NYM.analytics.firstAdLoadLabel=e.data.label)}),n=_(o),Promise.all(b).then(function(){n?window.apstag&&window.apstag.cleared?window.apstag.fetchBids({slots:[n],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([t],{changeCorrelator:!1})})}):y&&u.pubads().refresh([t],{changeCorrelator:!1}):u.pubads().refresh([t],{changeCorrelator:!1})}),e.slot=t,e)},n=function(e){var a,i,o,n=t(),s=e.getAttribute("data-name"),r=e.getAttribute("data-sizes"),d=e.getAttribute("data-label"),c=e.getAttribute("data-site");n=e.id,r&&r.length?(r=r.split(","),a=[],_map(r,function(e){e=e.split("x"),i=parseInt(e[0]),o=parseInt(e[1]),a.push([i,o])})):(e.classList.add("oop"),a=!1),this.data={id:n,name:s,sizes:a,loaded:!1,label:d,site:c},g[n]=this},r=function(e){u.cmd.push(function(){var t=o(e);g[e.data.id]=t})},s=function(e){var t=[];e.slot?(t=_(e))&&window.apstag&&window.apstag.cleared&&window.apstag.fetchBids({slots:[t],timeout:window.apstag.timeout},function(){u.cmd.push(function(){window.apstag.setDisplayBids(),u.pubads().refresh([e.slot],{changeCorrelator:!1})})}):e&&r(e)},u.cmd.push(function(){var e,t,o,n=page.getMeta("article:tag"),s=page.getMeta("author"),r=i.location.href,d=(e=a.head.querySelector(".head-gtm"),t=a.body.querySelector(".gtm"),e&&"top"===e.getAttribute("data-gtm")?"gtmtop":t&&"bottom"===t.getAttribute("data-gtm")?"gtmbottom":"");o=[],_forEach([n,s,d],function(e){_forEach(e.split(","),function(e){(e=e.trim().toLowerCase().replace(/\s/g,"-").replace(/\'|\’/g,"")).length&&o.push(e)})}),u.pubads().setTargeting("kw",o),u.pubads().setTargeting("entry_group",o),r=r.slice(r.lastIndexOf("/")+1),u.pubads().setTargeting("pn",r),u.companionAds().setRefreshUnfilledSlots(!0),u.pubads().enableAsyncRendering(),u.enableServices()}),this.load=r,this.create=function(e){return new n(e)},this.refresh=function(e){var t;_isString(e)?(t=this.getById(e),s(t)):s(e)},this.remove=function(e){var t=e.data.id;a.getElementById(t).innerHTML=""},this.getAdCount=function(e){var t,a=0,i=Object.keys(g);return _each(i,function(i){(t=g[i]).data.loaded&&t.data.label===e&&a++}),a},this.getById=function(e){return g[e]},d=_debounce(function(){var e={TopLeaderboard:1,RightColTopMPU:2,outOfPage:99,"homepageTakeover/TopLeaderboard":1},t=_sortBy(h,function(t){return e[t.data.label]||10});_forEach(t,function(e){return e.data.sizes?r(e):i.setTimeout(function(){r(e)},2e3)}),y&&window.PQ.cmd.push(()=>{try{window.PQ.loadSignals(["ids","bsc","vlp"],T)}catch(e){T(),console.error(`There has been an error loading Double Verify signals: ${e}`)}}),h=[]},10),this.addToPageLoadQueue=function(e){h.push(e),d()});function _(e){var t,a=e.sizes;return a=_intersectionWith(a,[[970,250],[970,90],[728,90],[300,600],[300,250],[320,100],[320,50]],_isEqual),e.sizes&&e.sizes.length&&(t={slotID:e.id,sizes:a,slotName:e.label}),t}function T(){i.clearTimeout(c),w=!0,_forEach(v,function(e){e()})}}]);
}, {"107":107,"114":114,"118":118,"124":124,"182":182,"205":205,"268":268,"274":274,"406":406,"409":409}];
window.modules["cid.legacy"] = [function(require,module,exports){"use strict";DS.service("$cid",function(){var r=Math.floor(100*Math.random());return function(){return"cid-"+ ++r}});
}, {}];
window.modules["client.legacy"] = [function(require,module,exports){"use strict";require("cid.legacy"),require("ads.legacy"),require("facebook.legacy"),require("aaa-module-mounting.legacy");
}, {"cid.legacy":"cid.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.legacy","aaa-module-mounting.legacy":"aaa-module-mounting.legacy"}];
window.modules["facebook.legacy"] = [function(require,module,exports){"use strict";DS.service("facebook",[function(){this.fb=function(i){window.FB&&window.FB[i].apply(this,Array.prototype.slice.call(arguments,1))}}]);
}, {}];
require=(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o typeof key === 'string' && key.match(/\.legacy$/)).forEach(key => window.require(key));
}
function tryToMount(fn, el, name) {
try {
fn(el); // init the controller
} catch (e) {
const elementTag = el.outerHTML.slice(0, el.outerHTML.indexOf(el.innerHTML));
console.error(`Error initializing controller for "${name}" on "${elementTag}"`, e);
}
}
/**
* mount client.js component controllers
*/
function mountComponentModules() {
Object.keys(window.modules).filter(key => typeof key === 'string' && key.match(/\.client$/)).forEach(key => {
let controllerFn = window.require(key);
if (typeof controllerFn === 'function') {
const name = key.replace('.client', ''),
instancesSelector = `[data-uri*="_components/${name}/"]`,
defaultSelector = `[data-uri$="_components${name}"]`,
instances = document.querySelectorAll(instancesSelector),
defaults = document.querySelectorAll(defaultSelector);
for (let el of instances) {
tryToMount(controllerFn, el, name);
}
for (let el of defaults) {
tryToMount(controllerFn, el, name);
}
}
});
}
// Make sure that a `window.process.env.NODE_ENV` is available in the client for any dependencies,
// services, or components that could require it
// note: the `` value is swapped for the actual environment variable in /lib/cmd/compile/scripts.js
window.process = window.process || {};
window.process.env = window.process.env || {};
if (!window.process.env.NODE_ENV) {
window.process.env.NODE_ENV = '';
}
// note: legacy controllers that require legacy services (e.g. dollar-slice) must
// wait for DOMContentLoaded to initialize themselves, as the files themselves must be mounted first
mountLegacyServices();
mountComponentModules();
// ]]