diff --git a/vpr/src/base/check_netlist.cpp b/vpr/src/base/check_netlist.cpp
index 869f8df..c4075cc 100644
--- a/vpr/src/base/check_netlist.cpp
+++ b/vpr/src/base/check_netlist.cpp
@@ -84,7 +84,7 @@
 static int check_connections_to_global_clb_pins(ClusterNetId net_id, int verbosity) {
     auto& cluster_ctx = g_vpr_ctx.clustering();
 
-	bool is_global_net = cluster_ctx.clb_nlist.net_is_ignored(net_id);
+	bool net_is_ignored = cluster_ctx.clb_nlist.net_is_ignored(net_id);
 
 	/* For now global signals can be driven by an I/O pad or any CLB output       *
 	 * although a CLB output generates a warning.  I could make a global CLB      *
@@ -95,7 +95,7 @@
 		ClusterBlockId blk_id = cluster_ctx.clb_nlist.pin_block(pin_id);
 		int pin_index = cluster_ctx.clb_nlist.pin_physical_index(pin_id);
 
-		if (cluster_ctx.clb_nlist.block_type(blk_id)->is_ignored_pin[pin_index] != is_global_net
+		if (cluster_ctx.clb_nlist.block_type(blk_id)->is_ignored_pin[pin_index] != net_is_ignored
 			&& !is_io_type(cluster_ctx.clb_nlist.block_type(blk_id))) {
 
             VTR_LOGV_WARN(verbosity > 2,
diff --git a/vpr/src/base/clustered_netlist.cpp b/vpr/src/base/clustered_netlist.cpp
index 394d23b..7e7ce85 100644
--- a/vpr/src/base/clustered_netlist.cpp
+++ b/vpr/src/base/clustered_netlist.cpp
@@ -102,10 +102,10 @@
     return net_is_ignored_[id];
 }
 
-bool ClusteredNetlist::is_global_net(const ClusterNetId id) const {
+bool ClusteredNetlist::net_is_global(const ClusterNetId id) const {
     VTR_ASSERT_SAFE(valid_net_id(id));
 
-    return is_global_net_[id];
+    return net_is_global_[id];
 }
 
 /*
@@ -190,7 +190,7 @@
     if (net_id == ClusterNetId::INVALID()) {
         net_id = Netlist::create_net(name);
         net_is_ignored_.push_back(false);
-        is_global_net_.push_back(false);
+        net_is_global_.push_back(false);
     }
 
     VTR_ASSERT(validate_net_sizes());
@@ -204,10 +204,10 @@
     net_is_ignored_[net_id] = state;
 }
 
-void ClusteredNetlist::set_is_global_net(ClusterNetId net_id, bool state) {
+void ClusteredNetlist::set_net_is_global(ClusterNetId net_id, bool state) {
     VTR_ASSERT(valid_net_id(net_id));
 
-    is_global_net_[net_id] = state;
+    net_is_global_[net_id] = state;
 }
 
 void ClusteredNetlist::remove_block_impl(const ClusterBlockId blk_id) {
@@ -252,7 +252,7 @@
 void ClusteredNetlist::clean_nets_impl(const vtr::vector_map<ClusterNetId, ClusterNetId>& net_id_map) {
     //Update all the net values
     net_is_ignored_ = clean_and_reorder_values(net_is_ignored_, net_id_map);
-    is_global_net_ = clean_and_reorder_values(is_global_net_, net_id_map);
+    net_is_global_ = clean_and_reorder_values(net_is_global_, net_id_map);
 }
 
 void ClusteredNetlist::rebuild_block_refs_impl(const vtr::vector_map<ClusterPinId, ClusterPinId>& /*pin_id_map*/,
@@ -291,7 +291,7 @@
 
     //Net data
     net_is_ignored_.shrink_to_fit();
-    is_global_net_.shrink_to_fit();
+    net_is_global_.shrink_to_fit();
 }
 
 
@@ -322,7 +322,7 @@
 }
 
 bool ClusteredNetlist::validate_net_sizes_impl(size_t num_nets) const {
-    if (net_is_ignored_.size() != num_nets && is_global_net_.size() != num_nets) {
+    if (net_is_ignored_.size() != num_nets && net_is_global_.size() != num_nets) {
         return false;
     }
     return true;
diff --git a/vpr/src/base/clustered_netlist.h b/vpr/src/base/clustered_netlist.h
index 045bd60..f0dbf44 100644
--- a/vpr/src/base/clustered_netlist.h
+++ b/vpr/src/base/clustered_netlist.h
@@ -166,7 +166,7 @@
         bool net_is_ignored(const ClusterNetId id) const;
 
         //Returns whether the net is global
-        bool is_global_net(const ClusterNetId id) const;
+        bool net_is_global(const ClusterNetId id) const;
 
     public: //Public Mutators
         //Create or return an existing block in the netlist
@@ -203,8 +203,8 @@
         //Sets the flag in net_ignored_ = state
         void set_net_is_ignored(ClusterNetId net_id, bool state);
 
-        //Sets the flag in is_global_net_ = state
-        void set_is_global_net(ClusterNetId net_id, bool state);
+        //Sets the flag in net_is_global_ = state
+        void set_net_is_global(ClusterNetId net_id, bool state);
 
     private: //Private Members
         /*
@@ -257,7 +257,7 @@
 
         //Nets
         vtr::vector_map<ClusterNetId, bool> net_is_ignored_;     //Boolean mapping indicating if the net is ignored
-        vtr::vector_map<ClusterNetId, bool> is_global_net_;     //Boolean mapping indicating if the net is global
+        vtr::vector_map<ClusterNetId, bool> net_is_global_;     //Boolean mapping indicating if the net is global
 };
 
 #endif
diff --git a/vpr/src/base/read_netlist.cpp b/vpr/src/base/read_netlist.cpp
index 9b31f54..dc3909c 100644
--- a/vpr/src/base/read_netlist.cpp
+++ b/vpr/src/base/read_netlist.cpp
@@ -982,7 +982,7 @@
 
                     // nets connecting to global pins are marked as global nets
                     if (clb_nlist.block_type(blk_id)->is_pin_global[j]) {
-                        clb_nlist.set_is_global_net(clb_net_id, true);
+                        clb_nlist.set_net_is_global(clb_net_id, true);
                     }
 
 					if (clb_nlist.block_type(blk_id)->is_ignored_pin[j]) {
diff --git a/vpr/src/route/route_timing.cpp b/vpr/src/route/route_timing.cpp
index 5dcce8c..3e9488a 100644
--- a/vpr/src/route/route_timing.cpp
+++ b/vpr/src/route/route_timing.cpp
@@ -1052,7 +1052,7 @@
     t_heap* cheapest = nullptr;
     t_bb bounding_box = route_ctx.route_bb[net_id];
 
-    bool is_global_net = cluster_ctx.clb_nlist.is_global_net(net_id);
+    bool net_is_global = cluster_ctx.clb_nlist.net_is_global(net_id);
     bool high_fanout = is_high_fanout(cluster_ctx.clb_nlist.net_sinks(net_id).size(), high_fanout_threshold);
     constexpr float HIGH_FANOUT_CRITICALITY_THRESHOLD = 0.9;
     bool sink_critical = (cost_params.criticality > HIGH_FANOUT_CRITICALITY_THRESHOLD);
@@ -1060,7 +1060,7 @@
     //We normally route high fanout nets by only adding spatially close-by routing to the heap (reduces run-time).
     //However, if the current sink is 'critical' from a timing perspective, we put the entire route tree back onto
     //the heap to ensure it has more flexibility to find the best path.
-    if (high_fanout && !sink_critical &&!is_global_net) {
+    if (high_fanout && !sink_critical &&!net_is_global) {
         cheapest = timing_driven_route_connection_from_route_tree_high_fanout(rt_root, sink_node,
                                 cost_params,
                                 bounding_box,
