diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/custom_icons/full/obj16/TableOfFigures.gif b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/custom_icons/full/obj16/TableOfFigures.gif
new file mode 100755
index 0000000..d838a6d
--- /dev/null
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/custom_icons/full/obj16/TableOfFigures.gif
Binary files differ
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/icons/full/obj16/TableOfFigures.gif b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/icons/full/obj16/TableOfFigures.gif
new file mode 100755
index 0000000..d838a6d
--- /dev/null
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/icons/full/obj16/TableOfFigures.gif
Binary files differ
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/plugin.properties b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/plugin.properties
index 7f58fe8..403d1f3 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/plugin.properties
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/plugin.properties
@@ -96,3 +96,5 @@
 _UI_EClassFilterBehavior_TYPE_OF_literal = TYPE_OF
 _UI_EClassFilterBehavior_KIND_OF_literal = KIND_OF
 _UI_InsertFileTemplate_type = Insert File Template
+_UI_TableOfFigures_type = Table Of Figures
+_UI_TableOfFigures_tofTitle_feature = Tof Title
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/DocumentStructureTemplateItemProviderAdapterFactory.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/DocumentStructureTemplateItemProviderAdapterFactory.java
index 540f914..bec8e02 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/DocumentStructureTemplateItemProviderAdapterFactory.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/DocumentStructureTemplateItemProviderAdapterFactory.java
@@ -431,6 +431,31 @@
 	}
 
 	/**
+	 * This keeps track of the one adapter used for all {@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures} instances.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	protected TableOfFiguresItemProvider tableOfFiguresItemProvider;
+
+	/**
+	 * This creates an adapter for a {@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Adapter createTableOfFiguresAdapter() {
+		if (tableOfFiguresItemProvider == null) {
+			tableOfFiguresItemProvider = new TableOfFiguresItemProvider(this);
+		}
+
+		return tableOfFiguresItemProvider;
+	}
+
+	/**
 	 * This returns the root adapter factory that contains this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -615,6 +640,9 @@
 		if (insertFileTemplateItemProvider != null) {
 			insertFileTemplateItemProvider.dispose();
 		}
+		if (tableOfFiguresItemProvider != null) {
+			tableOfFiguresItemProvider.dispose();
+		}
 	}
 
 }
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/TableOfFiguresItemProvider.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/TableOfFiguresItemProvider.java
new file mode 100755
index 0000000..23376ef
--- /dev/null
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/TableOfFiguresItemProvider.java
@@ -0,0 +1,198 @@
+/**
+ * Copyright (c) 2019 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:
+ *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.provider;
+
+
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.emf.common.notify.AdapterFactory;
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.ResourceLocator;
+
+import org.eclipse.emf.edit.provider.ComposeableAdapterFactory;
+import org.eclipse.emf.edit.provider.IChildCreationExtender;
+import org.eclipse.emf.edit.provider.IEditingDomainItemProvider;
+import org.eclipse.emf.edit.provider.IItemLabelProvider;
+import org.eclipse.emf.edit.provider.IItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.IItemPropertySource;
+import org.eclipse.emf.edit.provider.IStructuredItemContentProvider;
+import org.eclipse.emf.edit.provider.ITreeItemContentProvider;
+import org.eclipse.emf.edit.provider.ItemPropertyDescriptor;
+import org.eclipse.emf.edit.provider.ItemProviderAdapter;
+import org.eclipse.emf.edit.provider.ViewerNotification;
+
+import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.DocumentStructureTemplatePackage;
+import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures;
+
+/**
+ * This is the item provider adapter for a {@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures} object.
+ * <!-- begin-user-doc -->
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class TableOfFiguresItemProvider
+		extends ItemProviderAdapter
+		implements
+		IEditingDomainItemProvider,
+		IStructuredItemContentProvider,
+		ITreeItemContentProvider,
+		IItemLabelProvider,
+		IItemPropertySource {
+	/**
+	 * This constructs an instance from a factory and a notifier.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	public TableOfFiguresItemProvider(AdapterFactory adapterFactory) {
+		super(adapterFactory);
+	}
+
+	/**
+	 * This returns the property descriptors for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public List<IItemPropertyDescriptor> getPropertyDescriptors(Object object) {
+		if (itemPropertyDescriptors == null) {
+			super.getPropertyDescriptors(object);
+
+			addTofTitlePropertyDescriptor(object);
+		}
+		return itemPropertyDescriptors;
+	}
+
+	/**
+	 * This adds a property descriptor for the Tof Title feature.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	protected void addTofTitlePropertyDescriptor(Object object) {
+		itemPropertyDescriptors.add(createItemPropertyDescriptor(((ComposeableAdapterFactory) adapterFactory).getRootAdapterFactory(),
+				getResourceLocator(),
+				getString("_UI_TableOfFigures_tofTitle_feature"), //$NON-NLS-1$
+				getString("_UI_PropertyDescriptor_description", "_UI_TableOfFigures_tofTitle_feature", "_UI_TableOfFigures_type"), //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
+				DocumentStructureTemplatePackage.Literals.TABLE_OF_FIGURES__TOF_TITLE,
+				true,
+				false,
+				false,
+				ItemPropertyDescriptor.GENERIC_VALUE_IMAGE,
+				null,
+				null));
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public boolean hasChildren(Object object) {
+		return hasChildren(object, true);
+	}
+
+	/**
+	 * This returns TableOfFigures.gif.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Object getImage(Object object) {
+		return overlayImage(object, getResourceLocator().getImage("full/obj16/TableOfFigures")); //$NON-NLS-1$
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected boolean shouldComposeCreationImage() {
+		return true;
+	}
+
+	/**
+	 * This returns the label text for the adapted class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public String getText(Object object) {
+		String label = ((TableOfFigures) object).getTofTitle();
+		return label == null || label.length() == 0 ? getString("_UI_TableOfFigures_type") : //$NON-NLS-1$
+				getString("_UI_TableOfFigures_type") + " " + label; //$NON-NLS-1$ //$NON-NLS-2$
+	}
+
+
+	/**
+	 * This handles model notifications by calling {@link #updateChildren} to update any cached
+	 * children and by creating a viewer notification, which it passes to {@link #fireNotifyChanged}.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void notifyChanged(Notification notification) {
+		updateChildren(notification);
+
+		switch (notification.getFeatureID(TableOfFigures.class)) {
+		case DocumentStructureTemplatePackage.TABLE_OF_FIGURES__TOF_TITLE:
+			fireNotifyChanged(new ViewerNotification(notification, notification.getNotifier(), false, true));
+			return;
+		}
+		super.notifyChanged(notification);
+	}
+
+	/**
+	 * This adds {@link org.eclipse.emf.edit.command.CommandParameter}s describing the children
+	 * that can be created under this object.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected void collectNewChildDescriptors(Collection<Object> newChildDescriptors, Object object) {
+		super.collectNewChildDescriptors(newChildDescriptors, object);
+	}
+
+	/**
+	 * Return the resource locator for this item provider's resources.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public ResourceLocator getResourceLocator() {
+		return ((IChildCreationExtender) adapterFactory).getResourceLocator();
+	}
+
+}
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/TextDocumentTemplateItemProvider.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/TextDocumentTemplateItemProvider.java
index 19c2085..a00acd3 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/TextDocumentTemplateItemProvider.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.edit/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/provider/TextDocumentTemplateItemProvider.java
@@ -373,6 +373,9 @@
 
 		newChildDescriptors.add(createChildParameter(DocumentStructureTemplatePackage.Literals.TEXT_DOCUMENT_TEMPLATE__DOCUMENT_PART,
 				DocumentStructureTemplateFactory.eINSTANCE.createBody()));
+
+		newChildDescriptors.add(createChildParameter(DocumentStructureTemplatePackage.Literals.TEXT_DOCUMENT_TEMPLATE__DOCUMENT_PART,
+				DocumentStructureTemplateFactory.eINSTANCE.createTableOfFigures()));
 	}
 
 	/**
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.ecore b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.ecore
index c5eb7df..6e4d8f0 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.ecore
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.ecore
@@ -77,9 +77,16 @@
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="DocumentPart" abstract="true" interface="true"/>
   <eClassifiers xsi:type="ecore:EClass" name="TableOfContents" eSuperTypes="#//DocumentPart">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="This element allows to declare that the generated document will contain a Table of Contents."/>
+    </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="tocTitle" ordered="false"
         lowerBound="1" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"
-        defaultValueLiteral="Table Of Contents"/>
+        defaultValueLiteral="Table Of Contents">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This field allows to define the custom title for the table of contents."/>
+      </eAnnotations>
+    </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="Body" eSuperTypes="#//DocumentPart">
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
@@ -511,4 +518,16 @@
       <details key="documentation" value="This element allows to insert the content of an existing file into the generated file."/>
     </eAnnotations>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="TableOfFigures" eSuperTypes="#//DocumentPart">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="This element allows to declare that the generated document will contain a Table of Figures."/>
+    </eAnnotations>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="tofTitle" ordered="false"
+        lowerBound="1" eType="ecore:EDataType ../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"
+        defaultValueLiteral="Table Of Figures">
+      <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+        <details key="documentation" value="This field allows to define the custom title for the table of figures."/>
+      </eAnnotations>
+    </eStructuralFeatures>
+  </eClassifiers>
 </ecore:EPackage>
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.genmodel b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.genmodel
index dc1f37e..3f5f59a 100644
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.genmodel
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.genmodel
@@ -238,5 +238,8 @@
           createChild="true" ecoreFeature="ecore:EReference documentstructuretemplate.ecore#//TreeListView/rootListItemTemplate"/>
     </genClasses>
     <genClasses xsi:type="genmodel:GenClass" ecoreClass="documentstructuretemplate.ecore#//InsertFileTemplate"/>
+    <genClasses xsi:type="genmodel:GenClass" ecoreClass="documentstructuretemplate.ecore#//TableOfFigures">
+      <genFeatures xsi:type="genmodel:GenFeature" createChild="false" ecoreFeature="ecore:EAttribute documentstructuretemplate.ecore#//TableOfFigures/tofTitle"/>
+    </genClasses>
   </genPackages>
 </genmodel:GenModel>
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.notation b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.notation
index 9363ef8..051adbe 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.notation
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.notation
@@ -171,7 +171,7 @@
         <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zXFOYznLEem5-oyJMXJtFA"/>
       </children>
       <element xmi:type="uml:Interface" href="documentstructuretemplate.uml#_zXDZIDnLEem5-oyJMXJtFA"/>
-      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zXFOUTnLEem5-oyJMXJtFA" x="-120" y="20" width="341" height="161"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_zXFOUTnLEem5-oyJMXJtFA" x="-320" y="20" width="541" height="161"/>
     </children>
     <children xmi:type="notation:Shape" xmi:id="_xklxcDnVEem5-oyJMXJtFA" type="Class_Shape">
       <children xmi:type="notation:DecorationNode" xmi:id="_xkmYgDnVEem5-oyJMXJtFA" type="Class_NameLabel"/>
@@ -491,6 +491,36 @@
       <element xmi:type="uml:Interface" href="pathmap://EXPRESSIONS//expressions.uml#_P-MkYBVaEee_D4EhwjboOQ"/>
       <layoutConstraint xmi:type="notation:Bounds" xmi:id="_VzABUY29EemcPPjkzx166Q" x="1320" y="80" width="221"/>
     </children>
+    <children xmi:type="notation:Shape" xmi:id="_Zany8Oj8EemWx6IYXety0w" type="Class_Shape">
+      <children xmi:type="notation:DecorationNode" xmi:id="_ZaugoOj8EemWx6IYXety0w" type="Class_NameLabel"/>
+      <children xmi:type="notation:DecorationNode" xmi:id="_Zaugoej8EemWx6IYXety0w" type="Class_FloatingNameLabel">
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_Zaugouj8EemWx6IYXety0w" y="15"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_Zaugo-j8EemWx6IYXety0w" type="Class_AttributeCompartment">
+        <children xmi:type="notation:Shape" xmi:id="_tBOmIOj8EemWx6IYXety0w" type="Property_ClassAttributeLabel">
+          <element xmi:type="uml:Property" href="documentstructuretemplate.uml#_tmYT4Oj3Eem6Q8pIItgtwQ"/>
+          <layoutConstraint xmi:type="notation:Location" xmi:id="_tBOmIej8EemWx6IYXety0w"/>
+        </children>
+        <styles xmi:type="notation:TitleStyle" xmi:id="_ZaugpOj8EemWx6IYXety0w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Zaugpej8EemWx6IYXety0w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_Zaugpuj8EemWx6IYXety0w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Zaugp-j8EemWx6IYXety0w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_ZaugqOj8EemWx6IYXety0w" type="Class_OperationCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_Zaugqej8EemWx6IYXety0w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Zaugquj8EemWx6IYXety0w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_Zaugq-j8EemWx6IYXety0w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_ZaugrOj8EemWx6IYXety0w"/>
+      </children>
+      <children xmi:type="notation:BasicCompartment" xmi:id="_Zaugrej8EemWx6IYXety0w" type="Class_NestedClassifierCompartment">
+        <styles xmi:type="notation:TitleStyle" xmi:id="_Zaugruj8EemWx6IYXety0w"/>
+        <styles xmi:type="notation:SortingStyle" xmi:id="_Zaugr-j8EemWx6IYXety0w"/>
+        <styles xmi:type="notation:FilteringStyle" xmi:id="_ZaugsOj8EemWx6IYXety0w"/>
+        <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Zaugsej8EemWx6IYXety0w"/>
+      </children>
+      <element xmi:type="uml:Class" href="documentstructuretemplate.uml#_iAWr8Oj3Eem6Q8pIItgtwQ"/>
+      <layoutConstraint xmi:type="notation:Bounds" xmi:id="_Zany8ej8EemWx6IYXety0w" x="-320" y="280" width="141" height="141"/>
+    </children>
     <styles xmi:type="notation:StringValueStyle" xmi:id="_hHH6sR5QEemmq_cjeiIGww" name="diagram_compatibility_version" stringValue="1.4.0"/>
     <styles xmi:type="notation:DiagramStyle" xmi:id="_hHH6sh5QEemmq_cjeiIGww"/>
     <styles xmi:type="style:PapyrusDiagramStyle" xmi:id="_hHH6sx5QEemmq_cjeiIGww" diagramKindId="org.eclipse.papyrus.uml.diagram.class">
@@ -545,7 +575,7 @@
       <element xmi:type="uml:Association" href="documentstructuretemplate.uml#_EPiZMDnMEem5-oyJMXJtFA"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_EQDWkjnMEem5-oyJMXJtFA" points="[20, 179, -643984, -643984]$[20, 260, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ERC1EDnMEem5-oyJMXJtFA" id="(0.46920821114369504,1.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ERC1ETnMEem5-oyJMXJtFA" id="(0.46920821114369504,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ERC1ETnMEem5-oyJMXJtFA" id="(0.6654343807763401,0.0)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_Om-uIDnMEem5-oyJMXJtFA" type="InterfaceRealization_Edge" source="_f06PMDnLEem5-oyJMXJtFA" target="_zXFOUDnLEem5-oyJMXJtFA">
       <children xmi:type="notation:DecorationNode" xmi:id="_Om-uIznMEem5-oyJMXJtFA" type="InterfaceRealization_StereotypeLabel">
@@ -558,7 +588,7 @@
       <element xmi:type="uml:InterfaceRealization" href="documentstructuretemplate.uml#_Omg0EDnMEem5-oyJMXJtFA"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_Om-uIjnMEem5-oyJMXJtFA" points="[-40, 280, -643984, -643984]$[-40, 181, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_On4tEDnMEem5-oyJMXJtFA" id="(0.5673758865248227,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_On5UIDnMEem5-oyJMXJtFA" id="(0.23460410557184752,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_On5UIDnMEem5-oyJMXJtFA" id="(0.5175600739371534,1.0)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_PHpyQDnMEem5-oyJMXJtFA" type="InterfaceRealization_Edge" source="_xzXY0DnLEem5-oyJMXJtFA" target="_zXFOUDnLEem5-oyJMXJtFA">
       <children xmi:type="notation:DecorationNode" xmi:id="_PHpyQznMEem5-oyJMXJtFA" type="InterfaceRealization_StereotypeLabel">
@@ -571,7 +601,7 @@
       <element xmi:type="uml:InterfaceRealization" href="documentstructuretemplate.uml#_PHIN0DnMEem5-oyJMXJtFA"/>
       <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_PHpyQjnMEem5-oyJMXJtFA" points="[140, 280, -643984, -643984]$[140, 181, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PIpQwDnMEem5-oyJMXJtFA" id="(0.4413793103448276,0.0)"/>
-      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PIpQwTnMEem5-oyJMXJtFA" id="(0.7624633431085044,1.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_PIpQwTnMEem5-oyJMXJtFA" id="(0.8502772643253235,1.0)"/>
     </edges>
     <edges xmi:type="notation:Connector" xmi:id="_3u4wgDnVEem5-oyJMXJtFA" type="Association_Edge" source="_xklxcDnVEem5-oyJMXJtFA" target="_uf2PUB5QEemmq_cjeiIGww">
       <children xmi:type="notation:DecorationNode" xmi:id="_3u5XkDnVEem5-oyJMXJtFA" type="Association_StereotypeLabel">
@@ -845,6 +875,21 @@
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZUmf0I29EemcPPjkzx166Q" id="(1.0,0.26666666666666666)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_ZUmf0Y29EemcPPjkzx166Q" id="(0.0,0.38461538461538464)"/>
     </edges>
+    <edges xmi:type="notation:Connector" xmi:id="_q02OIOj8EemWx6IYXety0w" type="InterfaceRealization_Edge" source="_Zany8Oj8EemWx6IYXety0w" target="_zXFOUDnLEem5-oyJMXJtFA">
+      <children xmi:type="notation:DecorationNode" xmi:id="_q021Muj8EemWx6IYXety0w" type="InterfaceRealization_StereotypeLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_rYGsMOj8EemWx6IYXety0w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_q021M-j8EemWx6IYXety0w" y="40"/>
+      </children>
+      <children xmi:type="notation:DecorationNode" xmi:id="_q03cQOj8EemWx6IYXety0w" type="InterfaceRealization_NameLabel">
+        <styles xmi:type="notation:BooleanValueStyle" xmi:id="_rYuXQOj8EemWx6IYXety0w" name="IS_UPDATED_POSITION" booleanValue="true"/>
+        <layoutConstraint xmi:type="notation:Location" xmi:id="_q03cQej8EemWx6IYXety0w" y="60"/>
+      </children>
+      <styles xmi:type="notation:FontStyle" xmi:id="_q021MOj8EemWx6IYXety0w"/>
+      <element xmi:type="uml:InterfaceRealization" href="documentstructuretemplate.uml#_JsEMMOj4Eem6Q8pIItgtwQ"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_q021Mej8EemWx6IYXety0w" points="[-260, 280, -643984, -643984]$[-260, 181, -643984, -643984]"/>
+      <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rXb90Oj8EemWx6IYXety0w" id="(0.425531914893617,0.0)"/>
+      <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_rXb90ej8EemWx6IYXety0w" id="(0.11090573012939002,1.0)"/>
+    </edges>
   </notation:Diagram>
   <css:StyleSheetReference xmi:id="_MmlU4B-7EempQZhnl_zCWg" path="/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/custom.css"/>
   <notation:Diagram xmi:id="_7sXNAFYAEemKJasCEBKPhQ" type="PapyrusUMLClassDiagram" name="BodyPartTemplateDiagram" measurementUnit="Pixel">
@@ -2944,7 +2989,7 @@
       </children>
       <styles xmi:type="notation:FontStyle" xmi:id="_qn-kYZmrEemLBLfP25oZSA"/>
       <element xmi:type="uml:Association" href="documentstructuretemplate.uml#_omOJ8FX9EemKJasCEBKPhQ"/>
-      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qn-kYpmrEemLBLfP25oZSA" points="[20, 80, -643984, -643984]$[240, 80, -643984, -643984]"/>
+      <bendpoints xmi:type="notation:RelativeBendpoints" xmi:id="_qn-kYpmrEemLBLfP25oZSA" points="[-20, 60, -643984, -643984]$[120, 60, -643984, -643984]$[120, 80, -643984, -643984]$[240, 80, -643984, -643984]"/>
       <sourceAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1jmkcJmrEemLBLfP25oZSA" id="(1.0,0.2)"/>
       <targetAnchor xmi:type="notation:IdentityAnchor" xmi:id="_1jmkcZmrEemLBLfP25oZSA" id="(0.0,0.19801980198019803)"/>
     </edges>
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.uml b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.uml
index 74dff99..5c58078 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.uml
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/model/documentstructuretemplate.uml
@@ -85,7 +85,13 @@
       <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="_nWOeEB5MEemmq_cjeiIGww" client="_tLqTYB17Eem3fboELVTtYQ" supplier="_pmiT0B5MEemmq_cjeiIGww" contract="_pmiT0B5MEemmq_cjeiIGww"/>
     </packagedElement>
     <packagedElement xmi:type="uml:Class" xmi:id="_f03L4DnLEem5-oyJMXJtFA" name="TableOfContents">
+      <ownedComment xmi:type="uml:Comment" xmi:id="__DSPoOj3Eem6Q8pIItgtwQ" annotatedElement="_f03L4DnLEem5-oyJMXJtFA">
+        <body>This element allows to declare that the generated document will contain a Table of Contents.</body>
+      </ownedComment>
       <ownedAttribute xmi:type="uml:Property" xmi:id="_ikXfEDnLEem5-oyJMXJtFA" name="tocTitle">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_DACZEOj4Eem6Q8pIItgtwQ" annotatedElement="_ikXfEDnLEem5-oyJMXJtFA">
+          <body>This field allows to define the custom title for the table of contents.</body>
+        </ownedComment>
         <type xmi:type="uml:PrimitiveType" href="pathmap://ECORE_METAMODEL_LIBRARY/Ecore.uml#_SeWkisX_EduPJbEsMYXjUQ"/>
         <defaultValue xmi:type="uml:LiteralString" xmi:id="_o4csQDnLEem5-oyJMXJtFA" value="Table Of Contents"/>
       </ownedAttribute>
@@ -823,6 +829,19 @@
       <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="_eKveUJaPEem5SfdtnxxoKw" client="_TMKQ4JaPEem5SfdtnxxoKw" supplier="_e0vMUFX-EemKJasCEBKPhQ" contract="_e0vMUFX-EemKJasCEBKPhQ"/>
       <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="_e32b8JaPEem5SfdtnxxoKw" client="_TMKQ4JaPEem5SfdtnxxoKw" supplier="_R99HIFX-EemKJasCEBKPhQ" contract="_R99HIFX-EemKJasCEBKPhQ"/>
     </packagedElement>
+    <packagedElement xmi:type="uml:Class" xmi:id="_iAWr8Oj3Eem6Q8pIItgtwQ" name="TableOfFigures">
+      <ownedComment xmi:type="uml:Comment" xmi:id="_9VR1sOj3Eem6Q8pIItgtwQ" annotatedElement="_iAWr8Oj3Eem6Q8pIItgtwQ">
+        <body>This element allows to declare that the generated document will contain a Table of Figures.</body>
+      </ownedComment>
+      <ownedAttribute xmi:type="uml:Property" xmi:id="_tmYT4Oj3Eem6Q8pIItgtwQ" name="tofTitle">
+        <ownedComment xmi:type="uml:Comment" xmi:id="_4sGrIOj3Eem6Q8pIItgtwQ" annotatedElement="_tmYT4Oj3Eem6Q8pIItgtwQ">
+          <body>This field allows to define the custom title for the table of figures.</body>
+        </ownedComment>
+        <type xmi:type="uml:PrimitiveType" href="pathmap://ECORE_METAMODEL_LIBRARY/Ecore.uml#_SeWkisX_EduPJbEsMYXjUQ"/>
+        <defaultValue xmi:type="uml:LiteralString" xmi:id="_tmYT4ej3Eem6Q8pIItgtwQ" value="Table Of Figures"/>
+      </ownedAttribute>
+      <interfaceRealization xmi:type="uml:InterfaceRealization" xmi:id="_JsEMMOj4Eem6Q8pIItgtwQ" client="_iAWr8Oj3Eem6Q8pIItgtwQ" supplier="_zXDZIDnLEem5-oyJMXJtFA" contract="_zXDZIDnLEem5-oyJMXJtFA"/>
+    </packagedElement>
     <profileApplication xmi:type="uml:ProfileApplication" xmi:id="_Dwr3IB2KEemmq_cjeiIGww">
       <eAnnotations xmi:type="ecore:EAnnotation" xmi:id="_DwseMB2KEemmq_cjeiIGww" source="http://www.eclipse.org/uml2/2.0.0/UML">
         <references xmi:type="ecore:EPackage" href="pathmap://UML_PROFILES/Ecore.profile.uml#_z1OFcHjqEdy8S4Cr8Rc_NA"/>
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplateFactory.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplateFactory.java
index f9bf010..437614e 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplateFactory.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplateFactory.java
@@ -165,6 +165,16 @@
 	InsertFileTemplate createInsertFileTemplate();
 
 	/**
+	 * Returns a new object of class '<em>Table Of Figures</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @return a new object of class '<em>Table Of Figures</em>'.
+	 * @generated
+	 */
+	TableOfFigures createTableOfFigures();
+
+	/**
 	 * Returns the package supported by this factory.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplatePackage.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplatePackage.java
index eb77e45..793367e 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplatePackage.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/DocumentStructureTemplatePackage.java
@@ -3273,6 +3273,47 @@
 	int INSERT_FILE_TEMPLATE_OPERATION_COUNT = BuiltInTypesPackage.DEFAULT_FILE_REFERENCE_OPERATION_COUNT + 2;
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.TableOfFiguresImpl <em>Table Of Figures</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.TableOfFiguresImpl
+	 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.DocumentStructureTemplatePackageImpl#getTableOfFigures()
+	 * @generated
+	 */
+	int TABLE_OF_FIGURES = 36;
+
+	/**
+	 * The feature id for the '<em><b>Tof Title</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 * @ordered
+	 */
+	int TABLE_OF_FIGURES__TOF_TITLE = DOCUMENT_PART_FEATURE_COUNT + 0;
+
+	/**
+	 * The number of structural features of the '<em>Table Of Figures</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 * @ordered
+	 */
+	int TABLE_OF_FIGURES_FEATURE_COUNT = DOCUMENT_PART_FEATURE_COUNT + 1;
+
+	/**
+	 * The number of operations of the '<em>Table Of Figures</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 * @ordered
+	 */
+	int TABLE_OF_FIGURES_OPERATION_COUNT = DOCUMENT_PART_OPERATION_COUNT + 0;
+
+	/**
 	 * The meta object id for the '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.EClassFilterBehavior <em>EClass Filter Behavior</em>}' enum.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -3281,7 +3322,7 @@
 	 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.DocumentStructureTemplatePackageImpl#getEClassFilterBehavior()
 	 * @generated
 	 */
-	int ECLASS_FILTER_BEHAVIOR = 36;
+	int ECLASS_FILTER_BEHAVIOR = 37;
 
 
 	/**
@@ -4311,6 +4352,29 @@
 	EClass getInsertFileTemplate();
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures <em>Table Of Figures</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @return the meta object for class '<em>Table Of Figures</em>'.
+	 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures
+	 * @generated
+	 */
+	EClass getTableOfFigures();
+
+	/**
+	 * Returns the meta object for the attribute '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures#getTofTitle <em>Tof Title</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @return the meta object for the attribute '<em>Tof Title</em>'.
+	 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures#getTofTitle()
+	 * @see #getTableOfFigures()
+	 * @generated
+	 */
+	EAttribute getTableOfFigures_TofTitle();
+
+	/**
 	 * Returns the meta object for enum '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.EClassFilterBehavior <em>EClass Filter Behavior</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -5229,6 +5293,26 @@
 		EClass INSERT_FILE_TEMPLATE = eINSTANCE.getInsertFileTemplate();
 
 		/**
+		 * The meta object literal for the '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.TableOfFiguresImpl <em>Table Of Figures</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 *
+		 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.TableOfFiguresImpl
+		 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.DocumentStructureTemplatePackageImpl#getTableOfFigures()
+		 * @generated
+		 */
+		EClass TABLE_OF_FIGURES = eINSTANCE.getTableOfFigures();
+
+		/**
+		 * The meta object literal for the '<em><b>Tof Title</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 *
+		 * @generated
+		 */
+		EAttribute TABLE_OF_FIGURES__TOF_TITLE = eINSTANCE.getTableOfFigures_TofTitle();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.EClassFilterBehavior <em>EClass Filter Behavior</em>}' enum.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/TableOfContents.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/TableOfContents.java
index 26520e3..639269b 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/TableOfContents.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/TableOfContents.java
@@ -19,6 +19,10 @@
  * A representation of the model object '<em><b>Table Of Contents</b></em>'.
  * <!-- end-user-doc -->
  *
+ * <!-- begin-model-doc -->
+ * This element allows to declare that the generated document will contain a Table of Contents.
+ * <!-- end-model-doc -->
+ *
  * <p>
  * The following features are supported:
  * </p>
@@ -40,6 +44,9 @@
 	 * there really should be more of a description here...
 	 * </p>
 	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * This field allows to define the custom title for the table of contents.
+	 * <!-- end-model-doc -->
 	 *
 	 * @return the value of the '<em>Toc Title</em>' attribute.
 	 * @see #setTocTitle(String)
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/TableOfFigures.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/TableOfFigures.java
new file mode 100755
index 0000000..6342a47
--- /dev/null
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/TableOfFigures.java
@@ -0,0 +1,67 @@
+/**
+ * Copyright (c) 2019 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:
+ *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.model2doc.emf.documentstructuretemplate;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Table Of Figures</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * This element allows to declare that the generated document will contain a Table of Figures.
+ * <!-- end-model-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures#getTofTitle <em>Tof Title</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.DocumentStructureTemplatePackage#getTableOfFigures()
+ * @model
+ * @generated
+ */
+public interface TableOfFigures extends DocumentPart {
+	/**
+	 * Returns the value of the '<em><b>Tof Title</b></em>' attribute.
+	 * The default value is <code>"Table Of Figures"</code>.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * <!-- begin-model-doc -->
+	 * This field allows to define the custom title for the table of figures.
+	 * <!-- end-model-doc -->
+	 *
+	 * @return the value of the '<em>Tof Title</em>' attribute.
+	 * @see #setTofTitle(String)
+	 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.DocumentStructureTemplatePackage#getTableOfFigures_TofTitle()
+	 * @model default="Table Of Figures" required="true" ordered="false"
+	 * @generated
+	 */
+	String getTofTitle();
+
+	/**
+	 * Sets the value of the '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures#getTofTitle <em>Tof Title</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @param value
+	 *                  the new value of the '<em>Tof Title</em>' attribute.
+	 * @see #getTofTitle()
+	 * @generated
+	 */
+	void setTofTitle(String value);
+
+} // TableOfFigures
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplateFactoryImpl.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplateFactoryImpl.java
index 4ae3fbe..d9406a9 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplateFactoryImpl.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplateFactoryImpl.java
@@ -97,6 +97,8 @@
 			return createTreeListView();
 		case DocumentStructureTemplatePackage.INSERT_FILE_TEMPLATE:
 			return createInsertFileTemplate();
+		case DocumentStructureTemplatePackage.TABLE_OF_FIGURES:
+			return createTableOfFigures();
 		default:
 			throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
@@ -296,6 +298,18 @@
 	 *
 	 * @generated
 	 */
+	@Override
+	public TableOfFigures createTableOfFigures() {
+		TableOfFiguresImpl tableOfFigures = new TableOfFiguresImpl();
+		return tableOfFigures;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
 	public EClassFilterBehavior createEClassFilterBehaviorFromString(EDataType eDataType, String initialValue) {
 		EClassFilterBehavior result = EClassFilterBehavior.get(initialValue);
 		if (result == null)
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplatePackageImpl.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplatePackageImpl.java
index 8d9e57f..1be82c9 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplatePackageImpl.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/DocumentStructureTemplatePackageImpl.java
@@ -66,6 +66,7 @@
 import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.ITemplatePartView;
 import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.InsertFileTemplate;
 import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfContents;
+import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures;
 import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TextDocumentTemplate;
 import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TreeListView;
 
@@ -371,6 +372,14 @@
 	 *
 	 * @generated
 	 */
+	private EClass tableOfFiguresEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
 	private EEnum eClassFilterBehaviorEEnum = null;
 
 	/**
@@ -1446,6 +1455,28 @@
 	 * @generated
 	 */
 	@Override
+	public EClass getTableOfFigures() {
+		return tableOfFiguresEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public EAttribute getTableOfFigures_TofTitle() {
+		return (EAttribute) tableOfFiguresEClass.getEStructuralFeatures().get(0);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
 	public EEnum getEClassFilterBehavior() {
 		return eClassFilterBehaviorEEnum;
 	}
@@ -1610,6 +1641,9 @@
 
 		insertFileTemplateEClass = createEClass(INSERT_FILE_TEMPLATE);
 
+		tableOfFiguresEClass = createEClass(TABLE_OF_FIGURES);
+		createEAttribute(tableOfFiguresEClass, TABLE_OF_FIGURES__TOF_TITLE);
+
 		// Create enums
 		eClassFilterBehaviorEEnum = createEEnum(ECLASS_FILTER_BEHAVIOR);
 	}
@@ -1689,6 +1723,7 @@
 		insertFileTemplateEClass.getESuperTypes().add(theBuiltInTypesPackage.getDefaultFileReference());
 		insertFileTemplateEClass.getESuperTypes().add(this.getILeafSubBodyPartTemplate());
 		insertFileTemplateEClass.getESuperTypes().add(this.getILeafBodyPartTemplate());
+		tableOfFiguresEClass.getESuperTypes().add(this.getDocumentPart());
 
 		// Initialize classes, features, and operations; add parameters
 		initEClass(documentTemplateEClass, DocumentTemplate.class, "DocumentTemplate", IS_ABSTRACT, IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
@@ -1870,6 +1905,9 @@
 
 		initEClass(insertFileTemplateEClass, InsertFileTemplate.class, "InsertFileTemplate", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
 
+		initEClass(tableOfFiguresEClass, TableOfFigures.class, "TableOfFigures", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS); //$NON-NLS-1$
+		initEAttribute(getTableOfFigures_TofTitle(), theEcorePackage.getEString(), "tofTitle", "Table Of Figures", 1, 1, TableOfFigures.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, !IS_ORDERED); //$NON-NLS-1$ //$NON-NLS-2$
+
 		// Initialize enums and add enum literals
 		initEEnum(eClassFilterBehaviorEEnum, EClassFilterBehavior.class, "EClassFilterBehavior"); //$NON-NLS-1$
 		addEEnumLiteral(eClassFilterBehaviorEEnum, EClassFilterBehavior.TYPE_OF);
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/TableOfFiguresImpl.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/TableOfFiguresImpl.java
new file mode 100755
index 0000000..e222618
--- /dev/null
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/impl/TableOfFiguresImpl.java
@@ -0,0 +1,190 @@
+/**
+ * Copyright (c) 2019 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:
+ *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ */
+package org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.DocumentStructureTemplatePackage;
+import org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Table Of Figures</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ * <li>{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.impl.TableOfFiguresImpl#getTofTitle <em>Tof Title</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class TableOfFiguresImpl extends MinimalEObjectImpl.Container implements TableOfFigures {
+	/**
+	 * The default value of the '{@link #getTofTitle() <em>Tof Title</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @see #getTofTitle()
+	 * @generated
+	 * @ordered
+	 */
+	protected static final String TOF_TITLE_EDEFAULT = "Table Of Figures"; //$NON-NLS-1$
+
+	/**
+	 * The cached value of the '{@link #getTofTitle() <em>Tof Title</em>}' attribute.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @see #getTofTitle()
+	 * @generated
+	 * @ordered
+	 */
+	protected String tofTitle = TOF_TITLE_EDEFAULT;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	protected TableOfFiguresImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return DocumentStructureTemplatePackage.Literals.TABLE_OF_FIGURES;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public String getTofTitle() {
+		return tofTitle;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void setTofTitle(String newTofTitle) {
+		String oldTofTitle = tofTitle;
+		tofTitle = newTofTitle;
+		if (eNotificationRequired()) {
+			eNotify(new ENotificationImpl(this, Notification.SET, DocumentStructureTemplatePackage.TABLE_OF_FIGURES__TOF_TITLE, oldTofTitle, tofTitle));
+		}
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public Object eGet(int featureID, boolean resolve, boolean coreType) {
+		switch (featureID) {
+		case DocumentStructureTemplatePackage.TABLE_OF_FIGURES__TOF_TITLE:
+			return getTofTitle();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void eSet(int featureID, Object newValue) {
+		switch (featureID) {
+		case DocumentStructureTemplatePackage.TABLE_OF_FIGURES__TOF_TITLE:
+			setTofTitle((String) newValue);
+			return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public void eUnset(int featureID) {
+		switch (featureID) {
+		case DocumentStructureTemplatePackage.TABLE_OF_FIGURES__TOF_TITLE:
+			setTofTitle(TOF_TITLE_EDEFAULT);
+			return;
+		}
+		super.eUnset(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public boolean eIsSet(int featureID) {
+		switch (featureID) {
+		case DocumentStructureTemplatePackage.TABLE_OF_FIGURES__TOF_TITLE:
+			return TOF_TITLE_EDEFAULT == null ? tofTitle != null : !TOF_TITLE_EDEFAULT.equals(tofTitle);
+		}
+		return super.eIsSet(featureID);
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 *
+	 * @generated
+	 */
+	@Override
+	public String toString() {
+		if (eIsProxy()) {
+			return super.toString();
+		}
+
+		StringBuilder result = new StringBuilder(super.toString());
+		result.append(" (tofTitle: "); //$NON-NLS-1$
+		result.append(tofTitle);
+		result.append(')');
+		return result.toString();
+	}
+
+} // TableOfFiguresImpl
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateAdapterFactory.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateAdapterFactory.java
index 5c34030..2ecda52 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateAdapterFactory.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateAdapterFactory.java
@@ -265,6 +265,11 @@
 		}
 
 		@Override
+		public Adapter caseTableOfFigures(TableOfFigures object) {
+			return createTableOfFiguresAdapter();
+		}
+
+		@Override
 		public Adapter caseIFileReference(IFileReference object) {
 			return createIFileReferenceAdapter();
 		}
@@ -837,6 +842,21 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures <em>Table Of Figures</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 *
+	 * @return the new adapter.
+	 * @see org.eclipse.papyrus.model2doc.emf.documentstructuretemplate.TableOfFigures
+	 * @generated
+	 */
+	public Adapter createTableOfFiguresAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.papyrus.model2doc.core.builtintypes.IFileReference <em>IFile Reference</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateSwitch.java b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateSwitch.java
index 409dcfc..be6a14a 100755
--- a/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateSwitch.java
+++ b/plugins/emf/org.eclipse.papyrus.model2doc.emf.documentstructuretemplate/src-gen/org/eclipse/papyrus/model2doc/emf/documentstructuretemplate/util/DocumentStructureTemplateSwitch.java
@@ -571,6 +571,17 @@
 			}
 			return result;
 		}
+		case DocumentStructureTemplatePackage.TABLE_OF_FIGURES: {
+			TableOfFigures tableOfFigures = (TableOfFigures) theEObject;
+			T result = caseTableOfFigures(tableOfFigures);
+			if (result == null) {
+				result = caseDocumentPart(tableOfFigures);
+			}
+			if (result == null) {
+				result = defaultCase(theEObject);
+			}
+			return result;
+		}
 		default:
 			return defaultCase(theEObject);
 		}
@@ -1189,6 +1200,23 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Table Of Figures</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 *
+	 * @param object
+	 *                   the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Table Of Figures</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T caseTableOfFigures(TableOfFigures object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>IFile Reference</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
