diff --git a/lib/refrepo.rb b/lib/refrepo.rb
index dbd8148216852d0c4f304fcca903ef950673b89e..26dcc360c764acaf5166aba518eed0fb2fac1934 100644
--- a/lib/refrepo.rb
+++ b/lib/refrepo.rb
@@ -1,3 +1,19 @@
+# load gems used by most of refrepo scripts
+require 'erb'
+require 'fileutils'
+require 'json'
+require 'net/http'
+require 'net/https'
+require 'open-uri'
+require 'optparse'
+require 'pathname'
+require 'pp'
+require 'set'
+require 'time'
+require 'uri'
+require 'yaml'
+
+
 # pre-declare those modules here
 module RefRepo
 end
@@ -5,4 +21,6 @@ module RefRepo::Gen
 end
 module RefRepo::Valid
 end
+# load sub-parts that are used by many scripts anyway
 require 'refrepo/utils'
+require 'refrepo/input_loader'
diff --git a/lib/refrepo/gen/oar-properties.rb b/lib/refrepo/gen/oar-properties.rb
index a3f153d0cd2d3a7b4b5c07f13fd365189e4fd137..18e8329e2d1f90579773e01da7fa18d54101590a 100755
--- a/lib/refrepo/gen/oar-properties.rb
+++ b/lib/refrepo/gen/oar-properties.rb
@@ -1,19 +1,6 @@
-#!/usr/bin/ruby
 # coding: utf-8
 
-require 'pp'
-require 'erb'
-require 'fileutils'
-require 'pathname'
-require 'json'
-require 'time'
-require 'yaml'
 require 'hashdiff'
-require 'set'
-require 'uri'
-require 'net/https'
-
-require 'refrepo/input_loader'
 
 class MissingProperty < StandardError; end
 
diff --git a/lib/refrepo/gen/puppet/bindg5k.rb b/lib/refrepo/gen/puppet/bindg5k.rb
index 1b0c50b269f2878ee96a83ff4bdb81576b23155c..6682605423d9b6cdcc3ec1820c46a771fe1f20ed 100644
--- a/lib/refrepo/gen/puppet/bindg5k.rb
+++ b/lib/refrepo/gen/puppet/bindg5k.rb
@@ -1,12 +1,6 @@
 # See also: https://www.grid5000.fr/mediawiki/index.php/DNS_server
 
-require 'pp'
-require 'erb'
-require 'pathname'
-require 'fileutils'
-require 'optparse'
 require 'dns/zone'
-require 'refrepo/input_loader'
 
 #Prettier aligned dump of records
 class DNS::Zone::RR::A
diff --git a/lib/refrepo/gen/puppet/conmang5k.rb b/lib/refrepo/gen/puppet/conmang5k.rb
index b3f85e54c22dd6f350f7bc8ef7cef42c6bc645a9..060322d07123cd756db8e487093b87337e88f817 100644
--- a/lib/refrepo/gen/puppet/conmang5k.rb
+++ b/lib/refrepo/gen/puppet/conmang5k.rb
@@ -1,10 +1,5 @@
 # This script generates conmang5k/files/<site_uid>/conman.conf from input/, conf/console.yaml and conf/console-password.yaml
 
-require 'pp'
-require 'erb'
-require 'pathname'
-require 'optparse'
-require 'refrepo/input_loader'
 require 'refrepo/hash/hash'
 
 # Apply ERB template and save result to file
diff --git a/lib/refrepo/gen/puppet/dhcpg5k.rb b/lib/refrepo/gen/puppet/dhcpg5k.rb
index f86fedd95b07091cf7c392121f06951408e840f4..41db39d4b9697ec65976ac6421b5b192120bd86d 100644
--- a/lib/refrepo/gen/puppet/dhcpg5k.rb
+++ b/lib/refrepo/gen/puppet/dhcpg5k.rb
@@ -1,9 +1,3 @@
-require 'pp'
-require 'erb'
-require 'pathname'
-require 'optparse'
-require 'refrepo/input_loader'
-
 # Get the mac and ip of a node. Throw exception if error.
 def get_network_info(node_hash, network_interface)
   # Get node_hash["network_adapters"][network_interface]["ip"] and node_hash["network_adapters"][network_interface]["mac"]
diff --git a/lib/refrepo/gen/puppet/kadeployg5k.rb b/lib/refrepo/gen/puppet/kadeployg5k.rb
index 8b6e73eeba9ba1dad4bc8d3a05fde8d8d7e43e1f..786754e4fd6f770a3fa4880ff91f2df11a55d399 100644
--- a/lib/refrepo/gen/puppet/kadeployg5k.rb
+++ b/lib/refrepo/gen/puppet/kadeployg5k.rb
@@ -1,8 +1,3 @@
-require 'pp'
-require 'erb'
-require 'pathname'
-require 'optparse'
-require 'refrepo/input_loader'
 require 'refrepo/hash/hash'
 
 # Compute cluster prefix
diff --git a/lib/refrepo/gen/puppet/kavlang5k.rb b/lib/refrepo/gen/puppet/kavlang5k.rb
index f79bfc9f7d026750f28fe03c1cfae6aad934b35c..b7c79b47b556def4b0ad8ef97374fb1614cf20ad 100755
--- a/lib/refrepo/gen/puppet/kavlang5k.rb
+++ b/lib/refrepo/gen/puppet/kavlang5k.rb
@@ -1,13 +1,5 @@
 # !!! Require to "gem install ruby-ip", do not install "ip" gem !!!
 
-require 'json'
-require 'fileutils'
-
-require 'pp'
-require 'yaml'
-require 'pathname'
-require 'optparse'
-require 'refrepo/input_loader'
 require 'refrepo/hash/hash'
 
 def generate_puppet_kavlang5k(options)
diff --git a/lib/refrepo/gen/puppet/lanpowerg5k.rb b/lib/refrepo/gen/puppet/lanpowerg5k.rb
index c4d201948075f1d436abb34be24248b3087f3ac6..98f729682168729a3d26fba06f7b64c1d1c3ab18 100644
--- a/lib/refrepo/gen/puppet/lanpowerg5k.rb
+++ b/lib/refrepo/gen/puppet/lanpowerg5k.rb
@@ -1,10 +1,5 @@
 # This script generates lanpowerg5k/files/<site_uid>/lanpower.conf from conf/console.yaml and conf/console-password.conf
 
-require 'pp'
-require 'yaml'
-require 'pathname'
-require 'optparse'
-require 'refrepo/input_loader'
 require 'refrepo/hash/hash'
 
 def generate_puppet_lanpowerg5k(options)
diff --git a/lib/refrepo/gen/reference-api.rb b/lib/refrepo/gen/reference-api.rb
index 1cbcca0a2f53b6029d10e3b70489f97d5a29397b..6ce0f3f97f7d5e5fea0842178afac3650c1cac4a 100644
--- a/lib/refrepo/gen/reference-api.rb
+++ b/lib/refrepo/gen/reference-api.rb
@@ -1,14 +1,3 @@
-#!/usr/bin/ruby
-
-require 'pp'
-require 'optparse'
-require 'erb'
-require 'fileutils'
-require 'pathname'
-require 'json'
-require 'time'
-
-require 'refrepo/input_loader'
 require 'refrepo/valid/input/schema'
 require 'refrepo/valid/homogeneity'
 require 'refrepo/valid/input/monitoring'
diff --git a/lib/refrepo/gen/wiki/generators/hardware.rb b/lib/refrepo/gen/wiki/generators/hardware.rb
index 47c015d7fae721a60f0e87c44b38bb51f6811ddd..b79d74cf0fc599a5ef8033a930e7a7629cd6bc42 100644
--- a/lib/refrepo/gen/wiki/generators/hardware.rb
+++ b/lib/refrepo/gen/wiki/generators/hardware.rb
@@ -1,7 +1,6 @@
 # coding: utf-8
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
 require 'refrepo/gen/wiki/wiki_generator'
-require_relative './site_hardware.rb'
+require 'refrepo/gen/wiki/generators/site_hardware'
 
 class G5KHardwareGenerator < WikiGenerator
 
diff --git a/lib/refrepo/gen/wiki/generators/oar_properties.rb b/lib/refrepo/gen/wiki/generators/oar_properties.rb
index fd95a35c1afb671b69bf4e4a91c7918005ec879d..0e04e594d66860bef3e4aecaf11a0399186077dc 100644
--- a/lib/refrepo/gen/wiki/generators/oar_properties.rb
+++ b/lib/refrepo/gen/wiki/generators/oar_properties.rb
@@ -1,8 +1,7 @@
 # coding: utf-8
 require 'refrepo/gen/wiki/wiki_generator'
 
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../../../../generators/oar-properties/lib')))
-require 'lib-oar-properties'
+require 'refrepo/gen/oar-properties'
 
 class OarPropertiesGenerator < WikiGenerator
 
diff --git a/lib/refrepo/gen/wiki/generators/site_hardware.rb b/lib/refrepo/gen/wiki/generators/site_hardware.rb
index c38b04d922919fc122ac5b2b398f286c71cfe410..f92da53335e029d618d65b4a10c4bdb6fe610934 100644
--- a/lib/refrepo/gen/wiki/generators/site_hardware.rb
+++ b/lib/refrepo/gen/wiki/generators/site_hardware.rb
@@ -1,5 +1,4 @@
 # coding: utf-8
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
 require 'refrepo/gen/wiki/wiki_generator'
 
 class SiteHardwareGenerator < WikiGenerator
diff --git a/lib/refrepo/gen/wiki/generators/site_network.rb b/lib/refrepo/gen/wiki/generators/site_network.rb
index 4f0c222fcda1cfd5e47644bf2c9c4283d2c04d75..72952e33539afe18f86386caf01b5fc1831cdcc3 100644
--- a/lib/refrepo/gen/wiki/generators/site_network.rb
+++ b/lib/refrepo/gen/wiki/generators/site_network.rb
@@ -1,9 +1,6 @@
 # coding: utf-8
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
 require 'refrepo/gen/wiki/wiki_generator'
-
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../../../../generators')))
-require 'input-validators/check-network-description'
+require 'refrepo/valid/network'
 
 # This class generates the network description of each site, in .dot
 # and .png format
diff --git a/lib/refrepo/gen/wiki/mw_utils.rb b/lib/refrepo/gen/wiki/mw_utils.rb
index 0f158e084d4594e474b284bf3f5ddbd87801ad91..04a7415d9d6bbc872d70c416693020a510cd2a72 100644
--- a/lib/refrepo/gen/wiki/mw_utils.rb
+++ b/lib/refrepo/gen/wiki/mw_utils.rb
@@ -1,8 +1,3 @@
-require 'pp'
-require 'open-uri'
-require 'uri'
-require 'net/http'
-require 'net/https'
 require 'mediawiki_api'
 
 #Adding method to mediawiki_api client
diff --git a/lib/refrepo/gen/wiki/wiki_generator.rb b/lib/refrepo/gen/wiki/wiki_generator.rb
index de6a61e1d7c10948204a9e786c0f21f45ac13972..963c1237202d121bcf033c2941ea3a978466acab 100644
--- a/lib/refrepo/gen/wiki/wiki_generator.rb
+++ b/lib/refrepo/gen/wiki/wiki_generator.rb
@@ -1,12 +1,5 @@
-# also add generators/lib to load path
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../lib')))
-
-require 'refrepo/input_loader'
-require "optparse"
 require "mediawiki_api"
 require "diffy"
-require 'date'
-require 'pp'
 
 class WikiGenerator
 
diff --git a/lib/refrepo/input_loader.rb b/lib/refrepo/input_loader.rb
index af68108e24a7cd5f44511741dd7d10bfc18969ab..6a3d8130cfd2bec3514639321f4fd9e8a65adbc6 100755
--- a/lib/refrepo/input_loader.rb
+++ b/lib/refrepo/input_loader.rb
@@ -1,8 +1,6 @@
 # Load a hierarchy of YAML file into a Ruby hash
 
-require 'yaml'
-require 'erb'
-require 'refrepo/hash/hash.rb'
+require 'refrepo/hash/hash'
 
 def load_yaml_file_hierarchy(directory = File.expand_path("../../input/grid5000/", File.dirname(__FILE__)))
 
diff --git a/lib/refrepo/valid/homogeneity.rb b/lib/refrepo/valid/homogeneity.rb
index 2ed80a7d0de75b02aa3aa9497e10b8ff98d9722c..dd7787d7dfe501efd5e68821869a6a4797825721 100644
--- a/lib/refrepo/valid/homogeneity.rb
+++ b/lib/refrepo/valid/homogeneity.rb
@@ -1,16 +1,6 @@
-#!/usr/bin/ruby
-
 # This script checks the cluster homogeneity
 
-require 'pp'
-require 'fileutils'
-require 'pathname'
 require 'hashdiff'
-require 'json'
-require 'uri'
-require 'net/https'
-
-require 'refrepo/input_loader'
 
 def global_ignore_keys
 
diff --git a/lib/refrepo/valid/input/duplicates.rb b/lib/refrepo/valid/input/duplicates.rb
index dc56a01443a690d1506a9f83b80fc06363d74450..a281b59e2a96f27077e55204eeaa4e92eb9fea5d 100644
--- a/lib/refrepo/valid/input/duplicates.rb
+++ b/lib/refrepo/valid/input/duplicates.rb
@@ -1,8 +1,3 @@
-#!/usr/bin/ruby
-
-require 'pp'
-require 'refrepo/input_loader'
-
 # replace default deep_merge before calling load_yaml_file_hierarchy
 class ::Hash
   def deep_merge(other_hash)
diff --git a/lib/refrepo/valid/input/lib/schema_validator.rb b/lib/refrepo/valid/input/lib/schema_validator.rb
index 6ed44f30b9aecdde69275f626678941cef17307d..c5c357f8d54a28218166d6df662207d753018dce 100644
--- a/lib/refrepo/valid/input/lib/schema_validator.rb
+++ b/lib/refrepo/valid/input/lib/schema_validator.rb
@@ -8,7 +8,6 @@
 
 dir = Pathname(__FILE__).parent
 
-require 'json'
 require 'hash_validator' # https://github.com/jamesbrooks/hash_validator
 require "#{dir}/multihash_validator" # custom validator for <multi>-keys Hash support
 require "#{dir}/array_validator" # custom validator for <array> support
diff --git a/lib/refrepo/valid/input/schema.rb b/lib/refrepo/valid/input/schema.rb
index ac866d3e1fd01dedb6c3ce7099a5ba13ef0f250c..0dfd8c430e65440deba5c2d5dea0f91ecc52e04f 100644
--- a/lib/refrepo/valid/input/schema.rb
+++ b/lib/refrepo/valid/input/schema.rb
@@ -1,10 +1,3 @@
-#!/usr/bin/ruby
-
-require 'fileutils'
-require 'pathname'
-
-require 'refrepo/input_loader'
-
 require_relative "./lib/schema_validator"
 
 def run_validator(uid, data, schema)
diff --git a/lib/refrepo/valid/network.rb b/lib/refrepo/valid/network.rb
index 59493cc5fa0a36b8c480c438bbd8cb518fbd283a..ee5bc8c098219653505e6c1875e0ec066db17d9a 100644
--- a/lib/refrepo/valid/network.rb
+++ b/lib/refrepo/valid/network.rb
@@ -1,13 +1,9 @@
-#!/usr/bin/ruby
 # coding: utf-8
 
 # This script checks the network description for inconsistencies
 # This script needs 'nodeset' and 'dot' programs, which are available
 # in clustershell and graphviz debian packages
 
-require 'json'
-require 'pp'
-
 # FIXME infiniband equipment is not completely described in the ref-api yet. See Bug 8586
 HPC_SWITCHES = ['ib-grenoble', 'voltaire-1', 'voltaire-2', 'voltaire-3', 'sgraoullyib', 'sgrapheneib', 'sw-myrinet', 'sgrele-opf']
 
diff --git a/lib/refrepo/valid/oar-properties.rb b/lib/refrepo/valid/oar-properties.rb
index bfa219641b2b21098d97152faa34bc7804207a05..4d63936ea8e060f5682a9cd2e6d41622abaec4f3 100755
--- a/lib/refrepo/valid/oar-properties.rb
+++ b/lib/refrepo/valid/oar-properties.rb
@@ -1,19 +1,7 @@
-#!/usr/bin/ruby
 # coding: utf-8
 
-require 'pp'
-require 'erb'
-require 'fileutils'
-require 'pathname'
-require 'json'
-require 'time'
-require 'yaml'
-require 'set'
-require 'hashdiff'
-require 'optparse'
 require 'net/ssh'
-require 'open-uri'
-require 'refrepo/utils'
+require 'hashdiff'
 
 # propriétés ignorées
 IGNORED_PROPERTIES=%w{chassis chunks thread}