diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/META-INF/MANIFEST.MF b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/META-INF/MANIFEST.MF
index 8b0cbdb..7e9d214 100755
--- a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/META-INF/MANIFEST.MF
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/META-INF/MANIFEST.MF
@@ -10,10 +10,7 @@
  org.eclipse.emf.ecore;bundle-version="[2.17.0,3.0.0)",
  org.eclipse.core.resources;bundle-version="[3.13.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.15.0,4.0.0)",
- javax.xml;bundle-version="[1.3.4,2.0.0)",
  org.eclipse.papyrus.model2doc.odt.lib;bundle-version="[0.7.0,1.0.0)",
- org.apache.xerces;bundle-version="[2.9.0,3.0.0)",
- org.eclipse.wst.xml.core;bundle-version="[1.2.0,2.0.0)",
  org.eclipse.papyrus.infra.core.log;bundle-version="[1.2.0,2.0.0)",
  org.eclipse.papyrus.model2doc.emf.documentstructuretemplate;bundle-version="[0.7.0,1.0.0)"
 Bundle-Activator: org.eclipse.papyrus.model2doc.dev.tools.Activator
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/plugin.xml b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/plugin.xml
index 33d84fc..109ae70 100755
--- a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/plugin.xml
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/plugin.xml
@@ -55,6 +55,21 @@
                         checkEnabled="true">
                   </visibleWhen>
                </command>
+               <command
+                     commandId="org.eclipse.papyrus.model2doc.dev.tools.extractFullDocxContents"
+                     style="push">
+                  <visibleWhen
+                        checkEnabled="true">
+                  </visibleWhen>
+               </command>
+               <command
+                     commandId="org.eclipse.papyrus.model2doc.dev.tools.extractDocxXMLDocument"
+                     label="Extract Docx Document XML File"
+                     style="push">
+                  <visibleWhen
+                        checkEnabled="true">
+                  </visibleWhen>
+               </command>
             <separator
                   name="org.eclipse.papyrus.model2doc.dev.tools.ui.menu.separator.after"
                   visible="true">
@@ -79,6 +94,16 @@
             id="org.eclipse.papyrus.model2doc.dev.tools.extractFullODTContents"
             name="Extract Full ODT file contents">
       </command>
+      <command
+            description="This command allows to extract all the contents of an docx file"
+            id="org.eclipse.papyrus.model2doc.dev.tools.extractFullDocxContents"
+            name="Extract Full Docx file contents">
+      </command>
+      <command
+            description="This command allows to extract the file document.xml from an docx file"
+            id="org.eclipse.papyrus.model2doc.dev.tools.extractDocxXMLDocument"
+            name="Extract document.xml file">
+      </command>
    </extension>
    <extension
          point="org.eclipse.ui.handlers">
@@ -138,6 +163,58 @@
             </with>
          </activeWhen>
       </handler>
+      <handler
+            class="org.eclipse.papyrus.model2doc.dev.tools.handlers.UnzipDocxFileHandler"
+            commandId="org.eclipse.papyrus.model2doc.dev.tools.extractFullDocxContents">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     ifEmpty="false"
+                     operator="and">
+                  <adapt
+                        type="org.eclipse.core.resources.IFile">
+                     <or>
+                        <test
+                              property="org.eclipse.core.resources.name"
+                              value="*.docx">
+                        </test>
+                        <test
+                              property="org.eclipse.core.resources.name"
+                              value="*.dotx">
+                        </test>
+                     </or>
+                  </adapt>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>
+      <handler
+            class="org.eclipse.papyrus.model2doc.dev.tools.handlers.ExtractDocxContentsXmlFileHandler"
+            commandId="org.eclipse.papyrus.model2doc.dev.tools.extractDocxXMLDocument">
+         <activeWhen>
+            <with
+                  variable="selection">
+               <iterate
+                     ifEmpty="false"
+                     operator="and">
+                  <adapt
+                        type="org.eclipse.core.resources.IFile">
+                     <or>
+                        <test
+                              property="org.eclipse.core.resources.name"
+                              value="*.docx">
+                        </test>
+                        <test
+                              property="org.eclipse.core.resources.name"
+                              value="*.dotx">
+                        </test>
+                     </or>
+                  </adapt>
+               </iterate>
+            </with>
+         </activeWhen>
+      </handler>
    </extension>
 
 </plugin>
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/AbstractODTFileHandler.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/AbstractZipFileHandler.java
similarity index 70%
rename from plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/AbstractODTFileHandler.java
rename to plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/AbstractZipFileHandler.java
index 8449544..c431d69 100755
--- a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/AbstractODTFileHandler.java
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/AbstractZipFileHandler.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST and others.
+ * Copyright (c) 2019, 2020 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,13 +9,13 @@
  * SPDX-License-Identifier: EPL-2.0
  *
  * Contributors:
- *   CEA LIST - 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 568483
+ *  Pauline DEVILLE - Bug 568255 [Model2Doc][Docx] Add developer tools to extract files from Docx
  *****************************************************************************/
 
 package org.eclipse.papyrus.model2doc.dev.tools.handlers;
 
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -30,31 +30,15 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.osgi.util.NLS;
 import org.eclipse.papyrus.model2doc.dev.tools.Activator;
-import org.eclipse.wst.xml.core.internal.formatter.XMLFormatterFormatProcessor;
 
 /**
- * TODO move me into an odt dev plugin
- *
- * Abstract handler used to manipulate ODT file
+ * Abstract handler used to manipulate zip file
  */
-public abstract class AbstractODTFileHandler extends AbstractHandler {
+public abstract class AbstractZipFileHandler extends AbstractHandler {
 
 	protected static final String XML_EXTENSION = "xml"; //$NON-NLS-1$
 
-	protected static final String ODT_EXTENSION = "odt"; //$NON-NLS-1$
-
-	protected static final String OTT_EXTENSION = "ott"; //$NON-NLS-1$
-
-	protected static final String CONTENT_XML_FILE = "content.xml"; //$NON-NLS-1$
-
-	/**
-	 * the format processor used to format XML files
-	 */
-	protected static final XMLFormatterFormatProcessor processor = new XMLFormatterFormatProcessor();
-
-
 	// TODO move me in a util class
 	protected static final String getOSPathFromURI(final URI uri) {
 		String workspaceLocation = null;
@@ -69,7 +53,7 @@
 	 * @return
 	 *         the URI of the uml selected files
 	 */
-	protected final List<URI> getSelectedOdtFileURI() {
+	protected final List<URI> getSelectedFileURI() {
 		final Iterator<?> iter = getCurrentStructuredSelection().iterator();
 		final List<URI> uris = new ArrayList<>();
 		// 1. we iterate on the selection
@@ -82,7 +66,7 @@
 				pathName = f.getFullPath().toPortableString();
 			}
 			final URI uri = URI.createPlatformResourceURI(pathName, true);
-			if (ODT_EXTENSION.equals(uri.fileExtension()) || OTT_EXTENSION.equals(uri.fileExtension())) {
+			if (getFileExtension().equals(uri.fileExtension()) || getTemplateExtension().equals(uri.fileExtension())) {
 				uris.add(uri);
 			}
 		}
@@ -90,6 +74,16 @@
 	}
 
 	/**
+	 * @return
+	 */
+	protected abstract String getTemplateExtension();
+
+	/**
+	 * @return
+	 */
+	protected abstract String getFileExtension();
+
+	/**
 	 *
 	 * @see org.eclipse.core.commands.AbstractHandler#setEnabled(java.lang.Object)
 	 *
@@ -97,7 +91,7 @@
 	 */
 	@Override
 	public void setEnabled(Object evaluationContext) {
-		super.setBaseEnabled(getSelectedOdtFileURI().size() > 0);
+		super.setBaseEnabled(getSelectedFileURI().size() > 0);
 	}
 
 	/**
@@ -130,16 +124,6 @@
 	protected static final void formatXMLFile(final String filePath) {
 		// formatting file now
 		final IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(filePath));
-		// file.exists()
-		if (null != file) {
-			try {
-				processor.formatFile(file);
-				Activator.log.info(NLS.bind("XML file {0} is now formatted", filePath)); //$NON-NLS-1$
-			} catch (IOException ex) {
-				Activator.log.error(NLS.bind("IOException formating the XML file from {0}", filePath), ex); //$NON-NLS-1$
-			} catch (CoreException ex) {
-				Activator.log.error(NLS.bind("Exception during the formatting of {0}", filePath), ex); //$NON-NLS-1$
-			}
-		}
+		org.eclipse.papyrus.model2doc.dev.tools.utils.XMLFormatter.format(file);
 	}
 }
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/ExtractContentsXmlFileHandler.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/ExtractContentsXmlFileHandler.java
index c46e5fc..59d57ac 100755
--- a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/ExtractContentsXmlFileHandler.java
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/ExtractContentsXmlFileHandler.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
+ * Copyright (c) 2019, 2020 CEA LIST.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -10,6 +10,7 @@
  *
  * Contributors:
  *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *  Pauline DEVILLE - Bug 568255 [Model2Doc][Docx] Add developer tools to extract files from Docx
  *****************************************************************************/
 package org.eclipse.papyrus.model2doc.dev.tools.handlers;
 
@@ -33,8 +34,7 @@
  * This class has been created to extract easily the file content.xml from an odt file
  *
  */
-public class ExtractContentsXmlFileHandler extends AbstractODTFileHandler {
-
+public class ExtractContentsXmlFileHandler extends AbstractZipFileHandler {
 
 	/**
 	 *
@@ -46,7 +46,7 @@
 	 */
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-		for (final URI uri : getSelectedOdtFileURI()) {
+		for (final URI uri : getSelectedFileURI()) {
 
 			// convert the current odt file platform/resource path into an xml path according to the OS (id for windows : C:\... or D:\...)
 			final String contentXMLLocation = getOSPathFromURI(uri.trimFileExtension().appendFileExtension(XML_EXTENSION));
@@ -61,7 +61,7 @@
 				final FileOutputStream outputStream = new FileOutputStream(contentXMLLocation);
 				while (entries.hasMoreElements()) {
 					final ZipEntry current = entries.nextElement();
-					if (CONTENT_XML_FILE.equals(current.getName())) {
+					if (IOdtConstants.CONTENT_XML_FILE.equals(current.getName())) {
 						final InputStream in = odtZipFile.getInputStream(current);
 						while (0 < in.available()) {
 							final int read = in.read();
@@ -93,4 +93,24 @@
 		return null;
 	}
 
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getTemplateExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getTemplateExtension() {
+		return IOdtConstants.OTT_EXTENSION;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getFileExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getFileExtension() {
+		return IOdtConstants.ODT_EXTENSION;
+	}
+
 }
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/ExtractDocxContentsXmlFileHandler.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/ExtractDocxContentsXmlFileHandler.java
new file mode 100755
index 0000000..6be8d02
--- /dev/null
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/ExtractDocxContentsXmlFileHandler.java
@@ -0,0 +1,115 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.model2doc.dev.tools.handlers;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.model2doc.dev.tools.Activator;
+
+/**
+ *
+ * This class has been created to extract easily the file document.xml from an docx file
+ *
+ */
+public class ExtractDocxContentsXmlFileHandler extends AbstractZipFileHandler {
+
+	/**
+	 *
+	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 *
+	 * @param event
+	 * @return
+	 * @throws ExecutionException
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		for (final URI uri : getSelectedFileURI()) {
+
+			// convert the current file platform/resource path into an xml path according to the OS (id for windows : C:\... or D:\...)
+			final String contentXMLLocation = getOSPathFromURI(uri.trimFileExtension().appendFileExtension(XML_EXTENSION));
+
+			// same thing for the selected docx file
+			final String docxFileLocation = getOSPathFromURI(uri);
+
+			final File docxFile = new File(docxFileLocation);
+			try {
+				final ZipFile docxZipFile = new ZipFile(docxFile);
+				final Enumeration<? extends ZipEntry> entries = docxZipFile.entries();
+				final FileOutputStream outputStream = new FileOutputStream(contentXMLLocation);
+				while (entries.hasMoreElements()) {
+					final ZipEntry current = entries.nextElement();
+					if (IDocxConstant.DOCX_CONTENT_FILE.equals(current.getName())) {
+						final InputStream in = docxZipFile.getInputStream(current);
+						while (0 < in.available()) {
+							final int read = in.read();
+							outputStream.write(read);
+						}
+
+						in.close();
+						break;// we can go out, we manage the wanted file
+					}
+				}
+
+				docxZipFile.close();
+				outputStream.close();
+				Activator.log.info(NLS.bind("XML file extracted from {0}", uri.toString())); //$NON-NLS-1$
+			} catch (FileNotFoundException e) {
+				Activator.log.error(NLS.bind("XML file not found in {0}", uri.toString()), e); //$NON-NLS-1$
+			} catch (IOException e) {
+				Activator.log.error(NLS.bind("IOException extracting XML file from {0}", uri.toString()), e); //$NON-NLS-1$
+			}
+
+
+			// we refresh the workspace
+			refreshWorkspace();
+
+			formatXMLFile(contentXMLLocation);
+
+		}
+
+		return null;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getTemplateExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getTemplateExtension() {
+		return IDocxConstant.DOTX_EXTENSION;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getFileExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getFileExtension() {
+		return IDocxConstant.DOCX_EXTENSION;
+	}
+
+}
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/IDocxConstant.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/IDocxConstant.java
new file mode 100755
index 0000000..66565a0
--- /dev/null
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/IDocxConstant.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.model2doc.dev.tools.handlers;
+
+/**
+ *
+ */
+public interface IDocxConstant {
+
+	public static final String DOCX_EXTENSION = "docx"; //$NON-NLS-1$
+
+	public static final String DOTX_EXTENSION = "dotx"; //$NON-NLS-1$
+
+	public static final String DOCX_CONTENT_FILE = "word/document.xml"; //$NON-NLS-1$
+
+}
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/IOdtConstants.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/IOdtConstants.java
new file mode 100755
index 0000000..6d98b67
--- /dev/null
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/IOdtConstants.java
@@ -0,0 +1,28 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *****************************************************************************/
+
+package org.eclipse.papyrus.model2doc.dev.tools.handlers;
+
+/**
+ *
+ */
+public interface IOdtConstants {
+
+	public static final String ODT_EXTENSION = "odt"; //$NON-NLS-1$
+
+	public static final String OTT_EXTENSION = "ott"; //$NON-NLS-1$
+
+	public static final String CONTENT_XML_FILE = "content.xml"; //$NON-NLS-1$
+
+}
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/UnzipDocxFileHandler.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/UnzipDocxFileHandler.java
new file mode 100755
index 0000000..54ca08a
--- /dev/null
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/UnzipDocxFileHandler.java
@@ -0,0 +1,140 @@
+/*****************************************************************************
+ * Copyright (c) 2020 CEA LIST.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *  Pauline DEVILLE (CEA LIST) pauline.deville@cea.fr - Initial API and implementation
+ *****************************************************************************/
+package org.eclipse.papyrus.model2doc.dev.tools.handlers;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.zip.ZipInputStream;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.papyrus.model2doc.dev.tools.Activator;
+import org.eclipse.papyrus.model2doc.dev.tools.utils.ZipUtils;
+
+/**
+ *
+ * This class has been created to extract easily all files owned by an docx file and format the xml files.
+ *
+ */
+public class UnzipDocxFileHandler extends AbstractZipFileHandler {
+
+	/**
+	 *
+	 * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
+	 *
+	 * @param event
+	 * @return
+	 * @throws ExecutionException
+	 */
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		for (final URI uri : getSelectedFileURI()) {
+
+			// same thing for the selected docx file
+			final String docxFileLocation = getOSPathFromURI(uri);
+
+			try {
+				ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(docxFileLocation));
+				final String outputFolder = getOSPathFromURI(uri.trimFileExtension());
+				File f = new File(outputFolder);
+
+				ZipUtils.extract(zipInputStream, f);
+				// we refresh the workspace
+				refreshWorkspace();
+
+
+				// format XML files
+				formatAllXMLFiles(f);
+			} catch (IOException e) {
+				Activator.log.error(e);
+			}
+		}
+
+
+		// we refresh the workspace
+		try {
+			Activator.log.info("Refresh workspace"); //$NON-NLS-1$
+			ResourcesPlugin.getWorkspace().getRoot().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+		} catch (CoreException e) {
+			Activator.log.error("Exception during workspace refresh", e); //$NON-NLS-1$
+		}
+
+		return null;
+	}
+
+	/**
+	 * This method format all xml files owned by the folder (recursively)
+	 *
+	 * @param folder
+	 *            a folder
+	 */
+	private static final void formatAllXMLFiles(final File folder) {
+		final Iterator<File> iter = getAllOwnedFiles(folder).iterator();
+		while (iter.hasNext()) {
+			final File current = iter.next();
+			final String path = current.getAbsolutePath();
+			formatXMLFile(path);
+		}
+	}
+
+	/**
+	 *
+	 * @param folder
+	 *            a folder
+	 * @return
+	 *         all the owned files recursively
+	 */
+	private static final List<File> getAllOwnedFiles(final File folder) {
+		final List<File> files = new ArrayList<>();
+		final List<File> tmp = Arrays.asList(folder.listFiles());
+		files.addAll(tmp);
+		for (File current : tmp) {
+			if (current.isDirectory()) {
+				files.addAll(getAllOwnedFiles(current));
+			}
+		}
+
+		return files;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getTemplateExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getTemplateExtension() {
+		return IDocxConstant.DOTX_EXTENSION;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getFileExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getFileExtension() {
+		return IDocxConstant.DOCX_EXTENSION;
+	}
+}
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/UnzipOdtFileHandler.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/UnzipOdtFileHandler.java
index 8a0cb09..f2137f1 100755
--- a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/UnzipOdtFileHandler.java
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/handlers/UnzipOdtFileHandler.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2019 CEA LIST.
+ * Copyright (c) 2019, 2020 CEA LIST.
  *
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -10,6 +10,7 @@
  *
  * Contributors:
  *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *  Pauline DEVILLE - Bug 568255 [Model2Doc][Docx] Add developer tools to extract files from Docx
  *****************************************************************************/
 package org.eclipse.papyrus.model2doc.dev.tools.handlers;
 
@@ -37,7 +38,7 @@
  * This class has been created to extract easily all files owned by an odt file and format the xml files.
  *
  */
-public class UnzipOdtFileHandler extends AbstractODTFileHandler {
+public class UnzipOdtFileHandler extends AbstractZipFileHandler {
 
 	/**
 	 *
@@ -49,7 +50,7 @@
 	 */
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-		for (final URI uri : getSelectedOdtFileURI()) {
+		for (final URI uri : getSelectedFileURI()) {
 
 			// same thing for the selected odt file
 			final String odtFileLocation = getOSPathFromURI(uri);
@@ -117,4 +118,24 @@
 
 		return files;
 	}
+
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getTemplateExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getTemplateExtension() {
+		return IOdtConstants.OTT_EXTENSION;
+	}
+
+	/**
+	 * @see org.eclipse.papyrus.model2doc.dev.tools.handlers.AbstractZipFileHandler#getFileExtension()
+	 *
+	 * @return
+	 */
+	@Override
+	protected String getFileExtension() {
+		return IOdtConstants.ODT_EXTENSION;
+	}
 }
diff --git a/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/utils/XMLFormatter.java b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/utils/XMLFormatter.java
new file mode 100755
index 0000000..bdecb4b
--- /dev/null
+++ b/plugins/dev/org.eclipse.papyrus.model2doc.dev.tools/src/org/eclipse/papyrus/model2doc/dev/tools/utils/XMLFormatter.java
@@ -0,0 +1,81 @@
+/*****************************************************************************
+ * Copyright (c) 2020 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
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *
+ *****************************************************************************/
+package org.eclipse.papyrus.model2doc.dev.tools.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.io.StringWriter;
+
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Source;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.stream.StreamResult;
+import javax.xml.transform.stream.StreamSource;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.osgi.util.NLS;
+import org.eclipse.papyrus.model2doc.dev.tools.Activator;
+
+/**
+ * TODO : move me into papyrus ? class SyncManifestAndPOMVersions.java in papyrus has also an XML formatter
+ */
+public class XMLFormatter {
+
+	private XMLFormatter() {
+		// to prevent instanciation
+	}
+
+	// previsouly it was this formatter (used my the Eclipse XML Editor
+	// public static final void format(final IFile file) {
+	// final org.eclipse.wst.xml.core.internal.formatter.XMLFormatterFormatProcessor processor = new XMLFormatterFormatProcessor();
+	// if (null != file) {
+	// try {
+	// processor.formatFile(file);
+	// Activator.log.info(NLS.bind("XML file {0} is now formatted", file.getFullPath())); //$NON-NLS-1$
+	// } catch (IOException ex) {
+	// Activator.log.error(NLS.bind("IOException formating the XML file from {0}", file.getFullPath()), ex); //$NON-NLS-1$
+	// } catch (CoreException ex) {
+	// Activator.log.error(NLS.bind("Exception during the formatting of {0}", file.getFullPath()), ex); //$NON-NLS-1$
+	// }
+	// }
+	// }
+	public static final void format(final IFile xmlFile) {
+		try {
+			InputStream input = xmlFile.getContents();
+			Source xmlInput = new StreamSource(input);
+			StringWriter stringWriter = new StringWriter();
+			StreamResult xmlOutput = new StreamResult(stringWriter);
+			TransformerFactory transformerFactory = TransformerFactory.newInstance();
+			transformerFactory.setAttribute("indent-number", 4); //$NON-NLS-1$
+			Transformer transformer = transformerFactory.newTransformer();
+			transformer.setOutputProperty(OutputKeys.INDENT, "yes"); //$NON-NLS-1$
+			transformer.transform(xmlInput, xmlOutput);
+			InputStream in = new ByteArrayInputStream(stringWriter.toString().getBytes());
+			xmlFile.setContents(in, IResource.FORCE, new NullProgressMonitor());
+		} catch (CoreException ex) {
+			Activator.log.error(NLS.bind("Exception during the formatting of {0}", xmlFile.getFullPath()), ex); //$NON-NLS-1$
+		} catch (TransformerConfigurationException e) {
+			Activator.log.error(NLS.bind("Exception during the formatting of {0}", xmlFile.getFullPath()), e); //$NON-NLS-1$
+		} catch (TransformerException e) {
+			Activator.log.error(NLS.bind("Exception during the formatting of {0}", xmlFile.getFullPath()), e); //$NON-NLS-1$
+		}
+	}
+}
