
‘You could have cut the tension in the cockpit with a knife’, a source said
Passengers flying from London to New York were left “furious” when their plane had to make a U-turn mid-flight after it emerged the co-pilot had not completed his training.
The Virgin Atlantic A330 flight took off from Heathrow Airport at 9.41am on Monday – but while the plane was flying over Ireland, the captain was informed that his first officer had not completed his final flying test, The Sun reports.
It was around 40 minutes into the flight that the pilot was ordered to return to London – landing back at Heathrow at 11.12am. Nearly 300 passengers were then forced to wait on the runway while an appropriate first officer replacement was found.
The plane eventually landed in the US nearly three hours later than expected. Virgin Atlantic apologised for the error and said it was a mistake with the rota.
A source told The Sun: “You could have cut the tension in the cockpit with a knife. The plane got as far as Ireland and then they found out the first officer was still in training.
“The skipper had no choice but to go back to Heathrow and find a more experienced member of the crew. It was embarrassing for everyone and the passengers were furious.”

The first officer, also known as the co-pilot, is second in command on the aircraft after the captain. They help navigate and operate flights and can be required to control the airplane in the case of an emergency.
Sources told MailOnline that the captain on the aircraft had been with Virgin Atlantic for 17 years and had completed thousands of hours of flight time.
The first officer, who joined the airline in 2017, had been trained, fully licensed and fully type-rated in accordance with UK regulations but was still in need of a final assessment flight with a training captain to comply with the Virgin Atlantic’s policies.
Despite the error, the airline said the safety of the plane was not compromised.
A Virgin Atlantic spokesman told MailOnline: “Due to a rostering error, flight VS3 from London Heathrow to New York-JFK returned to Heathrow on Monday 2nd May shortly after take-off.
“The qualified first officer, who was flying alongside an experienced captain, was replaced with a new pilot to ensure full compliance with Virgin Atlantic’s training protocols, which exceed industry standards.
“We apologise for any inconvenience caused to our customers who arrived two hours, 40 minutes later than scheduled as a result of the crew change.”
A Civil Aviation Authority spokesman said: “Virgin Atlantic have made us aware of the incident. Both pilots were suitably licensed and qualified to undertake the flight.”
Related links:
var host="www.joe.co.uk"; var element = document.createElement('script'); var firstScript = document.getElementsByTagName('script')[0]; var url="https://quantcast.mgr.consensu.org" .concat('/choice/', 'wFs6Tqd6-pgRC', '/', host, '/choice.js') var uspTries = 0; var uspTriesLimit = 3; element.async = true; element.type="text/javascript"; element.src = url;
firstScript.parentNode.insertBefore(element, firstScript);
function makeStub() { var TCF_LOCATOR_NAME = '__tcfapiLocator'; var queue = []; var win = window; var cmpFrame;
function addFrame() { var doc = win.document; var otherCMP = !!(win.frames[TCF_LOCATOR_NAME]);
if (!otherCMP) { if (doc.body) { var iframe = doc.createElement('iframe');
iframe.style.cssText="display:none"; iframe.name = TCF_LOCATOR_NAME; doc.body.appendChild(iframe); } else { setTimeout(addFrame, 5); } } return !otherCMP; }
function tcfAPIHandler() { var gdprApplies; var args = arguments;
if (!args.length) { return queue; } else if (args[0] === 'setGdprApplies') { if ( args.length > 3 && args[2] === 2 && typeof args[3] === 'boolean' ) { gdprApplies = args[3]; if (typeof args[2] === 'function') { args[2]('set', true); } } } else if (args[0] === 'ping') { var retr = { gdprApplies: gdprApplies, cmpLoaded: false, cmpStatus: 'stub' };
if (typeof args[2] === 'function') { args[2](retr); } } else { queue.push(args); } }
function postMessageEventHandler(event) { var msgIsString = typeof event.data === 'string'; var json = {};
try { if (msgIsString) { json = JSON.parse(event.data); } else { json = event.data; } } catch (ignore) {}
var payload = json.__tcfapiCall;
if (payload) { window.__tcfapi( payload.command, payload.version, function(retValue, success) { var returnMsg = { __tcfapiReturn: { returnValue: retValue, success: success, callId: payload.callId } }; if (msgIsString) { returnMsg = JSON.stringify(returnMsg); } event.source.postMessage(returnMsg, '*'); }, payload.parameter ); } }
while (win) { try { if (win.frames[TCF_LOCATOR_NAME]) { cmpFrame = win; break; } } catch (ignore) {}
if (win === window.top) { break; } win = win.parent; } if (!cmpFrame) { addFrame(); win.__tcfapi = tcfAPIHandler; win.addEventListener('message', postMessageEventHandler, false); } };
makeStub();
var uspStubFunction = function() { var arg = arguments; if (typeof window.__uspapi !== uspStubFunction) { setTimeout(function() { if (typeof window.__uspapi !== 'undefined') { window.__uspapi.apply(window.__uspapi, arg); } }, 500); } };
var checkIfUspIsReady = function() { uspTries++; if (window.__uspapi === uspStubFunction && uspTries < uspTriesLimit) { console.warn('USP is not accessible'); } else { clearInterval(uspInterval); } }; if (typeof window.__uspapi === 'undefined') { window.__uspapi = uspStubFunction; var uspInterval = setInterval(checkIfUspIsReady, 6000); } // This callback is triggered on each page load __tcfapi('addEventListener', 0, function(tcData, success) { if (success && (tcData.eventStatus == 'useractioncomplete' || tcData.eventStatus == 'tcloaded')) { processCmpData(tcData); } }); function processCmpData(tcData) { // Flag that CMP has been processed. consentManager.cmpProcessed = true; // Permutive disabling needed? if (tcData.purpose.consents[1] && tcData.purpose.consents[3]) { consentManager.permutive.isAllowed = true; } if (consentManager.isAllowed('permutive')) { window.localStorage.removeItem('permutive-opt-out'); } else { window.localStorage.setItem('permutive-opt-out', 'true'); } consentManager.setUserConsent(tcData); if(consentManager.isAllowed('google')) { (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l="+l:"';j.async=true;j.src="https://www.googletagmanager.com/gtm.js?id="+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-NTW9BPH'); } // Consent String is needed as DFP target consentManager.setConsentString(tcData.tcString); consentManager.trackPublisherConsentLevel(tcData.publisher.consents); consentManager.trackVendorConsentLevel(tcData.vendor.consents); /** * According to Google policies, if Publisher Purpose 1 is revoked, we should not display ads at all * Check https://support.google.com/admanager/answer/9805023?hl=en for more information * Here we update the flag that points if ads should be rederer or not. */ consentManager.hideAds(tcData.purpose.consents[1]); // Posts tagged as sensitive shouldn't be showing any ads. Since we have a way to control ads viewability through // the consent manager, it's easy to check for the posts tags and flagged if they should shown or not. // According to Google policies, if Publisher Purpose 1 is revoked, we should not display ads at all // Check https://support.google.com/admanager/answer/9805023?hl=en for more information if (consentManager.hasBeenProcessed() && consentManager.displayAds) { consentManager.renderAds(); } // If consent was processed once the page was loaded, there are some ads that may not appear. Let's run prebid again. if (typeof executeParallelAuctionAlongsidePrebid !== 'undefined' && !consentManager.prebidProcessed && consentManager.displayAds) { executeParallelAuctionAlongsidePrebid() } // Facebook and Twitter are non IAB vendors, so we need to check their consents using a different callback __tcfapi('getNonIABVendorConsents', 0, function(consent, success) { if (success && consent.gdprApplies) { consentManager.setUserNonIabConsent(consent); } }) if (!consentManager.sentEventFbPixel && consentManager.isAllowed('facebook')) { !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','//connect.facebook.net/en_US/fbevents.js'); fbq('init', '1294117580618248'); fbq('track', "PageView"); fbq('track', 'ViewContent'); consentManager.sentEventFbPixel = true; } if (!consentManager.sentEventTwPixel && consentManager.isAllowed('twitter')) { !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments); },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src="https://static.ads-twitter.com/uwt.js", a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script'); // Insert Twitter Pixel ID and Standard Event data below twq('init','o1f6l'); twq('track','PageView'); consentManager.sentEventTwPixel = true; } }