diff --git a/hercules_opt/src/editor.rs b/hercules_opt/src/editor.rs
index 95fd1669a8d6760382063dc0e887a987a3e2198d..bf7cede2c3facea7e8066c8c5a1a2bda13fe5d05 100644
--- a/hercules_opt/src/editor.rs
+++ b/hercules_opt/src/editor.rs
@@ -505,7 +505,9 @@ pub fn repair_plan(plan: &mut Plan, new_function: &Function, edits: &[Edit]) {
     // Step 2: drop schedules for deleted nodes and create empty schedule lists
     // for added nodes.
     for deleted in total_edit.0.iter() {
-        plan.schedules[deleted.idx()] = vec![];
+        if deleted.idx() < plan.schedules.len() {
+            plan.schedules[deleted.idx()] = vec![];
+        }
     }
     if !total_edit.1.is_empty() {
         assert_eq!(
diff --git a/hercules_opt/src/sroa.rs b/hercules_opt/src/sroa.rs
index b9380197d1c73c40e42655df872894927cf838b7..2dd0049b81cb766afdbb9786664cdf4602b84319 100644
--- a/hercules_opt/src/sroa.rs
+++ b/hercules_opt/src/sroa.rs
@@ -243,15 +243,12 @@ pub fn sroa(editor: &mut FunctionEditor, reverse_postorder: &Vec<NodeID>, types:
     }
 
     // Actually deleting nodes seems to break things right now
-    /*
-    println!("{:?}", to_delete);
     editor.edit(|mut edit| {
         for node in to_delete {
             edit = edit.delete_node(node)?
         }
         Ok(edit)
     });
-    */
 }
 
 // An index tree is used to store results at many index lists
diff --git a/juno_frontend/src/lib.rs b/juno_frontend/src/lib.rs
index d4263fe8d93c0dbc7355b50956680fff3b588dc0..49249fc7d24b576ad3bd7cc794ef3b7303d63626 100644
--- a/juno_frontend/src/lib.rs
+++ b/juno_frontend/src/lib.rs
@@ -151,18 +151,17 @@ pub fn compile_ir(
     if x_dot {
         pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
     }
-    // TEMPORARY
+    add_pass!(pm, verify, Inline);
+    // Run SROA pretty early (though after inlining which can make SROA more effective) so that
+    // CCP, GVN, etc. can work on the result of SROA
     add_pass!(pm, verify, SROA);
     if x_dot {
         pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
     }
-    // TEMPORARY
-    add_pass!(pm, verify, Inline);
     add_pass!(pm, verify, CCP);
     add_pass!(pm, verify, DCE);
     add_pass!(pm, verify, GVN);
     add_pass!(pm, verify, DCE);
-    //add_pass!(pm, verify, SROA);
     if x_dot {
         pm.add_pass(hercules_opt::pass::Pass::Xdot(true));
     }