diff --git a/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php b/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php
index e10456ae0ba028c7c4022b35d50d431853b43c55..aed4022a535710f3cd919637aa6e592f9abd3a06 100644
--- a/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php
+++ b/src/Biopen/GeoDirectoryBundle/Services/ElementImportMappingService.php
@@ -110,7 +110,6 @@ class ElementImportMappingService
         unset($data[$key]);
       }
     }
-
     // Ontology
     $this->collectOntology($data, $import);
     $data = $this->mapOntology($data);
@@ -248,64 +247,73 @@ class ElementImportMappingService
   {
     $mapping = $this->import->getOntologyMapping();
     foreach ($data as $key => $row) {
-
+      $newRow = [];
       // First map nested fields
       foreach ($mapping as $search => $replace) {
         $searchKeys = explode('/', $search);
         if (count($searchKeys) == 2) {
           $searchkey = $searchKeys[0]; $subkey = $searchKeys[1];
 
-          if (!in_array($replace, ['/', '']) && isset($data[$key][$searchkey]) && isset($row[$searchkey][$subkey]) && !isset($data[$key][$replace])) {
-            $data[$key][$replace] = $row[$searchkey][$subkey];
-            unset($data[$key][$searchkey][$subkey]);
+          if (!in_array($replace, ['/', '']) && isset($data[$key][$searchkey]) && isset($row[$searchkey][$subkey]))
+          {
+            $newRow = $this->mapAttribute($newRow, $replace, $data[$key][$searchkey][$subkey]);
           }
         }
       }
 
-      // Then remove non mapped fields
-      foreach ($mapping as $search => $replace) {
-        if (in_array($replace, ['/', ''])) unset($data[$key][$search]);
-      }
-
       // Finally map non nested fields
       foreach ($mapping as $search => $replace) {
         $searchKeys = explode('/', $search);
         if (count($searchKeys) == 1) {
           $searchkey = $search;
 
-          if (!in_array($replace, ['/', '']) && isset($data[$key][$searchkey]) && !isset($data[$key][$replace])) {
-            $data[$key][$replace] = $row[$searchkey];
-            unset($data[$key][$searchkey]);
+          if (!in_array($replace, ['/', '']) && isset($data[$key][$searchkey])) {
+            $newRow = $this->mapAttribute($newRow, $replace, $data[$key][$searchkey]);
           }
         }
       }
 
       // add streetNumber into streetAddress
-      if (isset($data[$key]['streetNumber']) && isset($data[$key]['streetAddress'])) {
-        $data[$key]['streetAddress'] = $data[$key]['streetNumber'] . ' ' . $data[$key]['streetAddress'];
-        unset($data[$key]['streetNumber']);
+      if (isset($newRow['streetNumber']) && isset($newRow['streetAddress'])) {
+        $newRow['streetAddress'] = $newRow['streetNumber'] . ' ' . $newRow['streetAddress'];
       }
-      if (isset($data[$key]['fullAddress'])) {
-        $data[$key]['streetAddress'] = $data[$key]['fullAddress'];
-        unset($data[$key]['fullAddress']);
+      if (isset($newRow['fullAddress'])) {
+        $newRow['streetAddress'] = $newRow['fullAddress'];
       }
       // convert lat/long numeric into string
-      if (isset($data[$key]['latitude']) && is_numeric($data[$key]['latitude']))
-        $data[$key]['latitude'] = '' . $data[$key]['latitude'];
-      if (isset($data[$key]['longitude']) && is_numeric($data[$key]['longitude']))
-        $data[$key]['longitude'] = '' . $data[$key]['longitude'];
-    }
+      if (isset($newRow['latitude']) && is_numeric($newRow['latitude']))
+        $newRow['latitude'] = '' . $newRow['latitude'];
+      if (isset($newRow['longitude']) && is_numeric($newRow['longitude']))
+        $newRow['longitude'] = '' . $newRow['longitude'];
 
+      $data[$key] = $newRow;
+    }
     return $data;
   }
 
+  // map $value inside $newKey attribute
+  private function mapAttribute($newRow, $newKey, $value)
+  {
+    // We allow that multiple keys maps to categories. In this case they will be concatenated
+    if ($newKey == 'categories') {
+      if (is_string($value)) $value = explode(',', $value);
+      $oldVal = isset($newRow[$newKey]) ? $newRow[$newKey] : [];
+      $value = array_merge($oldVal, $value);
+    }
+
+    // replacing existing value only if not set, or if categories because values have been merged
+    if (!isset($newRow[$newKey]) || $newKey == 'categories') {
+      $newRow[$newKey] = $value;
+    }
+    return $newRow;
+  }
+
   private function mapTaxonomy($data)
   {
     $mapping = $this->import->getTaxonomyMapping();
     foreach ($data as $key => $row)
     {
       if (isset($data[$key]['categories'])) {
-        if (is_string($row['categories'])) $row['categories'] = explode(',', $row['categories']);
         $categories = []; $categoriesIds = [];
         foreach ($row['categories'] as $category)
         {
diff --git a/src/Biopen/GeoDirectoryBundle/Services/ElementImportService.php b/src/Biopen/GeoDirectoryBundle/Services/ElementImportService.php
index 51c65ee2a8bb0fead280638c68ef17299cc12f1e..a553c3c811fb5029c474d28813d7487ed81b3771 100755
--- a/src/Biopen/GeoDirectoryBundle/Services/ElementImportService.php
+++ b/src/Biopen/GeoDirectoryBundle/Services/ElementImportService.php
@@ -6,6 +6,7 @@ use Doctrine\ODM\MongoDB\DocumentManager;
 use Biopen\GeoDirectoryBundle\Document\Element;
 use Biopen\GeoDirectoryBundle\Document\ElementStatus;
 use Biopen\GeoDirectoryBundle\Document\UserInteractionContribution;
+use Biopen\GeoDirectoryBundle\Document\UserInteraction;
 use Biopen\GeoDirectoryBundle\Document\ImportState;
 use Biopen\CoreBundle\Document\GoGoLogImport;
 use Biopen\GeoDirectoryBundle\Document\ModerationState;
diff --git a/web/test.json b/web/test.json
index 4cf8e1c8dbe1fe61d7307d79de44b361f99cad8a..7e9bc9387015ff332d749b74832d4222f2caa32b 100644
--- a/web/test.json
+++ b/web/test.json
@@ -11,10 +11,8 @@
 		"website": "mysite.fr",
 		"description": "oh yeah",
 		"tarara": 452,
-		"categories": [
-			{ "name": "Nature", "index": 5, "description": "balade en forêt"},
-		  { "name": "Numérique", "index": 1}
-		],
+		"categories": ["one", "two"],
+		"categories2": ["orange"],
 		"website": "https:\/\/www.asso-entropie.fr\/",
 		"images": ["https:\/\/www.capoupascap.info\/wp-content\/uploads\/2018\/12\/entropie.png"],
 		"files": ["https:\/\/toto.fr\/wp-content\/file.pdf", "https:\/\/aabjka.fr\/wp-content\/file.pdf"],
@@ -33,7 +31,8 @@
 			"address": "rue Bernard, Tours",
 			"sourceKey":"CapOuPasCap",
 			"updatedAt": "10/08/2019",
-			"categories": [6]
+			"categories": ["one"],
+			"categories2": ["blue"]
 		},
 		{
 			"id":"sa",
@@ -41,7 +40,8 @@
 			"coord":{"latitude":46.18679,"longitude":5.70548},
 			"address": "rue Jacquet, Labrit",
 			"sourceKey":"CapOuPasCap",
-			"categories": [2],
+			"categories": ["two"],
+			"categories2": ["blue", "orange"],
 			"updatedAt": "11/08/2019",
 			"website": "https:\/\/www.asso-cala.fr\/"
 		}