diff --git a/Rakefile b/Rakefile
index a7c8eb58ffffbc8788658710312a0d7e753c657f..d963e057c87ba7603f0a3ada6b243f5a21916171 100644
--- a/Rakefile
+++ b/Rakefile
@@ -1,3 +1,10 @@
+if ENV['COV']
+  require 'simplecov'
+  SimpleCov.start
+end
+
+$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
+require 'refrepo'
 
 REFAPI_DIR = "./generators/reference-api"
 PUPPET_DIR = "./generators/puppet"
@@ -5,6 +12,9 @@ OAR_DIR = "./generators/oar-properties"
 VALIDATORS_DIR = "./generators/input-validators"
 WIKI_DIR = "./generators/wiki"
 
+# Get the list of sites as the list of directories in input/grid5000/sites
+G5K_SITES = (Dir::entries('input/grid5000/sites') - ['.', '..']).sort
+
 namespace :puppet do
 
   all_puppet_tasks = [:bindg5k, :conmang5k, :dhcpg5k, :kadeployg5k, :lanpowerg5k, :kavlang5k]
@@ -43,13 +53,36 @@ namespace :validators do
   end
 end
 
-desc "See info about wiki generators"
-task "wiki" do
-  puts "Wikigenerators are in generators/wiki. See the 'wikigen' script."
-  puts " => generators/wiki/wikigen -h"
-  puts "Examples:"
-  puts "  generators/wiki/wiki -g cpu_parameters -s global -d"
-  puts "  generators/wiki/wiki -g site_hardware -s nancy -d"
+namespace :gen do
+  desc "Run wiki generator. Parameter: NAME={hardware,site_hardware,...} SITE={global,grenoble,...} DO={diff,print,update}"
+  task "wiki" do
+    options = {}
+    if ENV['SITE']
+      options[:sites] = ENV['SITE'].split(',')
+    else
+      options[:sites] = ['global'] + G5K_SITES
+    end
+    if ENV['NAME']
+      options[:generators] = ENV['NAME'].split(',')
+    else
+      puts "You must specify a generator name using NAME="
+      exit(1)
+    end
+    options[:diff] = false
+    options[:print] = false
+    options[:update] = false
+    if ENV['DO']
+      ENV['DO'].split(',').each do |t|
+        options[:diff] = true if t == 'diff'
+        options[:print] = true if t == 'print'
+        options[:update] = true if t == 'update'
+      end
+    else
+      puts "You must specify something to do using DO="
+      exit(1)
+    end
+    RefRepo::Gen::Wiki::wikigen(options)
+  end
 end
 
 desc "Creates json data from inputs"
diff --git a/generators/wiki/wikigen b/generators/wiki/wikigen
deleted file mode 100755
index be61af1d3b7eb1d5a4106e70cbaa292d3fc86daa..0000000000000000000000000000000000000000
--- a/generators/wiki/wikigen
+++ /dev/null
@@ -1,63 +0,0 @@
-#!/usr/bin/env ruby
-
-=begin
-require 'simplecov'
-SimpleCov.start
-=end
-
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
-require 'wiki_generator'
-require 'generators/cpu_parameters'
-require 'generators/disk_reservation'
-require 'generators/hardware'
-require 'generators/oar_properties'
-require 'generators/site_hardware'
-require 'generators/site_network'
-
-GLOBAL_GENERATORS = {
-  'cpu_parameters' => {
-    :gen => CPUParametersGenerator,
-    :page => "Generated/CPUParameters"
-  },
-  'disk_reservation' => { 
-    :gen => DiskReservationGenerator,
-    :page => 'Generated/DiskReservation'
-  },
-  'hardware' => {
-    :gen => G5KHardwareGenerator,
-    :page => 'Hardware'
-  },
-  'oar_properties' => {
-    :gen => OarPropertiesGenerator,
-    :page => 'OAR_Properties'
-  }
-}
-SITE_GENERATORS = {
-  'site_hardware' => {
-    :gen => SiteHardwareGenerator,
-    :page_suffix => ':Hardware'
-  },
-  'site_network' => {
-    :gen => SiteNetworkGenerator,
-    :page_suffix => ':GeneratedNetwork'
-  }
-}
-GENERATORS = GLOBAL_GENERATORS.merge(SITE_GENERATORS)
-
-ret = true
-options = WikiGenerator::parse_options
-myopts = options.clone
-options[:generators].each do |g|
-  myopts[:generators] = [g]
-  options[:sites].each do |s|
-    myopts[:sites] = [s]
-    if GLOBAL_GENERATORS.has_key?(g) and s == 'global'
-      ret &= GLOBAL_GENERATORS[g][:gen].new(GLOBAL_GENERATORS[g][:page]).exec(myopts)
-    elsif SITE_GENERATORS.has_key?(g) and s != 'global'
-      ret &= SITE_GENERATORS[g][:gen].new(s.capitalize + SITE_GENERATORS[g][:page_suffix], s).exec(myopts)
-    else
-      puts "Nothing to do: #{g}/#{s}"
-    end
-  end
-end
-exit(ret)
diff --git a/lib/refrepo.rb b/lib/refrepo.rb
new file mode 100644
index 0000000000000000000000000000000000000000..3bd6df31bd2962fe5794538d499ea2ee1c466e25
--- /dev/null
+++ b/lib/refrepo.rb
@@ -0,0 +1,8 @@
+module RefRepo
+end
+module RefRepo::Gen
+end
+
+require 'refrepo/gen/wiki'
+
+
diff --git a/lib/refrepo/gen/wiki.rb b/lib/refrepo/gen/wiki.rb
new file mode 100755
index 0000000000000000000000000000000000000000..663fe5798450d888431d028ff7088239d336120f
--- /dev/null
+++ b/lib/refrepo/gen/wiki.rb
@@ -0,0 +1,62 @@
+#!/usr/bin/env ruby
+
+require 'refrepo/gen/wiki/wiki_generator'
+require 'refrepo/gen/wiki/mw_utils'
+require 'refrepo/gen/wiki/generators/cpu_parameters'
+require 'refrepo/gen/wiki/generators/disk_reservation'
+require 'refrepo/gen/wiki/generators/hardware'
+require 'refrepo/gen/wiki/generators/oar_properties'
+require 'refrepo/gen/wiki/generators/site_hardware'
+require 'refrepo/gen/wiki/generators/site_network'
+
+module RefRepo::Gen::Wiki
+
+  GLOBAL_GENERATORS = {
+    'cpu_parameters' => {
+      :gen => CPUParametersGenerator,
+      :page => "Generated/CPUParameters"
+    },
+    'disk_reservation' => { 
+      :gen => DiskReservationGenerator,
+      :page => 'Generated/DiskReservation'
+    },
+    'hardware' => {
+      :gen => G5KHardwareGenerator,
+      :page => 'Hardware'
+    },
+    'oar_properties' => {
+      :gen => OarPropertiesGenerator,
+      :page => 'OAR_Properties'
+    }
+  }
+  SITE_GENERATORS = {
+    'site_hardware' => {
+      :gen => SiteHardwareGenerator,
+      :page_suffix => ':Hardware'
+    },
+    'site_network' => {
+      :gen => SiteNetworkGenerator,
+      :page_suffix => ':GeneratedNetwork'
+    }
+  }
+  GENERATORS = GLOBAL_GENERATORS.merge(SITE_GENERATORS)
+
+  def self.wikigen(options)
+    ret = true
+    myopts = options.clone
+    options[:generators].each do |g|
+      myopts[:generators] = [g]
+      options[:sites].each do |s|
+        myopts[:sites] = [s]
+        if GLOBAL_GENERATORS.has_key?(g) and s == 'global'
+          ret &= GLOBAL_GENERATORS[g][:gen].new(GLOBAL_GENERATORS[g][:page]).exec(myopts)
+        elsif SITE_GENERATORS.has_key?(g) and s != 'global'
+          ret &= SITE_GENERATORS[g][:gen].new(s.capitalize + SITE_GENERATORS[g][:page_suffix], s).exec(myopts)
+        else
+          puts "Nothing to do: #{g}/#{s}"
+        end
+      end
+    end
+    return ret
+  end
+end
diff --git a/generators/wiki/lib/generators/cpu_parameters.rb b/lib/refrepo/gen/wiki/generators/cpu_parameters.rb
similarity index 95%
rename from generators/wiki/lib/generators/cpu_parameters.rb
rename to lib/refrepo/gen/wiki/generators/cpu_parameters.rb
index 3d7b618ec69205aeb6499901c79130fc6d564cfa..45fa44575cf5b93e5a005e40de412a0c07f8e148 100644
--- a/generators/wiki/lib/generators/cpu_parameters.rb
+++ b/lib/refrepo/gen/wiki/generators/cpu_parameters.rb
@@ -1,5 +1,4 @@
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
-require 'wiki_generator'
+require 'refrepo/gen/wiki/wiki_generator'
 
 class CPUParametersGenerator < WikiGenerator
 
diff --git a/generators/wiki/lib/generators/disk_reservation.rb b/lib/refrepo/gen/wiki/generators/disk_reservation.rb
similarity index 98%
rename from generators/wiki/lib/generators/disk_reservation.rb
rename to lib/refrepo/gen/wiki/generators/disk_reservation.rb
index dd5d4aef89daddd845bee21da3b30a26cccd93b6..fec0432168371f5d227aaf4270721be4b81eeb23 100644
--- a/generators/wiki/lib/generators/disk_reservation.rb
+++ b/lib/refrepo/gen/wiki/generators/disk_reservation.rb
@@ -1,6 +1,6 @@
 # coding: utf-8
 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
-require 'wiki_generator'
+require 'refrepo/gen/wiki/wiki_generator'
 
 class DiskReservationGenerator < WikiGenerator
 
diff --git a/generators/wiki/lib/generators/hardware.rb b/lib/refrepo/gen/wiki/generators/hardware.rb
similarity index 99%
rename from generators/wiki/lib/generators/hardware.rb
rename to lib/refrepo/gen/wiki/generators/hardware.rb
index bebe8d047550596b2a6e0db2f60c77ed4b3ad9ea..47c015d7fae721a60f0e87c44b38bb51f6811ddd 100644
--- a/generators/wiki/lib/generators/hardware.rb
+++ b/lib/refrepo/gen/wiki/generators/hardware.rb
@@ -1,6 +1,6 @@
 # coding: utf-8
 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
-require 'wiki_generator'
+require 'refrepo/gen/wiki/wiki_generator'
 require_relative './site_hardware.rb'
 
 class G5KHardwareGenerator < WikiGenerator
diff --git a/generators/wiki/lib/generators/oar_properties.rb b/lib/refrepo/gen/wiki/generators/oar_properties.rb
similarity index 98%
rename from generators/wiki/lib/generators/oar_properties.rb
rename to lib/refrepo/gen/wiki/generators/oar_properties.rb
index 3598d44aa8a6d52fe6887cc1fe1dc630bb33c9b7..fd95a35c1afb671b69bf4e4a91c7918005ec879d 100644
--- a/generators/wiki/lib/generators/oar_properties.rb
+++ b/lib/refrepo/gen/wiki/generators/oar_properties.rb
@@ -1,8 +1,8 @@
 # coding: utf-8
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
-require 'wiki_generator'
+require 'refrepo/gen/wiki/wiki_generator'
 
-require_relative '../../../oar-properties/lib/lib-oar-properties'
+$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../../../../generators/oar-properties/lib')))
+require 'lib-oar-properties'
 
 class OarPropertiesGenerator < WikiGenerator
 
diff --git a/generators/wiki/lib/generators/site_hardware.rb b/lib/refrepo/gen/wiki/generators/site_hardware.rb
similarity index 99%
rename from generators/wiki/lib/generators/site_hardware.rb
rename to lib/refrepo/gen/wiki/generators/site_hardware.rb
index a73d008656a18b6edb4673621d486d34c7cd52eb..c38b04d922919fc122ac5b2b398f286c71cfe410 100644
--- a/generators/wiki/lib/generators/site_hardware.rb
+++ b/lib/refrepo/gen/wiki/generators/site_hardware.rb
@@ -1,6 +1,6 @@
 # coding: utf-8
 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
-require 'wiki_generator'
+require 'refrepo/gen/wiki/wiki_generator'
 
 class SiteHardwareGenerator < WikiGenerator
 
diff --git a/generators/wiki/lib/generators/site_network.rb b/lib/refrepo/gen/wiki/generators/site_network.rb
similarity index 90%
rename from generators/wiki/lib/generators/site_network.rb
rename to lib/refrepo/gen/wiki/generators/site_network.rb
index 896741fb9ff34287bd72767460c90c2cf7234d49..4f0c222fcda1cfd5e47644bf2c9c4283d2c04d75 100644
--- a/generators/wiki/lib/generators/site_network.rb
+++ b/lib/refrepo/gen/wiki/generators/site_network.rb
@@ -1,8 +1,9 @@
 # coding: utf-8
 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), 'lib')))
-require 'wiki_generator'
+require 'refrepo/gen/wiki/wiki_generator'
 
-require_relative '../../../input-validators/check-network-description'
+$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../../../../generators')))
+require 'input-validators/check-network-description'
 
 # This class generates the network description of each site, in .dot
 # and .png format
diff --git a/generators/wiki/lib/mw_utils.rb b/lib/refrepo/gen/wiki/mw_utils.rb
similarity index 94%
rename from generators/wiki/lib/mw_utils.rb
rename to lib/refrepo/gen/wiki/mw_utils.rb
index 7483bae108d07329497c85107b5c02cffca503de..519593f04798cf069f493509b178ce5279b7cde5 100644
--- a/generators/wiki/lib/mw_utils.rb
+++ b/lib/refrepo/gen/wiki/mw_utils.rb
@@ -1,3 +1,6 @@
+require 'active_support'
+require 'active_support/core_ext/object/deep_dup'
+
 require 'pp'
 require 'open-uri'
 require 'uri'
@@ -5,11 +8,6 @@ require 'net/http'
 require 'net/https'
 require 'mediawiki_api'
 
-# also add generators/lib to load path
-$LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../lib')))
-require 'input_loader'
-
-
 #Adding method to mediawiki_api client
 module MediawikiApi
 
@@ -113,10 +111,10 @@ module G5K
   @@global_hash = nil
   def self.get_global_hash
     if @@global_hash.nil?
-      @@global_hash = load_yaml_file_hierarchy(File.expand_path("../../../input/grid5000/", File.dirname(__FILE__)))
+      @@global_hash = load_yaml_file_hierarchy
     end
     # return a deep copy of global_hash
-    return Marshal.load(Marshal.dump(@@global_hash))
+    return @@global_hash.deep_dup
   end
 
   SITES = get_global_hash['sites'].keys.sort
diff --git a/generators/wiki/lib/wiki_generator.rb b/lib/refrepo/gen/wiki/wiki_generator.rb
similarity index 99%
rename from generators/wiki/lib/wiki_generator.rb
rename to lib/refrepo/gen/wiki/wiki_generator.rb
index 7c234d261205fae3b0f58deb1237cd84d596e499..de6a61e1d7c10948204a9e786c0f21f45ac13972 100644
--- a/generators/wiki/lib/wiki_generator.rb
+++ b/lib/refrepo/gen/wiki/wiki_generator.rb
@@ -1,11 +1,10 @@
 # also add generators/lib to load path
 $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__), '../../lib')))
 
-require 'input_loader'
+require 'refrepo/input_loader'
 require "optparse"
 require "mediawiki_api"
 require "diffy"
-require "mw_utils"
 require 'date'
 require 'pp'
 
diff --git a/generators/lib/hash/hash.rb b/lib/refrepo/hash/hash.rb
similarity index 100%
rename from generators/lib/hash/hash.rb
rename to lib/refrepo/hash/hash.rb
diff --git a/generators/lib/input_loader.rb b/lib/refrepo/input_loader.rb
similarity index 93%
rename from generators/lib/input_loader.rb
rename to lib/refrepo/input_loader.rb
index 6fa356b512f54a8a4e19c82d51bd5cb58bd20023..af68108e24a7cd5f44511741dd7d10bfc18969ab 100755
--- a/generators/lib/input_loader.rb
+++ b/lib/refrepo/input_loader.rb
@@ -2,9 +2,9 @@
 
 require 'yaml'
 require 'erb'
-require_relative '../lib/hash/hash.rb'
+require 'refrepo/hash/hash.rb'
 
-def load_yaml_file_hierarchy(directory)
+def load_yaml_file_hierarchy(directory = File.expand_path("../../input/grid5000/", File.dirname(__FILE__)))
 
   global_hash = {} # the global data structure