diff --git a/generators/bind/bind.rb b/generators/bind/bind.rb
index 8b7804c14aca8b145f9271422ee9015603d9cd69..2c2a218b3b7f6763104efbad4e591ae386e2f61a 100644
--- a/generators/bind/bind.rb
+++ b/generators/bind/bind.rb
@@ -36,7 +36,7 @@ global_hash["sites"].each { |site_uid, site_hash|
 
   site_hash.fetch("clusters").sort.each { |cluster_uid, cluster_hash|
 
-    cluster_hash.fetch('nodes').sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |node_uid, node_hash|
+    cluster_hash.fetch('nodes').each_sort_by_node_uid { |node_uid, node_hash|
 
       network_interfaces = {}
       node_hash.fetch('network_interfaces').each { |net_uid, net_hash|
diff --git a/generators/dhcp/templates/dhcp.erb b/generators/dhcp/templates/dhcp.erb
index 74c2c7633106db547e755a30ff6a2f8ac902a93b..1a44ab011795c1a00ae803b612f307ac2dba2ce3 100644
--- a/generators/dhcp/templates/dhcp.erb
+++ b/generators/dhcp/templates/dhcp.erb
@@ -9,7 +9,7 @@
 %>
 group {
 <%
-    data.fetch('nodes').sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |node_uid, node_hash| 
+    data.fetch('nodes').each_sort_by_node_uid { |node_uid, node_hash| 
       network_interface != 'bmc' ? node_uid_net = node_uid : node_uid_net = node_uid + '-bmc'
 
       # Get ip and mac addresses
diff --git a/generators/lib/hash/hash.rb b/generators/lib/hash/hash.rb
index 68265a2e85a81381b839a2976660a4ecfdbddb60..730f4e1a1fdc99b5b88d1b3f4350dafac05e4c7c 100644
--- a/generators/lib/hash/hash.rb
+++ b/generators/lib/hash/hash.rb
@@ -90,4 +90,23 @@ class ::Hash
     return array.reverse.inject(value) { |a, n| { n => a } }
   end
 
+  # Custom iterator. Same as "each" but it sorts keys by node_uid (ie. graphene-10 after graphene-9)
+  def each_sort_by_node_uid
+    self.sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |key, value|
+      yield key, value
+    }
+  end
+
+  # Custom iterator. Only consider entries corresponding to cluster_list and node_list. Sorted by node_uid.
+  def each_filtered_node_uid(cluster_list, node_list)
+    self.each_sort_by_node_uid { |node_uid, properties| 
+      cluster_uid = node_uid.split(/-/).first
+      
+      if (! cluster_list || cluster_list.include?(cluster_uid)) &&
+          (! node_list || node_list.include?(node_uid))
+        yield node_uid, properties
+      end
+    }
+  end
+
 end
diff --git a/generators/oar-properties/oar-properties.rb b/generators/oar-properties/oar-properties.rb
index a82c7befea028e1c9b2452ed78a85d6ef51c5def..09fae64784d3154443c776a2a306e4166e594241 100755
--- a/generators/oar-properties/oar-properties.rb
+++ b/generators/oar-properties/oar-properties.rb
@@ -126,27 +126,21 @@ nodelist_properties["to_be_updated"] = {}
 
 nodelist_properties["ref"].each { |site_uid, site_properties| 
   
-  site_properties.sort_by { |item| item.to_s.split(/(\d+)/).map { |e| [e.to_i, e] } }.each { |node_uid, node_properties_ref|
-    cluster_uid = node_uid.split(/-/).first
-
-    if (! options[:clusters] || options[:clusters].include?(cluster_uid)) &&
-        (! options[:nodes] || options[:nodes].include?(node_uid))
-      
-      node_properties_oar = nodelist_properties["oar"][site_uid][node_uid]
+  site_properties.each_filtered_node_uid(options[:clusters], options[:nodes]) { |node_uid, node_properties_ref|
       
-      diff      = diff_node_properties(node_properties_ref, node_properties_oar)
-      diff_keys = diff.map{ |hashdiff_array| hashdiff_array[1] }
-
-      nodelist_properties["to_be_updated"][node_uid] = node_properties_ref.select { |key, value| diff_keys.include?(key) }
+    node_properties_oar = nodelist_properties["oar"][site_uid][node_uid]
       
-      if (options[:verbose])
-        #puts "#{node_uid}: #{diff}"
-        puts "#{node_uid}: #{diff_keys}"
-      end
-
+    diff      = diff_node_properties(node_properties_ref, node_properties_oar)
+    diff_keys = diff.map{ |hashdiff_array| hashdiff_array[1] }
+    
+    nodelist_properties["to_be_updated"][node_uid] = node_properties_ref.select { |key, value| diff_keys.include?(key) }
+    
+    if (options[:verbose])
+      #puts "#{node_uid}: #{diff}"
+      puts "#{node_uid}: #{diff_keys}"
     end
-
-    }
+    
+  }
   
 }