diff --git a/YoutubeConfig.json b/YoutubeConfig.json
index afbc0934bf1723101e1f256b2659a34199d88dac..e1610163638519a7d1a8f5f174f7abe0ac971dd2 100644
--- a/YoutubeConfig.json
+++ b/YoutubeConfig.json
@@ -8,7 +8,7 @@
 	"repositoryUrl": "https://futo.org",
 	"scriptUrl": "./YoutubeScript.js",
 
-	"version": 229,
+	"version": 230,
 	"iconUrl": "./youtube.png",
 	"id": "35ae969a-a7db-11ed-afa1-0242ac120002",
 	
diff --git a/YoutubeScript.js b/YoutubeScript.js
index d16be92954cea5888b34a8be72c88a90a4ef06a5..3ee5f92e60cd5150900ac8cba88185a91b014076 100644
--- a/YoutubeScript.js
+++ b/YoutubeScript.js
@@ -434,10 +434,11 @@ else {
 		let usedLogin = useLogin && bridge.isLoggedIn();
 		
 
+		/*
 		if(USE_IOS_VIDEOS_FALLBACK && !defaultUMP && !simplify) {
 			resps.push(requestIOSStreamingData(videoId, undefined, getBGDataFromClientConfig(clientConfig, usedLogin)));
 			batchIOS = batchCounter++;
-		}
+		}*/
 
 		let ageRestricted = initialPlayerData.playabilityStatus?.reason?.indexOf("your age") > 0 ?? false;
 		if (initialPlayerData.playabilityStatus?.status == "LOGIN_REQUIRED" && (bridge.isLoggedIn() || !ageRestricted)) {
@@ -589,7 +590,7 @@ else {
 		else if(USE_IOS_VIDEOS_FALLBACK && !USE_ABR_VIDEOS && !simplify) {
 			const iosDataResp = (batchIOS > 0) ?
 				resps[batchIOS] : 
-				requestIOSStreamingData(videoDetails.id.value);
+				requestIOSStreamingData(videoDetails.id.value, undefined, getBGDataFromClientConfig(clientConfig, usedLogin), usedLogin);
 			if(iosDataResp.isOk) {
 				const iosData = JSON.parse(iosDataResp.body);
 				if(IS_TESTING)
@@ -2016,15 +2017,19 @@ function generateDash(parentSource, sourceObj, ustreamerConfig, abrUrl, itag) {
 	const lastAction = (new Date()).getTime() - (Math.random() * 5000);
 	if(parentSource.pot)
 		log("Using POT for initial stream request");
+
 	const initialReq = getVideoPlaybackRequest(sourceObj, ustreamerConfig, 0, 0, 0, lastAction, now, undefined, parentSource.pot);
 	const postData = initialReq.serializeBinary();
 	let initialResp = http.POST(abrUrl, postData, {
 		"Origin": "https://www.youtube.com",
 		"Accept": "*/*",
-		"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36"
+		"User-Agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36"//"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36",
 	}, false, true);
-	if(!initialResp.isOk)
+	if(!initialResp.isOk) {
+		if(_settings.useUMP)
+			bridge.toast("Please try disabling Force Experimental UMP setting, it is broken at the moment");
 		throw new ScriptException("Failed initial stream request [ " + initialResp.code + "]");
+	}
 
 	const data = initialResp.body;
 	let byteArray = undefined;
@@ -2641,7 +2646,7 @@ function getVideoPlaybackRequest(source, ustreamerConfig, playerPosMs, segmentIn
 	
 	const clientInfo = new pb.VideoPlaybackRequest_pb.ClientInfo();
 	clientInfo.setClientname(1);
-	clientInfo.setClientversion("2.20250107.01.00");
+	clientInfo.setClientversion("2.20250130.01.00");
 	clientInfo.setOsname("Windows");
 	clientInfo.setOsversion("10.0");
 
@@ -2654,12 +2659,12 @@ function getVideoPlaybackRequest(source, ustreamerConfig, playerPosMs, segmentIn
 		info.setVideoheight2maybe(source.height);
 		info.setSelectedqualityheight(source.height);
 	}
-	info.setG7(8613683);
-	info.setCurrentvideopositionms(playerPosMs);
+	info.setG7(104857); //x
+	info.setCurrentvideopositionms(playerPosMs); //x
 	if(lastRequest > 0)
-		info.setTimesincelastrequestms((new Date().getTime() - lastRequest));
-	info.setTimesincelastactionms(Math.floor((new Date()).getTime() - lastAction));
-	info.setDynamicrangecompression(true);
+		info.setTimesincelastrequestms((new Date().getTime() - lastRequest)); //x
+	info.setTimesincelastactionms(Math.floor((new Date()).getTime() - lastAction)); //x
+	info.setDynamicrangecompression(true); //x
 	info.setLatencymsmaybe(Math.floor(Math.random() * 90 + 7));
 	info.setLastmanualdirection(0);
 	info.setTimesincelastmanualformatselectionms(requestStarted);
@@ -2670,8 +2675,6 @@ function getVideoPlaybackRequest(source, ustreamerConfig, playerPosMs, segmentIn
 	//SessionInfo
 	const sessionInfo = new pb.VideoPlaybackRequest_pb.SessionInfo();
 	sessionInfo.setClientinfo(clientInfo);
-	if(pot)
-		sessionInfo.setPot(pot);
 	if(playbackCookie)
 		sessionInfo.setPlaybackcookie(playbackCookie);
 	vidReq.setSessioninfo(sessionInfo);
@@ -2683,6 +2686,7 @@ function getVideoPlaybackRequest(source, ustreamerConfig, playerPosMs, segmentIn
 	if(source.xtags)
 		format.setXtags(source.xtags);
 
+
 	if(segmentIndex > 0) {
 		const bufferedStream = new pb.VideoPlaybackRequest_pb.BufferedStreamInfo()
 		bufferedStream.setFormatid(format);
@@ -2690,12 +2694,14 @@ function getVideoPlaybackRequest(source, ustreamerConfig, playerPosMs, segmentIn
 		bufferedStream.setBufferedsegmentstartindex(1);
 		bufferedStream.setBufferedsegmentendindex(segmentIndex - 1);
 		bufferedStream.setBufferedstarttimems(0);
-		//bufferedStream.setBuffereddurationms(playerPosMs);
+		bufferedStream.setBuffereddurationms(playerPosMs);
 		vidReq.setBufferedstreamsList[bufferedStream];
 		vidReq.setDesiredstreamsList([format]);
 	}
 	if(source.mimeType.startsWith("video/")) {
 		vidReq.setSupportedvideostreamsList([format]);
+		//vidReq.setSupportedvideostreamsList(vformats);
+		//vidReq.setSupportedaudiostreamsList(aformats);
 		info.setMediatypeflags(pb.VideoPlaybackRequest_pb.MediaType.VIDEO);
 	}
 	else if(source.mimeType.startsWith("audio/")) {
@@ -3423,7 +3429,7 @@ function requestClientConfig(useMobile = false, useAuth = false) {
 	return getClientConfig(resp.body);
 }
 
-function requestIOSStreamingData(videoId, batch, visitorData) {
+function requestIOSStreamingData(videoId, batch, visitorData, useLogin) {
 	const body = {
 		videoId: videoId,
 		cpn: "" + randomString(16),
@@ -3448,9 +3454,15 @@ function requestIOSStreamingData(videoId, batch, visitorData) {
 		}
 	};
 	const visitorToken = visitorData?.visitorData ?? visitorData?.dataSyncId;
-	if(visitorData?.visitorData) {
+	if(visitorToken && !useLogin) {
 		body.context.client.visitorData = visitorToken;
 	}
+	else if(visitorData?.visitorDataLogin && useLogin){
+		body.context.client.visitorData = visitorData?.visitorDataLogin;
+	}
+	else if(visitorData?.dataSyncId && useLogin) {
+		body.context.client.datasyncId = visitorData?.dataSyncId;
+	}
 	const headers = {
 		"Content-Type": "application/json",
 		"User-Agent": USER_AGENT_IOS,
@@ -3466,11 +3478,11 @@ function requestIOSStreamingData(videoId, batch, visitorData) {
 		"&id=" + videoId
 
 	if(batch) {
-		batch.POST(url, JSON.stringify(body), headers, false);
+		batch.POST(url, JSON.stringify(body), headers, !!useLogin);
 		return null;
 	}
 	else {
-		const resp = http.POST(url, JSON.stringify(body), headers, false);
+		const resp = http.POST(url, JSON.stringify(body), headers, !!useLogin);
 		return resp;
 	}
 }
@@ -4121,11 +4133,13 @@ function getBGDataFromClientConfig(clientConfig, usedLogin) {
 		visitorDataType = "Unknown";
 
 	const visitorData = usedLogin ? null : (clientConfig?.EOM_VISITOR_DATA ?? clientConfig?.VISITOR_DATA);
+	const visitorDataLogin = usedLogin ? (clientConfig?.EOM_VISITOR_DATA ?? clientConfig?.VISITOR_DATA) : null;
 	console.log("VisitorData: ", visitorData);
 	log("VisitorDataType: " + visitorDataType);
 
 	return { 
-		visitorData: visitorData?.replaceAll("%3D", "="), 
+		visitorData: visitorData?.replaceAll("%3D", "="),
+		visitorDataLogin: visitorDataLogin?.replaceAll("%3D", "="),
 		dataSyncId: clientConfig?.DATASYNC_ID, 
 		visitorDataType: visitorDataType
 	}
@@ -6095,6 +6109,11 @@ class UMPResponse {
 						if(stream22)
 							stream22.completed = true;
 					break;
+					case 29: //Unknown
+						const opCode29 = pb.Opcode29_pb.Opcode29.deserializeBinary(segment);
+						
+						console.log("");
+						break;
 					case 35://Opcode35: Playbackcookie
 						const opCode35 = pb.Opcode35_pb.Opcode35.deserializeBinary(segment);
 						this.playbackCookie = opCode35.getPlaybackcookie();
@@ -6103,6 +6122,12 @@ class UMPResponse {
 						const opCode43 = pb.Opcode43_pb.Opcode43.deserializeBinary(segment);
 						this.redirectUrl = opCode43?.getRedirecturl();
 						log("Redirect url found: " + this.redirectUrl);
+					case 44: //Unknown
+						const opCode44 = pb.Opcode44_pb.Opcode44.deserializeBinary(segment);
+						console.error("UMP Error", opCode44.getBda());
+						log("Error:" + opCode44.getBda());
+						console.log("");
+					break;
 				}
 			}
 			else {
diff --git a/YoutubeUnstableConfig.json b/YoutubeUnstableConfig.json
index 17df865b8b69d275de40309e718ba36d973b12d8..84bfc67a7205f0de07630e7d21c579b370cccc66 100644
--- a/YoutubeUnstableConfig.json
+++ b/YoutubeUnstableConfig.json
@@ -8,7 +8,7 @@
 	"repositoryUrl": "https://futo.org",
 	"scriptUrl": "./YoutubeScript.js",
 
-	"version": 229,
+	"version": 230,
 	"iconUrl": "./youtube.png",
 	"id": "35ae969a-a7db-11ed-afa1-0242ac120003",