diff --git a/src/org/openbravo/multiupc/event/UpdateMultiUpcDescHandler.java b/src/org/openbravo/multiupc/event/UpdateMultiUpcDescHandler.java
index 475dd79..cd39a73 100644
--- a/src/org/openbravo/multiupc/event/UpdateMultiUpcDescHandler.java
+++ b/src/org/openbravo/multiupc/event/UpdateMultiUpcDescHandler.java
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2020-2021 Openbravo S.L.U.
+ * Copyright (C) 2020-2023 Openbravo S.L.U.
  * Licensed under the Openbravo Commercial License version 1.0
  * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
  * or in the legal folder of this module distribution.
@@ -64,7 +64,7 @@ public class UpdateMultiUpcDescHandler extends EntityPersistenceEventObserver {
   }
 
   private void updateProductUPCDesc(MultiUPC multiUPC, String includeUPC, String excludeUPC) {
-    MultiUPCUtils.updateProductUPCDesc(multiUPC.getProduct().getId(),
+    MultiUPCUtils.updateProductUPCDesc(multiUPC.getProduct(),
         multiUPC.getProduct().getObmupcMultiupcDesc(), includeUPC, excludeUPC);
   }
 }
diff --git a/src/org/openbravo/multiupc/utility/MultiUPCUtils.java b/src/org/openbravo/multiupc/utility/MultiUPCUtils.java
index 7b252b4..db569de 100644
--- a/src/org/openbravo/multiupc/utility/MultiUPCUtils.java
+++ b/src/org/openbravo/multiupc/utility/MultiUPCUtils.java
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2021 Openbravo S.L.U.
+ * Copyright (C) 2021-2023 Openbravo S.L.U.
  * Licensed under the Openbravo Commercial License version 1.0
  * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
  * or in the legal folder of this module distribution.
@@ -9,16 +9,42 @@
 package org.openbravo.multiupc.utility;
 
 import java.util.HashSet;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 import org.hibernate.ScrollableResults;
 import org.hibernate.query.Query;
 import org.openbravo.dal.service.OBDal;
+import org.openbravo.model.common.plm.Product;
 
 public class MultiUPCUtils {
 
   public static void updateProductUPCDesc(String productId, String existingProductUPCDesc,
       String includeUPC, String excludeUPC) {
-    final HashSet<String> setUPC = new HashSet<String>();
+    final Set<String> setUPC = getMultiUPC(productId, includeUPC, excludeUPC);
+    String upcDesc = toString(setUPC);
+    if (!setUPC.isEmpty() || existingProductUPCDesc != null) {
+      OBDal.getInstance()
+          .getSession()
+          .createQuery(
+              "update Product set updated = now(), obmupcMultiupcDesc = :upcDesc where id = :productId")
+          .setParameter("upcDesc", upcDesc)
+          .setParameter("productId", productId)
+          .executeUpdate();
+    }
+  }
+
+  public static void updateProductUPCDesc(Product product, String existingProductUPCDesc,
+      String includeUPC, String excludeUPC) {
+    final Set<String> setUPC = getMultiUPC(product.getId(), includeUPC, excludeUPC);
+    String upcDesc = toString(setUPC);
+    if (!setUPC.isEmpty() || existingProductUPCDesc != null) {
+      product.setObmupcMultiupcDesc(upcDesc);
+    }
+  }
+
+  private static Set<String> getMultiUPC(String productId, String includeUPC, String excludeUPC) {
+    final HashSet<String> setUPC = new HashSet<>();
     final String hqlQuery = "select upc from obmupc_prod_multiupc e where e.product.id = :productId and isactive = 'Y' order by upc";
     final Query<String> upcQuery = OBDal.getInstance()
         .getSession()
@@ -39,18 +65,11 @@ public class MultiUPCUtils {
     if (excludeUPC != null) {
       setUPC.remove(excludeUPC);
     }
-    String upcDesc = null;
-    if (setUPC.size() > 0) {
-      upcDesc = "," + String.join(",", (String[]) setUPC.toArray(new String[0])) + ",";
-    }
-    if (setUPC.size() > 0 || (setUPC.size() == 0 && existingProductUPCDesc != null)) {
-      OBDal.getInstance()
-          .getSession()
-          .createQuery(
-              "update Product set updated = now(), obmupcMultiupcDesc = :upcDesc where id = :productId")
-          .setParameter("upcDesc", upcDesc)
-          .setParameter("productId", productId)
-          .executeUpdate();
-    }
+    return setUPC;
+  }
+
+  private static String toString(Set<String> multiUPC) {
+    return multiUPC.isEmpty() ? null
+        : "," + multiUPC.stream().collect(Collectors.joining(",")) + ",";
   }
 }
