diff --git a/src/source.rs b/src/source.rs
index f226c22..02b9254 100644
--- a/src/source.rs
+++ b/src/source.rs
@@ -22,14 +22,14 @@ pub struct SourceToSNFSubcommand {
 	#[arg(required=true)]
 	input_files:Vec<PathBuf>,
 	#[arg(long)]
-	vpk_dir_files:Vec<PathBuf>,
+	vpks:Vec<PathBuf>,
 }
 #[derive(Args)]
 pub struct ExtractTexturesSubcommand{
 	#[arg(required=true)]
 	bsp_files:Vec<PathBuf>,
 	#[arg(long)]
-	vpk_dir_files:Vec<PathBuf>,
+	vpks:Vec<PathBuf>,
 }
 #[derive(Args)]
 pub struct VPKContentsSubcommand {
@@ -45,8 +45,8 @@ pub struct BSPContentsSubcommand {
 impl Commands{
 	pub async fn run(self)->AResult<()>{
 		match self{
-			Commands::SourceToSNF(subcommand)=>source_to_snf(subcommand.input_files,subcommand.output_folder,subcommand.vpk_dir_files).await,
-			Commands::ExtractTextures(subcommand)=>extract_textures(subcommand.bsp_files,subcommand.vpk_dir_files).await,
+			Commands::SourceToSNF(subcommand)=>source_to_snf(subcommand.input_files,subcommand.output_folder,subcommand.vpks).await,
+			Commands::ExtractTextures(subcommand)=>extract_textures(subcommand.bsp_files,subcommand.vpks).await,
 			Commands::VPKContents(subcommand)=>vpk_contents(subcommand.input_file),
 			Commands::BSPContents(subcommand)=>bsp_contents(subcommand.input_file),
 		}
@@ -232,8 +232,12 @@ async fn gimme_them_textures(path:PathBuf,vpk_list:&[vpk::VPK],send_texture:toki
 	}
 
 	for texture_path in texture_deferred_loader.indices(){
-		if let Some(texture)=load_texture(finder,texture_path.as_ref())?{
-			send_texture.send((texture.into_owned(),texture_path.as_ref().to_owned())).await.unwrap();
+		match load_texture(finder,texture_path.as_ref()){
+			Ok(Some(texture))=>send_texture.send(
+				(texture.into_owned(),texture_path.as_ref().to_owned())
+			).await.unwrap(),
+			Ok(None)=>(),
+			Err(e)=>println!("Load error: {e}"),
 		}
 	}
 
@@ -315,7 +319,10 @@ async fn extract_textures(paths:Vec<PathBuf>,vpk_paths:Vec<PathBuf>)->AResult<()
 			tokio::spawn(async move{
 				let result=gimme_them_textures(path,vpk_list,send).await;
 				drop(permit);
-				result.unwrap();
+				match result{
+					Ok(())=>(),
+					Err(e)=>println!("Decode error: {e:?}"),
+				}
 			});
 		}
 	});
@@ -324,10 +331,14 @@ async fn extract_textures(paths:Vec<PathBuf>,vpk_paths:Vec<PathBuf>)->AResult<()
 	static SEM:tokio::sync::Semaphore=tokio::sync::Semaphore::const_new(0);
 	SEM.add_permits(thread_limit);
 	while let (Ok(permit),Some((data,dest)))=(SEM.acquire().await,recv_texture.recv().await){
+		// TODO: dedup dest?
 		tokio::spawn(async move{
 			let result=convert_texture(data,dest).await;
 			drop(permit);
-			result.unwrap();
+			match result{
+				Ok(())=>(),
+				Err(e)=>println!("Convert error: {e:?}"),
+			}
 		});
 	}
 	extract_thread.await?;