diff --git a/src/main/java/com/smartharvester/service/MappingService.java b/src/main/java/com/smartharvester/service/MappingService.java
index 7a58851d56c19d8bba3b35956ce6f23101822fb6..8854d53174505c69956ee0a8d78ff9902ca7b5b0 100644
--- a/src/main/java/com/smartharvester/service/MappingService.java
+++ b/src/main/java/com/smartharvester/service/MappingService.java
@@ -168,6 +168,14 @@ public class MappingService {
 				}
 			} else {
 				for (int i = 0; i < list.size(); i++) {
+					if (!jsonT.has(list.get(i))) {
+						if (path.getDcatClass().equals("dcat:dataset")) {
+							datasetProperties += write(path.getProperty(), "undefined");
+						} else if (path.getDcatClass().equals("dcat:distribution")) {
+							distributionProperties += write(path.getProperty(), "undefined");
+						}
+						break;
+					}
 					if (i < list.size() - 1) {
 						if (jsonT.optJSONObject(list.get(i)) != null) {
 							jsonT = jsonT.getJSONObject(list.get(i));
@@ -186,16 +194,16 @@ public class MappingService {
 							if (isReplicable(path.getCard())) {
 								for (int j = 0; j < jsonA.length(); j++) {
 									if (path.getDcatClass().equals("dcat:dataset")) {
-										datasetProperties += write(path.getProperty(), jsonA.getString(j));
+										datasetProperties += write(path.getProperty(), jsonA.optString(j));
 									} else if (path.getDcatClass().equals("dcat:distribution")) {
-										distributionProperties += write(path.getProperty(), jsonA.getString(j));
+										distributionProperties += write(path.getProperty(), jsonA.optString(j));
 									}
 								}
 							} else {
 								if (path.getDcatClass().equals("dcat:dataset")) {
-									datasetProperties += write(path.getProperty(), jsonA.getString(0));
+									datasetProperties += write(path.getProperty(), jsonA.optString(0));
 								} else if (path.getDcatClass().equals("dcat:distribution")) {
-									distributionProperties += write(path.getProperty(), jsonA.getString(0));
+									distributionProperties += write(path.getProperty(), jsonA.optString(0));
 								}
 							}
 
@@ -205,9 +213,9 @@ public class MappingService {
 
 							JSONArray jsonA = jsonT.getJSONArray(list.get(list.size() - 2));
 							if (path.getDcatClass().equals("dcat:dataset")) {
-								datasetProperties += write(path.getProperty(), jsonA.getString(Integer.parseInt(list.get(i))));
+								datasetProperties += write(path.getProperty(), jsonA.optString(Integer.parseInt(list.get(i))));
 							} else if (path.getDcatClass().equals("dcat:distribution")) {
-								distributionProperties += write(path.getProperty(), jsonA.getString(Integer.parseInt(list.get(i))));
+								distributionProperties += write(path.getProperty(), jsonA.optString(Integer.parseInt(list.get(i))));
 							}
 							break;
 						} else if (jsonT.optString(list.get(i)) != null && jsonT.has(list.get(i))) {
@@ -225,7 +233,7 @@ public class MappingService {
 									JSONArray jsonA = jsonT.getJSONArray(key);
 									if (isReplicable(path.getCard())) {
 										for (int j = 0; j < jsonA.length(); j++) {
-											String value = jsonA.getJSONObject(j).getString(list.get(i));
+											String value = jsonA.getJSONObject(j).optString(list.get(i));
 											if (path.getDcatClass().equals("dcat:dataset")) {
 												datasetProperties += write(path.getProperty(), value);
 											} else if (path.getDcatClass().equals("dcat:distribution")) {
@@ -233,7 +241,7 @@ public class MappingService {
 											}
 										}
 									} else {
-										String value = jsonA.getJSONObject(0).getString(list.get(i));
+										String value = jsonA.getJSONObject(0).optString(list.get(i));
 										if (path.getDcatClass().equals("dcat:dataset")) {
 											datasetProperties += write(path.getProperty(), value);
 										} else if (path.getDcatClass().equals("dcat:distribution")) {