Aaaaand, we’re back! Following a monthlong hiatus occasioned by a delayed State of the Union and March Madness, new episodes of Elsbeth are here again to bathe our minds in the soothing yet bracing tonic of New York’s most unexpectedly effective, if unofficial, homicide detective.
“A Classic New York Character” has a lot going for it: We’re getting to know our main ensemble better, there’s less exposition to squeeze into the story, the stakes are ratcheting up a bit, and we are treated to not one but two perfect guest-star appearances from Linda Lavin and Jane Krakowski, respectively. We’re also seeing some themes emerging that I hope will be teased out further as this ten-episode season progresses.
Once again, the murder of the week takes place before the credits, and the fun of the episode is in the details of Elsbeth and Officer Kaya methodically and creatively chasing down every lead to get the bad guy. Or bad guys, in this case featuring a murder most foul in the notoriously seedy demimonde of Upper West Side co-ops.
Our victim is Gloria Bletcher (Lavin), who is the president of her building’s co-op Board, a position she has held for the last 40 years. She’s enormously capable — the kind of person who knows how to wield her bylaws to maintain strict control of the building and its residents — and a nightmare under whose dictatorial rule all other board members (and presumably other residents) chafe. Imagine a contemporary Lady Catherine de Bourgh in a Chanel suit, shouting demands from the balcony of her beautiful fourth-floor apartment and holding a maximally imperious court in her Wedgwood-blue living room. Nothing is below her notice, but everything is well below her stringent standards. Gloria is … a lot. You might even say, as every single one of her conspiratorial board members do, that she’s a real New York character. They’re not wrong to want a change in leadership, but their true motivation is the money they could make if they approve the sale of four apartments to a motivated buyer brought to them by high-powered real-estate agent Joanne Lennox of Joanne Lennox Realty (Krakowski). The buyer’s name cannot be mentioned, but it rhymes with Bope-rah! The life-changing money on the table has their mouths watering, but Gloria vetoes the sale on the grounds that having celebrities as residents would harm the building’s overall value. The only solution is murder in this episode of Definitely Not Only Murders in the Building.
The board and Joanne conspire to loosen the bolts on Gloria’s balcony railing while she’s out one evening with her underachieving son, Louis, and then induce him to get into a shoving match with Gloria. His anticipated fury about her hiring Joanne to sell his garden apartment will no doubt do the trick! Except: It’s a trick. Gloria routinely threatens to sell Louis’s apartment, but upon seeing the flyer Joanne gave Louis in the lobby, sniffs that Joanne has jumped the gun a bit. Louis is distraught but not angry, and Gloria winds up falling to her death only when she leans on the railing to yell at her neighbor’s loudly barking dog.
Elsbeth unofficially investigating the murder is something Gloria would both appreciate and hate. She’d recognize Elsbeth’s extreme competence and would have less-than-zero patience for her apparent manic-pixie-dream-detective dottiness. Without hitting us over the head with this as a capital-T Theme, Elsbeth and Kaya solving the case is also a passing of the torch of New Yorker–ness from one kind of New Yorker to two others. Throughout the episode, Elsbeth is working her way toward being a real New Yorker by trying on for size a bunch of things that she thinks are quintessentially New York: amassing a collection of caricatures of herself from artists in Times Square; sampling the latest baked-good trend (cragels, a croissant-bagel hybrid: “Genius or folly? Let’s find out!”); learning Yiddish; and attempting to buy an apartment in Gloria’s co-op.
Elsbeth and Kaya’s burgeoning investigative partnership and friendship provides vital character development for them both, which is the episode’s warmest part. It also contains the seeds for the most significant conflict of the season, the inevitable feelings of betrayal when Elsbeth’s true mission — investigating Captain Wagner while she observes NYPD protocol under its DOJ consent decree — comes to light. After seeing a flustered Elsbeth take a call from Agent Celentano and overhearing some of their conversation, Kaya is beginning to develop a suspicion about what she’s there for, but otherwise, they are working really well together. They quickly note the unraveling of Joanne Lennox’s story about the whereabouts of her handbag at the crime scene; share murmured concerns about poor Louis, who needs a hug and a lawyer more than anything else; collaborate on their emerging theory of the case; and relish a deep dive into Gloria’s 40 years’ worth of co-op board meeting agendas and minutes. Kaya even ventures to suggest that Elsbeth’s perspective on Louis may be colored by the free-floating motherly concern she can’t bestow on her own son, Teddy, who lives in D.C.
Captain Wagner is so impressed with what Kaya and Elsbeth pull together in their unofficial work on the case that he only reminds Elsbeth once in this episode to “observe and report! From a distance!” It’s worth noting that this admonishment comes after he tells Detective Brauner to return to his investigation because his facts about Louis don’t add up to anything chargeable.
It’s hard to imagine a leader as attached to correct protocol and impenetrable case theories as Captain Wagner being guilty of corruption, but in Elsbeth’s conversation with Celentano, Kaya overhears her mention a person named Wally, who Wagner advised her to forget about. Naturally, Celentano instructs her to pursue it, an instruction justified by a later scene where Wally shows up, raging that Wagner “needs to answer for what’s happening at Flairall!” In a subsequent call with Celentano, Elsbeth learns that he suspects Wagner has been laundering bribes through the charitable foundation he runs with his wife. As viewers, we may feel a little confused by all this Wally stuff; that’s because his existence is set up in the second episode airing in this week’s double-header. For further details, please see “Just One More Thing” below.
Each time Kaya and Elsbeth review evidence — tidbits including Joanne’s bag, the deliberately loosened railing bolts and the impossibility of Louis being the bolt loosener, the sticky white residue on the building’s outside wall, the existence of the sole surviving dumbwaiter line connecting Gloria’s and board member Leonard’s apartments with the basement — the conversation refines their thinking and sends Elsbeth back out for another discussion with Joanne Lennox. Carrie Preston’s scenes with Jane Krakowski are the episode’s best. Like the moments between Preston and the pilot’s murderer, played by Stephen Moyer, the chemistry between them crackles and zings with the fun energy that often exists between well-matched rivals.
For every moment Joanne Lennox (of Joanne Lennox Realty) gets the upper hand with her bone-deep knowledge of New York City and ready answers to Elsbeth’s questions, Elsbeth throws her off-balance with her seemingly never-ending list of more detailed follow-up questions. At the scene the morning after Gloria’s murder, Joanne says she must have left her handbag at the office, but it turns out she had left the tote in the last-surviving dumbwaiter. When showing Elsbeth Leonard’s apartment, Joanne correctly accuses Elsbeth of snooping and shoots down her queries about her access to Gloria’s apartment. Joanne gets distracted by a conversation with Leonard about the potential sale to Bope-rah for long enough that Elsbeth is able to get a sample the white residue from the outside wall. That residue leads Elsbeth to Joanne’s climbing gym, where Joanne exasperatedly explains that the sticky white powder “helps with the grip” before scampering up the wall. Elsbeth, in turn, reveals that she can pay cash for Leonard’s apartment and gets Joanne to acknowledge her original surname (Grozecki) along with its humbler origins and the intense drive to succeed her mother instilled in her. Expositional efficiency wins again!
Kaya’s deep dive into the board-meeting agendas and minutes reveals “motive on nearly every page”, providing Elsbeth (and by extension, the NYPD) with the missing puzzle pieces to charge Joanne and the greedy board members with conspiracy to murder. The board turn on Joanne for plea deals the moment that they learn that the sale to Bope-rah had been a ruse. Joanne’s motive wasn’t money but revenge for her late mother, Sadie, whose life had been ruined by Gloria 30 years earlier when Gloria’s then-husband, Louis Sr., had fallen in love with Sadie. Sadie had been a live-in domestic worker for the Bletchers and when Gloria discovered the affair, she not only fired Sadie and banned her from the apartment but ruined her reputation so that she struggled for work forever after. Joanne’s entire career had been a long game for the vengeance she’d promised to her dying mother, so off she goes to prison with no regrets.
Captain Wagner drops by with good news — in her brief tenure unofficially investigating crimes in his precinct, Elsbeth has cleared four homicides. That’s great, but wait, four? Well, sure: There was the young actress and college student, the reality star [the murder that she solves in the next episode; remember, they’re airing out of order], Gloria Bletcher, and now, Louis Bletcher Sr. The late Mr. Bletcher’s mummified corpse was found in one of the walls of Gloria’s apartment. It certainly explains why Gloria had a horror of renovations!
Just One More Thing
• Notes on order: “A Real New York Character” was originally going to air as the season’s third episode, but it was flipped with “Reality Shock,” which is where the initial conversation about Wally occurs, along with Elsbeth’s receipt of her storage closet office. It’s unclear why CBS chose to swap the air order, but once viewers have seen both episodes, these rearranged plot details will make more sense.
• A historical, very New York tidbit that could have inspired the disposal of Mr. Bletcher’s corpse: The late designer and drag performer Dorian Corey, perhaps most famous to the internet for her memorable explanation of the distinctions between reading and shade in Paris Is Burning, achieved a posthumous degree of notoriety in 1993 when the preserved corpse of her former lover, Robert Worley, was discovered in a garment bag in a massive closet in her home. Worley had been killed by a gunshot to the head and had last been seen by his family in 1968. A brief excerpt of a scholarly article about this discovery is available via JSTOR.
• A special shout-out to Jane Krakowski’s funniest moment of the episode, in which Elsbeth drives her to rage-run — in heels! — on her walking-desk treadmill. I don’t believe in perfection, but I sure do believe in those comedy chops.
• I love when an old-timey and still-useful technology gets its contemporary due; let’s hear it for dumbwaiters! And while we’re at it, some praise to the nearly extinct paternoster lift! Not only are they very cool-looking and exclusive to Germany, but they make for great meet-cute venues, as handily demonstrated by Charlotte Ritter and Detective Gereon Rath in Babylon Berlin. (Season four streaming in the U.S. when??)
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(3),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(136),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,"3":3,"12":12,"124":124,"136":136}];
window.modules["aaa-module-mounting.legacy"] = [function(require,module,exports){"use strict";const _pickBy=require(221),_each=require(408),Fingerprint2=require(407),DS=require(406),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(408),_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,"408":408,"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","aaa-module-mounting.legacy":"aaa-module-mounting.legacy","ads.legacy":"ads.legacy","facebook.legacy":"facebook.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();
// ]]