The second episode of Ms. Marvel maintains the premiere’s momentum, providing high-schooler Kamala Khan (an effervescent Iman Vellani) with a brand-new squish, her best friends with some closely related subplots, and the series as a whole with an intimate coming-of-age quality and some familial complications. Things have finally begun to go Kamala’s way when the episode begins. She feels absurdly confident and, for the first time, like an ostensibly “normal” teenager (despite discovering her powers). But in keeping with the title of her first comic arc,No Normal, a regular adolescence may not be on the cards for long. By the time the credits roll, things have turned upside down, inside out, and completely sideways.
Directed by Meera Menon, the episode flows smoothly from one scene to the next. Its opening sequence is in perfect symmetry with a scene in episode one, in which Kamala sheepishly makes her way through her high-school hallway. This time, having inadvertently unlocked abilities in the vein of her idol, Captain Marvel, she flips her hair in slow motion as she greets her fellow students and stands up for herself, finally correcting a school coach on the pronunciation of her name. The only thing that throws her renewed composure off balance is the sudden appearance of Kamran (Rish Shah), a tall, attractive, newly transferred British Asian senior.
Kamran, who comic fans may recognize as the Khans’ Texan family friend, is now a charming stranger, remixed like much of the show’s lore thus far, but the connection he represents for Kamala remains. At a party, Kamran’s shirtless emergence from a pool becomes a defining coming-of-age moment; the camera is as fixated on Kamala’s enraptured expression as it is on Kamran’s chiseled torso, which becomes outlined by the colors and emoji she imagines. It’s a breathtaking moment, largely because Vellani’s heart seems to flutter, and the episode isn’t even done luxuriating in this connection.
As Kamran drops Kamala and her friends back home, the duo begins feeling each other out through basic Bollywood knowledge. Kamala is taken not just by the fact that she may have found a cute boy, but a Pakistani boy at that, someone to whom she doesn’t need to constantly explain herself or her occasional Urdu verbiage (“I know what ammi means” is an unassuming line on its own, but Vellani’s grinning reaction makes it soar). In a particularly funny exchange, the lovestruck teens approach their mutual love ofBaazigar — a mainstream blockbuster — as if it were an underground cult film known only to them, like a whispered secret, though a clearly jealous Bruno (Matt Lintz) wants to make sure Kamran knows he’s seen it too.
The episode goes on to reveal that Kamran has ulterior motives related to Kamala’s powers, but Shah brings such gentleness to his awkward flirtations that it’s hard not to believe him. When Kamala and Kamran text, their messages appear in the design of her bedsheet, and she imagines hand-drawn sketches of them dancing in the starlight on her bedroom ceiling. She’s so over the moon about him that when she returns from the party, she gets swept up in a jubilant, impromptu dance routine set to the Ronettes’ “Be My Baby,” as hazy pink lighting consumes her living room. It’s shockingly unlike Marvel to display such assured, dreamlike formalism aimed solely at visual splendor, but it’s absolutely welcome as a brief escape before Kamala re-enters Earth’s atmosphere and attends to some pressing personal matters. She and Bruno need to test her powers, she and Nakia (Yasmeen Fletcher) must concoct a plan to improve the women’s section at their mosque, but most of all, she needs to find a way around her tight-lipped mother, Muneeba (Zenobia Shroff), and discover more about her great-grandmother Aisha, the original owner of the bangle that unlocked her mysterious abilities.
As these things usually go, there is likely some shared-universe connection afoot. An informed guess might lead to the conclusion that her bangle is a Nega-Band, a golden artifact that, in Marvel comics, translates mental energy into pulsating physical might — not unlike Kamala’s ability to will her imagination into being (“Like an idea come to life,” she says). In comics lore, these bands are related to the Kree, the warring alien culture that trained her idol, Captain Marvel, in her solo film, and the bands also have their own connection to the Negative Zone, a realm frequently associated with the Fantastic Four, who made their pseudo-debut in the recent Doctor Strange sequel. But regardless of what dots the MCU inevitably connects, for the time being, all these questions are centered on a deeply personal story.
When Aamir (Saagar Shaikh) brings his fiancée Tyesha (Travina Springer) around, casual inquiries about Muneeba’s family history lead to a palpable shift in mood. Muneeba leaves the table, but Yusuf (Mohan Kapur) shares what little he knows, between a magical childhood incident involving Muneeba’s mother Sana, and the disappearance of Sana’s mother Aisha during the violent Partition of India and Pakistan in 1947. The comics depict a story of Muneeba’s family migrating to Karachi from Mumbai (then Bombay), but while this was originally just a background detail, here, it becomes the foundation for central dramatic tensions. Like many South Asian families, there’s an air of silence around these events and the unpleasant details of who did or did not make it across the border by train. Coupled with unsavory rumors about Aisha’s sexual impropriety, the silence surrounding Partition becomes reinforced by the silence around shame and sexuality in many South Asian households; in order to learn more about herself, Kamala will need to find a way to cross some enormous cultural hurdles.
These ideas manifest across the episode in several ways. When Kamala has a vision, seemingly triggered by her bangle, her surroundings take on the thundering visual and aural qualities of a speeding train, as if the half-told stories of Partition are somehow invading her consciousness, rocking her to her core. But her mother’s silence also ripples through more unassuming scenes. When Kamala’s “hard light” emanates uncontrollably from her nose, like a nasty zit — an attempt at a puberty metaphor, though one not nearly as effective as her body-morphing powers in the comics — she rushes to hide in the girls’ bathroom. Nakia, assuming the problem to be menstrual, helpfully offers her a tampon but also gives her the choice of a pad, citing Muneeba’s discomfort with the former (owing, perhaps, to unfortunately common Subcontinental beliefs around virginity, even though it’s likely something Muneeba and Kamala have never explicitly discussed, and only awkwardly implied). It’s a fleeting interaction between friends, but it paints a vivid picture of the Khans’ unwillingness and inability to discuss bodily topics with their daughter — an unwillingness Nakia experiences too.
These little moments of mutual understanding help the episode slow down and become more than just a plot delivery system. The Kamala-Bruno-Nakia trio has a delightfully realistic dynamic, with winking interpersonal banter that doesn’t depend on pop culture references or irreverent meanness, like so many American comedies. Their respective friendships are also central to each of their stories. Bruno is accepted to a prestigious Early Immersion program at Caltech, which he immediately finds excuses to reject, and even though it never comes up, we immediately know why. His crush on Kamala is much more apparent than last week, and her instant connection to Kamran makes him miserable. Nakia, a biracial girl who has struggled with belonging, points Kamala in the direction of reconciling her warring cultural halves for her own sake rather than anyone else’s. “Naks” is a living beacon of what she preaches — it shows; she’s probably the most dazzlingly, confidently fashionable hijabi character on American screens — and her own next step is paving a path by enacting positive change on her mosque board. All these subplots collide in the lively sequence at the Eid fair. Bruno dresses to impress (he looks great in his navy blue kurta), Nakia tries to win Yusuf’s vote through emotional blackmail — the camera circles as it closes in on him; some effectively tongue-in-cheek staging — and Kamala tries to extract family secrets from the most gossipy of all mosque cliques: the IlluminAunties!
If the episode has weak points, they’re minor ones. For the time being, Kamala’s frenemy Zoe (Laurel Marsden), one of the comics’ richest supporting characters, is more plot point than person, but the scene in which she’s interrogated by Department of Damage Control agents Cleary (Arian Moayed) and Deever (Alysia Reiner) does at least establish that, even in Marvel’s America, Muslims are still targeted by the FBI. Also, while the episode’s soundtrack is filled with contemporary bangers — from Tesher’s “Jalebi Baby” when Kamran appears shirtless to Krewella, Nervo and Raja Kumari’s “Goddess” during a training montage — it’s hard not to wonder if these are the correct choices at this stage of the story. The show gravitates toward South Asian artists well-established in the U.S. and U.K., whose music is a hybrid of eastern and western influences; from a thematic standpoint, these styles are, perhaps, too harmoniously blended to reflect Kamala’s internal life at the moment, as a character still trying to reconcile different parts of her identity. The music is more about individual moments than it is about tracing her journey (but it does make those moments pop).
After a simple, small-scale rescue (where rhythmic editing goes a long way to holding tension), Kamala escapes the DODC while punching a drone — a “hell yeah” moment if there ever was one — before Kamran swoops in to save her, revealing that isn’t who she thought. The episode crescendos with a rush of emotions, hopping between the fear of government persecution, the sting of betrayal, and the sheer confusion of why Kamran’s mother (Nimra Bucha) has been appearing to Kamala in luminous visions. Three cliffhangers at once, all demanding explanation and all leading to anticipation for what comes next.
Kamala’s Corner
• Clothing is important to Kamala’s development once again this week. The top Nakia hands her — a design similar to her scarf on the cover ofMs. Marvel #1 — is part of her prettier, more outgoing ensemble on her driving date with Kamran, but she still maintains the protective layer of her Captain Marvel jacket.
• The various mosque cliques all get their own unique comic lettering, so it shouldn’t be long before Marvel reveals the title design for an IlluminAunties show.
• Kamran sounds just as attractive when putting on a realistic Pakistani accent — a welcome change from American television’s generally caricatured approach.
• We know Kamran and Kamala prefer Baazigar toDDLJ, but what movie are they referring to as Shah Rukh Khan’s worst? The people deserve answers!
• The dweeb who tricks Kamala into drinking vodka deserves to be punched in the dick.
• Kamala and Muneeba are still uneasy after last week’s shenanigans, but there’s still a touching level of trust between them.
• When Kamala passes out, we get Muneeba’s quote of the week: a genuinely concerned “Did you not eat anything? Or did you eat too much?”
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();
// ]]