diff --git a/generators/puppet/kadeployg5k.rb b/generators/puppet/kadeployg5k.rb
index 2d9ef8914673d101d4c1330f6894641547823a6d..13ae4a5e60826443515dd3ed316c85abe2ad95a7 100644
--- a/generators/puppet/kadeployg5k.rb
+++ b/generators/puppet/kadeployg5k.rb
@@ -32,13 +32,23 @@ OptionParser.new do |opts|
 
   opts.on('-o', '--output-dir dir', String, 'Select the puppet repo path', "Default: " + options[:output_dir]) do |d|
     options[:output_dir] = d
-    options[:conf_dir] = "#{options[:output_dir]}/modules/kadeployg5k/generators/"
+    options[:conf_dir] = begin
+                           if options[:puppet4]
+                             "#{options[:output_dir]}/platforms/production/generators/kadeploy"
+                           else
+                             "#{options[:output_dir]}/modules/kadeployg5k/generators/"
+                           end
+                         end
   end
 
   opts.on('-c', '--conf-dir dir', String, 'Select the conman configuration path', "Default: #{options[:conf_dir]}") do |d|
     options[:conf_dir] = d
   end
 
+  opts.on('--puppet4', 'Puppet 4 version', "Default: " + options[:puppet4].to_s) do |d|
+    options[:puppet4] = d
+  end
+
   opts.separator ""
   opts.separator "Filters:"
 
@@ -66,7 +76,7 @@ def cluster_prefix(cluster_list)
 
   # Shrink cluster names. Start with 3 characters
   # prefix_hash = {'gra' => ['graoully', 'graphene', ...], 'gri' => ['griffon']}
-  prefix_hash = cluster_list.group_by { |x| x[0, 3] } 
+  prefix_hash = cluster_list.group_by { |x| x[0, 3] }
 
   # Add characters until each prefix is unique
   loop do
@@ -102,7 +112,7 @@ end
     #
     # Generate site/<site_uid>/servers_conf[_dev]/clusters.conf
     #
-    
+
     clusters_conf = { 'clusters'=> [] } # output clusters.conf
     prefix = cluster_prefix(site['clusters'].keys)
 
@@ -165,7 +175,13 @@ end
 
     } # site['clusters'].each
 
-    output_file = Pathname("#{options[:output_dir]}/modules/kadeployg5k/files/#{site_uid}/server_conf#{suffix.tr('-', '_')}/clusters.conf")
+    output_file =begin
+                   if options[:puppet4]
+                     Pathname("#{options[:output_dir]}//platforms/production/modules/generated/files/grid5000/kadeploy/server#{suffix.tr('-', '_')}/#{site_uid}/clusters.conf")
+                   else
+                     Pathname("#{options[:output_dir]}/modules/kadeployg5k/files/#{site_uid}/server_conf#{suffix.tr('-', '_')}/clusters.conf")
+                   end
+                 end
     output_file.dirname.mkpath()
     write_yaml(output_file, clusters_conf)
     add_header(output_file)
@@ -175,7 +191,7 @@ end
     #
 
     # Load 'conf/kadeployg5k.yaml' data and fill up the kadeployg5k.conf.erb template for each cluster
-    
+
     conf = YAML::load(ERB.new(File.read("#{options[:conf_dir]}/kadeployg5k#{suffix}.yaml")).result(binding))
 
     site['clusters'].each { |cluster_uid, cluster|
@@ -186,12 +202,19 @@ end
       end
 
       output = ERB.new(File.read(File.expand_path('templates/kadeployg5k.conf.erb', File.dirname(__FILE__)))).result(binding)
-      
-      output_file = Pathname("#{options[:output_dir]}/modules/kadeployg5k/files/#{site_uid}/server_conf#{suffix.tr('-', '_')}/#{cluster_uid}-cluster.conf")
+
+      output_file = begin
+                      if options[:puppet4]
+                        Pathname("#{options[:output_dir]}//platforms/production/modules/generated/files/grid5000/kadeploy/server#{suffix.tr('-', '_')}/#{site_uid}/#{cluster_uid}-cluster.conf")
+                      else
+                        Pathname("#{options[:output_dir]}/modules/kadeployg5k/files/#{site_uid}/server_conf#{suffix.tr('-', '_')}/#{cluster_uid}-cluster.conf")
+                      end
+                    end
+
       output_file.dirname.mkpath()
       File.write(output_file, output)
-      
+
     }
-    
+
   }
 }