diff --git a/src/org/openbravo/retail/api/mappings/product/RetailApiImportProductJavaPropertyMappingHandler.java b/src/org/openbravo/retail/api/mappings/product/RetailApiImportProductJavaPropertyMappingHandler.java
index f5a5fdb..6e5bb93 100644
--- a/src/org/openbravo/retail/api/mappings/product/RetailApiImportProductJavaPropertyMappingHandler.java
+++ b/src/org/openbravo/retail/api/mappings/product/RetailApiImportProductJavaPropertyMappingHandler.java
@@ -19,7 +19,10 @@ import org.openbravo.base.exception.OBException;
 import org.openbravo.base.provider.OBProvider;
 import org.openbravo.dal.service.OBCriteria;
 import org.openbravo.dal.service.OBDal;
+import org.openbravo.materialmgmt.UOMUtil;
 import org.openbravo.model.common.plm.Product;
+import org.openbravo.model.common.plm.ProductAUM;
+import org.openbravo.model.common.uom.UOM;
 import org.openbravo.retail.config.OBRETCOProductList;
 import org.openbravo.retail.config.OBRETCOProlProduct;
 import org.openbravo.service.external.integration.SynchronizableBusinessObject;
@@ -36,6 +39,7 @@ public class RetailApiImportProductJavaPropertyMappingHandler
   public Map<Integer, String> getPropertySorting() {
     Map<Integer, String> properties = super.getPropertySorting();
     properties.put(420, "assortments");
+    properties.put(430, "alternativeUnitOfMeasure");
     return properties;
   }
 
@@ -51,6 +55,11 @@ public class RetailApiImportProductJavaPropertyMappingHandler
             updateProductAssortments(product, properties.get(mappingName));
           }
           break;
+        case "alternativeUnitOfMeasure":
+          if (properties.containsKey(mappingName)) {
+            updateAlternateUnitOfMeasure(product, properties.get(mappingName));
+          }
+          break;
         default:
           super.setPropertyInImportedObject(product, mappingName, sbo);
       }
@@ -118,4 +127,98 @@ public class RetailApiImportProductJavaPropertyMappingHandler
     criteria.add(Restrictions.eq("obretcoProductlist.id", assortmentId));
     return (OBRETCOProlProduct) criteria.uniqueResult();
   }
+
+  private void updateAlternateUnitOfMeasure(Product product, Object propertyAlternateUOMValues) {
+    try {
+      @SuppressWarnings("unchecked")
+      final List<SynchronizableBusinessObject> propCharValues = (List<SynchronizableBusinessObject>) propertyAlternateUOMValues;
+      Boolean primarySales = false;
+      Boolean primaryPurchase = false;
+      Boolean primaryLogistics = false;
+
+      for (SynchronizableBusinessObject propCharValue : propCharValues) {
+        Map<String, Object> props = propCharValue.getProperties();
+        final String uOM = (String) props.get("uom");
+        final UOM productUOM = getUOMByName(uOM);
+        if (productUOM == null) {
+          throw new OBException(String.format("No entry found in UOM with name = %s", uOM));
+        }
+
+        if (props.get("sales").equals(UOMUtil.UOM_PRIMARY)) {
+          if (!primarySales) {
+            primarySales = true;
+            final ProductAUM existingProductAUM = getExistingPrimaryProductUOM(product, productUOM,
+                ProductAUM.PROPERTY_SALES);
+            if (existingProductAUM != null) {
+              existingProductAUM.setSales("S");
+              OBDal.getInstance().save(existingProductAUM);
+            }
+          } else {
+            throw new OBException(String.format(
+                "Duplicate Primary Alternate Unit of Measure in Sales for this product %s.",
+                product.getId()));
+          }
+        }
+
+        if (props.get("purchase").equals(UOMUtil.UOM_PRIMARY)) {
+          if (!primaryPurchase) {
+            primaryPurchase = true;
+            final ProductAUM existingProductAUM = getExistingPrimaryProductUOM(product, productUOM,
+                ProductAUM.PROPERTY_PURCHASE);
+            if (existingProductAUM != null) {
+              existingProductAUM.setPurchase("S");
+              OBDal.getInstance().save(existingProductAUM);
+            }
+          } else {
+            throw new OBException(String.format(
+                "Duplicate Primary Alternate Unit of Measure in Purchase for this product %s.",
+                product.getId()));
+          }
+        }
+
+        if (props.get("logistics").equals(UOMUtil.UOM_PRIMARY)) {
+          if (!primaryLogistics) {
+            primaryLogistics = true;
+            final ProductAUM existingProductAUM = getExistingPrimaryProductUOM(product, productUOM,
+                ProductAUM.PROPERTY_LOGISTICS);
+            if (existingProductAUM != null) {
+              existingProductAUM.setLogistics("S");
+              OBDal.getInstance().save(existingProductAUM);
+            }
+          } else {
+            throw new OBException(String.format(
+                "Duplicate Primary Alternate Unit of Measure in Logistics for this product %s.",
+                product.getId()));
+          }
+        }
+      }
+    } catch (Exception ex) {
+      OBDal.getInstance().rollbackAndClose();
+      log.error("Error while updating AlternateUOM for product {}", product.getId(), ex);
+      throw new OBException("Error while updating product AlternateUOM", ex);
+    } finally {
+      OBDal.getInstance().flush();
+    }
+  }
+
+  private ProductAUM getExistingPrimaryProductUOM(final Product product, final UOM productUOM,
+      final String type) {
+
+    OBCriteria<ProductAUM> criteria = OBDal.getInstance().createCriteria(ProductAUM.class);
+    criteria.add(Restrictions.and(Restrictions.ne(ProductAUM.PROPERTY_UOM, productUOM),
+        Restrictions.and(Restrictions.eq(type, UOMUtil.UOM_PRIMARY),
+            Restrictions.eq(ProductAUM.PROPERTY_PRODUCT, product))));
+    criteria.setFilterOnReadableOrganization(false);
+    criteria.setMaxResults(1);
+    return (ProductAUM) criteria.uniqueResult();
+
+  }
+
+  private UOM getUOMByName(final String uOM) {
+    OBCriteria<UOM> criteria = OBDal.getInstance().createCriteria(UOM.class);
+    criteria.setFilterOnReadableOrganization(false);
+    criteria.add(Restrictions.eq("name", uOM));
+    criteria.setMaxResults(1);
+    return (UOM) criteria.uniqueResult();
+  }
 }
