diff --git a/src/bsp.rs b/src/bsp.rs
index 15cafc7..de7d161 100644
--- a/src/bsp.rs
+++ b/src/bsp.rs
@@ -26,17 +26,17 @@ where
 
 	//the generated MeshIds in here will collide with the Loader Mesh Ids
 	//but I can't think of a good workaround other than just remapping one later.
-	let (mut meshes,mut models):(Vec<model::Mesh>,Vec<model::Model>)=bsp.models().enumerate().map(|(i,world_model)|{
+	let (meshes,models):(Vec<model::Mesh>,Vec<model::Model>)=bsp.models().enumerate().map(|(mesh_id,world_model)|{
+		let mesh_id=model::MeshId::new(mesh_id as u32);
 		//non-deduplicated
 		let mut spam_pos=Vec::new();
 		let mut spam_tex=Vec::new();
 		let mut spam_normal=Vec::new();
 		let mut spam_vertices=Vec::new();
-		let mut polygon_groups=Vec::new();
 		let mut graphics_groups=Vec::new();
 		let mut physics_group=model::IndexedPhysicsGroup::default();
-		let groups=world_model.faces()
-		.map(|face|{
+		let polygon_groups=world_model.faces().enumerate().map(|(polygon_group_id,face)|{
+			let polygon_group_id=model::PolygonGroupId::new(polygon_group_id as u32);
 			let face_texture=face.texture();
 			let face_texture_data=face_texture.texture_data();
 			let (texture_u,texture_v)=(glam::Vec3A::from_slice(&face_texture.texture_transforms_u[0..3]),glam::Vec3A::from_slice(&face_texture.texture_transforms_v[0..3]));
@@ -67,18 +67,16 @@ where
 				let tex_idx=spam_tex.len() as u32;
 				spam_tex.push(tex);
 
-				let i=spam_vertices.len() as u32;
+				let vertex_id=model::VertexId::new(spam_vertices.len() as u32);
 				spam_vertices.push(model::IndexedVertex{
 					pos:model::PositionId::new(pos_idx as u32),
 					tex:model::TextureCoordinateId::new(tex_idx as u32),
 					normal:model::NormalId::new(normal_idx),
 					color:model::ColorId::new(0),
 				});
-				model::VertexId::new(i)
+				vertex_id
 			}).collect();
 			indices.reverse();
-			let polygon_group_id=model::PolygonGroupId::new(polygon_groups.len() as u32);
-			polygon_groups.push(model::PolygonGroup::PolygonList(model::PolygonList::new(vec![indices])));
 			if face.is_visible(){
 				graphics_groups.push(model::IndexedGraphicsGroup{
 					render:render_id,
@@ -86,6 +84,7 @@ where
 				})
 			}
 			physics_group.groups.push(polygon_group_id);
+			model::PolygonGroup::PolygonList(model::PolygonList::new(vec![indices]))
 		}).collect();
 		(
 			model::Mesh{
@@ -99,7 +98,7 @@ where
 				physics_groups:vec![physics_group],
 			},
 			model::Model{
-				mesh:model::MeshId::new(i as u32),
+				mesh:mesh_id,
 				attributes:TEMP_TOUCH_ME_ATTRIBUTE,
 				transform:integer::Planar64Affine3::new(
 					integer::Planar64Mat3::default(),