diff --git a/src/org/openbravo/idl/variants/ImportProduct.java b/src/org/openbravo/idl/variants/ImportProduct.java
--- a/src/org/openbravo/idl/variants/ImportProduct.java
+++ b/src/org/openbravo/idl/variants/ImportProduct.java
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2013 Openbravo S.L.U.
+ * Copyright (C) 2013-2015 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.
@@ -18,7 +18,6 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.apache.commons.lang.time.DateUtils;
-import org.apache.log4j.Logger;
 import org.hibernate.criterion.Restrictions;
 import org.openbravo.base.exception.OBException;
 import org.openbravo.base.model.Entity;
@@ -51,9 +50,11 @@
 import org.openbravo.model.pricing.pricelist.PriceListSchemeLine;
 import org.openbravo.model.pricing.pricelist.PriceListVersion;
 import org.openbravo.model.pricing.pricelist.ProductPrice;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class ImportProduct extends org.openbravo.module.idljava.proc.IdlServiceJava {
-  private static final Logger log4j = Logger.getLogger(ImportProduct.class);
+  private static final Logger log4j = LoggerFactory.getLogger(ImportProduct.class);
 
   @Override
   public String getEntityName() {
@@ -149,6 +150,7 @@
       String strVariant3Value, String strVariant3Code, String strChName, String strChValue)
       throws Exception {
 
+    long t1 = System.currentTimeMillis();
     Product product = findDALInstance(false, Product.class,
         new Value("searchKey", strSearchKey.trim()));
     if (product != null) {
@@ -162,6 +164,9 @@
       OBDal.getInstance().save(product);
       OBDal.getInstance().flush();
       OBDal.getInstance().commitAndClose();
+      long tf = System.currentTimeMillis();
+      log4j.debug("Custom characterstic added to existing product {} in {} ms", strSearchKey,
+          (tf - t1));
       return product;
     }
 
@@ -467,6 +472,8 @@
       activateCharacteristicConf(product);
     }
     OBDal.getInstance().commitAndClose();
+    long tf = System.currentTimeMillis();
+    log4j.debug("Product {} added in {} ms", strSearchKey, (tf - t1));
     return product;
   }
 
@@ -498,6 +505,7 @@
     CharacteristicValue chv = getCharacteristicValue(ch, strValue, strCode);
     addCharacteristicToProduct(ch, true, product, variantNo);
     addCharacteristicValueToProduct(chv, product);
+    addCharacteristicValueToGenericConf(chv, generic);
   }
 
   private Characteristic getCharacteristic(String strChName, boolean variant) {
@@ -533,8 +541,9 @@
     return pch != null;
   }
 
-  private CharacteristicValue getCharacteristicValue(Characteristic ch, String strName,
+  private CharacteristicValue getCharacteristicValue(Characteristic _ch, String strName,
       String strCode) {
+    Characteristic ch = _ch;
     CharacteristicValue chValue = null;
     if (StringUtils.isNotBlank(strCode)) {
       chValue = findDALInstance(false, CharacteristicValue.class, new Value(
@@ -563,6 +572,7 @@
       }
       OBDal.getInstance().save(chValue);
       OBDal.getInstance().save(ch);
+      OBDal.getInstance().flush();
     }
     return chValue;
   }
@@ -579,6 +589,7 @@
       prodCh.setProduct(product);
       prodCh.setCharacteristic(ch);
       prodCh.setVariant(isVariant);
+      prodCh.setExplodeConfigurationTab(ch.isExplodeConfigurationTab());
       long seqNo;
       if (_seqNo == 0L) {
         seqNo = (product.getProductCharacteristicList().size() * 10L) + 10L;
@@ -611,6 +622,39 @@
     OBDal.getInstance().save(product);
   }
 
+  private void addCharacteristicValueToGenericConf(CharacteristicValue chValue, Product product) {
+    ProductCharacteristic pch = findDALInstance(false, ProductCharacteristic.class, new Value(
+        ProductCharacteristic.PROPERTY_PRODUCT, product), new Value(
+        ProductCharacteristic.PROPERTY_CHARACTERISTIC, chValue.getCharacteristic()));
+    if (pch == null) {
+      throw new OBException(OBMessageUtils.messageBD("OBIDLVR_VariantChNotInGeneric") + ": "
+          + chValue.getCharacteristic().getName() + " - " + product.getSearchKey());
+    }
+    final OBCriteria<ProductCharacteristicConf> critChConf = OBDal.getInstance().createCriteria(
+        ProductCharacteristicConf.class);
+    critChConf
+        .add(Restrictions.eq(ProductCharacteristicConf.PROPERTY_CHARACTERISTICOFPRODUCT, pch));
+    critChConf
+        .add(Restrictions.eq(ProductCharacteristicConf.PROPERTY_CHARACTERISTICVALUE, chValue));
+    critChConf.setFilterOnActive(false);
+    critChConf.setMaxResults(1);
+
+    ProductCharacteristicConf prodChConf = (ProductCharacteristicConf) critChConf.uniqueResult();
+
+    if (prodChConf == null) {
+      prodChConf = OBProvider.getInstance().get(ProductCharacteristicConf.class);
+      prodChConf.setActive(true);
+      prodChConf.setOrganization(rowOrganization);
+      prodChConf.setCharacteristicOfProduct(pch);
+      prodChConf.setCharacteristicValue(chValue);
+      prodChConf.setCode(chValue.getCode());
+    } else {
+      prodChConf.setActive(true);
+    }
+    OBDal.getInstance().save(prodChConf);
+    OBDal.getInstance().save(product);
+  }
+
   private void activateCharacteristicConf(Product product) {
     final OBCriteria<ProductCharacteristicConf> productChConfs = OBDal.getInstance()
         .createCriteria(ProductCharacteristicConf.class);
