diff --git a/src/main.rs b/src/main.rs
index b6e9f6e..0ed9e3b 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -261,7 +261,8 @@ enum TrimStackInstruction{
 enum WriteStackInstruction<'a>{
 	Node(&'a TreeNode),
 	PushFolder(std::path::Component<'a>),
-	PopFolder(Option<Ref>),
+	PopFolder,
+	Destroy(Ref),
 }
 
 #[derive(Default,serde::Deserialize,serde::Serialize)]
@@ -403,13 +404,8 @@ fn decompile(input_file:std::path::PathBuf,output_folder:std::path::PathBuf)->AR
 	while let Some(instruction)=stack.pop(){
 		match instruction{
 			WriteStackInstruction::PushFolder(component)=>folder.push(component),
-			WriteStackInstruction::PopFolder(maybe_referent)=>{
-				assert!(folder.pop(),"weirdness");
-				//delete from dom
-				if let Some(referent)=maybe_referent{
-					dom.destroy(referent);
-				}
-			},
+			WriteStackInstruction::PopFolder=>assert!(folder.pop(),"weirdness"),
+			WriteStackInstruction::Destroy(referent)=>dom.destroy(referent),
 			WriteStackInstruction::Node(node)=>{
 				//properties.json to override class or other simple properties
 				let mut properties=PropertiesOverride::default();
@@ -445,12 +441,13 @@ fn decompile(input_file:std::path::PathBuf,output_folder:std::path::PathBuf)->AR
 					//write item
 					write_item(&dom,folder.clone(),node)?;
 				}
+				//queue item to be deleted from dom after child objects are handled (stack is popped from the back)
+				match node.class{
+					Class::Folder=>(),
+					_=>stack.push(WriteStackInstruction::Destroy(node.referent)),
+				}
 				if has_children{
-					//queue item to be deleted from dom and folder to be popped
-					stack.push(WriteStackInstruction::PopFolder(match node.class{
-						Class::Folder=>None,
-						_=>Some(node.referent),
-					}));
+					stack.push(WriteStackInstruction::PopFolder);
 					for referent in &node.children{
 						if let Some(c)=tree_refs.get(referent){
 							stack.push(WriteStackInstruction::Node(c));