diff --git a/src/main.rs b/src/main.rs
index 272d5a4..8b944b9 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -23,6 +23,7 @@ enum Commands{
 	DownloadHistory(DownloadHistorySubcommand),
 	Download(DownloadSubcommand),
 	DownloadVersion(DownloadVersionSubcommand),
+	DownloadVersionV2(DownloadVersionSubcommand),
 	DownloadDecompile(DownloadDecompileSubcommand),
 	DownloadCreationsJson(DownloadCreationsJsonSubcommand),
 	DownloadUserInventoryJson(DownloadUserInventoryJsonSubcommand),
@@ -463,6 +464,23 @@ async fn main()->AResult<()>{
 				},
 			).await
 		},
+		Commands::DownloadVersionV2(subcommand)=>{
+			let output_folder=subcommand.output_folder.unwrap_or_else(||std::env::current_dir().unwrap());
+			download_version_v2(
+				cookie_from_args(
+					subcommand.cookie_literal,
+					subcommand.cookie_envvar,
+					subcommand.cookie_file,
+				).await?,
+				subcommand.asset_id,
+				subcommand.asset_version,
+				{
+					let mut path=output_folder.clone();
+					path.push(subcommand.asset_id.to_string());
+					path
+				},
+			).await
+		},
 		Commands::DownloadDecompile(subcommand)=>{
 			download_decompile(DownloadDecompileConfig{
 				cookie:cookie_from_args(
@@ -947,6 +965,20 @@ async fn download_version(cookie:Cookie,asset_id:AssetID,version:Option<u64>,des
 	Ok(())
 }
 
+async fn download_version_v2(cookie:Cookie,asset_id:AssetID,version:Option<u64>,dest:PathBuf)->AResult<()>{
+	let context=CookieContext::new(cookie);
+
+	// v2 has two steps
+	let info=context.get_asset_v2(rbx_asset::cookie::GetAssetRequest{asset_id,version}).await?;
+	println!("version:{}",info.version);
+
+	let location=info.info.locations.first().ok_or(anyhow::Error::msg("No locations"))?;
+	let data=context.get_asset_v2_download(location).await?;
+
+	tokio::fs::write(dest,data).await?;
+	Ok(())
+}
+
 async fn download_list(cookie:Cookie,asset_id_file_map:AssetIDFileMap)->AResult<()>{
 	let context=CookieContext::new(cookie);
 	futures::stream::iter(asset_id_file_map.into_iter()