diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src-api/org/eclipse/papyrus/model2doc/core/builtintypes/accessors/IInputFileAccessor.java b/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src-api/org/eclipse/papyrus/model2doc/core/builtintypes/accessors/IInputFileAccessor.java
index c3f5329..c5aef86 100755
--- a/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src-api/org/eclipse/papyrus/model2doc/core/builtintypes/accessors/IInputFileAccessor.java
+++ b/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src-api/org/eclipse/papyrus/model2doc/core/builtintypes/accessors/IInputFileAccessor.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2020 CEA LIST and others.
+ * Copyright (c) 2020, 2021 CEA LIST and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -9,8 +9,8 @@
  * SPDX-License-Identifier: EPL-2.0
  *
  * Contributors:
- *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *
+ *   Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *   Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 570803
  *****************************************************************************/
 
 package org.eclipse.papyrus.model2doc.core.builtintypes.accessors;
@@ -37,4 +37,16 @@
 	 *         the platform URI for the file
 	 */
 	public URI createInputFilePlatformURI();
+
+	/**
+	 * This method converts the URL into string, removing the prefix "file:" and decoding the path if required
+	 *
+	 * @param url
+	 *            the url
+	 * @param decode
+	 *            if <code>true</code>, we replace the %20 by the space char
+	 * @return
+	 *         the path string corresponding to the URL
+	 */
+	public String urlToPathString(final URL url, final boolean decode);
 }
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src/org/eclipse/papyrus/model2doc/core/builtintypes/internal/accessors/AbstractFileAccessor.java b/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src/org/eclipse/papyrus/model2doc/core/builtintypes/internal/accessors/AbstractFileAccessor.java
index 9b8edd6..efe59ca 100755
--- a/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src/org/eclipse/papyrus/model2doc/core/builtintypes/internal/accessors/AbstractFileAccessor.java
+++ b/plugins/core/org.eclipse.papyrus.model2doc.core.builtintypes/src/org/eclipse/papyrus/model2doc/core/builtintypes/internal/accessors/AbstractFileAccessor.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2020 CEA LIST and others.
+ * Copyright (c) 2020, 2021 CEA LIST and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -10,7 +10,7 @@
  *
  * Contributors:
  *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *
+ *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 570803
  *****************************************************************************/
 
 package org.eclipse.papyrus.model2doc.core.builtintypes.internal.accessors;
@@ -48,6 +48,11 @@
 	protected static final String ENCODED_SPACE = "%20"; //$NON-NLS-1$
 
 	/**
+	 * the file prefix
+	 */
+	private static final String FILE_PREFIX = "file:/";//$NON-NLS-1$
+
+	/**
 	 * the {@link EObject} referencing a file
 	 */
 	private final T eobject;
@@ -191,4 +196,22 @@
 		}
 		return null;
 	}
+
+	/**
+	 * This method converts the URL into string, removing the prefix "file:" and decoding the path if required
+	 *
+	 * @param url
+	 *            the url
+	 * @param decode
+	 *            if <code>true</code>, we replace the %20 by the space char
+	 * @return
+	 *         the path string corresponding to the URL
+	 */
+	public String urlToPathString(final URL url, final boolean decode) {
+		String path = url.toString().replaceFirst(FILE_PREFIX, ""); //$NON-NLS-1$
+		if (decode) {
+			path = path.replace(ENCODED_SPACE, SPACE);
+		}
+		return path;
+	}
 }
diff --git a/plugins/core/org.eclipse.papyrus.model2doc.core.generatorconfiguration/src-api/org/eclipse/papyrus/model2doc/core/generatorconfiguration/accessors/IOutputFileAccessor.java b/plugins/core/org.eclipse.papyrus.model2doc.core.generatorconfiguration/src-api/org/eclipse/papyrus/model2doc/core/generatorconfiguration/accessors/IOutputFileAccessor.java
index b54349b..b7b6014 100755
--- a/plugins/core/org.eclipse.papyrus.model2doc.core.generatorconfiguration/src-api/org/eclipse/papyrus/model2doc/core/generatorconfiguration/accessors/IOutputFileAccessor.java
+++ b/plugins/core/org.eclipse.papyrus.model2doc.core.generatorconfiguration/src-api/org/eclipse/papyrus/model2doc/core/generatorconfiguration/accessors/IOutputFileAccessor.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2020 CEA LIST and others.
+ * Copyright (c) 2020, 2021 CEA LIST and others.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -10,7 +10,7 @@
  *
  * Contributors:
  *   Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
- *
+ *   Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 570803
  *****************************************************************************/
 
 package org.eclipse.papyrus.model2doc.core.generatorconfiguration.accessors;
@@ -82,6 +82,18 @@
 	public URL convertToURL(final URI uri);
 
 	/**
+	 * This method converts the URL into string, removing the prefix "file:" and decoding the path if required
+	 *
+	 * @param url
+	 *            the url
+	 * @param decode
+	 *            if <code>true</code>, we replace the %20 by the space char
+	 * @return
+	 *         the path string corresponding to the URL
+	 */
+	public String urlToPathString(final URL url, final boolean decode);
+
+	/**
 	 *
 	 * @return
 	 *         the name of the project impacted by the generation
diff --git a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java
index 9412bff..e5214fc 100755
--- a/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java
+++ b/plugins/docx/org.eclipse.papyrus.model2doc.docx/src/org/eclipse/papyrus/model2doc/docx/internal/transcription/DocxTranscription.java
@@ -14,7 +14,7 @@
  * 	 Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Bug 569249
  *   Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 569817
  *   Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Bug 570290
- *
+ *   Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 570803
  *****************************************************************************/
 package org.eclipse.papyrus.model2doc.docx.internal.transcription;
 
@@ -55,6 +55,7 @@
 import org.eclipse.papyrus.model2doc.core.builtintypes.Row;
 import org.eclipse.papyrus.model2doc.core.builtintypes.TextCell;
 import org.eclipse.papyrus.model2doc.core.builtintypes.TextListItem;
+import org.eclipse.papyrus.model2doc.core.builtintypes.accessors.IInputFileAccessor;
 import org.eclipse.papyrus.model2doc.core.generatorconfiguration.IDocumentGeneratorConfiguration;
 import org.eclipse.papyrus.model2doc.core.generatorconfiguration.accessors.IOutputFileAccessor;
 import org.eclipse.papyrus.model2doc.core.styles.BooleanNamedStyle;
@@ -130,16 +131,17 @@
 		final URL templateURL = this.docxGeneratorConfig.createTemplateFileInputAccessor().createInputFileURL();
 
 		if (templateURL != null) {
-			URL destURL = this.docxGeneratorConfig.createDocumentOutputAccessor().createOutputFileURL(docxGeneratorConfig.getDocumentName(), DOCX_FILE_EXTENTION);
-			String destURI = destURL.getPath().replaceFirst(ECORE_FILE_PREFIX, EMPTY_STRING);
+			final IOutputFileAccessor outputAccessor = this.docxGeneratorConfig.createDocumentOutputAccessor();
+			final URL destURL = outputAccessor.createOutputFileURL(docxGeneratorConfig.getDocumentName(), DOCX_FILE_EXTENTION);
 
+			String destURI = outputAccessor.urlToPathString(destURL, true);
 			// create intermediate folder when they don't exist.
 			// TODO : make common method with image generation and odt
 			// TODO : what to do when dest project doesn't yet exist ?
-			final Path imagePath = new Path(destURI);
+			final Path targetPath = new Path(destURI);
 			// we check all folders tree already exists, and we create them if not
-			if (imagePath.segmentCount() > 1) {
-				final IPath folderPath = imagePath.removeLastSegments(1);
+			if (targetPath.segmentCount() > 1) {
+				final IPath folderPath = targetPath.removeLastSegments(1);
 				final File folder = folderPath.toFile();
 				if (false == folder.exists()) {
 					folder.mkdirs();
@@ -413,8 +415,9 @@
 	@Override
 	public void insertFile(IFileReference fileReference) {
 		try {
-			final URL url = fileReference.getFileAccessor().createInputFileURL();
-			final String path = url.toString().replace(ECORE_FILE_PREFIX, EMPTY_STRING);
+			final IInputFileAccessor accessor = fileReference.getFileAccessor();
+			final URL url = accessor.createInputFileURL();
+			final String path = accessor.urlToPathString(url, true);
 			document.insertFile(path);
 		} catch (Exception e) {
 			Activator.log.warn(NLS.bind("The {0} file can not be inserted", fileReference.getFilePath())); //$NON-NLS-1$
@@ -430,9 +433,10 @@
 	 *            the cell receiving the file
 	 */
 	private void insertFileInTableCell(IFileReference fileReference, XWPFTableCell xwpfCell) {
-		final URL url = fileReference.getFileAccessor().createInputFileURL();
+		final IInputFileAccessor accessor = fileReference.getFileAccessor();
+		final URL url = accessor.createInputFileURL();
 		if (url != null) {
-			final String path = url.toString().replace(ECORE_FILE_PREFIX, EMPTY_STRING);
+			final String path = accessor.urlToPathString(url, true);
 			try {
 				for (int i = 0; i < xwpfCell.getParagraphs().size(); i++) {
 					// when the cell is created, a paragraph is also created, to avoid a useless blank line we remove it
@@ -491,7 +495,7 @@
 		final URI ecoreURI = accessor.createOutputFileURI(docxGeneratorConfig.getDocumentName(), DOCX_FILE_EXTENTION);
 		final URL destURL = accessor.convertToURL(ecoreURI);
 		try {
-			final String destPath = destURL.toString().replace(ECORE_FILE_PREFIX, EMPTY_STRING);
+			String destPath = accessor.urlToPathString(destURL, true);
 			OutputStream outputStream = new FileOutputStream(destPath);
 			document.write(outputStream);
 			outputStream.close();
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.structure2document/src-api/org/eclipse/papyrus/model2doc/emf/structure2document/generator/transcriber/StructureToTranscriber.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.structure2document/src-api/org/eclipse/papyrus/model2doc/emf/structure2document/generator/transcriber/StructureToTranscriber.java
index 39eb4e7..5648549 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.structure2document/src-api/org/eclipse/papyrus/model2doc/emf/structure2document/generator/transcriber/StructureToTranscriber.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.structure2document/src-api/org/eclipse/papyrus/model2doc/emf/structure2document/generator/transcriber/StructureToTranscriber.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019, 2020 CEA LIST.
+ * Copyright (c) 2019 - 2021 CEA LIST.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -11,15 +11,17 @@
  * Contributors:
  *    Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
  *    Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - bug 568341
- *
+ *    Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - bug 570803 
  *****************************************************************************/
 
 package org.eclipse.papyrus.model2doc.emf.structure2document.generator.transcriber;
 
+import java.net.URL;
 import java.util.Iterator;
 
 import org.eclipse.papyrus.model2doc.core.builtintypes.AbstractList;
 import org.eclipse.papyrus.model2doc.core.builtintypes.AbstractTable;
+import org.eclipse.papyrus.model2doc.core.builtintypes.accessors.IInputFileAccessor;
 import org.eclipse.papyrus.model2doc.core.transcriber.Transcriber;
 import org.eclipse.papyrus.model2doc.core.transcription.Transcription;
 import org.eclipse.papyrus.model2doc.emf.documentstructure.Body;
@@ -191,8 +193,11 @@
 	 *            an image
 	 */
 	private void transcribeImage(final Image image) {
+		final IInputFileAccessor fileAccessor = image.getFileAccessor();
+		final URL url = fileAccessor.createInputFileURL();
+		final String imagePath = fileAccessor.urlToPathString(url, true);
 		// TODO allow to transcription to take an URL instead of a String?!
-		transcription.writeImage(image.getFileAccessor().createInputFileURL().toString(), image.getCaption());
+		transcription.writeImage(imagePath, image.getCaption());
 	}
 
 	/**
diff --git a/plugins/gmf/org.eclipse.papyrus.model2doc.gmf.template2structure/src/org/eclipse/papyrus/model2doc/gmf/template2structure/internal/mapping/GMFDiagramViewMapper.java b/plugins/gmf/org.eclipse.papyrus.model2doc.gmf.template2structure/src/org/eclipse/papyrus/model2doc/gmf/template2structure/internal/mapping/GMFDiagramViewMapper.java
index dc2fb01..859dd4c 100755
--- a/plugins/gmf/org.eclipse.papyrus.model2doc.gmf.template2structure/src/org/eclipse/papyrus/model2doc/gmf/template2structure/internal/mapping/GMFDiagramViewMapper.java
+++ b/plugins/gmf/org.eclipse.papyrus.model2doc.gmf.template2structure/src/org/eclipse/papyrus/model2doc/gmf/template2structure/internal/mapping/GMFDiagramViewMapper.java
@@ -16,6 +16,7 @@
 
 package org.eclipse.papyrus.model2doc.gmf.template2structure.internal.mapping;
 
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
@@ -94,8 +95,8 @@
 
 			final IOutputFileAccessor accessor = conf.createImageOutputAccessor();
 			final URI uri = accessor.createOutputFileURI(imageNameBuilder.toString(), GMFDiagramImageUtils.SVG_EXTENSION);
-			String imagePath = accessor.convertToURL(uri).toString();
-			imagePath = imagePath.replaceAll("file:/", ""); //$NON-NLS-1$ //$NON-NLS-2$
+			final URL url = accessor.convertToURL(uri);
+			final String imagePath = accessor.urlToPathString(url, true);
 			GMFDiagramImageUtils.generateImageOfDiagram(current, imagePath, gmfDiagramView.getDiagramImageMargin());
 			image.setFilePath(uri.toString());
 			returnedValue.add(returnedClassType.cast(image));
diff --git a/plugins/integration/org.eclipse.papyrus.model2doc.integration.gmf.template2structure/src/org/eclipse/papyrus/model2doc/integration/gmf/template2structure/internal/mapping/PapyrusGMFDiagramViewMapper.java b/plugins/integration/org.eclipse.papyrus.model2doc.integration.gmf.template2structure/src/org/eclipse/papyrus/model2doc/integration/gmf/template2structure/internal/mapping/PapyrusGMFDiagramViewMapper.java
index d3cdd5a..2d9af39 100755
--- a/plugins/integration/org.eclipse.papyrus.model2doc.integration.gmf.template2structure/src/org/eclipse/papyrus/model2doc/integration/gmf/template2structure/internal/mapping/PapyrusGMFDiagramViewMapper.java
+++ b/plugins/integration/org.eclipse.papyrus.model2doc.integration.gmf.template2structure/src/org/eclipse/papyrus/model2doc/integration/gmf/template2structure/internal/mapping/PapyrusGMFDiagramViewMapper.java
@@ -16,6 +16,7 @@
 
 package org.eclipse.papyrus.model2doc.integration.gmf.template2structure.internal.mapping;
 
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Iterator;
@@ -103,8 +104,8 @@
 			}
 			final IOutputFileAccessor accessor = conf.createImageOutputAccessor();
 			final URI uri = accessor.createOutputFileURI(imageNameBuilder.toString(), gmfDiagramView.getImageFormat().getLiteral());
-			String imagePath = accessor.convertToURL(uri).toString();
-			imagePath = imagePath.replaceAll("file:/", ""); //$NON-NLS-1$ //$NON-NLS-2$
+			final URL url = accessor.convertToURL(uri);
+			final String imagePath = accessor.urlToPathString(url, true);
 			GMFDiagramImageUtils.generateImageOfDiagram(current, imagePath, gmfDiagramView.getDiagramImageMargin(), gmfDiagramView.getImageFormat());
 			image.setFilePath(uri.toString());
 			returnedValue.add(returnedClassType.cast(image));
