diff --git a/product/ERP5/MovementGroup.py b/product/ERP5/MovementGroup.py
index 05c14824810a9f470d1b789c28bdbbfd80331a1c..505e5b5dfc1f88bbc41420c8823b55ce1592ed5f 100755
--- a/product/ERP5/MovementGroup.py
+++ b/product/ERP5/MovementGroup.py
@@ -257,7 +257,7 @@ class BaseVariantMovementGroup(RootMovementGroup):
         categories_identity = 1
     return categories_identity
 
-allow_class(RootMovementGroup)
+allow_class(BaseVariantMovementGroup)
 
 class VariantMovementGroup(RootMovementGroup):
 
@@ -284,3 +284,27 @@ class VariantMovementGroup(RootMovementGroup):
     return categories_identity
 
 allow_class(VariantMovementGroup)
+
+class CategoryMovementGroup(RootMovementGroup):
+
+  def __init__(self,movement,**kw):
+    RootMovementGroup.__init__(self,movement,**kw)
+    self.category_list = movement.getCategoriesList()
+    if self.category_list is None:
+      self.category_list = []
+
+  def test(self,movement):
+    # we must have the same number of categories
+    categories_identity = 0
+    movement_category_list = movement.getCategoriesList()
+    if movement_category_list is None:
+      movement_category_list = []
+    if len(self.category_list) == len(movement_category_list) :
+      for category in movement_category_list :
+        if not category in self.category_list :
+          break
+      else :
+        categories_identity = 1
+    return categories_identity
+
+allow_class(CategoryMovementGroup)