diff --git a/lib/refrepo/gen/puppet/bindg5k.rb b/lib/refrepo/gen/puppet/bindg5k.rb
index 2ae8ea2347fd824d2ba54487440fe40beb93b8ae..09717ff6aa4fb67d9a04cf39ed3d72f368951be0 100644
--- a/lib/refrepo/gen/puppet/bindg5k.rb
+++ b/lib/refrepo/gen/puppet/bindg5k.rb
@@ -384,20 +384,6 @@ def diff_zone_file(zone, records)
   return added_records.any? || removed_records.any?
 end
 
-#Create reverse-*.db files for each reverse-*-manual.db that do not have (yet) a corresponding file.
-def get_orphan_reverse_manual_zones(zones_dir, site_uid, site)
-  zones = []
-  Dir.glob(File.join(zones_dir, "reverse-*-manual.db")).each { |reverse_manual_file|
-    output_file = reverse_manual_file.sub("-manual.db", ".db")
-    next if File.exist?(File.join(output_file))
-    puts "Creating file for orphan reverse manual file: #{output_file}" if $options[:verbose]
-    #Creating the zone will include automatically the manual file
-    zone = load_zone(output_file, site_uid, site, true)
-    zones << zone
-  }
-  return zones
-end
-
 def write_site_conf(site_uid, dest_dir, zones_dir)
     conf_file = File.join(dest_dir, "#{site_uid}-zones.conf")
     FileUtils.mkdir_p(File.dirname(conf_file))
@@ -437,13 +423,15 @@ def generate_puppet_bindg5k(options)
     dest_dir = "#{$options[:output_dir]}/platforms/production/modules/generated/files/bind/"
     zones_dir = File.join(dest_dir, "zones/#{site_uid}")
 
-    # Cleanup of old zone files
-    Find.find(zones_dir) do |path|
-      next if not File::file?(path)
-      next if path =~ /manual/ # skip *manual* files
-      # FIXME those files are not named *manual*, but should not be removed
-      next if ['nancy-laptops.db', 'toulouse-servers.db', 'toulouse.db'].include?(File::basename(path))
-      FileUtils::rm(path)
+    if File::exists?(zones_dir)
+      # Cleanup of old zone files
+      Find.find(zones_dir) do |path|
+        next if not File::file?(path)
+        next if path =~ /manual/ # skip *manual* files
+        # FIXME those files are not named *manual*, but should not be removed
+        next if ['nancy-laptops.db', 'toulouse-servers.db', 'toulouse.db'].include?(File::basename(path))
+        FileUtils::rm(path)
+      end
     end
 
     site_records = {}
@@ -558,7 +546,18 @@ def generate_puppet_bindg5k(options)
 
     zones << site_zone
 
-    zones += get_orphan_reverse_manual_zones(zones_dir, site_uid, site)
+    # zones that are already known and going to be written
+    future_zones = zones.map { |z| File::basename(z.file_path) }
+
+    # Create reverse-*.db files for each reverse-*-manual.db that do not have (yet) a corresponding file.
+    Dir.glob(File.join(zones_dir, "reverse-*-manual.db")).each { |reverse_manual_file|
+      output_file = reverse_manual_file.sub("-manual.db", ".db")
+      next if future_zones.include?(File::basename(output_file)) # the zone is already going to be written
+      puts "Creating file for orphan reverse manual file: #{output_file}" if $options[:verbose]
+      #Creating the zone will include automatically the manual file
+      zone = load_zone(output_file, site_uid, site, true)
+      zones << zone
+    }
 
     zones.each{ |zone|
       write_zone(zone)