diff --git a/hercules_opt/src/editor.rs b/hercules_opt/src/editor.rs
index 2444fdb4d5d69dfa64049f4342a6489ab55d6117..f6a00c8582b8289062d353bc06a5b65e32daac19 100644
--- a/hercules_opt/src/editor.rs
+++ b/hercules_opt/src/editor.rs
@@ -1,18 +1,13 @@
-extern crate bitvec;
-extern crate either;
-extern crate hercules_ir;
-extern crate itertools;
-extern crate nestify;
 use std::borrow::Borrow;
 use std::cell::{Ref, RefCell};
 use std::collections::{BTreeMap, HashMap, HashSet};
 use std::mem::take;
 use std::ops::Deref;
 
-use self::nestify::nest;
+use nestify::nest;
 
-use self::bitvec::prelude::*;
-use self::either::Either;
+use bitvec::prelude::*;
+use either::Either;
 
 use hercules_ir::def_use::*;
 use hercules_ir::ir::*;
diff --git a/hercules_opt/src/fork_transforms.rs b/hercules_opt/src/fork_transforms.rs
index c0196ca0deb19208408cc127744868c962fd6472..edf26911aa4a43854842d986d794638dacdc7d5a 100644
--- a/hercules_opt/src/fork_transforms.rs
+++ b/hercules_opt/src/fork_transforms.rs
@@ -1,25 +1,23 @@
 use std::collections::{HashMap, HashSet};
 use std::ops::Sub;
-extern crate bimap;
-extern crate hercules_ir;
 
 use itertools::Itertools;
 
-use self::bimap::BiMap;
+use bimap::BiMap;
 
-use self::hercules_ir::LoopTree;
+use hercules_ir::LoopTree;
 
-use self::hercules_ir::{Index, TypeID};
+use hercules_ir::{Index, TypeID};
 
-use self::hercules_ir::Subgraph;
+use hercules_ir::Subgraph;
 
-use self::hercules_ir::DynamicConstantID;
+use hercules_ir::DynamicConstantID;
 
-use self::hercules_ir::Node;
+use hercules_ir::Node;
 
-use self::hercules_ir::{get_uses, Function};
+use hercules_ir::{get_uses, Function};
 
-use self::hercules_ir::{NodeID, ID};
+use hercules_ir::{NodeID, ID};
 
 use crate::{DenseNodeMap, FunctionEditor, Loop, SparseNodeMap};
 
diff --git a/hercules_opt/src/forkify.rs b/hercules_opt/src/forkify.rs
index f3ce186e030550dde12fb3f12fb5a386d67547e3..10a8fe215985f6c07c791e846984846defd43cf4 100644
--- a/hercules_opt/src/forkify.rs
+++ b/hercules_opt/src/forkify.rs
@@ -1,21 +1,17 @@
-extern crate bitvec;
-extern crate hercules_ir;
-extern crate nestify;
-
 use core::panic;
 use std::collections::HashMap;
 use std::collections::HashSet;
 use std::iter::zip;
 use std::iter::FromIterator;
 
-use self::nestify::nest;
+use nestify::nest;
 
-use self::bitvec::order::Lsb0;
-use self::bitvec::vec::BitVec;
+use bitvec::order::Lsb0;
+use bitvec::vec::BitVec;
 
-use self::hercules_ir::Subgraph;
+use hercules_ir::Subgraph;
 
-use self::hercules_ir::control_subgraph;
+use hercules_ir::control_subgraph;
 
 use crate::calculate_loop_nodes;
 use crate::compute_induction_vars;
diff --git a/hercules_opt/src/ivar.rs b/hercules_opt/src/ivar.rs
index bde3bde37c07edc08db44e4a8914b9b07ad28528..1f31e22088f170e2726241fc8796a3b496e81af3 100644
--- a/hercules_opt/src/ivar.rs
+++ b/hercules_opt/src/ivar.rs
@@ -1,32 +1,25 @@
-extern crate bitvec;
-extern crate hercules_ir;
-extern crate nestify;
-extern crate slotmap;
-
 use std::collections::{BTreeMap, HashMap, HashSet, VecDeque};
 use std::path::Iter;
 
-use self::nestify::nest;
+use nestify::nest;
 
-use self::hercules_ir::Subgraph;
+use hercules_ir::Subgraph;
 
-use self::bitvec::order::Lsb0;
-use self::bitvec::prelude::*;
-use self::bitvec::vec::BitVec;
-use self::hercules_ir::get_uses;
+use bitvec::order::Lsb0;
+use bitvec::prelude::*;
+use bitvec::vec::BitVec;
+use hercules_ir::get_uses;
 
-use self::hercules_ir::LoopTree;
+use hercules_ir::LoopTree;
 
 use crate::walk_all_uses_stop_on;
 
-use self::slotmap::{new_key_type, SlotMap};
+use slotmap::{new_key_type, SlotMap};
 
-use self::hercules_ir::ir::*;
+use hercules_ir::ir::*;
 
 use crate::*;
 
-
-
 #[derive(Debug)]
 pub struct LoopVarianceInfo {
     pub loop_header: NodeID,
diff --git a/hercules_opt/src/utils.rs b/hercules_opt/src/utils.rs
index 67225bffeeb8d585caffb85ac2e2a91ab81a6d0b..cc7abc7fb18a2ce056b54b28ecd1db9f5db0589f 100644
--- a/hercules_opt/src/utils.rs
+++ b/hercules_opt/src/utils.rs
@@ -1,5 +1,3 @@
-extern crate nestify;
-
 use std::collections::HashMap;
 use std::collections::HashSet;
 use std::iter::zip;
diff --git a/hercules_test/hercules_interpreter/src/lib.rs b/hercules_test/hercules_interpreter/src/lib.rs
index baf0093e299a4754aca6adecff38af8da7ac60bd..3f12618c3ecc13929a26c507342887d75d2234f5 100644
--- a/hercules_test/hercules_interpreter/src/lib.rs
+++ b/hercules_test/hercules_interpreter/src/lib.rs
@@ -1,7 +1,5 @@
 pub mod interpreter;
 pub mod value;
-extern crate juno_scheduler;
-extern crate postcard;
 
 use std::fs::File;
 use std::io::Read;
diff --git a/hercules_test/hercules_tests/tests/fork_transform_tests.rs b/hercules_test/hercules_tests/tests/fork_transform_tests.rs
index 16813b03e7c236684662c5abdb9e4aaea3978951..432fdda029e0b1fec52cd20857430df9ddd5387d 100644
--- a/hercules_test/hercules_tests/tests/fork_transform_tests.rs
+++ b/hercules_test/hercules_tests/tests/fork_transform_tests.rs
@@ -4,7 +4,6 @@ use hercules_interpreter::*;
 use hercules_ir::ID;
 use juno_scheduler::ir::*;
 
-extern crate rand;
 use juno_scheduler::pass;
 use juno_scheduler::{default_schedule, run_schedule_on_hercules};
 use rand::Rng;
diff --git a/hercules_test/hercules_tests/tests/forkify_tests.rs b/hercules_test/hercules_tests/tests/forkify_tests.rs
index 025aaad382991761fd4d08354c6e37af8271bf4c..5a8bff1a5d7c2021e27548e0464e52cc657da13b 100644
--- a/hercules_test/hercules_tests/tests/forkify_tests.rs
+++ b/hercules_test/hercules_tests/tests/forkify_tests.rs
@@ -7,7 +7,6 @@ use hercules_interpreter::*;
 use juno_scheduler::ir::*;
 use juno_scheduler::pass;
 
-extern crate rand;
 use juno_scheduler::{default_schedule, run_schedule_on_hercules};
 use rand::Rng;
 
diff --git a/hercules_test/hercules_tests/tests/interpreter_tests.rs b/hercules_test/hercules_tests/tests/interpreter_tests.rs
index 69e1920e35815ca0532b5c66bdfd7773515395f0..a779c70b263b64d5088a4c2dfc23fcd402951b0b 100644
--- a/hercules_test/hercules_tests/tests/interpreter_tests.rs
+++ b/hercules_test/hercules_tests/tests/interpreter_tests.rs
@@ -6,7 +6,6 @@ use hercules_ir::ID;
 use juno_scheduler::ir::*;
 use juno_scheduler::pass;
 
-extern crate rand;
 use juno_scheduler::{default_schedule, run_schedule_on_hercules};
 use rand::Rng;
 
diff --git a/hercules_test/hercules_tests/tests/loop_tests.rs b/hercules_test/hercules_tests/tests/loop_tests.rs
index 29b8692bf787aecff7308208a3c6a6424cd23333..55da702d623f095af81fde761f0ed3014958312e 100644
--- a/hercules_test/hercules_tests/tests/loop_tests.rs
+++ b/hercules_test/hercules_tests/tests/loop_tests.rs
@@ -5,7 +5,6 @@ use hercules_ir::ID;
 use juno_scheduler::ir::*;
 use juno_scheduler::pass;
 
-extern crate rand;
 use juno_scheduler::{default_schedule, run_schedule_on_hercules};
 use rand::random;
 use rand::Rng;
@@ -333,7 +332,6 @@ fn implicit_clone_pipeline() {
     println!("result: {:?}", result_1);
     let schedule = default_schedule![
         ////Xdot,,
-        LoopCanonicalization,
         Forkify,
         ForkGuardElim,
         Forkify,
diff --git a/juno_samples/cava/build.rs b/juno_samples/cava/build.rs
index 929d3eba3e1c83f185c2c0ff256450b05247c80d..7f60f8019f105dda64cf12a2664668efbd637662 100644
--- a/juno_samples/cava/build.rs
+++ b/juno_samples/cava/build.rs
@@ -1,4 +1,3 @@
-extern crate juno_build;
 use juno_build::JunoCompiler;
 
 fn main() {
diff --git a/juno_scheduler/src/compile.rs b/juno_scheduler/src/compile.rs
index 7bf3c5c5d82f7ff332e7111dea9bf950bda18ecf..11a8ec53b1fd52ec37fb260d3219c849760aee49 100644
--- a/juno_scheduler/src/compile.rs
+++ b/juno_scheduler/src/compile.rs
@@ -4,8 +4,7 @@ use crate::parser;
 use juno_utils::env::Env;
 use juno_utils::stringtab::StringTable;
 
-extern crate hercules_ir;
-use self::hercules_ir::ir::{Device, Schedule};
+use hercules_ir::ir::{Device, Schedule};
 
 use lrlex::DefaultLexerTypes;
 use lrpar::NonStreamingLexer;
diff --git a/juno_scheduler/src/ir.rs b/juno_scheduler/src/ir.rs
index f16279e79f6e5ace7dfbdc330fe8750c777d7b23..d6a41baf99d8ed3cec6ab8183ae52e9956e6c5b0 100644
--- a/juno_scheduler/src/ir.rs
+++ b/juno_scheduler/src/ir.rs
@@ -1,6 +1,4 @@
-extern crate hercules_ir;
-
-use self::hercules_ir::ir::{Device, Schedule};
+use hercules_ir::ir::{Device, Schedule};
 
 #[derive(Debug, Copy, Clone)]
 pub enum Pass {
@@ -10,7 +8,6 @@ pub enum Pass {
     DCE,
     DeleteUncalled,
     FloatCollections,
-    LoopCanonicalization,
     ForkGuardElim,
     ForkSplit,
     ForkCoalesce,
diff --git a/juno_utils/src/stringtab.rs b/juno_utils/src/stringtab.rs
index e151b830d7b51d3baa4f64ae32214afca81a9eab..45ee08644642692acb36bff277081745f492c3d1 100644
--- a/juno_utils/src/stringtab.rs
+++ b/juno_utils/src/stringtab.rs
@@ -1,6 +1,4 @@
-extern crate serde;
-
-use self::serde::{Deserialize, Serialize};
+use serde::{Deserialize, Serialize};
 
 use std::collections::HashMap;