diff --git a/src/main.rs b/src/main.rs
index c9a1a86..50fb7ed 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -539,19 +539,44 @@ fn interactive() -> AResult<()>{
 	let mut allowed_map=get_allowed_map()?;
 	let mut replace_map=get_replace_map()?;
 	let mut blocked = get_blocked()?;
+	let model_name_pattern=lazy_regex::regex!(r"^[a-z0-9_]+$");
 
 	'map_loop: for entry in std::fs::read_dir("maps/unprocessed")? {
 		let file_thing=entry?;
 		println!("processing map={:?}",file_thing.file_name());
 		let mut input = std::io::BufReader::new(std::fs::File::open(file_thing.path())?);
 		let mut dom = get_dom(&mut input)?;
+		let (modelname,creator,displayname) = get_mapinfo(&dom)?;
+
+		let mut script_count=0;
+		let mut replace_count=0;
+		let mut block_count=0;
+
+		//if model name is illegal prompt for new name
+		print!("Model name: {}\nCreator: {}\nDisplayName: {}\n",modelname,creator,displayname);
+		if !model_name_pattern.is_match(modelname.as_str()){
+			//illegal
+			let new_model_name;
+			loop{
+				print!("Enter new model name: ");
+				std::io::Write::flush(&mut std::io::stdout())?;
+				let mut input_string=String::new();
+				std::io::stdin().read_line(&mut input_string)?;
+				if model_name_pattern.is_match(input_string.trim()){
+					new_model_name=input_string.trim().to_owned();
+					break;
+				}
+			}
+			if let Some(model_instance)=dom.get_by_ref_mut(dom.root().children()[0]){
+				model_instance.name=new_model_name;
+				//mark file as edited so a new file is generated
+				replace_count+=1;
+			}
+		}
 
 		let script_refs = get_script_refs(&dom);
 
 		//check scribb
-		let mut script_count=0;
-		let mut replace_count=0;
-		let mut block_count=0;
 		let mut fail_type=Interactive::Passed;
 		for &script_ref in script_refs.iter() {
 			if let Some(script)=dom.get_by_ref(script_ref){