diff --git a/product/ERP5Subversion/Tool/SubversionTool.py b/product/ERP5Subversion/Tool/SubversionTool.py
index db7ada44030ba11b4e77e03753207cf3b7853f7c..3b69d91058d8c455121816a53d9050ede3026206 100644
--- a/product/ERP5Subversion/Tool/SubversionTool.py
+++ b/product/ERP5Subversion/Tool/SubversionTool.py
@@ -43,6 +43,7 @@ from OFS.Image import manage_addFile
 from cStringIO import StringIO
 from tempfile import mktemp
 from shutil import copy
+from zLOG import LOG
 
 try:
   from base64 import b64encode, b64decode
@@ -757,8 +758,8 @@ class SubversionTool(UniqueObject, Folder):
     # Clean up
     removeAll(path)
 
-  # return a set with dirs & files present in the directory
-  def getSetForDir(self, directory):
+  # return a set with directories present in the directory
+  def getSetDirsForDir(self, directory):
     dir_set = set()
     for root, dirs, files in os.walk(directory):
       # don't visit SVN directories
@@ -768,41 +769,65 @@ class SubversionTool(UniqueObject, Folder):
       for name in dirs:
         f = os.path.join(root, name)
         dir_set.add(f.replace(directory,''))
+    return dir_set
+      
+  # return a set with files present in the directory
+  def getSetFilesForDir(self, directory):
+    dir_set = set()
+    for root, dirs, files in os.walk(directory):
+      # don't visit SVN directories
+      if '.svn' in dirs:
+        dirs.remove('.svn')
       # get Files
       for name in files: 
         f = os.path.join(root, name)
         dir_set.add(f.replace(directory,''))
     return dir_set
   
-  # return files/dirs present in new_dir but not in old_dir
+  # return files present in new_dir but not in old_dir
   # return a set of relative paths
   def getNewFiles(self, old_dir, new_dir):
     if old_dir[-1] != os.sep:
       old_dir += os.sep
     if new_dir[-1] != os.sep:
       new_dir += os.sep
-    old_set = self.getSetForDir(old_dir)
-    new_set = self.getSetForDir(new_dir)
+    old_set = self.getSetFilesForDir(old_dir)
+    new_set = self.getSetFilesForDir(new_dir)
     return new_set.difference(old_set)
 
+  # return dirs present in new_dir but not in old_dir
+  # return a set of relative paths
+  def getNewDirs(self, old_dir, new_dir):
+    if old_dir[-1] != os.sep:
+      old_dir += os.sep
+    if new_dir[-1] != os.sep:
+      new_dir += os.sep
+    old_set = self.getSetDirsForDir(old_dir)
+    new_set = self.getSetDirsForDir(new_dir)
+    return new_set.difference(old_set)
+    
   # svn del files that have been removed in new dir
   def deleteOldFiles(self, old_dir, new_dir, bt):
     # detect removed files
     files_set = self.getNewFiles(new_dir, old_dir)
+    # detect removed directories
+    dirs_set = self.getNewDirs(new_dir, old_dir)
     # svn del
-    for file in files_set:
-        self.remove(os.path.join(old_dir, file)) 
+    self.remove([os.path.join(old_dir, x) for x in files_set])
+    self.remove([os.path.join(old_dir, x) for x in dirs_set])
   
   # copy files and add new files
   def addNewFiles(self, old_dir, new_dir, bt):
     # detect created files
     files_set = self.getNewFiles(old_dir, new_dir)
+    # detect created directories
+    dirs_set = self.getNewDirs(old_dir, new_dir)
     # Copy files
     #os.system('cp -af %s/* %s'%(new_dir, old_dir))
     copytree(new_dir, old_dir)
     # svn add
-    for file in files_set:
-          self.add(os.path.join(old_dir, file))
+    self.add([os.path.join(old_dir, x) for x in dirs_set])
+    self.add([os.path.join(old_dir, x) for x in files_set])
   
   def treeToXML(self, item) :
     output = "<?xml version='1.0' encoding='iso-8859-1'?>"+ os.linesep