diff --git a/doc/5.1.x/Glossary.html b/doc/5.1.x/Glossary.html
new file mode 100644
index 0000000..b4927d2
--- /dev/null
+++ b/doc/5.1.x/Glossary.html
@@ -0,0 +1,84 @@
+<?xml version='1.0' encoding='utf-8' ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <title>Glossary</title>
+    <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+    <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+  </head>
+  <body>
+    <h1 id="Glossary" class="page-header">Glossary</h1>
+
+    <p>This document provides definitions for the technical terms and concepts used in
+      Sirius, and in particular in the rest of this documentation.</p><p>For concepts
+      which concern end-users, it assumes some basic knowledge of Eclipse terminology. If
+      you are not familiar with it, please refer to the Eclipse documentation itself. For
+      concepts targeted to specifier (and developers), it also assumes knowledge of EMF
+      and relegated technologies (including Java for developers). Again, refer to the
+      documentation of these frameworks or tools as needed.</p>
+
+  <dl>
+    <dt id="Dialect">Dialect</dt>
+    <dd>A kind of representation supported by Sirius. Out of the box, Sirius
+      supports three dialects: diagrams, tables, and trees. Sequence diagrams and
+      cross-tables, which are special kinds of diagrams (resp. tables) can also be though
+      of as dialects, although technically they are not.</dd>
+
+    <dt id="ModelingProject">Modeling Project</dt>
+    <dd>A special kind of project in your workspace which makes it easy to manipulate
+      representation files and semantic models in a consistent way.</dd>
+
+    <dt id="Representation">Representation</dt>
+    <dd>A particular diagram, table, or tree which you created on your semantic model. It
+      is simply a more general term than &#171;diagram&#187; which is also usable for
+      other dialects.</dd>
+
+    <dt id="RepresentationFile">Representation File</dt>
+    <dd>A file in which Sirius stores all informations related to which representations you created,
+      what appears on them, the positions and colors of the elements, etc. This files have a
+      <code>.aird</code> extension (typically <code>representations.aird</code>).
+      Representation files reference the semantic model(s) they contain representations
+      for, but you semantic models are kept unaware (and unpolluted) of any
+      Sirius-specific data.</dd>
+
+    <dt id="Resource">Resource</dt>
+    <dd>A generic term for a file (in your workspace or inside a plug-in) which contains a
+      model. The file extension (e.g. <code>.uml</code>) indicates what kind of semantic
+      model it contains.</dd>
+
+    <dt id="SemanticModel">Semantic Model</dt>
+    <dd>The model (or models) which contains your business data. It can be stored in one
+      of several resources (files) which can reference each other. The type of semantic
+      model can be different for each user. It can be based on a standard (for
+      example <code>.uml</code> files for UML models) or based on a <em>Domain Specific Model</em>
+      (sometimes called <em>Domain Specific Language</em>) which was specially
+      created for your needs.</dd>
+    
+    <dt id="Viewpoint">Viewpoint</dt>
+    <dd>A set of consistent representation descriptions which provide a specific point of
+      view on some kind of semantic model. For example we could have a <em>UML Structural</em>
+      viewpoint, which describes the sub-set of all the standard UML
+      diagrams which deal only with structural aspects of UML models (as opposed to
+      behavioral or requirements aspects). Viewpoints are defined in
+      <em>Viewpoint Specification Models</em> and packaged as Eclipse plug-ins. Once you install such a
+      plug-in, the viewpoints it defines will be available to you (with all the representations
+      they define) on all compatible semantic models.</dd>
+    
+    <dt id="VSM_">VSM</dt>
+    <dd>See <a href="#VSM">Viewpoint Specification Model</a>.</dd>
+
+    <dt id="VSM">Viewpoint Specification Model</dt>
+    <dd>The model, stored in resources with the <code>.odesign</code> extension, in which an architect
+      defines and configures viewpoints and their associated representations.</dd>
+
+    <dt id="VSP_">VSP</dt>
+    <dd>See <a href="#VSP">Viewpoint Specification Project</a>.</dd>
+
+    <dt id="VSP">Viewpoint Specification Project</dt>
+    <dd>An Eclipse plug-in project which contains a <a href="#VSM">VSM</a> and registers it using the
+      proper extension point so that it can be deployed correctly.</dd>
+  </dl>
+  
+  </body>
+</html>
diff --git a/doc/5.1.x/Release_Notes.html b/doc/5.1.x/Release_Notes.html
new file mode 100644
index 0000000..8ab17e1
--- /dev/null
+++ b/doc/5.1.x/Release_Notes.html
@@ -0,0 +1,2179 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Release_Notes</title>
+		<link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="ReleaseNotesforSirius">Release Notes for Sirius</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#ReleaseNotesforSirius">Release Notes for Sirius</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges2">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius5.0.1">Changes in Sirius 5.0.1</a>
+					</li>
+					<li>
+						<a href="#sirius5.0.0">Changes in Sirius 5.0.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges3">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges3">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius4.1.2">Changes in Sirius 4.1.2</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges4">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius4.1.1">Changes in Sirius 4.1.1</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges5">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius4.1.0">Changes in Sirius 4.1.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges6">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius4.0.0">Changes in Sirius 4.0.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges7">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges7">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<p>This document contains the release notes for recent major releases of Sirius. See also 
+			<a href="Release_Notes_Previous.html">the release notes from previous versions</a> for details about older releases.
+		</p>
+		<h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
+		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-info">Modified</span> When exporting a diagram as an image, it is now possible to choose an image size level. Before this, a preference called 
+				<em>AutoScale</em> was available and when it was enable, the diagram was scaled to the maximum size safely allowed by the system. Now, a new preference named 
+				<em>Size of exported images</em> is available in the 
+				<em>Sirius &gt; Sirius Diagram</em> preference page and offer this possibility. Setting size to 
+				<em>Max</em> generates same diagrams as by using the previous preference 
+				<em>AutoScale</em>. This can produce image with big size in long generation time. If 
+				<em>Size of exported images</em> is set to level 
+				<em>Nominal</em>, diagram will be exported with nominal size (quality will be lower but export time will be shorter). This new preference allows you to choose the tradeoff you want. The 
+				<a href="user/diagrams/Diagrams.html#Exportingimages">user documentation </a> details this change with an example. 
+			</li>
+			<li><span class="label label-info">Modified</span> The "
+				<em>Auto Size</em>" action can now be applied on region container. Before that, the action was available only for regions.
+			</li>
+			<li><span class="label label-info">Modified</span> The "
+				<em>Make Same Size</em>" action can now be applied on region container. If selected region containers have the same number of regions, the regions will have the same size. If the region container used for reference has more regions than the other(s), the last region of others will have the size of all remaining regions in the one used for reference.
+			</li>
+			<li><span class="label label-info">Modified</span> In diagrams, the selection by drawing a rectangle on container (using ALT key) now has the same behaviors than selection by drawing a rectangle on the diagram&#8217;s background. You can refer to 
+				<em>Selection</em> section of the 
+				<a href="user/diagrams/Diagrams.html#standardToolId">Standard Tools</a> chapter for more details on this tool.
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-danger">Removed</span> Since Sirius 5.0.0, 
+				<code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> is not used anymore to provide a tooltip on diagram element decorations defined in the VSM. The tooltip is defined directly with an interpreted expression on 
+				<code>GenericDecorationDescription</code>, 
+				<code>MappingBasedDecoration</code> and 
+				<code>SemanticBasedDecoration</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.of(EObject)</code> has been added to provide an easy way to get the 
+				<code>SiriusReferenceFinder</code> from an 
+				<code>EObject</code> in the Sirius 
+				<code>Session</code>. 
+			</li>
+			<li><span class="label label-info">Modified</span> (experimental) The method 
+				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.getReferencingSiriusElements(Collection&lt;EObject&gt;, SearchScope)</code>. The SearchScope.LOADED_REPRESENTATIONS_SCOPE scope covers the search and result scope. Then, no additional resource will be loaded using this scope.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-warning">Deprecated</span> Preference 
+				<code>PREF_SCALE_DIAGRAMS_ON_EXPORT</code> from 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code> is now deprecated. User should use new preference 
+				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>: 
+				<code>PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>.
+			</li>
+			<li><span class="label label-success">Added</span> A new attribute 
+				<code>margin</code> has been added in 
+				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult</code>. This attribute indicates what margin has been used to produce a white frame during diagram export. This attribute is available from the getter 
+				<code>getMargin()</code>. A new constructor is also available to pass on the margin 
+				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult.DiagramExportResult(DDiagram, double, int, Collection&lt;IPath&gt;)</code>. 
+			</li>
+			<li><span class="label label-info">Modified</span> If you previously override the default Sirius value for 
+				<code>SiriusDiagramUiPreferencesKeys.PREF_SCALE_DIAGRAMS_ON_EXPORT</code>, you must replace this override by an override of the new preference 
+				<code>SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>. Example: 
+			</li>
+		</ul>
+		<pre>SiriusEditPlugin.getPlugin().getPreferenceStore().setDefault(SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT.name(),0); 
+
+</pre>
+		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A new preference has been added to 
+				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>: 
+				<code>PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT</code>. It is used to control the scaling level behavior when exporting diagrams. Refer to the JavaDoc for the details. 
+			</li>
+			<li><span class="label label-success">Added</span> The type 
+				<code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling level to use for diagram export. It is defined by an integer type. Refer to the JavaDoc for details on its meaning.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>SiriusTestCase.loadModeler(URI, EditingDomain)</code> allows to load the VSM at the specified URI and register all its Viewpoints in the current testcase. There is a new method, 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase.loadModeler(URI, EditingDomain, boolean)</code>, to allow to load the VSM at the specified URI without registering its viewpoints. It can be useful to load a VSM for an editing domain of another session than the current session of the
+			</li>
+		</ul>
+		<p>testcase.</p>
+		<h2 id="sirius5.1.0">Changes in Sirius 5.1.0</h2>
+		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> When exporting a diagram as an image, it is now possible to choose whether or not the diagram should be scaled. If disabled, the diagram will be exported with its normal size (equivalent to a 100% zoom level). If auto-scaling is enabled, the diagram will be scaled to the maximum size safely allowed by the system (this can be different on different OSes). Note that when auto-scaling is enabled, the image files produced may be larger than without. When exporting very large diagrams it is also possible that the diagram will be scaled 
+				<em>down</em> (i.e. with a zoom level smaller than 100%). Enabling auto-scaling can be chosen on a case by case basis from the export dialog; the initial value in the dialog can be controlled by a new preference available in the 
+				<em>Sirius &gt; Sirius Diagram</em> preference page.
+			</li>
+			<li><span class="label label-success">Added</span> The end user can now 
+				<a href="user/diagrams/Diagrams.html#RemoveBendpoints">remove all bend-points</a> on rectilinear edges. It was only possible on oblique edges before. This action is available on edge context menu &#8220;Remove Bend-points&#8221; or by using the shortcut &#8220;Ctrl&#8221; + &#8220;Shift&#8221; + &#8220;-&#8221;. If number of bend-points can not be reduced, remove action will be inefficient.
+			</li>
+			<li><span class="label label-success">Added</span> The status Synchronized/Unsynchronized of the diagram is now displayed in the status bar when the diagram editor has the focus or can be directly displayed 
+				<a href="user/diagrams/Diagrams.html#synchronized_diagram">in the diagram</a> with a decorator.
+			</li>
+			<li><span class="label label-success">Added</span> The user now have a drop down menu in the tabbar with all available straighten to edge actions. </li>
+			<li><span class="label label-success">Added</span> Straighten to actions on edge are now available even if the selection contains incompatible elements (edge labels for example). Their execution affects only compatible edges.</li>
+			<li><span class="label label-success">Added</span> Four new straighten actions are available (with top pinned, with bottom pinned, with left pinned, with right pinned) and allow to straighten edges from the opposed straightening axis point of view.</li>
+			<li><span class="label label-info">Modified</span> In a diagram, when selecting an edge or a node that are not fully displayed in the editor, now, the reveal is not done anymore, that is, the displayed content of the editor is not moved anymore. If the user want to fully see the selected element, he may drag the editor content using center mouse button. </li>
+			<li><span class="label label-info">Modified</span> In a diagram with 
+				<em>snapToGrid</em> enabled:
+				<ul>
+					<li>When performing a drag and drop from the model explorer or a palette tool to the diagram, the new created element is now snapped to the grid.</li>
+					<li>When performing an 
+						<em>Arrange all</em> or an 
+						<em>Arrange Linked Border Node</em> action, all diagram elements are now snapped to the grid.
+					</li>
+					<li>When performing a drag and drop or a tool that will create multiple elements, all created elements are still visible but now snapped to the grid. </li>
+					<li>When creating an edge with a tool that also create the associated border nodes, the border nodes are now snapped near the click location. Before, they were created to respect a shortest path.</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="./images/borderNodesWithSnapToGrid.png"/> 
+		</p>
+		<ul>
+			<li><span class="label label-info">Modified</span> In a sequence diagram, it is now possible to resize the combined fragment when the first or the last operand is selected (increase the size of the first operand to the top, or increase the size of the last operand to the bottom). Before, it was necessary to select the combined fragment itself to resize it. </li>
+			<li><span class="label label-info">Modified</span> In a sequence diagram, it is now possible to resize an 
+				<em>Execution</em> contained in an 
+				<em>Operand</em> without previously resize its 
+				<em>Operand</em> if more space is needed. The 
+				<em>Operand</em>, and if necessary the 
+				<em>Combined Fragment</em>, is resized too.
+			</li>
+			<li><span class="label label-info">Modified</span> In a diagram, the action 
+				<em>Show/Hide label</em> is now visible even if the selection contains invalid elements (ie elements without label). The action is applied only on valid elements of the selection.
+			</li>
+			<li><span class="label label-info">Modified</span> In a diagram, the Line Style actions (Tree, Oblique or Rectilinear Routing Style) is now visible in the contextual menu even if the selection contains invalid elements (other elements than edges). The action is applied only on valid elements of the selection.</li>
+			<li><span class="label label-info">Modified</span> When an user defines a custom bundled image shape for a figure (
+				<a href="developer/extensions-provide_custom_bundled_image_shape.html#bundleImageShape">bundleImageShape</a> ), opening or refreshing a diagram will not display exception anymore when the bundleImageShape extension is not valid. A warning is now displayed in the Error Log view to inform user of which attribute of the extension is not correct.
+			</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> An 
+				<a href="./user/general/Modeling%20Project.html#Migration">automatic migration</a> has been added in this version to fix diagram with edge labels corrupted (see 
+				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). Contrary to all previous migrations, this one logs an information in the 
+				<em>Error Log</em> view to inform how many labels have been fixed in concerned diagrams. If detected as &#8220;corrupted label&#8221;, the label is reset to its default location (as if you launch the &#8220;Snap Back&#8221; action of it). If at least one label is detected as &#8220;corrupted label&#8221;, the layout is also potentially corrupted (nodes, children of the diagram, with x or y coordinate very big). In this case, the concerned nodes are moved near 5000 (or -5000) as new coordinate. A message is added in this case: 
+				<em>Some nodes have also been moved as the layout of this diagram is corrupted. A Reset Origin and/or manual layout is probably needed for this diagram.</em> The rules applied to detect a corrupted label are the following:
+				<ul>
+					<li>If the label is less than 250 pixels away from the reference point on its corresponding edge, the label is not considered as distant.</li>
+					<li>If the label is more than 1000 pixels away from the reference point on its corresponding edge, the label is considered as distant.</li>
+					<li>Between these 2 limits, the label is considered as distant if the distance between the center of the label and the edge is higher than &#8220;four times the size of the nearest segment&#8221;.</li>
+				</ul>
+			</li>
+			<li><span class="label label-info">Modified</span> In manual refresh mode (
+				<em>Automatic Refresh</em> Sirius preference disabled), when the 
+				<em>Force Refresh</em> option of a tool is enabled in your VSM, only the current representation is refreshed when the tool is applied. Before this version, all open representations were refreshed.
+			</li>
+			<li><span class="label label-info">Modified</span> The filtering expression variables available in the properties view definition in the &#8216;Extends&#8217; tab were renamed to match the following pattern: featureName+&#8216;Description&#8217;.</li>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Reference Name</em> field of 
+				<em>Create instance</em> completion will display only features with a consistent type with the one specified in 
+				<em>Type Name</em> field (if a type has been specified).
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Type Name</em> field of 
+				<em>Create instance</em> completion will display only types consistent with the feature type specified in 
+				<em>Reference Name</em> field (if a valid feature has been specified).
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+		<h4 id="Migrations">Migrations</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge labels corrupted (see 
+				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
+				<em>12.1.0.201706291600</em>.
+			</li>
+			<li><span class="label label-success">Added</span> A new class 
+				<code>org.eclipse.sirius.ext.gmf.runtime.gef.ui.figures.SiriusDefaultSizeNodeFigure</code> has been added in plugin 
+				<code>org.eclipse.sirius.ext.gmf.runtime</code>. The goal of the class is to workaround a 
+				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=519250">GMF bug</a>. So if you have created class which inherits from 
+				<code>org.eclipse.gmf.runtime.gef.ui.figures.DefaultSizeNodeFigure</code>, you must now use the new 
+				<code>SiriusDefaultSizeNodeFigure</code> instead.
+			</li>
+			<li><span class="label label-success">Added</span> A migration has been added to add an 
+				<code>uid</code> to all instances of type DRepresentation. This 
+				<code>uid</code> is used to reference the DRepresentation from the DRepresentationDescriptor. 
+				<code>DRepresentationDescriptor.repPath</code> has been changed to have 
+				<code>uid</code> as fragment. The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
+				<em>12.1.0.201707281200</em>.
+			</li>
+			<li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge bend-points corrupted (see 
+				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=519044">bugzilla #519044</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
+				<em>12.1.0.201708031200</em>.
+			</li>
+		</ul>
+		<h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
+		<p>See 
+			<a href="i18n_changes.html#sirius51">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
+		</p>
+		<h4 id="replazyloading">Representations lazy loading (experimental).</h4>
+		<p>A new mode (currently experimental) is available to load representations on demand and not during session opening. This feature implies to serialize Sirius representations in separate resources. This mode can be activated by setting the system property 
+			<code>createLocalRepresentationInSeparateResource</code> at true. For more detail, see the developer documentation: 
+			<a href="./developer/representations_lazy_loading.html">Representations lazy loading (experimental)</a>.
+		</p>
+		<h4 id="Changesinorg.eclipse.sirius2">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A new convenience static method has been added on the 
+				<code>org.eclipse.sirius.business.api.session.Session</code> interface to retrieve the session an arbitrary 
+				<code>EObject</code> is part of: 
+				<code>Optional&lt;Session&gt; s = Session.of(myObject);</code>. It returns a 
+				<code>java.util.Optional&lt;Session&gt;</code> so all the usual patterns apply, e.g. 
+				<code>Session.of(obj).ifPresent(s -&gt; doSomething(s));</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.isLoadedRepresentation()</code> has been added to know if the representation linked with this {@link DRepresentationDescriptor} is loaded. By default, all representations are held in the same resource than the DRepresentationDescriptor, in that case the method will always return true.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.allAnalyses()</code> has been added in the interface to reflect the already existing 
+				<code>org.eclipse.sirius.business.internal.session.danalysis.DAnalysisSessionImpl.allAnalyses()</code> implementation.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager.getLoadedRepresentations(EObject, Session)</code> has been added to get all loaded representations in the given session with the given EObject as target.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllLoadedRepresentations(Session)</code> has been added to get all loaded representations in the given session.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.REPRESENTATIONS_FOLDER_NAME</code> constant has been added. This is the default folder where representations file (*.srm) are located if the system property &#8220;createLocalRepresentationInSeparateResource&#8221; is set at true.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.shouldDeleteRepresentation(Set&lt;DRepresentationDescriptor&gt;)</code> has been added to be called when the user interface should prompt for a choice about the representation deletion.
+			</li>
+			<li><span class="label label-success">Added</span> (experimental) The new API 
+				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder</code> and 
+				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getSiriusReferenceFinder()</code> method to get it have been added. This API allows getting the DRepresentations or DRepresentationElements that reference the provided semantic object. It also allows getting the DRepresentationDescriptor which associated DRepresentation is or contains elements that reference the provided semantic object. This API will be useful for 
+				<a href="#replazyloading">representation lazy loading</a> as it may, in the future, not need to load all not yet loaded representations. For now, the use of this API will load all not loaded representations.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentationDescriptors(EObject, Session)</code> has been moved to 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllRepresentationDescriptors(Session)</code> has been moved to 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentationDescriptors(RepresentationDescription, Session)</code> has been moved to 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The implementations of 
+				<code>getRepresentationDescriptors(EObject, Session)</code>, 
+				<code>getAllRepresentationDescriptors(Session)</code> and 
+				<code>getRepresentationDescriptors(RepresentationDescription, Session)</code> have been removed from 
+				<code>AbstractRepresentationDialectServices</code>. They are implemented in 
+				<code>DialectManagerImpl</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentations(EObject, Session)</code> has been moved to 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getAllRepresentations(Session)</code> has been moved to 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRepresentations(RepresentationDescription, Session)</code> has been moved to 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+			</li>
+			<li><span class="label label-danger">Removed</span> The implementations of 
+				<code>getRepresentations(EObject, Session)</code>, 
+				<code>getAllRepresentations(Session)</code> and 
+				<code>getRepresentations(RepresentationDescription, Session)</code> have been removed from 
+				<code>AbstractRepresentationDialectServices</code>. They are implemented in 
+				<code>DialectManagerImpl</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer.setEObjectToBeIgnored(Predicate&lt;EObject&gt;)</code> has  been added to filter inverse references to prevent some references resolution.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.common.tools.api.util.WorkspaceUtil.getFilesFromWorkspace(Collection&lt;IProject&gt;, String)</code> signature has been modified in 
+				<code>getFilesFromWorkspace(Collection&lt;IContainer&gt;, String)</code> to be more generic.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A new query has been added in 
+				<code>org.eclipse.sirius.diagram.business.api.query.DDiagramQuery</code>. This query, 
+				<code>getAllActivatedLayers</code>, returns all the activated layers (transient or not) of the given diagram. It should replace 
+				<code>DDiagram.getActivatedLayers</code> in several cases if you directly use it.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> Three new preferences have been added to 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>: 
+				<code>PREF_SCALE_DIAGRAMS_ON_EXPORT</code>, 
+				<code>PREF_MAXIMUM_EXPORT_BUFFER_SIZE</code>, 
+				<code>PREF_MAXIMUM_EXPORT_BUFFER_SIZE_WINDOWS</code>. They are used to control the auto-scaling behavior when exporting diagrams. Refer to the JavaDoc for the details.
+			</li>
+			<li><span class="label label-success">Added</span> In 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code>, two new methods have been added:
+				<ul>
+					<li>
+						<code>setAllowDownScaling(boolean)</code>: when auto-scaling is enabled (which is controlled by the already existing 
+						<code>setAutoScalingEnabled()</code>), this is used to control if down-scaling is allowed or not. 
+					</li>
+					<li>
+						<code>getScalingFactor()</code>: after the export has been performed, this can be used to obtain the scaling factor that was effectively used.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.diagram.ui.business.api.DiagramExportResult</code> has been added, which inherits from 
+				<code>ExportResult</code>. It is returned by the 
+				<code>DialectManager.exportWithResult()</code> methods when the representation exported is a diagram, and in addition to the information provided by 
+				<code>ExportResult</code> gives access to the scaling factor that was used when exporting the diagram.
+			</li>
+			<li><span class="label label-success">Added</span> The new preference 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys.PREF_SHOW_SYNCHRONIZE_STATUS_DECORATOR</code> has been added to say if the 
+				<a href="user/diagrams/Diagrams.html#synchronized_diagram">synchronize status</a> decorator must be shown or not.
+			</li>
+			<li><span class="label label-success">Added</span> A new method 
+				<code>checkShapesIntersect()</code> has been added in 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionEditPartQuery</code> to check if source and target of the connection intersect (only intersect &#8211; not one contained in another).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.emf.edit">Changes in 
+			<code>org.eclipse.sirius.ext.emf.edit</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> does not use 
+				<code>Collection</code> anymore as return type or parameter type in its services. 
+				<code>java.util.Collection</code> has been replaced by 
+				<code>java.util.List</code>. As mentioned in the 
+				<a href="./specifier/general/Writing_Queries.html#service_methods">specifier documentation</a>, it is recommended to use List or Set instead of Collection in java services signature.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> In 
+				<code>org.eclipse.sirius.ui.tools.api.dialogs.AbstractExportRepresentationsAsImagesDialog</code> a new method 
+				<code>isAutoScaleDiagram()</code> has been added to indicate (once the dialog has been closed) if the user has requested to enable auto-scaling on diagram export. 
+			</li>
+			<li><span class="label label-success">Added</span> In 
+				<code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction</code>, a new method 
+				<code>setAutoScaleDiagram(boolean)</code> to ask for automatic scaling of diagrams on export.
+			</li>
+			<li><span class="label label-success">Added</span> In 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices</code>, two new methods 
+				<code>exportWithResult()</code> have been added. They are equivalent to the existing 
+				<code>export()</code> methods (which return 
+				<code>void</code>) except that they return an instance of the new type 
+				<code>org.eclipse.sirius.ui.business.api.dialect.ExportResult</code>. This gives access to the list of all the actual files produced by the export operation. Note that in the case of the diagram dialect, 
+				<code>exportWithResult()</code> actually returns a more specific 
+				<code>DiagramExportResult</code> with additional diagram-specific information.
+			</li>
+			<li><span class="label label-success">Added</span> The type 
+				<code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling policy to use for diagram. It is defined by a new enumerated type 
+				<code>ExportFormat.ScalingPolicy</code> which can have four different values: 
+				<code>WORKSPACE_DEFAULT</code>, 
+				<code>AUTO_SCALING</code>, 
+				<code>NO_SCALING</code>, 
+				<code>AUTO_SCALING_IF_LARGER</code>. Refer to the JavaDoc for details on their meanings.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.wizards.CreateEMFModelWizard</code> is a new wizard that can be invoked to create instances of any metamodel. It will ask the end-user for a metamodel (
+				<code>EPackage</code>), a concrete type to instanciate as root element, and finally the local path of the file to create. See the class Javadoc for sample usage. Note that the first two pages of the wizard (EPackage and root type selection) can be customized through the 
+				<code>org.eclipse.sirius.common.package_meta_data</code> extension point to provide user-oriented name and documentation for an EPackage, and to suggest specific EClasses as good root candidates.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.shouldDeleteRepresentation(Set&lt;DRepresentationDescriptor&gt;)</code> default implementation has been added to prompt the confirm dialog.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.SessionEditorInput(URI, URI, String, Session)</code> has been added to provide the 
+				<code>DRepresentationDescriptor</code> URI to retrieve the 
+				<code>DRepresentation</code> from the 
+				<code>DRepresentationDescriptor.getRepresentation()</code> method instead of performing a direct load.
+			</li>
+			<li><span class="label label-info">Modified</span> The org.eclipse.sirius.ui.tools.api.assist.TextContentProposalProvider.getSelectedElement() method is now protected instead of private to let sub-classes retrieving the selected element.</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui.editor">Changes in 
+			<code>org.eclipse.sirius.ui.editor</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> New classes have been added in package 
+				<code>org.eclipse.sirius.ui.editor.api.pages</code>. They are the following: 
+				<code>AbstractSessionEditorPage</code>, 
+				<code>PageProvider</code>, 
+				<code>PageUpdateCOmmand</code>, 
+				<code>PositioningKind</code>, 
+				<code>PageUpdateCommandFactory</code>. These classes allow to provide custom pages to session editor instances.
+			</li>
+			<li><span class="label label-success">Added</span> An extension point 
+				<code>org.eclipse.sirius.ui.editor.sessionEditorPageProvider</code> has been added to allow custom page providing for session editor instances.
+			</li>
+		</ul>
+		<h2 id="sirius5.0.1">Changes in Sirius 5.0.1</h2>
+		<p>Sirius 5.0.1 is a maintenance release with only bugfixes and small tweaks to the UI of 
+			<a href="user/general/Aird_Editor.html">the aird editor</a>.
+		</p>
+		<h2 id="sirius5.0.0">Changes in Sirius 5.0.0</h2>
+		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> An new 
+				<em>aird editor</em> is available on 
+				<em>.aird</em> files. It provides an alternative, form-based GUI to visualize and manipulate sirius sessions which is not tied to the Modeling perspective or Model Explorer view. See 
+				<a href="user/general/Aird_Editor.html">the editor&#8217;s documentation</a> for more details.
+			</li>
+			<li><span class="label label-info">Modified</span> The label alignment of Notes from the Palette has been modified from Juno to Luna or newer versions of Eclipse. The label alignment had changed from 
+				<em>TOP</em> &amp; 
+				<em>CENTER</em> to 
+				<em>MIDDLE</em> &amp; 
+				<em>LEFT</em> (respectively). The initial alignment (
+				<em>TOP</em> &amp; 
+				<em>CENTER</em>) has been restored. This is done with an 
+				<a href="./user/general/Modeling%20Project.html#Migration">automatic migration</a> of the aird file.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Export diagram as images</em> action now adatps the output resolution based on the diagram size. This leads to better resolution for small to medium diagrams (and also bigger file) and to an operation which is no longer failing with out of memory errors in case of very big diagrams.
+			</li>
+			<li><span class="label label-info">Modified</span> The &#8220;straighten to&#8221; actions previously had a limitation concerning overlap detection. This is no longer the case. The previous known limitation has been removed from the documentation (
+				<i>In case of multi-selection, the overlap check is done in the current context of existing border nodes and not in the context of location of border nodes after each straighten edges.</i>).
+			</li>
+			<li><span class="label label-info">Modified</span> Decorators on diagram elements are drawn on top of other figures. If there is an overlap between a decorator of a figure A and another figure B that is over figure A, when user clicks on the decorator, the figure B is now selected (before it was the parent figure A).</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> It is now possible to automatically create one or several pre-configured widget(s) in a group if its domain class and if the meta-models of the properties view containing it have been specified. The widget(s) created will be infered from the features in the domain class (e.g. a properly configured 
+				<em>Checkbox</em> widget will be created for boolean attributes).
+			</li>
+			<li><span class="label label-success">Added</span> Property Views definitions now support extending and overriding Properties View Descriptions without modifying the original. See 
+				<a href="specifier/properties/Properties_View_Description.html#extensibility_features">the documentation</a> for details.
+			</li>
+			<li><span class="label label-success">Added</span> New model operations are available. You can now open a 
+				<a href="specifier/general/Model_Operations.html#dialog">dialog</a> or a 
+				<a href="specifier/general/Model_Operations.html#wizard">wizard</a> thanks to new dedicated model operations leveraging the Properties View language. You can also create new variable with the new 
+				<em>Let</em> model operation, see its 
+				<a href="specifier/general/Model_Operations.html#let">documentation</a> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> In Property Views definitions, you can now create 
+				<em>Toolbar Actions</em> on pages and groups in order to define small buttons in their toolbars.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<em>Buttons</em> and 
+				<em>Widget Actions</em> can now use an image along with a label thanks to the new 
+				<em>Image expression</em>.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to execute some behavior when the end users will click on the 
+				<em>Reference Widget</em> thanks to the addition of an 
+				<em>Initial Operation</em>.
+			</li>
+			<li><span class="label label-success">Added</span> You can indicate that a 
+				<em>Dynamic Mapping For</em> should force the refresh of the user interface with the 
+				<em>Force Refresh</em> property.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<em>Categories</em> have been added in order to organize the pages and groups of the 
+				<em>Properties</em> DSL.
+			</li>
+			<li><span class="label label-info">Modified</span> The notion of transient layer has been introduced in Sirius 5.0. (Refer to 
+				<a href="specifier/diagrams/Diagrams.html#Transientlayer">Sirius Specifier</a> and 
+				<a href="user/diagrams/Diagrams.html#transientLayer">Sirius User</a> documentation in Diagram chapter). A transient layer is an additional layer containing only decorations or tools. If you have such layer in your VSM, users may encounter some unexpected behaviors. If the layer is not 
+				<em>active by default</em>, its activation state will not be persisted at session close. In other words, if a transient layer is enabled in a diagram and then the session is closed, at the next diagram opening, the layer will be disabled. If users have existing representations file, made with previous version, with such kind of layers activated, they will no longer enabled at the next opening in Sirius 5.0.0. If the layer is 
+				<em>active by default</em> then it will be automatically applied when opening your diagram. We consider this behavior as a known limitation and an enhancement may be done in a further release. In the meantime, there is a workaround which consists to add a fake mapping (that is any mapping with its fields empty) so that the layer will not be considered as transient.
+			</li>
+			<li><span class="label label-info">Modified</span> The tab used to configure the metamodels used by the Properties view description is now using the same interface as the metamodels tab used to configure the representations.</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>package::Class</code> syntax for domain classes and type names in the VSM is now fully supported and the new default. It means this syntax is interpreted by Sirius and completion is provided for it when the first 
+				<code>:</code> character is entered. The legacy syntax 
+				<code>package.Class</code> is still supported for compatibility.
+			</li>
+			<li><span class="label label-info">Modified</span> The organization of the contextual actions in the odesign for the 
+				<em>Properties</em> DSL has been improved.
+			</li>
+			<li><span class="label label-info">Modified</span> Most of the concepts of the 
+				<em>Properties</em> DSL can now have an identifier, a label and some documentation.
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
+		<h4 id="Migrations2">Migrations</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A migration is added in this version to fix the alignment of the text in notes (as explained in user visible changes). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
+				<em>12.0.0.201704070000</em>.
+			</li>
+		</ul>
+		<h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
+		<p>See 
+			<a href="i18n_changes.html#sirius50">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
+		</p>
+		<h4 id="Changesinorg.eclipse.sirius.common2">Changes in 
+			<code>org.eclipse.sirius.common</code> 
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl.setFeatureToBeCrossReferencedWhiteList(Collection&lt;EReference&gt;)</code> to set a white list of references that must be referenced even if the reference is derived.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl.isIncluded(EReference)</code> has been overridden to consider features in the white list.
+			</li>
+			<li><span class="label label-success">Added</span> A new extension point, 
+				<code>org.eclipse.sirius.common.package_meta_data</code> has been added. It can be used to associate user-oriented meta-data to Ecore metamodels, identified by their 
+				<code>nsURI</code>: a user-oriented name/label (as opposed to the technical nsURI), a (short) description/documentation, and a list of suggested EClasses defined in the EPackage that are good candidates as root model elements. These meta-data are currently used only in the generic model creation wizard integrated in the aird editor.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common.ui">Changes in 
+			<code>org.eclipse.sirius.common.ui</code> 
+		</h4>
+		<ul>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.common.ui.tools.api.dialog.FeatureEditorDialog</code> class has been removed; use the 
+				<code>org.eclipse.emf.edit.ui.celleditor.FeatureEditorDialog</code> equivalent provided by EMF directly instead.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius3">Changes in 
+			<code>org.eclipse.sirius</code> 
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> An experimental mode to serialize representations in a different file is available with system property 
+				<code>createRepresentationInSeparateResource=true</code>. That means all new representations will be saved, when this property is enabled, in a separate file with 
+				<code>*.srm</code> extension.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.canCreate(EObject, RepresentationDescription, boolean)</code> has been added to better control the checks done by already existing 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.canCreate(EObject, RepresentationDescription)</code> method. The new boolean allow to deactivate the check verifying that the viewpoint of the given description must be activated so the method can return true.
+			</li>
+			<li><span class="label label-success">Added</span> The 
+				<code>org.eclipse.sirius.viewpoint.description.DAnnotation.references</code> feature has been added. It allows to have some information without having to search them into the entire model of the Sirius session. Ideally only elements from semantic resources of the session should be referenced or else it may broke the session behavior either because resolving too soon EObject in the session or because adding a resource that is not known by Sirius session.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getImpactedRepDescriptorFromDAnnotationData()</code> method has been added to help retrieve the 
+				<code>DRepresentationDescriptors</code> which owned 
+				<code>DAnnotation</code> are referencing a given 
+				<code>EObject</code> with 
+				<code>DAnnotation.references</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#repPath</code> attribute has been added to hold the representation path since the 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#representation</code> feature is derived. This attribute is not intended to be modified by client. You should use 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.setRepresentation(DRepresentation)</code> or 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.updateRepresentation(DRepresentation)</code> instead.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor.updateRepresentation(DRepresentation)</code> has been added to update the repPath attribute according to the given representation. This method is intended to be called if the representation instance is still the same but requires to recompute the repPath.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.FileQuery.isSrmFile()</code> has been added to indicate if the file extension is dedicated to a file containing representations.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.dRepresentationLocationRule</code> extension point has been added to customize the resource location of new representations. See 
+				<a href="extensions-provide_representation_location_rule.html">Provide representation location rule (experimental)</a> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DRepresentationLocationRule</code> interface has been added to provide a customized rule to the 
+				<code>org.eclipse.sirius.dRepresentationLocationRule</code> extension point.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.REPRESENTATION_FILE_EXTENSION</code> constant has been added to reference the new *.srm extension.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.session.Session.getSrmResources()</code> has been added to provide the list of representation resources (serialized as *.srm files by default).
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.ResourceQuery.isAirdOrSrmResource()</code> has been added to know whether the resource is a srm resource (
+				<code>org.eclipse.sirius.business.api.query.ResourceQuery.isSrmResource()</code>) or an aird resource.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.ResourceQuery.isSrmResource()</code> has been added to know whether the resource contains a 
+				<code>DRepresentation</code> as root element.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.migration.DiagramCrossReferencer.DiagramCrossReferencer(Collection&lt;Resource&gt;)</code> constructor has been added to compute the cross references on a list of resources.
+			</li>
+			<li><span class="label label-success">Added</span> A new 
+				<code>org.eclipse.sirius.modelOperationManager</code> extension point has been addded. It allows the contribution of new types of 
+				<em>Model Operations</em> which are then usable in modeler definitions (
+				<code>*.odesign</code>).
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#representation</code> feature is now derived, transient and volatile. The representation is compute by using the 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationDescriptor#repPath</code> attribute.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(Predicate&lt;? super EObject&gt;)</code> now takes a 
+				<code>java.util.Predicate</code> (from Java 8) as argument instead of a 
+				<code>com.google.common.base.Predicate</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The extension point 
+				<code>org.eclipse.sirius.ui.modelingprojectresourcelistener</code> is no longer expected to be used. It is an internal extension point. Clients using this extension point to ignore some files as potential semantic models must now use the extension point 
+				<code>org.eclipse.sirius.resourceStrategy</code>. This extension point existed before Sirius 5.0.0 but was not API. It becomes API with Sirius 5.0.0, see the 
+				<a href="developer/extensions-provide_resource_strategy.html">developer documentation</a> for more details.
+				<ul>
+					<li>If you used to override protected methods 
+						<code>boolean isPotentialSemanticResource(IFile)</code> and 
+						<code>boolean isLoadableModel(IFile, Session)</code> of class 
+						<code>org.eclipse.sirius.ui.tools.api.views.modelexplorerview.resourcelistener.DefaultModelingProjectResourceListener</code>, you can now create a 
+						<code>resourceStrategy</code> of type 
+						<code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType.SEMANTIC_RESOURCE</code> and respectively override 
+						<code>boolean isPotentialSemanticResource(URI)</code> and 
+						<code>boolean isLoadableModel(URI,Session)</code>. As a reminder, to get an URI from an IFile, you can use: 
+						<code>URI.createPlatformResourceURI(iFile.getFullPath().toString(), true)</code>. And to get an IFile from an URI, you can use: 
+						<code>ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(uri.toPlatformString(true)))</code>.
+					</li>
+					<li>If you used to override protected methods 
+						<code>boolean isRepresentationsModel(IFile)</code> and 
+						<code>boolean isVsmModel(IFile)</code> of class 
+						<code>org.eclipse.sirius.ui.tools.api.views.modelexplorerview.resourcelistener.DefaultModelingProjectResourceListener</code>, they no longer exist. They correspond to core API and is not supposed to be overridden. They are accessible through API 
+						<code>org.eclipse.sirius.business.api.query.FileQuery.FileQuery(IFile)</code>.
+					</li>
+					<li>All necessary classes for extension point 
+						<code>org.eclipse.sirius.resourceStrategy</code> are now APIs:
+						<ul>
+							<li>
+								<code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategyRegistry</code>: Registry to have access to all overridable services through a 
+								<code>ResourceStrategy</code>
+							</li>
+							<li>
+								<code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy</code>: Interface implemented by all resource strategies
+							</li>
+							<li>
+								<code>org.eclipse.sirius.business.api.resource.strategy.AbstractResourceStrategyImpl</code>: Default implementation of above interface. All resource strategies contributed with the extension need to extend it.
+							</li>
+							<li>
+								<code>org.eclipse.sirius.business.api.resource.strategy.LegacyReleaseResourceStrategyImpl</code> (previously named 
+								<code>DefaultResourceStrategyImpl</code>): A resource strategy with the code used before the optimization concerning the 
+								<code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType.RELEASE_RESOURCE_AT_RESOURCESET_DISPOSE</code>. It is not used but can be quickly contributed by someone that want the previous behavior (before Sirius 4.0.0 M6).
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-danger">Removed</span> The already deprecated constructor of 
+				<code>org.eclipse.sirius.business.api.control.SiriusUncontrolCommand</code> with signature 
+				<code>SiriusUncontrolCommand(EObject, boolean, IProgressMonitor)</code> has been removed; instead, use the alternate constructor with an additional explicit 
+				<code>boolean shouldEndBySaving</code> parameter (set it to 
+				<code>true</code> to obtain the same behavior as the removed constructor).
+			</li>
+			<li><span class="label label-danger">Removed</span> In 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices</code>, methods 
+				<code>canCreateIdentifier</code> and 
+				<code>createIdentifier</code> have been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.business.api.dialect.identifier</code> package and all its content (
+				<code>AbstractRepresentationElementIdentifier</code> and 
+				<code>RepresentationElementIdentifier</code>) have been removed.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> Two new methods have been added to the interface 
+				<code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelection.Callback</code>: 
+				<code>selectViewpoint(Viewpoint, Session, boolean, Set&lt;Viewpoint&gt;, IProgressMonitor)</code> and 
+				<code>deselectViewpoint(Viewpoint, Session, Set&lt;Viewpoint&gt;, IProgressMonitor)</code>. These methods add a new parameter that is a set of viewpoints compared to the same methods without these parameters. These set contains all viewpoints that will be deactivated/activated in addition of the one that is asked to be deactivated/activated. It allows the callback implementation to better handle viewpoint dependencies interaction by being able to know if missing dependencies will be activated or deactivated.
+			</li>
+			<li><span class="label label-success">Added</span> An interface 
+				<code>org.eclipse.sirius.ui.business.api.editor.ISiriusEditor</code> has been added to gather 
+				<code>org.eclipse.sirius.ui.editor.SessionEditor</code> and 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectEditor</code> under the same abstraction. It allows to provide 
+				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> saving functionalities for session editor or any new editor that is not a dialect editor. 
+			</li>
+			<li><span class="label label-success">Added</span> A method 
+				<code>getSiriusEditors()</code>  has been added to interface 
+				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code>. It allows to retrieve all 
+				<code>org.eclipse.sirius.ui.business.api.editor.ISiriusEditor</code> that are registered in the session.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.refreshEditor(DialectEditor, IProgressMonitor)</code> has been added to allow specifiers to do a full refresh of its dialect editor easily.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getDefaultFontWithRuntimeSizeAndFromLabelFormat(List&lt;FontFormat&gt;)</code> has been added to allow to retrieve a font using the given format and the default Sirius font (arial) and the runtime height.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getFontFromNameAndLabelFormatAndWithDefaultSize(List&lt;FontFormat&gt;, String)</code> has been added to allow to retrieve a font using the given format and the given font name and the runtime height.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.wizards.page.ViewpointsSelectionWizardPage.setBrowserMinWidth(int)</code> has been added to allow modification of the minimum width (with default value &#8220;0&#8221;) of the browser part of the viewpoint selection wizard.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.wizards.page.ViewpointsSelectionWizardPage.setColumnWidthEquality(boolean)</code> has been added to allow modification of column width equality (with default value &#8220;false&#8221;) of the root composite of the viewpoint selection wizard.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getDefaultFontWithRuntimeSizeAndFromLabelFormat(List&lt;FontFormat&gt;)</code> has been added to allow to retrieve a font using the given format and the default Sirius font (arial) and the runtime height.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getFontFromNameAndLabelFormatAndWithDefaultSize(List&lt;FontFormat&gt;, String)</code> has been added to allow to retrieve a font using the given format and the given font name and the runtime height.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.dialogs.AbstractExportRepresentationsAsImagesDialog.isExportDecorations()</code> has been added to know if decorations are displayed in the exported image.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.export(DRepresentation, Session, IPath, ExportFormat, IProgressMonitor, boolean)</code> method has been added. Compared to the previous method signature, the boolean parameter 
+				<code>exportDecorations</code> has been added to allow to choose if the diagram element decorations will be exported or not.
+			</li>
+			<li><span class="label label-info">Modified</span> The boolean parameter 
+				<code>exportDecorations</code> has been added to 
+				<code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.ExportAction(Session, Collection&lt;DRepresentation&gt;, IPath, ImageFileFormat, boolean, boolean)</code> constructor. It allows to choose if the diagram element decorations will be exported or not.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>attachEditor(DialectEditor)</code> from the interface 
+				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> has its parameter type modified from 
+				<code>DialectEditor</code> to the new abstraction 
+				<code>ISiriusEditor</code> to provide saving capabilities with other editors than the dialect ones.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>detachEditor(DialectEditor)</code> from the interface 
+				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> has its parameter type modified from 
+				<code>DialectEditor</code> to the new abstraction 
+				<code>ISiriusEditor</code> to provide saving capabilities with other editors than the dialect ones.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>detachEditor(DialectEditor, boolean)</code> from the interface 
+				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> has its first parameter type modified from 
+				<code>DialectEditor</code> to the new abstraction 
+				<code>ISiriusEditor</code> to provide saving capabilities with other editors than the dialect ones.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.assist.TextContentProposalProvider.getContentContext(String, int)</code> has been made protected instead of private to allow to use it for sub types.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.assist.TextContentProposalProvider.removeDuplicatedProposals(List&lt;ContentProposal&gt;)</code> has been made protected instead of private to allow to use it in sub types.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.createLocalRepresentationsFile(IProject, IProgressMonitor)</code> has its return type changed from 
+				<code>void</code> to 
+				<code>Session</code> to allow callers to have access to the newly created session directly.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.views.ViewHelper.getContentProvider()</code> has been renamed into 
+				<code>createContentProvider()</code> and now returns a new instance on each invocation.
+			</li>
+			<li><span class="label label-danger">Removed</span> The old 
+				<em>Model Request Interpreter</em> view is not available anymore. It is superseded by the 
+				<em>Interpreter</em> view, which comes from the Acceleo project but does not actually depend on Acceleo or AQL and can be installed separately (using the feature 
+				<code>org.eclipse.acceleo.ui.interpreter</code>, which is available directly from the Sirius update-sites). The corresponding interface 
+				<code>org.eclipse.sirius.ui.tools.api.views.interpreterview.InterpreterView</code> has been removed. Technically, the implementation code for the old 
+				<em>Model Request Interpreter</em> view is still present if needed during the transition, but not exposed or used anywhere. It will be removed in a future version. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The utility class 
+				<code>org.eclipse.sirius.diagram.business.api.helper.decoration.DecorationHelper</code> has been added. It provides 
+				<code>updateDecorations(List&lt;Layer&gt;)</code> and 
+				<code>updateAllDecorations</code> methods that allow to update only decorations in a diagram.
+			</li>
+			<li><span class="label label-info">Moved</span> The method 
+				<code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshOverride.aroundRefresh(DDiagram)</code> has been moved to 
+				<code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshExtension</code> to unify methods handling refresh extension under one interface. 
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshExtension.aroundRefresh(DDiagram)</code> has been modified with a default behavior that is the one before introduction of the method to avoid breaking compatibility.
+			</li>
+			<li><span class="label label-danger">Removed</span> The interface 
+				<code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshOverride</code> has been removed because its only method has been moved into 
+				<code>org.eclipse.sirius.diagram.business.api.refresh.IRefreshExtension</code> interface
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.diagram.business.internal.dialect.identifier</code> package and all its content (
+				<code>DiagramIdenttifier</code>, 
+				<code>NodeIdentifier</code>, 
+				<code>EdgeIdentifier</code>, 
+				<code>NodeContainerIdentifier</code>, and 
+				<code>NodeStyleIdentifier</code>) have been removed.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> Constants 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.SPECIFIC_STYLES</code> &amp; 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.VERTICAL_ALIGNMENT</code> have been added to retrieve the initial label alignment of Notes from the Palette (see 
+				<a href="Release_Notes.html#UserVisibleChanges">user-visible changes</a> ). Currently the vertical alignment can not be changed (potential new feature later).
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.SiriusDecoratorEditPolicy</code> has been added to improve the behavior of decorator selection.
+			</li>
+			<li><span class="label label-success">Added</span> A new decoration mechanism has been implemented. Now, Sirius uses a single 
+				<code>IDecorator</code> to decorate EditPart in diagram. That allows Sirius to manage the relative positioning between decorations.
+				<ul>
+					<li><span class="label label-success">Added</span> 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.decoration.SiriusDecorationDescriptorProvider</code> represents a provider able to give the decoration descriptors. 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.decoration.AbstractSiriusDecorationDescriptorProvider</code> is an abstract class that can be inherited to implement 
+						<code>SiriusDecorationDescriptorProvider</code>.
+					</li>
+					<li><span class="label label-success">Added</span> 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.decoration.DecorationDescriptor</code> is a simple POJO that contains information needed to display decoration.
+					</li>
+					<li><span class="label label-success">Added</span> 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.decoration.SiriusDecorationProviderRegistry</code> allows to register and get 
+						<code>SiriusDecorationDescriptorProvider</code>.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> The preference 
+				<code>SiriusDiagramUiPreferencesKeys.PREF_AUTHORIZE_DECORATION_OVERLAP</code> has been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. If true, the overlap is authorized between decoration group on diagram element.
+				<ul>
+					<li><span class="label label-success">Added</span> The class 
+						<code>org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin.Implementation.DynamicDiagramUIPreferences</code> and the method 
+						<code>org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin.Implementation.getDynamicPreferences()</code> have been added to have good performances in getting the preference value.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-info">Modified</span> The preference 
+				<code>SiriusDiagramUiPreferencesKeys.PREF_PRINT_DECORATION</code> has been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. If true, the decorations of the diagram elements of a diagram will be printed, when printing a diagram.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.DiagramEditPartService</code> class which can be used to export diagrams as images is now automatically adapting the output resolution for raster image based on maximum buffer size specified through the 
+				<code>plugin.propeties</code> file of the 
+				<code>org.eclipse.sirius.diagram.ui</code> plugin. This leads to a noticeable increase of the export image size (you can expect a 10 factor on small diagrams) and the method will no longer fail with OutOfMemory errors as bigger diagrams will lead to a lower output resolution. Implementers using this class can override the 
+				<code>DiagramEditPartService.getMaximumTotalSize()</code> method to return their own limit or 
+				<code>DiagramEditPartService.getExportResolutionFactor(DiagramEditPart, SiriusDiagramImageGenerator)</code> and return 
+				<code>1.0</code> to get back to the previous behavior.
+			</li>
+			<li><span class="label label-info">Moved</span> The methods of interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> that are 
+				<code>getFormatData(FormatDataKey, RepresentationElementMapping)</code> and 
+				<code>addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> have been moved into the interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> to reduce interface numbers for less complexity.
+			</li>
+			<li><span class="label label-info">Moved</span> The methods of interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> that are 
+				<code>getFormatData(FormatDataKey, RepresentationElementMapping)</code> and 
+				<code>addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> have been moved into the interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> to reduce interface numbers for less complexity.
+			</li>
+			<li><span class="label label-danger">Removed</span> The methods 
+				<code>getFormatData(FormatDataKey key)</code> and 
+				<code>addFormatData(FormatDataKey key, AbstractFormatData formatData)</code> have been removed from interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> because they were deprecated.
+			</li>
+			<li><span class="label label-danger">Removed</span> The interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> has been removed because all its methods have been moved into interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code>
+				<ul>
+					<li><span class="label label-danger">Removed</span> 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.decoration.AbstractSiriusDecorator</code> is removed because now useless.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-danger">Removed</span> The methods 
+				<code>getFormatData(FormatDataKey key)</code> and 
+				<code>addFormatData(FormatDataKey key, AbstractFormatData formatData)</code> have been removed from interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> because they were deprecated.
+			</li>
+			<li><span class="label label-danger">Removed</span> The interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> has been removed because all its methods have been moved into interface 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.table">Changes in 
+			<code>org.eclipse.sirius.table</code>
+		</h4>
+		<ul>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>DTableElementSynchronizer</code> 
+				<em>EClass</em> has been removed from the table meta-model. It only defined 
+				<em>EOperations</em> and has been replaced with an equivalent (internal) plain Java class.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tree.ui">Changes in 
+			<code>org.eclipse.sirius.tree.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The enum class for Sirius tree preferences 
+				<code>org.eclipse.sirius.tree.ui.tools.api.preferences.SiriusTreeUiPreferencesKeys</code> has been added with the enum value 
+				<code>SiriusTreeUiPreferencesKeys.PREF_ALWAYS_USE_STANDARD_FONT_SIZE</code>. This enum value is the preference when true allowing to use runtime font height when displaying Sirius tree editor&#8217;s items instead of the one specified in the VSM.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui.editor2">Changes in 
+			<code>org.eclipse.sirius.ui.editor</code>
+		</h4>
+		<p>This plugin is new in Sirius 5.0. It provides a session editor showing loaded models, representations and viewpoint activation status of the session. It has functionalities allowing to change the viewpoint activation status, to create/remove representations or to load unload external models. The graphical block showing loaded models is integrated with CNF. You can provide content extension to its viewer by using an id matching the pattern 
+			<code>org.eclipse.sirius.ui.editor.graphicalcomponents.semanticModelsViewer.contentExtension.*</code>. You also can provide action extension by using an id matching the pattern 
+			<code>org.eclipse.sirius.ui.editor.graphicalcomponents.semanticModelsViewer.actionExtension.*</code>. The extension will be selectable/unselectable by using a 
+			<code>Customize View</code> button on the models block header.
+		</p>
+		<h4 id="Changesinorg.eclipse.sirius.properties.core">Changes in 
+			<code>org.eclipse.sirius.properties.core</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.properties.core.internal.converter.ViewDescriptionConverter</code> has been moved as an API to 
+				<code>org.eclipse.sirius.properties.core.api.ViewDescriptionConverter</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The classes necessary to support the preprocessing of the odesign for the inheritance in its Properties parts are available in the API package 
+				<code>org.eclipse.sirius.properties.core.api</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.properties.core.internal.SiriusInterpreter</code> has been moved as an API to 
+				<code>org.eclipse.sirius.properties.core.api.SiriusInterpreter</code>. This class could be used by those who want to create custom model operations using the Properties framework.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.properties.core.api.SiriusDomainClassTester</code> has been added as an API for those who want to create custom model operations using the Properties framework.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices.createInstance(EClass)</code> has been added to allow the creation of a new instance from an EClass in the interpreters.
+			</li>
+			<li><span class="label label-info">Modified</span> The default rules have been transfered to a new dedicated plugin named 
+				<code>org.eclipse.sirius.properties.defaultrules</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui.properties">Changes in 
+			<code>org.eclipse.sirius.ui.properties</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> All the content related to the IDescriptionConverter and ILinkResolver has been moved from the plugin 
+				<code>org.eclipse.sirius.ui.properties</code> to the newly created plugin 
+				<code>org.eclipse.sirius.properties.core</code>. It includes all the APIs and both extension points.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.editor.properties">Changes in 
+			<code>org.eclipse.sirius.editor.properties</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> In the package 
+				<code>org.eclipse.sirius.editor.properties.sections.description.representationdescription</code> the class 
+				<code>RepresentationDescriptionMetamodelsUpdater</code> has been replaced by 
+				<code>DescriptionMetamodelsUpdater</code> which can now be used with any EObject with a many-valued EReference to EPackages. The behavior of the class 
+				<code>RepresentationDescriptionMetamodelPropertySectionSpec</code> has been transfered to an abstract class independent of 
+				<code>RepresentationDescription</code> named 
+				<code>AbstractMetamodelPropertySectionSpec</code>. Those classes are now used for the edition of the metamodels of both the Properties view description and the various representations.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The utility method 
+				<code>org.eclipse.sirius.tests.support.api.TestsUtil.setTargetPlatform()</code> has been added to allow to load a PDE target platform according to all known OSGi bundles. It is useful to compile a plug-in in the execution runtime of the tests.
+			</li>
+			<li><span class="label label-success">Added</span> The utility class 
+				<code>org.eclipse.sirius.tests.support.api.OpenedSessionsCondition</code> has been extracted from a junit test to be used by multiple junit tests. It allows to wait until a session is in opened state.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>getTreeItem(SWTBotTreeItem[], String, boolean, boolean)</code> has been added in 
+				<code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a 
+				<code>SWTBotTreeItem</code> in a 
+				<code>SWTBotTreeItem</code> array. Compared to 
+				<code>getTreeItem(SWTBotTreeItem[], String)</code>, it adds the capability to control if the search must be done on enabled items or enabled and disabled items and if the tree must be expanded during the search to check non displayed items.
+			</li>
+			<li><span class="label label-success">Added</span> A new utility method 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragCentered(String, Class&lt;? extends EditPart&gt;, int, int)</code> improving the dragCentered method by adding the aimed Class in parameter.
+			</li>
+			<li><span class="label label-info">Modified</span> A new AtomicBoolean parameter has been added to the utility method 
+				<code>mouseDragWithKey(int, int, int, int, int)</code> in classes 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>, 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code>. This allows to correctly wait the end of the drag&#8217;n&#8217;drop.
+				<ul>
+					<li>Sample of code to use:</li>
+				</ul>
+			</li>
+		</ul>
+		<pre>final AtomicBoolean dragFinished = new AtomicBoolean(false);
+editor.dragWithKey(start.x, start.y, endpoint.x, endpoint.y, SWT.F3, dragFinished);
+// Wait that the drag is done (the async Runnable simulating the
+// drag)
+bot.waitUntil(new ICondition() {
+    @Override
+    public boolean test() throws Exception {
+        return dragFinished.get();
+    }
+
+    @Override
+    public void init(SWTBot bot) {
+    }
+
+    @Override
+    public String getFailureMessage() {
+        return "The drag'n'drop operation has not finished.";
+    }
+});
+// Wait that the figures are redrawn. In a fast environment, figures
+// are not really redrawn and the rest of the test is not reliable.
+SWTBotUtils.waitAllUiEvents();
+
+
+</pre>
+		<h2 id="sirius4.1.2">Changes in Sirius 4.1.2</h2>
+		<h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> A new preference named 
+				<em>Maximum size of tabs name</em> is available in the Sirius Properties View preference page. This preference is used to shorten the tabs names when the default rules are used to render the properties view.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="./images/PreferencePageMaxTabName.png"/> 
+		</p>
+		<h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> class has been added to handle copy/paste format with mapping information when an element target of a format pasting has many source diagram format corresponding to its key. In this case, we use the mapping information to get the more precise data format. And if no result matched, then we return the first found by using the key.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> method has been added to retrieve during format pasting the data format corresponding to the given key and mapping when more than one result correspond to the key. If no result matches the mapping, then the first result found by using the key is returned.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> method has been added to allow data format manager to register data format with mapping information when copying format.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Deprecated</span></li>
+		</ul>
+		<p>
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.getFormatData(FormatDataKey)</code> It is replaced by 
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> to better handle copy/paste format cases.
+		</p>
+		<ul>
+			<li><span class="label label-success">Deprecated</span></li>
+		</ul>
+		<p>
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.addFormatData(FormatDataKey, AbstractFormatData)</code> It is replaced by 
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> to better handle copy/paste format cases.
+		</p>
+		<h2 id="sirius4.1.1">Changes in Sirius 4.1.1</h2>
+		<h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-info">Modified</span>The &#8220;straighten to&#8221; actions were previously disabled when an edge is connected to border nodes that have several edges. It is now allowed.</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges5">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEStructuralFeature(DLine, DColumn)</code> method has been added to retrieve the EStructuralFeature associated to a table column.
+			</li>
+		</ul>
+		<h2 id="sirius4.1.0">Changes in Sirius 4.1.0</h2>
+		<h3 id="UserVisibleChanges6">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> Copy/Paste Layout has been completed with Copy/Paste Style and Copy/Paste Format. 
+				<em>Paste Format</em> is equivalent to paste 
+				<em>Layout</em> and 
+				<em>Style</em> action. See chapter 
+				<a href="./user/diagrams/Diagrams.html#copy_paste_format">
+					<em>Copy/paste of format</em>
+				</a> in 
+				<em>User Manual</em> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> The 
+				<a href="./user/diagrams/Diagrams.html#snap_to_shapes">snap to shape</a> feature is now available on border nodes.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to display an attachment link between an edge and its labels when label or edge is selected. This is not the default behavior but it can be activated by a preference in 
+				<em>Sirius/Sirius Diagram/Connections</em> preference page. See chapter 
+				<a href="./user/diagrams/Diagrams.html#edge_label_attachment">
+					<em>Display attachment link between edge and its labels</em>
+				</a> in 
+				<em>User Manual</em> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to straighten an edge to top, bottom, left or right. These actions are available on edge contextual menu 
+				<em>Layout/Straighten</em>. See chapter 
+				<a href="./user/diagrams/Diagrams.html#straighten_an_edge">
+					<em>Straighten an edge</em>
+				</a> in 
+				<em>User Manual</em> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to disable the 
+				<em>Default</em> and 
+				<em>Semantic</em> properties tabs (visible when selecting and element from the 
+				<em>Model Explorer</em> or from a Sirius editor, respectively) when using modelers which provide fully-functional replacements defined directly with Sirius. This is controled in the new 
+				<em>Sirius &gt; Sirius Properties View</em> preference page.
+			</li>
+			<li><span class="label label-success">Added</span> Sirius-defined properties view are now enabled for semantic elements selected directly from inside the 
+				<em>Model Explorer</em> (as long as the selected element is from inside an open Sirius session/project). Previously only elements selected from inside a Sirius editor were supported.
+			</li>
+			<li><span class="label label-info">Modified</span> In the Sirius-provided 
+				<em>Properties View</em>, the edition of a text field is only taken into account when pressing 
+				<em>Enter</em> or leaving the field. Previously it was triggered asynchronously after a small delay without activity, which could be confusing.
+			</li>
+			<li><span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of 
+				<code>UICallBack</code> in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk.
+			</li>
+		</ul>
+		<p>If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the 
+			<code>ViewpointRegistry</code> will not register it and a warning is logged in the error log view to inform the user.
+		</p>
+		<ul>
+			<li><span class="label label-info">Modified</span> The 
+				<a href="./user/diagrams/Diagrams.html#move_edge_group">move edge group</a> feature now also work for a selection of edge group.
+			</li>
+			<li><span class="label label-info">Modified</span> In a diagram editor, the zoom with mouse wheel is now zooming on mouse location instead of center of the editor. See 
+				<a href="./user/diagrams/Diagrams.html#zooming_diagram_id">user documentation</a> .
+			</li>
+			<li><span class="label label-info">Modified</span> The direct edit on a Note or Text is now accessible by a slow double click like any other diagram element.</li>
+			<li><span class="label label-info">Modified</span> The shortcut 
+				<em>Ctrl+&amp;</em>, for 
+				<a href="./user/diagrams/Diagrams.html#reset_origin">
+					<em>Reset Origin</em>
+				</a> action, has been replaced by 
+				<em>Ctrl+HOME</em>.
+			</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> It is now possible to inline a copy of the default Properties Views model inside the VSM. This is a copy of the model Sirius would use if no 
+				<em>Properties View Description</em> was specified. It can be used as a starting point for manual customization, or as a complement for elements for which you do not provide any custom rules. 
+			</li>
+			<li><span class="label label-success">Added</span> In the definition of the Properties view, hyperlink and label widgets can now have widget actions.</li>
+			<li><span class="label label-success">Added</span> Hyperlink and label widgets now have a 
+				<code>displayExpression</code>, if blank the result of the value expression will be used after a call to the method 
+				<code>java.lang.Object#toString()</code>.
+			</li>
+			<li><span class="label label-success">Added</span> Hyperlink and label widgets now support optional associated actions (visible as buttons on the right of the widget).</li>
+			<li><span class="label label-success">Added</span> A new widget named List with the same behavior as the multiple reference widget.</li>
+			<li><span class="label label-success">Added</span> 
+				<em>Page</em> and 
+				<em>Group</em> descriptions in 
+				<em>Properties View</em> models now support a 
+				<code>preconditionExpression</code>, which behaves in the same way as preconditions for mappings on representation descriptions.
+			</li>
+			<li><span class="label label-info">Modified</span> The rules concerning the layout of compartments have been changed/completed. You can have a look at the 
+				<a href="specifier/diagrams/Diagrams.html#compartments_layout">dedicated chapter</a> in the specifier documentation for more details.
+			</li>
+			<li><span class="label label-info">Modified</span> In the VSM editor, all dialogs which ask for selecting elements from the VSM will now show the fully qualified path of each element, instead of just their name, to allow distinguishing elements with the same name appearing in different places.</li>
+			<li><span class="label label-info">Modified</span> The properties 
+				<code>fontSize</code> and 
+				<code>labelFontSize</code> have been renamed into 
+				<code>fontSizeExpression</code> and 
+				<code>labelFontSizeExpression</code> since both of them were already treated as expression.
+			</li>
+			<li><span class="label label-info">Modified</span> In the VSM editor, the 
+				<em>Identifier</em> attribute of many 
+				<em>Prroperties View</em> related elements has been moved into the 
+				<em>Advanced</em> tab and renamed 
+				<em>Extension Id</em>, as it is not actually required on common use cases but only for extensibility purposes.
+			</li>
+			<li><span class="label label-info">Modified</span> The property 
+				<code>Domain Class Expression</code> in 
+				<code>DynamicMappingFor</code> elements (in properties views definitions) has been renamed into 
+				<code>Iterable Expression</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Properties View</em> widget which was named 
+				<em>Reference</em> in Sirius 4.0 has been renamed as 
+				<em>List</em>, as it corresponds to an arbitrary list of elements with customizable buttons for acting on them. A new 
+				<em>Reference</em> widget was added for handling plain 
+				<em>EReference</em> edition with minimal configuration needed.
+			</li>
+			<li><span class="label label-info">Modified</span> When opening a VSM, the editor now automatically expands the first few levels to immediatly reveal the interesting elements (representation descriptions).</li>
+			<li><span class="label label-warning">Deprecated</span> The extension point 
+				<code>org.eclipse.sirius.diagram.ui.layoutDataManager</code> is deprecated. It is replaced by the new extension point 
+				<code>org.eclipse.sirius.diagram.ui.formatDataManager</code>. The deprecated extension point will be removed in the next 5.0 Sirius major release. Several classes associated with this deprecated extension point are also deprecated (see Developer-Visible Changes for details).
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> As the first step to save the DRepresentation in its own resource, 
+				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as a wrapper of the 
+				<code>DRepresentation</code>. The 
+				<code>DRepresentationDescriptor</code> is contained by the 
+				<code>DView</code> and the 
+				<code>DRepresentationDescriptor</code> have a reference to the 
+				<code>DRepresentation</code>. In this step, the main impact is that the Sirius common navigator does not display the 
+				<code>DRepresentation</code> anymore but the 
+				<code>DRepresentationDescriptor</code> instead. All the actions and commands are then based on 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> As the second step to save the DRepresentation in its own resource, 
+				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentations()</code> has been removed. The 
+				<code>DRepresentation</code> is now created as root element of the representations resource. The main impact is on the core of Sirius but also potentially on client Sirius customization. Each peace of code that makes the supposition that the 
+				<code>DView</code> is the container of the 
+				<code>DRepresentation</code> must be reworked. The code using methods in the following list may be concerned by the rework:
+				<ul>
+					<li>
+						<code>EObject.eContainer()</code>. If the object is a 
+						<code>DRepresentation</code>, its container is now null.
+					</li>
+					<li>
+						<code>EcoreUtil.getRootContainer(xxx)</code>. The root container of a DDiagramElement is the 
+						<code>DRepresentation</code> and not the 
+						<code>DAnalysis</code> any more.
+					</li>
+					<li>
+						<code>EcoreUtil.isAncestor(xxx)</code>. the 
+						<code>DView</code> is not an ancestor of a 
+						<code>DRepresentation</code> (or its content) anymore.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> As a developer, the followings utility methods will help you to migrate your code following the second step described above:
+				<ul>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentations()</code> replaces the removed 
+						<code>DView.getOwnedRepresentations()</code> method. It provides all the loaded representations holds by a 
+						<code>DView</code>. In this step, all that representations are always loaded as they are into the .aird resource.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(final Predicate&lt;? super EObject&gt;)</code> provides the content of a 
+						<code>DView</code> according to a predicate.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> provides the 
+						<code>DRepresentationDescriptor</code> which references the 
+						<code>DRepresentation</code>.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> allows to retrieve a DAnalysis from a 
+						<code>DRepresentationElement</code>
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A new extension point named 
+				<code>org.eclipse.sirius.interpretedExpressionQueryProvider</code> (with the associated new interface 
+				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQueryProvider</code>) allows external contribution of 
+				<code>IInterpretedExpressionQuery</code> specific to some particular expression occurrences in the VSM. This is used in particular for VSM extensions which do not fit well into the hard-coded assumptions about 
+				<code>IInterpretedExpressionQuery</code>. In Sirius 4.1, this is used to add completion and validation support for expressions used in properties views descriptions.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.migration.AirdResourceVersionMismatchException</code> exception has been added to cancel Sirius session opening due to an .aird version mismatch, i.e. when one the of the loaded Representation resources is coming from a newer Sirius release.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as the first step to save the DRepresentation in its own resource. In this step, the DRepresentationDescriptor life cycle is the same as the associated DRepresentation.
+				<ul>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.RenameRepresentationCommand</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.DeleteRepresentationCommand</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand</code>
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>getAvailableRepresentationDescriptions(Collection&lt;Viewpoint&gt;, EObject)</code>, 
+				<code>getAllRepresentationDescriptors(Session )</code>, 
+				<code>getRepresentationDescriptors(EObject, Session)</code> and 
+				<code>getRepresentationDescriptors(RepresentationDescription, Session )</code> have been added in 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices</code> and implemented in 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>. These methods are used, instead of their equivalent with DRepresentation, for every functionality which relies on 
+				<code>DRepresentationDescriptor</code> instead of 
+				<code>DRepresentation</code> such as actions, wizards or views.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isSupported(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to 
+				<code>DRepresentation</code> are now related to 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.canHandle(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to 
+				<code>DRepresentation</code> are now related to 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager.canExport(DRepresentationDescriptor, ExportFormat)</code> has been added because actions, wizards or views that were related to 
+				<code>DRepresentation</code> are now related to 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> has been added to retrieve the 
+				<code>DRepresentationDescriptor</code> that references the 
+				<code>DRepresentation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR_FROM_DESCRIPTION</code> and 
+				<code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR</code> have been added. They are used to get or put 
+				<code>DRepresentationDescriptor</code> in the model managed by the 
+				<code>Session</code> through the 
+				<code>org.eclipse.sirius.business.api.session.SessionService.putCustomData(String, EObject, EObject)</code> and 
+				<code>SessionService.getCustomData(String, EObject)</code> methods.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> has been added to retrieve a DAnalysis from a 
+				<code>DRepresentationElement</code>
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been changed to 
+				<code>findDViewForRepresentationDescription(DAnalysis , final RepresentationDescription)</code> because that API was previously badly defined.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.deleteRepresentation(DRepresentation, Session)</code> has been changed to 
+				<code>deleteRepresentation(DRepresentationDescriptor, Session)</code> because now the 
+				<code>DRepresentationDescriptor</code> is the entry point to delete the 
+				<code>DRepresentation</code> and itself.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>DRepresentationDescriptor</code> is now the entry point to move, control or uncontrol a 
+				<code>DRepresentation</code> instead of the 
+				<code>DRepresentation</code> itself. Accordingly, the return type or parameter of the followings have changed to switch from 
+				<code>DRepresentation</code> to 
+				<code>DRepresentationDescriptor</code>
+				<ul>
+					<li>constructors of 
+						<code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code>
+					</li>
+					<li>the constructor 
+						<code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand.MoveRepresentationCommand(Session, DAnalysis, Collection&lt;DRepresentationDescriptor&gt;)</code>
+					</li>
+					<li>the method 
+						<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.moveRepresentation(DAnalysis, DRepresentationDescriptor)</code>
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.updateModelsReferences(DView)</code> has replaced 
+				<code>updateModelsReferences(DAnalysis, Iterator&lt;DSemanticDecorator&gt;)</code> because it is more suited to the client needs.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.ui.business.api.dialect.HierarchyLabelProvider</code> has been added to provide a generic label provider for VSM model element giving hierarchical label. This label provider replaces the one returned by deprecated method 
+				<code>DialectUIServices.getHierarchyLabelProvider()</code>. 
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>AbstractSWTCallback</code> provides a default implementation of 
+				<code>UICallBack.askSessionReopeningWithResourceVersionMismatch()</code> method to give feedback about version mismatch and give the choice to reopen session despite a potential corruption.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.control.SiriusControlHandler.getRepresentationsToMove(Shell, Session, EObject)</code> and 
+				<code>SiriusControlHandler.collectExistingRepresentations</code> have been renamed to 
+				<code>getRepresentationDescriptorsToMove(Shell, Session, EObject)</code> and 
+				<code>SiriusControlHandler.collectExistingRepresentationDescriptors</code>. The return type of both that methods and 
+				<code>SiriusControlHandler.askUserWhichRepresentationToSplit</code> has been changed to 
+				<code>DRepresentationDescriptor</code> as 
+				<code>DRepresentationDescriptor</code> is the entry point to work with a 
+				<code>DRepresentation</code> instead of DRepresentation itself.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> The method 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.getHierarchyLabelProvider()</code> has been deprecated in favor of generic label provider 
+				<code>HierarchyLabelProvider</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.allowsCopyPasteFormat(DSemanticDecorator)</code> has been added in replacement of 
+				<code>allowsCopyPasteLayout(DSemanticDecorator)</code> that is now deprecated. This 2 methods must return the same result. 
+				<code>allowsCopyPasteLayout(DSemanticDecorator)</code> will be removed in the new major version.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The constant 
+				<code>EDGE_SNAP_BACK</code> has been added in class 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>. It corresponds to the new snap back label action id that is present on edges.
+			</li>
+			<li><span class="label label-success">Added</span> 2 methods are added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> (and also in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code>):
+				<ul>
+					<li>
+						<code>applyFormat(IGraphicalEditPart)</code>: Apply the current format data (layout data and style data) to the given edit part.
+					</li>
+					<li>
+						<code>applyStyle(IGraphicalEditPart)</code>: Apply the current style data to the give edit part.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> 2 methods are added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>:
+				<ul>
+					<li>
+						<code>createCopyFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of 
+						<code>createCopyLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+					</li>
+					<li>
+						<code>createPasteFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of 
+						<code>createPasteLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> New action ids have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+				<ul>
+					<li>
+						<code>COPY_FORMAT</code>: Action contribution id for the copy format. It replaces the old 
+						<code>COPY_LAYOUT</code>.
+					</li>
+					<li>
+						<code>PASTE_FORMAT</code>: Action contribution id for the paste format. It does not replace the old 
+						<code>PASTE_LAYOUT</code>. The paste format paste the layout and the style. The paste layout only paste layout.
+					</li>
+					<li>
+						<code>PASTE_STYLE</code>: Action contribution id for the paste style.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isDescendantOf(View)</code> has been added to know if a view is a descendant of another view.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.getAncestor(int...)</code> has been added to retrieve the first ancestor of the view, or itself, that has at least one of the visualID passed as parameter.
+			</li>
+			<li><span class="label label-success">Added</span> The new preference key 
+				<code>PREF_SHOW_LINK_EDGE_LABEL_ON_SELECTION</code> has been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. It corresponds to the preference shown in 
+				<em>Sirius/Sirius Diagram/Connections</em> Eclipse preferences.
+			</li>
+			<li><span class="label label-success">Added</span> The new figure 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabelWithAttachment</code> is a specific 
+				<code>SiriusWrapLabel</code> that allows to show an attachment between the label and its edge.
+			</li>
+			<li><span class="label label-success">Added</span> A new kind of request, 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.StraightenToRequest</code>, has been added to handle the new 
+				<em>Straighten to</em> actions. The corresponding id has also been added: 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_STRAIGHTEN</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 4 action ids have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+				<ul>
+					<li>
+						<code>STRAIGHTEN_TO_TOP</code>: For 
+						<em>Straighten to top</em> action,
+					</li>
+					<li>
+						<code>STRAIGHTEN_TO_BOTTOM</code>: For 
+						<em>Straighten to bottom</em> action,
+					</li>
+					<li>
+						<code>STRAIGHTEN_TO_LEFT</code>: For 
+						<em>Straighten to left</em> action,
+					</li>
+					<li>
+						<code>STRAIGHTEN_TO_RIGHT</code>: For 
+						<em>Straighten to right</em> action.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> Constants have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new straighten actions.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.AbstractSiriusFormatDataManager</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.ILayoutDataManagerProvider</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.IFormatDataManagerProvider</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataHelper</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataHelper</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataKey</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataKey</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManagerForSemanticElementsFactory</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerForSemanticElementsFactory</code> instead.
+			</li>
+			<li><span class="label label-info">Moved</span> The translation key 
+				<code>HierarchyLabelProvider_elementWihtoutNameLabel</code> has been removed from the 
+				<code>org.eclipse.sirius.diagram.ui</code> plug-in&#8217;s 
+				<code>Messages</code> class, and moved into the 
+				<code>org.eclipse.sirius.ui</code>'s 
+				<code>Messages</code> class.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in 
+			<code>org.eclipse.sirius.ext.gmf.runtime</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>SiriusSnapFeedbackPolicy</code> has been copied from 
+				<code>org.eclipse.sirius.ext.gef.editpolicies</code> to 
+				<code>org.eclipse.sirius.ext.gmf.runtime.editpolicies</code>. The old class in plug-in 
+				<code>org.eclipse.sirius.ext.gef</code> is deprecated and will be removed in the next version.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The utility methods 
+				<code>getRepresentationDescriptors(final String)</code>, 
+				<code>getRepresentationDescriptors(final String , final Session )</code> and 
+				<code>getRepresentationDescriptorFromRepresentation(DRepresentation)</code> have been added in class 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to adapt tests considering the 
+				<code>DView.ownedRepresentationDescriptors</code> addition.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The utility method 
+				<code>mouseScrollWithKey(int, int, int, int)</code>, has been added in classes 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>, 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code> to allow testing events occurring after a mouse scroll combined to a keyboard key pressed at a given absolute position.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.properties">Changes in 
+			<code>org.eclipse.sirius.properties</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The property 
+				<code>domainClassExpression</code> has been renamed into 
+				<code>iterableExpression</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The properties 
+				<code>fontSize</code> and 
+				<code>labelFontSize</code> have been renamed into 
+				<code>fontSizeExpression</code> and 
+				<code>labelFontSizeExpression</code> since both of them were already treated as expression.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui.properties2">Changes in 
+			<code>org.eclipse.sirius.ui.properties</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> Four utility classes have been added as API in the package 
+				<code>org.eclipse.sirius.ui.properties.api</code> in order to help with the transformation of the description of custom widgets. The class 
+				<code>AbstractDescriptionConverter</code> can now be used as superclass for all the converters. The classes 
+				<code>DefautDescriptionConverter</code>, 
+				<code>DefautStyleDescriptionConverter</code> and 
+				<code>DefautDescriptionWithInitialOperationConverter</code>, now accessible, should handle most of the use cases. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in 
+			<code>org.eclipse.sirius.ecore.extender</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The message 
+				<code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException.PERMISSION_ISSUE_MESSAGE</code> has been modified. You should now use the 
+				<code>MessageFormat</code>. Example: 
+				<code>LockedInstanceException.PERMISSION_ISSUE_MESSAGE + getText(lockedElements)</code> must be replaced by 
+				<code>MessageFormat.format(LockedInstanceException.PERMISSION_ISSUE_MESSAGE, getText(lockedElements))</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessorsRegistry</code> has been refactored to avoid problem with 
+				<code>ModelAccessor</code> lifecycle. The constructor has no longer a parameter.
+			</li>
+		</ul>
+		<h2 id="sirius4.0.0">Changes in Sirius 4.0.0</h2>
+		<h3 id="UserVisibleChanges7">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> The user can now filter elements according to a Typed variable (String, Integer, EEnum or any EDataType). If a user applies a filter containing Typed Variables, a dialog is displayed to allow user entering the Typed Variable values. That values can be used as variables in the Condition Expression of the Variable Filter.</li>
+			<li><span class="label label-success">Added</span> When the diagram is larger than the editor, you can move it in all directions pressing the middle-button and dragging the mouse (keeping the button pressed).</li>
+			<li><span class="label label-info">Modified</span> Now if an object is locked and cannot be modified according to 
+				<code>IPermissionAuthority</code>, the properties view will not be editable if this locked object is selected from the Model Explorer view.
+			</li>
+			<li><span class="label label-info">Modified</span> When trying to reconnect an edge end on another edge, the edge is now highlighted only if a reconnect tool is found (the precondition of the tool is not tested here).</li>
+			<li><span class="label label-info">Modified</span> List items now have the same margin whichever their parent is a simple list or a compartmentalized list. The margin in compartmentalized list was incorrectly set to 0 pixel.</li>
+			<li><span class="label label-info">Modified</span> The wizard to ask the new representation name has been changed. These concerns the title of the wizard and the input label. Example with a new Entities diagram for EcoreTools:</li>
+		</ul>
+		<p>
+			<img border="0" src="images/representationNameWizardChange.png"/>
+		</p>
+		<ul>
+			<li><span class="label label-info">Modified</span> The export of diagram as image handles the gradient color for container background for BMP, JPG, PNG and SVG formats. Before, it only works for JPG format.</li>
+			<li><span class="label label-info">Modified</span> The <img src="images/ApplyAppearanceProperties.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> 
+				<code>Apply Appearance Properties</code> action has been modified to use the last selected element as base style instead of the first one.
+			</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> Sirius 4.0 introduces 
+				<strong>experimental</strong> support for specifying the properties views of your modelers directly from inside the VSM. This feature uses the same dynamic approach as for specifying diagrams, tables and trees, with a very flexible configuration language and no code generation involved (including live preview of any change). As of Sirius 4.0, this feature should be considered in an experimental state with details subject to changes until Sirius 4.1, and is not installed by default. To install it, make sure either 
+				<a href="http://download.eclipse.org/releases/neon">the Eclipse Neon repositry</a> or the 
+				<a href="http://download.eclipse.org/sirius/updates/releases/4.0.0/neon">Sirius 4.0</a> and 
+				<a href="http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6.0">EEF 1.6</a> repositories are available, and then to install the following features (from in the 
+				<em>Modeling</em> category of Neon, or 
+				<em>Sirius Experimental Features</em> of the Sirius repository ):
+				<ul>
+					<li>
+						<em>Sirius Properties Views &#8211; Runtime Support</em> (
+						<code>org.eclipse.sirius.properties.feature.feature.group</code>): needed at runtime for deployed modelers which have properties views defined in their specification.
+					</li>
+					<li>
+						<em>Sirius Properties Views &#8211; Specifier Support</em> (
+						<code>org.eclipse.sirius.specifier.properties.feature.feature.group</code>): provides support for editing the configuration model directly inside the VSM editor and the specifier documentation.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Once this is done, you can find the actual documentation in the 
+			<em>Sirius Specifier Manual</em>, under the 
+			<a href="specifier/properties/Properties_View_Description.html">
+				<em>Properties View</em>
+			</a> section.
+		</p>
+		<ul>
+			<li><span class="label label-success">Added</span> All static strings defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized. Simply replace the name with a translation key reference of the form 
+				<code>%myUniqueKey</code> in the VSM, and define the value in the 
+				<em>Viewpoint Specification Project</em>'s 
+				<code>plugin.properties</code> (for the default value), or 
+				<code>plugin_XX.properties</code> for locale 
+				<code>XX</code>. The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. See 
+				<a href="specifier/general/Specifying_Viewpoints.html#translatable_messages">the corresponding section</a> in the documentation for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is possible to create 
+				<a href="specifier/diagrams/Diagrams.html#filter_with_typed_variable">Typed Variable</a> under Variable Filter.
+			</li>
+			<li><span class="label label-success">Added</span> A new class 
+				<code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> (from plug-in 
+				<code>org.eclipse.sirius.ext.emf.edit</code>) has been added with a complete set of service methods to leverage most of the features of the &#8220;EMF Edit&#8221; framework, for example the various 
+				<em>Item Providers</em> associated to semantic elements. See 
+				<a href="specifier/general/Writing_Queries.html#editing_domain_services">the documentation</a> for details.
+			</li>
+			<li><span class="label label-success">Added</span> The specifier can now restrict the border node authorized sides. This new option is available in the advanced tab of the border node style. See the 
+				<a href="specifier/diagrams/Diagrams.html#authorizedsides">specifier documentation</a> for more details.
+			</li>
+			<li><span class="label label-info">Modified</span> The use of type literals in operations like 
+				<code>filter()</code> or 
+				<code>oclIsKindOf()</code> requires to explicitly add the domain meta-models plug-ins to the dependencies of the 
+				<em>Viewpoint Specification Project</em>. The documentation has been modified to recommend this.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<strong>Warning</strong>: Before this version, a style customization of an 
+				<code>EEnum</code> attribute, like 
+				<code>labelFormat</code>, worked with a value expression using a Java service returning a 
+				<code>EEnumLiteral</code>. It is now forbidden. You must return an 
+				<code>Enumerator</code>. The documentation about 
+				<a href="specifier/diagrams/Diagrams.html#enum_customization">Styles Customization</a> now details this case.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>BorderSizeComputationExpression</code> migration has been corrected to recursively handle the sub container mappings. VSM created or migrated with Sirius 3.1.0, 3.1.1 or 3.1.2 might require a manual modification for the style descriptions of sub container mappings with border size computation equals to 0 as we cannot determine if they were added (or updated) after or before the migration: starting with Sirius 3.1.0, no border will be displayed for a 0 pixel value whereas with older version container always had at least a 1 pixel border.
+			</li>
+			<li><span class="label label-info">Modified</span> The variable under VariableFilter, previously named &#8220;Variable&#8221;, is renamed to &#8220;Select Model Element Variable&#8221;. It is functionally equivalent.</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges7">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> It is now possible to provide a full customized tab-bar by implementing the 
+				<code>ITabbarContributor</code> through the 
+				<code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. See the 
+				<a href="developer/extensions-provide_tabbar_extensions.html#contributeFullTabbar">developer documentation</a> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to provide new shapes for basic shape styles through the 
+				<code>org.eclipse.sirius.diagram.bundledImageShape</code> extension-point. See the 
+				<a href="developer/extensions-provide_custom_bundled_image_shape.html">developer documentation</a> for more details.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius5">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getStatus()</code> has been added to have the status about session opening, i.e. if it has been correctly opened, cancelled or an exception has occurred. 
+			</li>
+			<li><span class="label label-success">Added</span> A new variant of 
+				<code>org.eclipse.sirius.business.api.helper.task.TaskHelper.buildTaskFromModelOperation(EObject, ModelOperation)</code> has been added, which does not require to specify a 
+				<code>DRepresentation</code> in the context. It allows the creation of a task which executes a behavior specified by 
+				<code>ModelOperations</code> outside of the context of a specific representation, provided the 
+				<code>ModelOperations</code> work in that context.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.description.TypedVariable</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code> has been created as tag interface for variables that require user interaction to be valued.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tools.api.command.ui.NoUICallback.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have mean to get required viewpoints to use a representation.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have a default implementation of 
+				<code>DialectServices.getRequiredViewpoints(DRepresentation)</code> method.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isRelatedViewpointSelected(Session, RepresentationDescription)</code> protected method has been added to check if a 
+				<code>RepresentationDescription</code> is usable in the context of the specified session.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String, String)</code> method has been added to replace the deprecated 
+				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String)</code>. This method now uses the description name as title for the wizard. This new method has been implemented by 
+				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback</code> and 
+				<code>org.eclipse.sirius.tools.api.command.ui.NoUICallback</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.loadAndOpenRepresentationsFile(URI, boolean)</code> has been added to specify if job used to open a session must be considered as launched by the user or not, because by default with 
+				<code>ModelingProjectManager.loadAndOpenRepresentationsFile(URI)</code> the job was not considered as launched by the user.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code> now implements 
+				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.description.tool.AbstractVariable</code> has been moved to 
+				<code>org.eclipse.sirius.viewpoint.description.AbstractVariable</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.description.tool.SubVariable</code> has been moved to 
+				<code>org.eclipse.sirius.viewpoint.description.SubVariable</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> methods no more update workspace resource about markers, now this must be done in caller on IllegalArgumentException catch in a workspace aware operation.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.canExecute()</code> now returns false if a 
+				<code>DRepresentation</code> cannot be refreshed, by calling 
+				<code>DialectManager.canRefresh(DRepresentation)</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> Several methods of 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code> now return a 
+				<code>fr.obeo.dsl.viewpoint.DView</code> instead of a 
+				<code>fr.obeo.dsl.viewpoint.DRepresentationContainer</code>: * 
+				<code>findContainer(EObject, Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>,
+				<ul>
+					<li>
+						<code>findContainerForAddedRepresentation(EObject, Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector, DRepresentation)</code>,
+					</li>
+					<li>
+						<code>findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code>, 
+						<code>findFreeContainer(Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>
+					</li>
+					<li>
+						<code>findFreeContainer(Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> EClass have been removed. It used to be the only implementation of 
+				<code>org.eclipse.sirius.viewpoint.DView</code>, the 
+				<code>models</code> derived transient reference has been moved to 
+				<code>DView</code>. An automatic migration has been added during the loading of the representation to handle this change.
+			</li>
+			<li><span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been deleted and is now 
+				<code>MetamodelDescriptorProvider</code>. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common3">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A method 
+				<code>getInferredVariableTypes(Boolean value)</code> in 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> so that 
+				<code>IInterpreter</code> implementations able to infer more specific types based on predicates result provides this information to Sirius which will then use it for validating other expressions. You might want to look at 
+				<code>org.eclipse.sirius.common.acceleo.aql.business.internal.AQLSiriusInterpreter</code> which is an implementation providing this type inference.
+			</li>
+			<li><span class="label label-success">Added</span> A helper 
+				<code>org.eclipse.sirius.common.tools.api.util.MessageTranslator</code> providing 
+				<code>getMessage(EObject, String)</code> and 
+				<code>getMessage(Bundle, String)</code> service dedicated into processing a translatable message to return the translation in the active language when available. This service returns the String without modification if not translatable or no translation is available.
+			</li>
+			<li><span class="label label-success">Added</span> The &#8220;INFO&#8221; severity has been added to 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus</code> to reflect all kind of language validation severity (of AQL for example).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.VariableValue</code>, 
+				<code>org.eclipse.sirius.diagram.TypedVariableValue</code> and 
+				<code>org.eclipse.sirius.diagram.EObjectVariableValue</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code> has been created to indicate that variables have to be computed again.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.description.style.Side</code> EEnum has been added to define a border node side on the parent.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.description.style.NodeStyleDescription#forbiddenSides</code> attribute has been added to set the border node forbidden sides on the parent.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.business.api.query.DNodeQuery.getForbiddenSide()</code> has been added to retrieve the forbidden sides of a DNode (make sense only for Border Nodes).
+			</li>
+			<li><span class="label label-info">Modified</span> The type of 
+				<code>org.eclipse.sirius.diagram.description.filter.VariableFilter.ownedVariable</code> has been changed to 
+				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The type of 
+				<code>org.eclipse.sirius.diagram.FilterVariableHistory.ownedValues</code> has been changed to 
+				<code>org.eclipse.sirius.diagram.VariableValue</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The return type of 
+				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.findRepresentationContainer(DDiagram)</code> has been changed from 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> to 
+				<code>org.eclipse.sirius.viewpoint.DView</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.diagram.description.filter.FilterVariable</code> has been removed. It is replaced by 
+				<code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.setFilterContext()</code> has been removed. This method was, in part, useless and is replaced by 
+				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui5">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> The new internationalizable label 
+				<code>Messages_createRepresentationInputDialog_DefaultRepresentationDescName</code> has been added (available through 
+				<code>org.eclipse.sirius.ui.tools.api.Messages.createRepresentationInputDialog_DefaultRepresentationDescName</code>. Its value is &#8220;Representation&#8221;.
+			</li>
+			<li><span class="label label-info">Modified</span> The internationalizable label 
+				<code>Messages_createRepresentationInputDialog_NewRepresentationNameLabel</code> has been replaced by &#8220;Name:&#8221; (previous value was &#8220;Representation name:&#8221;). 
+			</li>
+			<li><span class="label label-info">Modified</span> The internationalizable label 
+				<code>Messages_createRepresentationInputDialog_RepresentationDescriptionLabel</code> has been replaced by &#8220;Representation description: {0}&#8221; (previous value was &#8220;Representation description: &#8221;). 
+			</li>
+			<li><span class="label label-info">Modified</span> The internationalizable label 
+				<code>Messages_createRepresentationInputDialog_Title</code> has been replaced by &#8220;New {0}&#8221; (previous value was &#8220;New Representation&#8221;).
+			</li>
+			<li><span class="label label-danger">Removed</span> The internationalizable label 
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.OpenRepresentationsFileJob_initModelingProjectsTask</code> has been removed as this message is no more used.
+			</li>
+			<li><span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.ui.business.api.editor.SpecificSessionManager</code> has been removed. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A new system property named 
+				<code>org.eclipse.sirius.diagram.ui.svg.maxCacheSizeMB</code> has been added. It can be used to tweak the maximum size (in megabytes) of pre-rendered SVG images to keep in cache. The default is 50, corresponding to 50MB of bitmaps of 4 8-bit channels. Increasing the limit can improve performance when using diagrams with a lot of SVG images, at the cost of increased memory usage.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> interface has been added to provide a customized tab-bar for a specific selection.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code> is an abstract implementation of 
+				<code>ITabbarContributor</code> that allows reusing one or several of the default Sirius contribution items.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.editor.properties.sections.style.bundledimagedescription.BundledImageDescriptionShapePropertySectionSpec</code> has been added to have a custom display in the VSM for provided basic shape.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart.createNodeFigure()</code> has been created to factorize the 
+				<code>DNode2EditPart</code> and 
+				<code>DNode4EditPart</code> constructors.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.setForbiddenSides(int...)</code> has been added to set the figure forbidden sides on its parent.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.getAuthorizedSides()</code> has been added to retrieve the figure authorized side (by default all sides).
+			</li>
+			<li><span class="label label-success">Added</span> The following protected methods have been added to 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> : 
+				<code>String getKey(Graphics)</code>, 
+				<code>Image getImage(Rectangle, Graphics)</code>, 
+				<code>static boolean doRemoveFromCache(String)</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 2 methods are added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code> to manage gradient color in export to PNG or SVG formats: 
+				<code>DiagramEditPartService.saveSVGToFile(IPath, SiriusDiagramSVGGenerator, IProgressMonitor)</code> and 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.saveToFile(IPath, SiriusDiagramSVGGenerator, ImageFileFormat, IProgressMonitor)</code>. These 2 methods are copy of parent methods with 
+				<code>SiriusDiagramSVGGenerator</code> as parameter instead of a 
+				<code>DiagramSVGGenerator</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getGradientPaintFromValue(int, int, int, int, Color, Color)</code> has been added to handle a cache for 
+				<code>java.awt.GradientPaint</code> as it is the case for 
+				<code>org.eclipse.swt.graphics.Pattern</code> with 
+				<code>getPatternFromValue()</code>.
+			</li>
+			<li><span class="label label-success">Added</span> Methods have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientHelper</code> to handle 
+				<code>java.awt.GradientPaint</code> as 
+				<code>org.eclipse.swt.graphics.Pattern</code>: 
+				<code>getGradientPaintDiag(Rectangle, Color, Color)</code>, 
+				<code>getGradientPaintLeftToRight(Rectangle, Color, Color)</code>, 
+				<code>getGradientPaintTopToBottom(Rectangle, Color, Color)</code> and 
+				<code>getGradientPaint(int, Rectangle, Color, Color)</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES</code> has been added to identify the new 
+				<em>Sirius Copy Appearence Properties</em> action.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundleImageFigure</code> now overrides the method 
+				<code>setBorder(Border border)</code>. It also provides the accessors for the new field 
+				<code>mainBorderSize</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundledImageFigure</code> now inherits directly from 
+				<code>SVGFigure</code> instead of 
+				<code>AbstractCachedSVGFigure</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure</code> now inherits directly from 
+				<code>SVGFigure</code> instead of 
+				<code>AbstractCachedSVGFigure</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> now implements interfaces 
+				<code>StyledFigure</code>, 
+				<code>ITransparentFigure</code> and 
+				<code>ImageFigureWithAlpha</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The following mehtods have been removed from 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code>: 
+				<code>NodeList getNodes(String)</code>, 
+				<code>Color getColor(Element, String)</code>, 
+				<code>void updateRenderingHints(Graphics)</code>, 
+				<code>staticImage toSWT(Device, BufferedImage)</code>, 
+				<code>boolean checkContentAvailable()</code>, 
+				<code>Rectangle2D getAreaOfInterest()</code>, 
+				<code>void setAreaOfInterest(Rectangle2D)</code>, 
+				<code>boolean isSpecifyCanvasWidth()</code>, 
+				<code>void setSpecifyCanvasWidth(boolean)</code>, 
+				<code>boolean isSpecifyCanvasHeight()</code>, 
+				<code>void setSpecifyCanvasHeight(boolean)</code>, 
+				<code>boolean getSpecifyCanvasWidth()</code>, 
+				<code>boolean getSpecifyCanvasHeight()</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> has been removed. Its functionality was merged directly into 
+				<code>SVGFigure</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The static 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure.createImageFigure(ContainerStyle)</code> method has been removed; it was broken and not called anywhere.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.emf.ui">Changes in 
+			<code>org.eclipse.sirius.ext.emf.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.ext.emf.ui.properties.ExtensiblePropertySource.collector</code> field is now in protected visibility to be modifiable and accessible by subclass.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in 
+			<code>org.eclipse.sirius.ext.gmf.runtime</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The interface 
+				<code>org.eclipse.sirius.ext.gmf.runtime.diagram.ui.tools.MoveInDiagramDragTracker</code> has been added to declare states used by all DragTrackers which manage move in diagram using mouse middle click.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui6">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertyDescriptor</code> has been added to provide a specific 
+				<code>ExtensiblePropertyDescriptor</code> which test 
+				<code>IPermissionAuthority</code> to make properties view editable or not.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been modified to use 
+				<code>SiriusExtensiblePropertyDescriptor</code> to provide not editable properties view when the object, selected from the Model Explorer view, cannot be modified.
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.ui</code>, and thus the whole 
+				<code>org.eclipse.sirius.runtime</code> feature no longer depends on the JDT (technically the dependency towards 
+				<code>org.eclipse.jdt.core</code> has been removed). If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+				<code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support4">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.support.api.DefaultTestMemento</code> has been created. It help to simulate a real 
+				<code>IMemento</code> for editor restoration.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>SiriusTestCase.initViewpoint(String, Session, boolean)</code> has been added to allow viewpoint activation without creating representations.
+			</li>
+			<li><span class="label label-success">Added</span> The methods 
+				<code>initLoggers()</code> and 
+				<code>disposeLoggers()</code> of class 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> have now a protected visibility (instead of private) to allow subclasses to use this logger without all the 
+				<code>genericSetUp</code> behavior.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> The method 
+				<code>SiriusTestCase.initViewpoint(String, Session, EObject)</code> has been deprecated because the last parameter is useless to activate a viewpoint.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>getTreeItem(final SWTBotTreeItem[], final String)</code> has been added in 
+				<code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a 
+				<code>SWTBotTreeItem</code> in a 
+				<code>SWTBotTreeItem</code> array.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.ShellChangedCondition</code> has been added to wait until the current active shell has changed.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeItemWithImageCondition</code> has been added to wait until the given treeItem has the expected image.
+			</li>
+			<li><span class="label label-info">Modified</span> A second 
+				<code>String</code> parameter has been added to the method 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession.newDiagramRepresentation(String, String)</code>. This parameter is the label of the representation description. It is necessary since the change of the wizard to ask the new representation name (see User-Visible Changes for detail).
+			</li>
+			<li><span class="label label-info">Modified</span> A third 
+				<code>String</code> parameter has been added to the constructor of 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UINewRepresentationBuilder</code> for the same above reasons.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common.xtext">Changes in 
+			<code>org.eclipse.sirius.common.xtext</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The dependency from 
+				<code>org.eclipse.sirius.common.xtext</code> to the JDT plug-in 
+				<code>org.eclipse.jdt.core</code> is now optional. If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+				<code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.editor">Changes in 
+			<code>org.eclipse.sirius.editor</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>bindCompletionProcessor(AbstractPropertySection, IAssistContentProvider, Text)</code> has been added to the class 
+				<code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider</code> to allow to bind a specific IAssistContentProvider to the text.
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/Release_Notes_Previous.html b/doc/5.1.x/Release_Notes_Previous.html
new file mode 100644
index 0000000..915b8a2
--- /dev/null
+++ b/doc/5.1.x/Release_Notes_Previous.html
@@ -0,0 +1,3564 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Release_Notes_Previous</title>
+		<link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#sirius3.1.0">Changes in Sirius 3.1.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius3.0.0">Changes in Sirius 3.0.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges2">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius2.0.0">Changes in Sirius 2.0.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges3">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#APIChanges">API Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges4">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#APIChanges2">API Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#APIChanges3">API Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius1.0M6">Changes in Sirius 1.0.0M6 (from Sirius 1.0M5)</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#APIChanges4">API Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges5">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#APIChanges5">API Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges6">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#APIChanges6">API Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius0.9">Changes in Sirius 0.9.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#MigratingfromObeoDesignerorViewpointtoSirius">Migrating from Obeo Designer or Viewpoint to Sirius</a>
+							</li>
+							<li>
+								<a href="#Pluginsversionnumbers.">Plug-ins version numbers.</a>
+							</li>
+							<li>
+								<a href="#Majornamespacechanges">Major namespace changes</a>
+							</li>
+							<li>
+								<a href="#NatureID">Nature ID</a>
+							</li>
+							<li>
+								<a href="#OtherAPIChanges">Other API Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges6">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#UserVisibleChanges7">User-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<p>This document contains the release notes for older versions of of Sirius.</p>
+		<h2 id="sirius3.1.0">Changes in Sirius 3.1.0</h2>
+		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> A new feature allows to snap to all shapes (instead of just to snap to sibling shapes). The <kdb>F4</kdb> shortcut key activates this mode when you resize a node, move a node or move a bendpoint of an edge, see 
+				<a href="./user/diagrams/Diagrams.html#snap_to_shapes">the documentation</a> for details.
+			</li>
+			<li><span class="label label-success">Added</span> A new feature allows to move the edge group (Edge, Label, Border Nodes) if the <kdb>F3</kdb> shortcut is pressed during the edge moving/dragging. This feature is only available for the case of edges with border node as source and target. See 
+				<a href="./user/diagrams/Diagrams.html#move_edge_group">documentation</a> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> The label of edges now stays as much as possible near the edge when it is moved.</li>
+		</ul>
+		<p>Sample before Sirius 3.1:
+			<br/>
+			<img border="0" src="images/edgeLabelMoveBeforeSirius3.1.gif"/> 
+			<br/>Same sample since Sirius 3.1:
+			<br/>
+			<img border="0" src="images/edgeLabelMoveAfterSirius3.1.gif"/>
+		</p>
+		<ul>
+			<li><span class="label label-success">Added</span> It is now possible to collapse compartments using the handle visible on the following illustrations. The handle&#8217;s position varies depending on the label alignment to avoid overlapping (depending on the list elements alignment for a list with an hidden label).</li>
+		</ul>
+		<p>
+			<img border="0" src="images/compartments_collapse.png"/> 
+			<br/>
+			<img border="0" src="images/compartments_collapse2.png"/>
+		</p>
+		<ul>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Snap to Grid</em> and 
+				<em>Snap to Shapes</em> features are now automatically disabled on Sequence diagrams. As indicated 
+				<a href="./user/sequences/Sequence%20Diagrams.html#introduction">in the user documentation</a>, to work correctly, Sirius sequence diagrams must have a tight control on where the graphical elements are placed on the diagram and on their synchronization with the underlying semantic model. Previously, the user had to explicitely disable the snap features.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Link with Editor</em> behavior has changed. The link with editor was previously unidirectional from the Common Navigator (Model Explorer view or Project view) toward the active representation. Now, when selecting one or several elements in the representation, the corresponding semantic elements are selected in the Common Navigator.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Arrange Linked Bordered Nodes</em> tabbar action has been renamed to 
+				<em>Arrange Linked Border Nodes</em> as it is border nodes which are layouted and not bordered nodes.
+			</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Acceleo Query Language</em> (AQL) interpreter has been improved. AQL, and its support in Sirius, is no longer considered experimental, and instead is now the recommended query language to use for new VSMs. Improvements mostly concern better completion and validation, and more precise error reporting. In particular AQL expressions will now be able to display warnings and errors in the Interpreter view. The message displayed in the Interpreter view after an evaluation has also been improved to display the qualified name of the type of the value computed (
+				<code>ePackageName::eClassName</code>). The improvements realized can be viewed by clicking on the image below (click to zoom).
+			</li>
+		</ul>
+		<p>
+			<a href="images/improvedsiriusinterpreter.png">
+				<img border="0" src="images/improvedsiriusinterpreter_thumbnail.png"/>
+			</a>
+		</p>
+		<ul>
+			<li><span class="label label-info">Modified</span> Related to the previous point, the projects created by the 
+				<em>Viewpoint Specification Project</em> wizard are now configured to use AQL by default (instead of Acceleo 3/MTL before). They depend on 
+				<code>org.eclipse.sirius.common.acceleo.aql</code> instead of 
+				<code>org.eclipse.sirius.common.acceleo.mtl</code>, and do not have the Acceleo nature anymore (it is not needed by AQL). If you want to use another language in your queries, make sure you set the appropriate dependencies so that the Sirius support for that language will be present at runtime to interpret the queries.
+			</li>
+			<li><span class="label label-info">Modified</span> The support for containers with vertical or horizontal 
+				<em>compartments</em> on diagrams was introduced in Sirius 3.0.0 as an experimental feature. Several improvements and corrections have been done around the behaviors of this feature which is no longer considered experimental. Validation rules and tooltips in the VSM editor are here to help the specifier create a consistent mapping structure.
+			</li>
+			<li><span class="label label-info">Modified</span> <span class="label label-info">Experimental</span> New, experimental support for recursive 
+				<em>compartments</em> on diagrams: the 
+				<em>children presentation</em> property of a 
+				<em>Container Mapping</em>, which is defined as a 
+				<em>compartment</em> (its parent 
+				<em>ContainerMapping</em> has a 
+				<em>VerticalStack</em> or 
+				<em>HorizontalStack</em> 
+				<em>children presentation</em>), can now also be set to 
+				<em>Vertical Stack</em> and 
+				<em>Horizontal Stack</em>. It allows to define complex stacks of 
+				<em>compartments</em> mixing both stack directions. While working reliably, this support is marked experimental in Sirius 3.1.0 as there are still some behaviors which do not behave as expected. If you make use of this feature, be aware that some details may still change in future releases, including 3.1.x maintenance releases.
+			</li>
+			<li><span class="label label-info">Modified</span> You now really have the capability to set the 
+				<code>BorderSizeComputationExpression</code> as 0 for style of 
+				<code>ContainerMapping</code>. Before Sirius 3.1.0, a size of 0 was interpreted as 1 at runtime. For compatibility reason, all existing 
+				<code>BorderSizeComputationExpression</code> equals to 0 for style of 
+				<code>ContainerMapping</code> are automatically set to 1 (ditto for results of this expression in representations file for container elements). For 
+				<code>ContainerMapping</code>, the default value of 
+				<code>BorderSizeComputationExpression</code> for new style is now 1, except for 
+				<em>Worskpace Image</em> where the value is 0.
+			</li>
+			<li><span class="label label-info">Modified</span> The delete command availability computation has been changed. In case of a delete tool, the availability is now computed considering first the precondition of the tool and then the delete authorisation (using 
+				<code>IPermissionAuthority</code>) of the potential to delete objects. This is the reverse order of what was done before, and can have performance impacts if the precondition is slow. The specifier will to take care to ensure a good performance for the precondition expression of the delete tool.
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+		<h4 id="Partialsupportforinternationalization">Partial support for internationalization</h4>
+		<p>Sirius 3.1 introduces partial support for internationalization: all literal strings from the runtime part of Sirius are now externalized and can be localized by third parties by providing the appropriate &#8220;language packs&#8221; as OSGi fragments. Note that this does not concern the VSM editor&#8217;s UI, the VSMs themselves, or the parts of the UI inherited from Eclipse/EMF/GEF/GMF and other libraries and frameworks used by Sirius.</p>
+		<p>Some API changes were required to enable this. While technically breaking changes if interpreting strictly the OSGi versioning rules, the major version number of the impacted bundles was not incremented as the changes only concern classes that should not impact the vast majority of users. Most breaking changes concern the plug-in/activator classes from each bundle. They are:</p>
+		<ul>
+			<li><span class="label label-success">Added</span>
+				<code>org.eclipse.sirius.diagram.layoutdata.LayoutDataPlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>LayoutDataPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span>
+				<code>org.eclipse.sirius.diagram.sequence.SequenceDiagramPlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>SequenceDiagramPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span>
+				<code>org.eclipse.sirius.common.xtext.internal.XtextIntegrationPlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>XtextIntegrationPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ext.base.BasePlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>BasePlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ext.draw2d.Draw2DExtPlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>Draw2DExtPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ext.e3.ui.Eclipse3UIExtPlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>Eclipse3UIExtPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ext.emf.EMFExtPlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>EMFExtPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.synchronizer.internal.SynchronizerPlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>SynchronizerPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tree.tools.internal.TreePlugin</code>, a subclass of 
+				<code>org.eclipse.emf.common.EMFPlugin</code> has been added. The corresponding OSGi bundle activator is the internal class 
+				<code>TreePlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoMTLInterpreterIDEPlugin</code> is no longer an OSGi 
+				<code>BundleActivator</code>, and instead extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>AcceleoMTLInterpreterIDEPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoMTLInterpreterPlugin</code> is no longer an OSGi 
+				<code>BundleActivator</code>, and instead extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>AcceleoMTLInterpreterPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.common.ocl.DslOclPlugin</code> is no longer a 
+				<code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi 
+				<code>BundleActivator</code>), and instead extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>DslOclPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.common.tools.DslCommonPlugin</code> is no longer a 
+				<code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi 
+				<code>BundleActivator</code>), and instead extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>DslCommonPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.DiagramPlugin</code> is no longer a 
+				<code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi 
+				<code>BundleActivator</code>), and instead extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>DiagramPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.ecore.extender.business.internal.ExtenderPlugin</code> is no longer a 
+				<code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi 
+				<code>BundleActivator</code>), and instead extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>ExtenderPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.table.tools.internal.TablePlugin</code> is no longer a 
+				<code>org.eclipse.core.runtime.Plugin</code> (nor an OSGi 
+				<code>BundleActivator</code>), and instead extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>TablePlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Renamed, Modified</span> 
+				<code>org.eclipse.sirius.eef.adapters.Activator</code> has been renamed into 
+				<code>org.eclipse.sirius.eef.adapters.EEFAdapterPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>EEFAdapterPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Renamed, Modified</span> 
+				<code>org.eclipse.sirius.common.acceleo.interpreter.Activator</code> has been renamed into 
+				<code>org.eclipse.sirius.common.acceleo.interpreter.InterpreterViewPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>InterpreterViewPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Renamed, Modified</span> 
+				<code>org.eclipse.sirius.table.ui.ext.Activator</code> has been renamed into 
+				<code>org.eclipse.sirius.table.ui.ext.TableUIExtPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>TableUIExtPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Renamed, Modified</span> 
+				<code>org.eclipse.sirius.ui.ext.Activator</code> has been renamed into 
+				<code>org.eclipse.sirius.ui.ext.SiriusUIExtPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>SiriusUIExtPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Renamed, Modified</span> 
+				<code>org.eclipse.sirius.tree.ui.ext.Activator</code> has been renamed into 
+				<code>org.eclipse.sirius.tree.ui.ext.TreeUIExtPlugin</code> and is no longer an OSGi bundle activator (hence the name change, to avoid confusion). Instead it extends 
+				<code>org.eclipse.emf.common.EMFPlugin</code>. The actual bundle activator is the new internal class 
+				<code>TreeUIExtPlugin.Implementation</code>.
+			</li>
+			<li><span class="label label-info">Renamed</span> 
+				<code>org.eclipse.sirius.diagram.sequence.ui.SequenceDiagramPlugin</code> has been renamed into 
+				<code>org.eclipse.sirius.diagram.sequence.ui.SequenceDiagramUIPlugin</code> for consistency and to avoid potential name clashes with the new 
+				<code>org.eclipse.sirius.diagram.sequence.SequenceDiagramPlugin</code>.
+			</li>
+		</ul>
+		<p>Additional non-breaking changes:</p>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ext.base.I18N</code> has been added. It provides common utility code to support internationalization. 
+			</li>
+			<li><span class="label label-success">Added</span> The translation keys (and default values) have been added to all the concerned bundles, in their 
+				<code>plugin.properties</code> file. These (translated) messages are available at runtime as static fields of new 
+				<code>Messages</code> classes, added to all concerned bundles (always in the same package as their plug-in/activator class). The concerned bundles are:
+				<ul>
+					<li>
+						<code>org.eclipse.sirius</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.ext.base</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.ecore.extender</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.synchronizer</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.common</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.common.acceleo.aql</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.common.acceleo.aql.ide</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.common.acceleo.mtl</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.common.acceleo.mtl.ide</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.common.ui</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.diagram.layoutdata</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.diagram.sequence</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.diagram.sequence.ui</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.diagram</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.diagram.ui</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.eef.adapters</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.interpreter</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.table</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.table.ui</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.tree</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.tree.ui</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.ui</code>
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>invokeMethod</code> has been added in class 
+				<code>org.eclipse.sirius.common.tools.api.util.ReflectionHelper</code> to call a private method. Warning: This method must be used carefully.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>invokeMethodWithoutException</code> has been added in class 
+				<code>org.eclipse.sirius.common.tools.api.util.ReflectionHelper</code> to call a private method. This method returns true (and not the result of the method) if it is called without exception. It returns false otherwise. Warning: This method must be used carefully.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Added</span> The new interface 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterWithDiagnostic</code> has been added. It allows an interpreter to evaluate an expression and return not only the result of the evaluation but also a diagnostic.
+			</li>
+			<li><span class="label label-success">Added</span> The new class 
+				<code>org.eclipse.sirius.common.tools.api.contentassist.ContentProposalWithReplacement</code> has been added. It allows interpreters to provide proposals for the code completion which can replace an existing part of the expression used. This behavior can be used if the user has started to type a value that would be returned by the code completion. For example, if the user types 
+				<code>aql:self.na</code> and if he selects the content proposal 
+				<code>name</code>, it can replace the existing part of the expression 
+				<code>na</code> to write 
+				<code>aql:self.name</code> instead of just appending 
+				<code>name</code> to create 
+				<code>aql:self.naname</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The new class 
+				<code>org.eclipse.sirius.common.tools.api.contentassist.ContentProposalBuilder</code> used to build the content proposals with their various parameters more easily.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>addEvaluateSelectionExpressionTask</code> has been added in class 
+				<code>org.eclipse.sirius.tools.api.command.AbstractCommandFactory</code> to allow selection after tool execution.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.StandardServices</code> has been added. This class owns methods used for 
+				<code>service:</code> interpreter.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been added and should be preferred instead of implementing 
+				<code>MetamodelDescriptorProvider</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl.addViewpointFileCollector()</code> method has been added to replace deprecated 
+				<code>ViewpointRegistryImpl.addSiriusFileCollector()</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority.canDeleteInstance(EObject)</code> when called for an object will not be called for children of this object as we know it will return true because if we can delete a parent object we can delete its children. 
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.tools.api.command.DCommand</code> no longer inherits from 
+				<code>IUndoableCommand</code> since undo/redo is managed by EMF Transaction.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl.addSiriusFileCollector()</code> method has been deprecated as it is about 
+				<code>ViewpointFileCollector</code> and not 
+				<code>SiriusFileCollector</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.business.api.helper.task.ICommandTask.undo()/redo()</code> methods removed because they are useless since undo/redo is managed by EMF Transaction.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.tools.api.command.IUndoableCommand</code> interface removed because it is useless since undo/redo is managed by EMF Transaction.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getInput()</code> method has been added to get the real input for a 
+				<code>DRepresentation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getSession(boolean)</code> method has been added to let the caller choose to create and open a new 
+				<code>Session</code> or not when the known session is closed or does not exist. The 
+				<code>getSession</code> method calls getSession(true).
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.selectAndReveal(DialectEditor, List&lt;DRepresentationElement&gt;)</code> method has been added to explicitly indicate to reveal elements out of the screen (hidden because of the scrollbars location) when selecting them.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.dispose()</code> method has been deprecated as an 
+				<code>IEditorInput</code> can be reused by several instances of 
+				<code>IEditorPart</code> through the navigation history view.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.RegionRegionContainerResizableEditPolicy</code> has been added to handle 
+				<code>DNodeContainer</code> which are both 
+				<code>Region</code> and 
+				<code>RegionContainer</code>: during resize they might have to propagate the resize to their children and/or parents.
+			</li>
+			<li><span class="label label-success">Added</span> The constant 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutUtils.COLLAPSED_VERTICAL_REGION_HEIGHT</code> has been added to centralize the minimum height of a collapsed Region from a Region Container with a vertical stack children presentation.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramNodeEditPart/IDiagramBorderNodeEditPart.getNodeLabel()</code> methods has been moved up to 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.IAbstractDiagramNodeEditPart.getNodeLabel()</code> as both 
+				<code>IDiagramNodeEditPart</code> and 
+				<code>IDiagramBorderNodeEditPart</code> inherits of 
+				<code>IAbstractDiagramNodeEditPart</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES</code> added to replace 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES_TOOLBAR</code> which is deprecated.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES_TOOLBAR</code> added to replace 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES</code> which is deprecated 
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.SetConnectionBendpointsAndLabelCommmand</code> is a new class that allows to update edge label when updating bendpoints. Several existing Sirius commands now extends this new class.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.decorators.AbstractSiriusDecorator.shouldBeVisibleAtPrint()</code> method added to leave 
+				<code>AbstractSiriusDecorator</code> extenders indicate if decoration should be visible at diagram export/print.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES</code> deprecated in favor 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES</code> as it is an action id about border nodes layout.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDERED_NODES_TOOLBAR</code> deprecated in favor 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ARRANGE_BORDER_NODES_TOOLBAR</code> as it is an action id about border nodes layout.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.diagram.ui.graphical.edit.policies.EdgeCreationEditPolicy</code> has been removed as it should not be in API and has been replaced by internal 
+				<code>org.eclipse.sirius.diagram.ui.internal.edit.policies.SiriusConnectionEditPolicy</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The method 
+				<code>setUseLocalCoordinates(boolean)</code> has been removed from 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientRoundedRectangle</code>, 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerParallelogram</code>, 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ViewNodeContainerRectangleFigureDesc</code> as it was generated by GMF tooling and never used in Sirius whose edit parts and edit policies expect 
+				<code>org.eclipse.draw2d.IFigure.useLocalCoordinates()</code> to always return false for its figures. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.synchronizer">Changes in 
+			<code>org.eclipse.sirius.synchronizer</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.synchronizer.CreatedOutput.synchronizeChildren()</code> method takes now a 
+				<code>RefreshPlan</code> in parameter to have more informations to say if children must be synchronized.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.support.api.AbstractToolDescriptionTestCase</code> has been created. It contains utility methods about tools.
+			</li>
+			<li><span class="label label-info">Modified</span> The class 
+				<code>org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase</code> has been modified 
+				<ul>
+					<li><span class="label label-info">Modified</span> It now inherits from 
+						<code>AbstractToolDescriptionTestCase</code> 
+					</li>
+					<li><span class="label label-success">Added</span> The method 
+						<code>applyContainerCreationTool(String,DDiagram,EObject)</code> has been added.
+					</li>
+					<li><span class="label label-success">Added</span> The method 
+						<code>applyGenericTool(String,DDiagram,EObject)</code> has been added.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The methods 
+				<code>closePerspective(String)</code>, 
+				<code>closeSiriusPerspective()</code> and 
+				<code>closeModelingPerspective()</code> have been added in class 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.perspective.DesignerPerspectives</code> to allow the closing of perspectives.
+			</li>
+			<li><span class="label label-success">Added</span> The 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.PerspectiveActivatedCondition</code> new offers the capability to inverse the test. This condition becomes a DeactivatedCondition instead of an ActivatedCondition by using the new constructor with inverse parameter.
+			</li>
+			<li><span class="label label-success">Added</span> The methods 
+				<code>isSnapToShape</code> and 
+				<code>isSnapToGrid()</code> have been added in class 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>. They allow to know the state of the corresponding properties.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.dragWithKey(int, int, int, int, int)</code> (and also 
+				<code>SWTBotSiriusGefViewer.dragWithKey</code> and 
+				<code>SWTBotSiriusFigureCanvas.mouseDragWithKey</code>), has an additional fifth parameter compared to 
+				<code>drag(int, int, int, int)</code> method, to indicate the key code to press during the drag&#8217;n&#8217;drop. It is possible to call this method with 
+				<code>SWT.None</code> to obtain the standard behavior of 
+				<code>drag</code> method. This method also has a correct behavior for the move of bendpoints of edges.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.TopCondition</code>: New condition to wait that top of the edit part is on the expected location.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.BendpointLocationCondition</code>: New condition to wait that a bendpoint is on the expected x or y location.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeChildrenNumberCondition</code>: New condition to wait that a tree has the expected number of children.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tests.swtbot.support.utils.SWTBotCommonHelper.saveCurrentEditor(Session)</code>: This new method is preferable to 
+				<code>saveCurrentEditor()</code> because there is a wait condition to ensure that the save is finished.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.CheckBoundsCondition</code>: This condition now also checks the bounds location if the checkWidth or checkHeight (or both) is false.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.gef">Changes in 
+			<code>org.eclipse.sirius.ext.gef</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The new class 
+				<code>org.eclipse.sirius.ext.gef.query.EditPartQuery</code> has been added. It allows to retrieve all children of the current part.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.jface">Changes in 
+			<code>org.eclipse.sirius.ext.jface</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The new class 
+				<code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> has been copied from JFace 3.10 from Luna, so that we can use it with Juno and Kepler too.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in 
+			<code>org.eclipse.sirius.ext.gmf.runtime</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> Two new 
+				<code>getIntersection</code> methods have been added in 
+				<code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>. They are similar to the existing 
+				<code>getIntersection</code> methods, but they consider the nearest point on the figure if there is no intersection.
+			</li>
+		</ul>
+		<h2 id="sirius3.0.0">Changes in Sirius 3.0.0</h2>
+		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> The ability to print table representations has been re-introduced.</li>
+			<li><span class="label label-success">Added</span> The quick outline feature has been added for tree and table editors, see documentation for details.</li>
+			<li><span class="label label-success">Added</span> The label of a list or container can now be hidden by the user from the outline, the tabbar or the contextual menu.</li>
+			<li><span class="label label-success">Added</span> In the 
+				<em>Appearance</em> tab, in addition to 
+				<em>Bold</em> and 
+				<em>Italic</em>, it is now possible to set the font formatting style to 
+				<em>Underline</em> and 
+				<em>Strike through</em> (or any combination of these).
+			</li>
+			<li><span class="label label-success">Added</span> Container elements on diagrams now support vertical and horizontal compartments layout (this is only visible if the modeler configuration makes use of this new feature). </li>
+			<li><span class="label label-success">Added</span> In table and tree editors, a 
+				<em>Refresh</em> can now be launched by hitting <kbd>F5</kbd> like in diagrams (previously the only way was to click on the 
+				<em>Refresh</em> icon or menu item).
+			</li>
+			<li><span class="label label-success">Added</span> In table editors, hitting the <kdb>Del</kdb> key is now equivalent to selecting 
+				<em>Delete Line</em> in the context menu.
+			</li>
+			<li><span class="label label-success">Added</span> On diagrams, it is now possible to set a custom background image on list containers.</li>
+			<li><span class="label label-info">Modified</span> In the 
+				<em>Viewpoint Selection</em> dialog and wizard page, the &#8220;plug-in&#8221; decorator for viewpoints loaded from plug-ins is removed, and a &#8220;Folder&#8221; decorator for viewpoints loaded from the current workspace has been added. This makes the icons more visible in the most common where viewpoints come from installed plug-ins.
+			</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> <span class="label label-info">Experimental</span> Optional support for the experimental 
+				<em>Acceleo Query Language</em> (AQL) has been added to write interpreted expressions.  It is provided by the 
+				<code>org.eclipse.sirius.common.acceleo.aql</code> (required for evaluating the expressions) and 
+				<code>org.eclipse.sirius.common.acceleo.aql.ide</code>  (optional, only needed to provide specification-time features like expression completion) plug-ins. AQL is similar to Acceleo 3/MTL, but simpler and provides much better performance in the Sirius context. If you make use of this feature, be aware that some details may still change in future releases, including 3.0.x maintenance releases. See <a href="https://www.eclipse.org/acceleo/documentation/aql.html" target="_blank">the AQL documentation</a> for more details on the language itself.
+			</li>
+			<li><span class="label label-success">Added</span> <span class="label label-info">Experimental</span> New, experimental support for containers with vertical or horizontal 
+				<em>compartments</em> on diagrams: the 
+				<em>children presentation</em> property of a 
+				<em>Container Mapping</em> has two new values: 
+				<em>Vertical Stack</em> and 
+				<em>Horizontal Stack</em>. They indicate that a container will present its children containers as a vertical/horizontal stack of compartments. While working reliably, this support is marked experimental in Sirius 3.0.0 as there are still some combinations of mappings, styles and behaviors which do not behave as expected. If you make use of this feature, be aware that some details may still change in future releases, including 3.0.x maintenance releases.
+			</li>
+			<li><span class="label label-success">Added</span> Everywhere an image path can be configured in the VSM, a new button is present on the right of the text field. It opens a dialog to select an image, either from the workspace or from an installed plug-in.</li>
+			<li><span class="label label-success">Added</span> Everywhere an interpreted expression can be configured in the VSM, a new button is present on the right of the text field. It opens a multi-line dialog to edit long expression more easily. Auto-completion is supported inside the multi-line dialog.</li>
+			<li><span class="label label-success">Added</span> Compressed SVG images (
+				<code>*.svgz</code>) are now supported everywhere normal SVG images were supported.
+			</li>
+			<li><span class="label label-success">Added</span> When developing a modeler in &#8220;live mode&#8221;, with the VSM in the same workspace as the sample session(s) which use it, VSM expressions which use 
+				<code>service:</code> or 
+				<code>aql:</code> can now invoke Java services which are defined in the workspace (with no need to launch a separate runtime).
+			</li>
+			<li><span class="label label-success">Added</span> A quick outline is now accessible in the VSM editor by using the shortcut <kbd>Ctrl+o</kbd>. It supports filtering on both an element&#8217;s name and properties for quick, keyboard-only navigation in complex VSMs.</li>
+			<li><span class="label label-success">Added</span> The &#8220;hide label by default capability&#8221; has been added to the container styles.</li>
+			<li><span class="label label-success">Added</span> In addition to 
+				<em>Bold</em> and 
+				<em>Italic</em>, 
+				<em>Underline</em> and 
+				<em>Strike Through</em> styles have been added on the label font format.
+			</li>
+			<li><span class="label label-success">Improved</span> Many VSM elements which are required are now created automatically. For example the default layer of a 
+				<em>Diagram Description</em> is automatically added to new 
+				<em>Diagram Descriptions</em>.
+			</li>
+			<li><span class="label label-success">Improved</span> Some default values have been modified to better reflect actual usage. This does not impact existing VSM and only applies to newly created elements.
+				<ul>
+					<li>The label position on a 
+						<em>Node</em> mapping is now 
+						<em>node</em> by default (instead of 
+						<em>border</em> before).
+					</li>
+					<li>The 
+						<em>Arc Width</em> and 
+						<em>Arc Height</em> are now 10 by default (instead of 1 before).
+					</li>
+					<li>The 
+						<em>Enable popup bars</em> is now set by default on new diagrams.
+					</li>
+					<li>No default value for interpreted expressions use the Acceleo 3 / MTL syntax anymore, but only use the core 
+						<code>var:</code> and 
+						<code>feature:</code> interpreters, which are always present.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Improved</span> The precision of the VSM validation, especially regarding the typing of computed expressions, has been greatly improved. Other validation rules like static image paths have also been added or improved.</li>
+			<li><span class="label label-info">Modified</span> In the VSM editor, the context menu entries (categories and items) have been reorganized to put most common actions/items first.</li>
+			<li><span class="label label-info">Modified</span> In diagrams, the style previously named &#8220;Lozenge&#8221; is now called &#8220;Diamond&#8221;.</li>
+			<li><span class="label label-info">Modified</span> In the 
+				<em>Open</em> menu on a representation, the menu is computed from the navigation tool&#8217;s label instead of its name/id.
+			</li>
+			<li><span class="label label-info">Modified</span> All Acceleo 3 references have been removed from the Sirius metamodels to avoid a dependency to Acceleo 3. An automatic migration has been added during the loading of the VSM to avoid a change of behavior. This migration adds explicitly the old default value (
+				<code>[eContents()-&gt;size()/]</code>) in the VSM, that was implicit before. Customers who want to completely remove this dependency must remove the Acceleo 3 expressions from there VSM after the migration.
+			</li>
+			<li><span class="label label-info">Modified</span> The default icons paths of 
+				<em>Selection Wizard</em> and 
+				<em>Pane-Based Selection Wizard</em> used to reference invalid icons, so the corresponding tools had no icon per default in the palette. The default icons paths have been corrected to reference the icons displayed for those elements in the VSM editor.
+			</li>
+			<li><span class="label label-info">Modified</span> "
+				<code>*</code>" can now be used as feature name of a table&#8217;s 
+				<em>Feature Column</em> to skip the feature name validation during the cell creation. This allow to compute the label of cells for lines whose semantic element types have no common 
+				<em>EStructuralFeature</em> (inherited or with same name).
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+		<p>The most important and impacting changes in this release are (details below in plug-in specific sections):</p>
+		<ul>
+			<li><span class="label label-success">Added</span>  The new extension point 
+				<code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>, defined in 
+				<code>org.eclipse.sirius.ui</code>, can be used to provide customized cell editors for semantic element&#8217;s properties as shown in the properties view on a Sirius representation.
+			</li>
+			<li><span class="label label-success">Added</span>  The new class 
+				<code>org.eclipse.sirius.eef.components.SiriusAwarePropertiesEditingComponent</code> can be used as root class of the generated EEF components to greatly improve performances when using both EEF properties views with Sirius representations. 
+			</li>
+			<li><span class="label label-info">Modified</span> The minimum version of EEF required for using 
+				<code>org.eclipse.sirius.eef.adapters</code> is now 1.5.0 (from 1.2 before). EEF 1.5 is source and binary-compatible with EEF 1.2 to 1.4, and no re-generation of the EEF views should be needed to switch to 1.5.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>org.eclipse.sirius.business.internal.session.IsModifiedSavingPolicy</code> saving policy, introduced in Sirius 2.0.0 but not enabled at that time is now the default. The previous implementation, 
+				<code>org.eclipse.sirius.business.api.session.SavingPolicyImpl</code> is still available if needed.
+			</li>
+			<li><span class="label label-info">Modified</span> All metamodels defined by Sirius have been modified to use EMF&#8217;s 
+				<code>MinimalEObjectImpl.Container</code> as base class, which reduces memory consumption compared to previous versions.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>RGBValues</code> type used in Sirius to represent colors has been converted into an immutable EMF EDataType, which also reduces memory consumption compared to previous versions.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>AirdResourceImpl</code> type, use for the 
+				<code>*.aird</code> resources, no longer inherits from GMF&#8217;s 
+				<code>GMFResource</code> or depend on GMF in any way. This makes the 
+				<code>org.eclipse.sirius</code> now completely independent on GMF.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>DAnalsysis.models</code> reference has been replaced by the 
+				<code>DAnalsysis.semanticModels</code> attribute, in conjunction with the new 
+				<code>ResourceDescriptor</code> data-type. The 
+				<code>DAnalysis.getModels()</code> Java method is still present for compatibility and returns the same values, but the returned list can not be modified. All changes must be made directly on 
+				<code>DAnalsysis.semanticModels</code> and will be reflected in the value returned by 
+				<code>DAnalysis.getModels()</code>. While not technically deprecated yet, 
+				<code>DAnalysis.getModels()</code> should be avoided and may be removed in a future release.
+			</li>
+			<li><span class="label label-info">Moved</span> Extensions in 
+				<code>plugin.xml</code> that provide UI functionalities have been moved to new 
+				<code>org.eclipse.sirius.*.ext</code> plug-ins, to make the contributions to the UI optional. If your product consumed directly the Sirius plug-ins instead of the high-level features, you may need to add the new plug-ins if you want the Sirius UI contributions to stay available.
+			</li>
+			<li><span class="label label-danger">Removed</span> Many unused types defined in the metamodels have been removed. This should not impact normal client code. Existing models will be automatically migrated on loading if needed.</li>
+			<li><span class="label label-danger">Removed</span> Sirius no longer installs the 
+				<code>AirDCrossReferenceAdapterImpl</code>, which was a subclass of GMF&#8217;s 
+				<code>CrossReferenceAdapter</code> on session resources (
+				<code>*.aird</code>). If your code relied on GMF&#8217;s implementation to find inverse references, it can use the Sirius session&#8217;s 
+				<code>Session.getSemanticCrossReferencer()</code> instead, which provides the same service (and more) and avoids the redundant installation of GMF&#8217;s version.
+			</li>
+		</ul>
+		<p>Packaging changes:</p>
+		<ul>
+			<li><span class="label label-success">Added</span> Two new feature have been added concerning the new support for the AQL language:
+				<ul>
+					<li>
+						<code>org.eclipse.sirius.runtime.aql</code> includes the minimum required to execute AQL queries at runtime. It must be present on end-users' systems for modelers which use AQL expressions to work.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.aql</code> includes both the runtime requirements and the development-time features like support for auto-completion of AQL expressions in the VSM editor.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span>  The new feature 
+				<code>org.eclipse.sirius.specifier</code> includes everything needed to have a complete Sirius specification environment, with support for all dialects. It includes support for Acceleo 3/MTL queries, but not for AQL (provided by 
+				<code>org.eclipse.sirius.aql</code>) or OCL (provided by 
+				<code>org.eclipse.sirius.runtime.ocl</code>). Future Sirius releases will probably swap AQL and Acceleo 3, making AQL the defaut and part of the main feature, and Acceleo 3/MTL optional in a separate feature.
+			</li>
+			<li><span class="label label-success">Added</span> All Sirius releases and milestones are available as zipped archives in addition to a normal p2 repository/update-site. For each version and platform (e.g. 3.0.0 on Eclipse Mars), two archives are available: one with the Sirius core, and one with the Sirius automated test suites and the sample modelers they rely on. See the 
+				<a href="https://wiki.eclipse.org/Sirius/Update_Sites">Sirius wiki</a> and release pages for more details and links to these archives, for example 
+				<code>http://download.eclipse.org/sirius/updates/releases/2.0.5/</code>. This is retro-active on all previously released versions of Sirius, but not on milestones before 3.0.0.
+			</li>
+		</ul>
+		<p>Other changes:</p>
+		<ul>
+			<li><span class="label label-success">Added</span> Sirius now provides an <a href="http://www.eclipse.org/oomph" target="_blank">Oomph</a> setup file to automatically create a fully configured Eclipse installation ready for contributing patches to Sirius. The latest version can be obtained <a href="http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/plain/releng/org.eclipse.sirius.settings/Sirius.setup" target="_blank">here</a>.</li>
+			<li><span class="label label-success">Added</span> New patches proposed by contributors on the <a href="https://git.eclipse.org/r/#/admin/projects/sirius/org.eclipse.sirius" target="_blank">Sirius Gerrit</a> now automatically trigger a sub-set of the Sirius automated test suites, which give a good feedback on the absence of regressions introduced by the proposed patch.</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common2">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The 
+				<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapter</code> interface and the 
+				<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl</code> have been added to have the capability to disable the proxy resolution. This feature is typically used to prevent loading a resource during its unloading. 
+				<strong>Warning</strong> : 
+				<em>Every additional custom CrossReferenceAdapter</em>  should extend 
+				<code>SiriusCrossReferenceAdapterImpl</code> or at least implement 
+				<code>SiriusCrossReferenceAdapter</code> with the same implementation as 
+				<code>SiriusCrossReferenceAdapterImpl</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.common.tools.api.util.ECrossReferenceAdapterWithUnproxyCapability</code> is a specific kind of 
+				<code>SiriusCrossReferenceAdapter</code>. It provides the capability to resolve all proxy cross references to a given resource. It is now used by the Session as semantic cross referencer. This type is exposed as API but it is not intended to be used/referenced/extended by user code (as the below 
+				<code>LazyCrossReferencer</code> type).
+			</li>
+			<li><span class="label label-success">Added</span> The static method 
+				<code>org.eclipse.sirius.common.tools.api.util.ReflectionHelper.getFieldValueWithoutException(Class&lt;?&gt;, String)</code> has been added to return an internal static value of a class.   
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.common.tools.api.resource.ResourceSetSync</code> has a new state 
+				<code>CHANGES_CANCELED</code> used to define the state where the user canceled its changes.
+			</li>
+			<li><span class="label label-success">Added</span> The 
+				<code>org.eclipse.sirius.common.tools.api.resource.ImageFileFormat</code> class has been added (it was in 
+				<code>org.eclipse.sirius.ext.swt</code> before).
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.common.tools.api.util.EclipseUtil.getConfigurationElementsFor()</code> has been added: it calls 
+				<code>org.eclipse.core.runtime.Platform.getExtensionRegistry().getConfigurationElementsFor()</code> only if 
+				<code>Platform.isRunning()</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The interface 
+				<code>org.eclipse.sirius.business.api.migration.IMigrationParticipant</code> exposes a new method 
+				<code>postXMLEndElement([..])</code> which is called during a migration operation. This method should be overridden by participants which have to hook the loading process after each end of XML tag. The  corresponding abstract class 
+				<code>org.eclipse.sirius.business.api.migration.AbstractMigrationParticipant</code> provides a default empty  implementation.
+			</li>
+			<li><span class="label label-success">Added</span> A new class 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.JavaExtensionsManager</code> can now be used by langages interpreters to benefit from a consistent handling of Java extensions and support for loading Java services from the workspace.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.TypeName</code> has been introduced to represent in the codebase any type which was previously represented as a plain String.
+			</li>
+			<li><span class="label label-success">Added</span> A new interface 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.TypedValidation</code> has been introduced for 
+				<code>IInterpreter</code> implementations able to provide richer information when validating an expression. This information is captured through a 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> instance.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.VariableType</code> has been introduced to represent the possible types a variable can have in a Viewpoint specification model.
+			</li>
+			<li><span class="label label-success">Added</span> The utility class 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContextUtils</code> has been introduced to factorize code related to managing 
+				<code>IInterpreterContext</code> instances.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.business.api.dialect.description.MultiLanguagesValidator</code> has been introduced to provide a safe and more efficient way to switch to the proper 
+				<code>IInterpreter</code> instance when validating expressions.
+			</li>
+			<li><span class="label label-success">Added</span> <span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.common.tools.api.util.RefreshIdFactory</code> has been replaced with 
+				<code>org.eclipse.sirius.common.tools.api.util.RefreshIdsHolder</code> which no longer rely on a global singleton but attach information to an EObject representing the current scope. This impacts 
+				<code>org.eclipse.sirius.diagram.business.api.query.AbstractDNodeQuery</code> , 
+				<code>org.eclipse.sirius.common.tools.api.util.CartesianProduct</code> and 
+				<code>org.eclipse.sirius.common.tools.api.util.EObjectCouple</code> which are now requiring now a 
+				<code>RefreshIdsHolder</code> instance.
+			</li>
+			<li><span class="label label-info">Modified</span>
+				<code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer</code> now extends 
+				<code>ECrossReferenceAdapterWithUnproxyCapability</code> and implements 
+				<code>resolveProxyCrossReferences(Resource)</code>.
+			</li>
+			<li><span class="label label-info">Moved</span> The 
+				<code>org.eclipse.sirius.common.tools.api.util.LazyCrossReferencer.enableResolve()</code>  and 
+				<code>disableResolve()</code>  methods has been moved to 
+				<code>SiriusCrossReferenceAdapter.enableResolveProxy()</code>  and 
+				<code>disableResolveProxy()</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The static method 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.DefaultInterpreterContextFactory.createInterpreterContext(...)</code> now requires a 
+				<code>Map&lt;String, VariableType&gt;</code> for the accessible variables instead of a 
+				<code>Map&lt;String, String&gt;</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The methods 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getVariables()</code>  and 
+				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQuery.getAvailableVariables()</code> are now returning a map containing 
+				<code>VariableType</code> instances instead of encoded Strings.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus.getTargetTypes()</code> no longer returns a list of encoded Strings but a 
+				<code>VariableType</code> instance instead.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> The method 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getTargetTypes()</code> has been deprecated in favor of 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterContext.getTargetType()</code> which returns a 
+				<code>VariableType</code> instance instead of encoded Strings.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common.ui">Changes in 
+			<code>org.eclipse.sirius.common.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> Classes from 
+				<code>org.eclipse.sirius.common.ui.tools.api.dialog.quickoutline</code> packages are available in API to allow editor to provide quick outline feature easily.
+			</li>
+			<li><span class="label label-success">Added</span> The methods 
+				<code>displaySyncExec(Runnable)</code> , 
+				<code>displayAsyncExec(Runnable)</code> and 
+				<code>synchronizeWithUIThread()</code> have been added in class 
+				<code>org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil</code> to encapsulate accesses to the current 
+				<code>Display</code> instance.
+			</li>
+			<li><span class="label label-info">Moved</span> Extensions in 
+				<code>plugin.xml</code> that provide UI functionalities have been moved to 
+				<code>org.eclipse.sirius.common.ui.ext</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius2">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been added to return a 
+				<code>DRepresentationContainer</code> from the 
+				<code>DAnalysis</code> parameter and the added 
+				<code>DRepresentation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.business.api.migration.IMigrationParticipant.updateCreatedObject(EObject newObject, String loadedVersion)</code> has been added to update object values in VSM before loading this objects from XML file.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener.disable()</code> has been added to disable the next refresh attempt in the current precommit loop iteration.
+			</li>
+			<li><span class="label label-success">Added</span> The new constant 
+				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.ENVIRONMENT_URI_SCHEME</code> declares environment URI scheme.
+			</li>
+			<li><span class="label label-success">Added</span> The new constant 
+				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.VIEWPOINT_ENVIRONMENT_RESOURCE_URI</code> declares 
+				<code>environment:/viewpoint</code> resource URI.
+			</li>
+			<li><span class="label label-success">Added</span> The new constant 
+				<code>org.eclipse.sirius.viewpoint.description.util.DescriptionResourceImpl.OPTION_SIRIUS_USE_URI_FRAGMENT_AS_ID</code> added to define a option to enable the use of a id map for odesign resource, id being uri&#8217;s fragment. 
+			</li>
+			<li><span class="label label-success">Added</span> The query 
+				<code>org.eclipse.sirius.business.api.query.EObjectQuery</code> has now a new constructor with an additional parameter, ECrossReferenceAdapter. This can be usefull if there is many calls to inverse references methods for the same Session. This avoids to get the semantic cross referencer from the EObject each time. This query also proposes a new method 
+				<code>getInverseReferences(Set&lt;EReference&gt;)</code>.
+			</li>
+			<li><span class="label label-success">Added</span> There is a new capability on Dialect. This capability is to refresh only impacted elements concerned by a list of notifications. It is used, for example, to refresh the opened representations when the user chooses manual refresh mode. Each dialect that want to offer this capability must implement 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.refreshImpactedElements(DRepresentation, Collection&lt;Notification&gt;, IProgressMonitor)</code>. A default implementation that does nothing is done in 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>.
+			</li>
+			<li><span class="label label-success">Added</span> A new method has been added in the query 
+				<code>org.eclipse.sirius.business.api.query.DAnalysisQuery</code> named 
+				<code>getMainModels()</code>. This method returns a Set of the main model and the other non controlled models.
+			</li>
+			<li><span class="label label-success">Added</span> A new method has been added in 
+				<code>org.eclipse.sirius.viewpoint.DAnalysis</code> named 
+				<code>getSemanticResources()</code>. This method returns a list of 
+				<code>org.eclipse.sirius.business.api.resource.ResourceDescriptor</code> which is a descriptor of the semantic resource.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.RGBValues</code> has been changed from an 
+				<code>EClass</code> to an 
+				<code>EDataType</code>, it is not an 
+				<code>EObject</code> anymore.
+			</li>
+			<li><span class="label label-success">Added</span> The API 
+				<code>org.eclipse.sirius.business.api.metamodel.helper.FontFormatHelper</code> has been added. It helps to update label format multi valued features.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.session.SessionListener.SEMANTIC_CHANGE</code> is no more send to 
+				<code>SessionListener</code> and 
+				<code>SessionManagerListener</code> listeners on save when a semantic resource is saved. Use a 
+				<code>ResourceSyncClient</code> listener on 
+				<code>ResourceSetSync</code> to have know if a semantic resource is saved.
+			</li>
+			<li><span class="label label-info">Modified</span> The default constructor has been changed in 
+				<code>org.eclipse.sirius.tools.api.command.semantic.RemoveSemanticResourceCommand</code>.
+				<ul>
+					<li>The boolean value 
+						<code>removeReferencingResources</code> has been added to indicate if the referencing resources are also to remove.
+					</li>
+					<li>The boolean value 
+						<code>removeFromControlledResources</code> has been removed because controlled resources are managed internally.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-info">Modified</span> The boolean value 
+				<code>removeReferencingResources</code> has been added in 
+				<code>org.eclipse.sirius.business.api.session.Session.removeSemanticResource</code> method to indicate if the referencing resources are also to remove.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>getModels()</code> method in 
+				<code>org.eclipse.sirius.viewpoint.DAnalysis</code> returns a non-modifiable list. Use 
+				<code>getSemanticResources()</code> instead.
+			</li>
+			<li><span class="label label-info">Moved</span> The 
+				<code>isBbocked()</code> and 
+				<code>setBlocked()</code> methods on the 
+				<code>org.eclipse.sirius.viewpoint.DAnalysisSessionEObject</code> EClass have been removed, as they were not actually used in the internal code.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.business.api.helper.task.ICommandTask.undo()/redo()</code> methods are deprecated because they are useless since undo/redo is managed by EMF Transaction.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.tools.api.command.IUndoableCommand</code> interface are deprecated because it is useless since undo/redo is managed by EMF Transaction.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.business.api.helper.task.TaskExecutor.undo()/redo()</code> methods are deprecated because they are useless since undo/redo is managed by EMF Transaction.
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.business.api.session.Session.createSemanticResource()</code> method has been removed. Use 
+				<code>Session.addSemanticResource()</code> instead.
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>ExtendedPackage</code> 
+				<code>EDataType</code> which was defined in the 
+				<code>http://www.eclipse.org/sirius/1.1.0</code> package was not actually used anywhere and has been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>DView</code> methods 
+				<code>getAllRepresentations()</code>, 
+				<code>getReferencedRepresentations()</code> and 
+				<code>getHiddenRepresentations()</code> have been removed: 
+				<code>getReferencedRepresentations()</code> and 
+				<code>getHiddenRepresentations()</code>  were never actually used, making 
+				<code>getAllRepresentations()</code> strictly equivalent to 
+				<code>getOwnedRepresentations()</code>. Code that used 
+				<code>getAllRepresentations()</code> can simply use 
+				<code>getOwnedRepresentations()</code> instead. 
+			</li>
+			<li><span class="label label-danger">Removed</span> The API 
+				<code>org.eclipse.sirius.viewpoint.DSourceFileLink</code> has been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The API 
+				<code>org.eclipse.sirius.viewpoint.DNavigable</code> has been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The API 
+				<code>org.eclipse.sirius.viewpoint.DNavigationLink</code> has been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The API 
+				<code>org.eclipse.sirius.viewpoint.DValidable</code> has been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The enum 
+				<code>org.eclipse.sirius.viewpoint.NavigationTargetType</code> has been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The API 
+				<code>org.eclipse.sirius.viewpoint.DLabelled</code> has been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> The API 
+				<code>org.eclipse.sirius.viewpoint.DContainer</code> has been removed.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject, EStructuralFeature)</code> has been added to customize the tooltip displayed in the VSM editor by using the feature of the current object. The old method 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.completeToolTipText(String, EObject)</code> has been deprecated.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been added. It allows developers to make their properties views CellEditor customizable by using the new extension point 
+				<code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>
+			</li>
+			<li><span class="label label-success">Added</span> The interface 
+				<code>org.eclipse.sirius.ext.emf.ui.ICellEditorProvider</code> has been added to allow clients to provide their own 
+				<code>CellEditor</code> - in the Sirius semantic properties views &#8211; through the new extension point 
+				<code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession.detachEditor(DialectEditor, boolean)</code> has been added to choose whether we should revert the user changes when detaching the editor.
+			</li>
+			<li><span class="label label-success">Added</span> A 
+				<code>org.eclipse.sirius.ui.tools.api.views.LockDecorationUpdater</code> is now available to add it on a 
+				<code>org.eclipse.ui.navigator.CommonNavigator</code> to be refreshed when notifications are send to 
+				<code>org.eclipse.sirius.ecore.extender.business.api.permission.IAuthorityListener</code>. 
+			</li>
+			<li><span class="label label-success">Added</span> A new job 
+				<code>org.eclipse.sirius.ui.tools.api.views.RefreshLabelImageJob</code> has been added to refresh the icon of specified elements on a 
+				<code>org.eclipse.ui.navigator.CommonNavigator</code>.
+			</li>
+			<li><span class="label label-info">Moved</span> Extensions in 
+				<code>plugin.xml</code> that provide UI functionalities have been moved to 
+				<code>org.eclipse.sirius.ui.ext</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in 
+			<code>org.eclipse.sirius.ecore.extender</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor.eRemoveInverseCrossReferences()</code> has been changed to return the list of changed objects by the inverse cross references removal.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.IMetamodelExtender.eRemoveInverseCrossReferences()</code> has been changed to return the list of changed objects by the inverse cross references removal.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.CompositeMetamodelExtender.eRemoveInverseCrossReferences()</code> has been changed to return the list of changed objects by the inverse cross references removal.
+			</li>
+			<li><span class="label label-danger">Removed</span> The exception 
+				<code>org.eclipse.sirius.ecore.extender.IllegalURIException</code> has been removed. It was not actually thrown anywhere in the code.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.editor">Changes in 
+			<code>org.eclipse.sirius.editor</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The static method 
+				<code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindPluginsCompletionProcessors(AbstractPropertySection, Text)</code> has been added. This method is very similar to 
+				<code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindCompletionProcessor(AbstractPropertySection, Text)</code>, the difference is that it binds the completion processors available in plugins to the text.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The 
+				<code>org.eclipse.sirius.diagram.tools.api.command.ChangeLayerActivationCommand</code> has been added. This command was previously internal.
+			</li>
+			<li><span class="label label-success">Added</span> The new constant 
+				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.DIAGRAM_ENVIRONMENT_RESOURCE_URI</code> declares the 
+				<code>environment:/diagram</code> resource URI.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.completeToolTipText(String, EObject, EStructuralFeature)</code> has been added to customize the tooltip displayed in the VSM editor by using the feature of the current object. The old method 
+				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.completeToolTipText(String, EObject)</code> has been deprecated.
+			</li>
+			<li><span class="label label-success">Added</span> New methods have been added to 
+				<code>org.eclipse.sirius.diagram.business.api.query.ContainerMappingQuery</code> to test the children presentation mode of the current 
+				<code>ContainerMapping</code>: 
+				<code>isVerticalStackContainer()</code>, 
+				<code>isHorizontalStackContainer()</code>, 
+				<code>isRegionContainer()</code> and 
+				<code>isRegion()</code>.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.business.api.query.AbstractDNodeQuery</code> now requires a 
+				<code>org.eclipse.sirius.common.tools.api.util.RefreshIdsHolder</code> to check for equality in the context of a refresh operation.
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>DNodeList.lineWidth</code> attribute has been removed from the metamodel, the corresponding generated elements do not exist anymore:  
+				<code>org.eclipse.sirius.diagram.DNodeList.getLineWidth()</code>,  
+				<code>org.eclipse.sirius.diagram.DNodeList.setLineWidth()</code>,  
+				<code>org.eclipse.sirius.diagram.DiagramPackage.DNODE_LIST__LINE_WIDTH</code>, 
+				<code>org.eclipse.sirius.diagram.DiagramPackage.getDNodeList_LineWidth()</code>, 
+				<code>org.eclipse.sirius.diagram.DiagramPackage.Literals.DNODE_LIST__LINE_WIDTH()</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.diagram.ComputedStyleDescriptionRegistry.cache</code> reference has been removed from the metamodel as it is no more useful, to limit memory consumed by computed 
+				<code>StyleDescription</code> we directly look for them in the 
+				<code>ComputedStyleDescriptionRegistry.computedStyleDescriptions</code> list.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> <span class="label label-info">Modified</span>  The 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.ImageFigureWithAlpha</code> interface has been added to identify Figures having the capability to return an alpha value from a coordinate. 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> and 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractTransparentImage</code>  now implement this new interface.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator.resetBorderItemMovedState()</code> has been added to allow to reset the state of 
+				<code>borderItemHasMoved</code>. This method must be used carefully only in case where 
+				<code>setConstraint(Rectangle)</code> is called to compute temporary a 
+				<code>getValidLocation(Rectangle, IFigure, Collection, List)</code>, one time with a new value and just after with the old value.
+			</li>
+			<li><span class="label label-success">Added</span> The constant 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath.HIDDEN_LABEL_DECORATOR</code> has been added to represent the path of hidden label decorator used in the outline.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.diagram.ui.business.api.provider.DDiagramElementContainerLabelItemProvider</code> has been added to represent container and list labels as virtual nodes in the Show/Hide wizards.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator</code> did not take into account the rectangle size passed to 
+				<code>getValidLocation</code>. To resolve that limitation, several protected methods that took a Point as location now take a Rectangle:
+				<ul>
+					<li>
+						<code>locateOnBorder(Point, int, int, IFigure, Collection&lt;IFigure&gt;, List&lt;IFigure&gt;)</code> now takes a 
+						<code>Rectangle</code> instead a 
+						<code>Point</code>: 
+						<code>locateOnBorder(Rectangle, int, int, IFigure, Collection&lt;IFigure&gt;, List&lt;IFigure&gt;)</code>;
+					</li>
+					<li>
+						<code>locateOnSouthBorder</code>, 
+						<code>locateOnNorthBorder</code>, 
+						<code>locateOnWestBorder</code> and 
+						<code>locateOnEastBorder</code> signatures is now 
+						<code>(Rectangle, int, IFigure, Collection&lt;IFigure&gt;, List&lt;IFigure&gt;)</code>;
+					</li>
+					<li>
+						<code>locateOnParent</code> signature is now 
+						<code>locateOnParent(Rectangle, int, IFigure)</code>;
+					</li>
+					<li>
+						<code>conflicts</code> signature is now 
+						<code>conflicts(Rectangle, IFigure, Collection&lt;IFigure&gt;, List&lt;IFigure&gt;)</code>.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-info">Moved</span> The constant 
+				<code>DiagramImagesPath.LINK_TO_VIEWPOINT_IMG</code> has been moved to 
+				<code>org.eclipse.sirius.ui.tools.api.image.ImagesPath.LINK_TO_VIEWPOINT_IMG</code>. This is more coherent because the corresponding image is in core 
+				<code>org.eclipse.sirius.common.ui</code> plugin.
+			</li>
+			<li><span class="label label-info">Moved</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.PinHelper</code> moved from 
+				<code>org.eclipse.sirius.diagram.ui</code> plugin to 
+				<code>org.eclipse.sirius.diagram</code> plugin, i.e. 
+				<code>org.eclipse.sirius.diagram.tools.api.layout.PinHelper</code> with 
+				<code>PinHelper.IsPinned(IDiagramElementEditPart)</code> removed in favor of 
+				<code>PinHelper.IsPinned(DDiagramElement)</code>.
+			</li>
+			<li><span class="label label-info">Moved</span> External java actions declared as 
+				<code>org.eclipse.sirius.diagram.ui.tools.internal.actions.pinning.pinElementsActionId</code> and 
+				<code>org.eclipse.sirius.diagram.ui.tools.internal.actions.pinning.unpinElementsActionId</code> are now declared as 
+				<code>org.eclipse.sirius.diagram.tools.internal.actions.pinning.pinElementsActionId</code> and 
+				<code>org.eclipse.sirius.diagram.tools.internal.actions.pinning.unpinElementsActionId</code> in 
+				<code>org.eclipse.sirius.diagram</code> plugin.
+			</li>
+			<li><span class="label label-info">Moved</span> Extensions in 
+				<code>plugin.xml</code> that provides UI functionalities have been moved to 
+				<code>org.eclipse.sirius.diagram.ui.ext</code>.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.util.GMFNotationHelper.findGMFDiagram()</code> became deprecated in favor of 
+				<code>DiagramCreationUtil.findAssociatedGMFDiagram()/getAssociatedGMFDiagram()</code>
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramEdgeEditPart.getEAdapterStrokeColor</code> method has been removed as the corresponding adapter was uneffective and is no more used and installed on the edge edit parts.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.InvisibleResizableCompartmentFigure</code> class has been removed, use a 
+				<code>org.eclipse.gmf.runtime.diagram.ui.figures.ShapeCompartmentFigure</code> with a 
+				<code>org.eclipse.draw2d.MarginBorder</code> or a null border instead.
+			</li>
+			<li><span class="label label-danger">Removed</span>  The method 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.IDiagramElementEditPart.getEAdapterSemanticElements()</code> has been removed (and all its implementations). For manual refresh, this adapter has been replaced with the 
+				<code>RefreshEditorsPrecommitListener</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span>   The method 
+				<code>org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorUtil.findView()</code> has been deleted in flavor of 
+				<code>SiriusGMFHelper.getGmfView()</code>. If you was using 
+				<code>SiriusDiagramEditorUtil.findView()</code> with a semantic element in parameter, retrieve before the corresponding 
+				<code>DDiagram</code> or 
+				<code>DDiagramElement</code> and use 
+				<code>SiriusGMFHelper.getGmfView(DSemanticDecorator)</code> from this last to get the corresponding GMF View. To get a 
+				<code>DDiagram</code> or 
+				<code>DDiagramElement</code> from a semantic element, you can use 
+				<code>EObjectQuery.getInverseReferences(EReference)</code> API, see 
+				<code>org.eclipse.sirius.diagram.ui.business.api.view.ValidateAction.getDSemanticDecorator()</code> for an example. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.table">Changes in 
+			<code>org.eclipse.sirius.table</code>
+		</h4>
+		<ul>
+			<li><span class="label label-danger">Removed</span> The methods 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getColumn()</code> have been removed because they are not useful, 
+				<code>TableHelper.getColumn(DLine, int)</code> can be replaced by 
+				<code>DTable.getColumns().get(int)</code> and 
+				<code>TableHelper.getColumn(DTable, String)</code> should not be used as we can have several columns with a same featureName.
+			</li>
+			<li><span class="label label-danger">Removed</span> The method 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEClassifier(DLine, int)</code> has been removed because it is not useful, use 
+				<code>TableHelper.getEClassifier(line, column)</code> instead.
+			</li>
+			<li><span class="label label-danger">Removed</span> The method 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getTableElement(DTableElementStyle)</code> has been removed because it is not useful, 
+				<code>DTableElementStyle.eContainer()</code> can be used instead.
+			</li>
+			<li><span class="label label-danger">Removed</span> The methods 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCell(DCellStyle)</code> has been removed because they are not useful, use 
+				<code>DCellStyle.eContainer</code> instead.
+			</li>
+			<li><span class="label label-danger">Removed</span> The methods 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCell(RGBValues)</code> has been removed, 
+				<code>RGBValues</code> is not an 
+				<code>EObject</code> anymore. The method was looking in the eContainer hierarchy of a an instance of 
+				<code>RGBValues</code> to find the parent 
+				<code>DCell</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The method 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCreateCellTool(DCell)</code> has been removed because it is not useful, use 
+				<code>TableHelper.getCreateCellTool(line, column)</code> instead.
+			</li>
+			<li><span class="label label-danger">Removed</span> The method 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getCellDefaultForegroundColor()</code> has been removed because it is not useful, use 
+				<code>EnvironmentSystemColorFactory.getDefault().getSystemColorDescription("gray")</code> instead.
+			</li>
+			<li><span class="label label-danger">Removed</span> The interface 
+				<code>DTableElementUpdater</code> has been removed from metamodel. It is now unnecessary. This interface was here to provide operations to activate and deactivate the listeners, that have been replaced by the 
+				<code>RefreshImpactedElementsCommand</code> launched from 
+				<code>RefreshEditorsPrecommitListener</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.table.ui">Changes in 
+			<code>org.eclipse.sirius.table.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Moved</span> Extensions in 
+				<code>plugin.xml</code> that provide UI functionalities have been moved to 
+				<code>org.eclipse.sirius.table.ui.ext</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tree">Changes in 
+			<code>org.eclipse.sirius.tree</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.refreshContent(boolean fullRefresh)</code> has been added to allow full refresh from a specified 
+				<code>DTreeItem</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The EMF Command 
+				<code>org.eclipse.sirius.tree.business.api.command.DTreeItemLocalRefreshCommand</code> has been added to call 
+				<code>DTreeItemUserInteraction.refreshContent(boolean fullRefresh)</code> in an EMF Command. 
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.expand(IProgressMonitor)</code> has been added similar to 
+				<code>DTreeItemUserInteraction.expand()</code> but taking a 
+				<code>IProgressMonitor</code> in parameter to have progression on 
+				<code>DTreeItem</code> expanding.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.collapse(IProgressMonitor)</code> has been added similar to 
+				<code>DTreeItemUserInteraction.collapse()</code> but taking a 
+				<code>IProgressMonitor</code> in parameter to have progression on 
+				<code>DTreeItem</code> collapsing.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.expandAll(IProgressMonitor)</code> has been added similar to 
+				<code>DTreeItemUserInteraction.expandAll()</code> but taking a 
+				<code>IProgressMonitor</code> in parameter to have progression on 
+				<code>DTreeItem</code> expanding.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeItemUserInteraction.refreshContent(boolean, IProgressMonitor)</code> has been added similar to 
+				<code>DTreeItemUserInteraction.refreshContent(boolean)</code> but taking a 
+				<code>IProgressMonitor</code> in parameter to have progression on 
+				<code>DTreeItem</code> expanding.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>DTreeUserInteraction.expand(IProgressMonitor)</code> has been added similar to 
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.expand()</code> but taking a 
+				<code>IProgressMonitor</code> in parameter to have progression on 
+				<code>DTreeItem</code> expanding.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>DTreeUserInteraction.expandAll(IProgressMonitor)</code> has been added similar to 
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.expandAll()</code> but taking a 
+				<code>IProgressMonitor</code> in parameter to have progression on 
+				<code>DTreeItem</code> expanding.
+			</li>
+			<li><span class="label label-info">Modified</span> The constructor 
+				<code>org.eclipse.sirius.tree.business.api.command.DTreeItemExpansionChangeCommand.DTreeItemExpansionChangeCommand(GlobalContext, TransactionalEditingDomain, DTreeItem, IProgressMonitor, boolean)</code> has an additional 
+				<code>IProgressMonitor</code> parameter.
+			</li>
+			<li><span class="label label-danger">Removed</span> The interface 
+				<code>DTreeElementUpdater</code> has been removed from metamodel. It is now unnecessary. This interface was here to provide operations to activate and deactivate the listeners, that have been replaced by the 
+				<code>RefreshImpactedElementsCommand</code> launched from 
+				<code>RefreshEditorsPrecommitListener</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tree.ui">Changes in 
+			<code>org.eclipse.sirius.tree.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.update(final TransactionalEditingDomain domain, final Notification notification)</code> has been replaced by 
+				<code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.update(ResourceSetChangeEvent)</code> to allow to update only once per ResourceSetChangeEvent and let subclasses make additional filtering on the notifications.
+			</li>
+			<li><span class="label label-info">Modified</span> The return type of the method 
+				<code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.getEventListener()</code> has been changed from 
+				<code>DemultiplexingListener</code> to 
+				<code>ResourceSetListener</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The type of 
+				<code>org.eclipse.sirius.tree.ui.properties.section.common.AbstractDTreePropertySection.eventListener</code> has been changed from 
+				<code>DemultiplexingListener</code> to 
+				<code>ResourceSetListener</code>.
+			</li>
+			<li><span class="label label-info">Moved</span> Extensions in 
+				<code>plugin.xml</code> that provide UI functionalities have been moved to 
+				<code>org.eclipse.sirius.tree.ui.ext</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.synchronizer2">Changes in 
+			<code>org.eclipse.sirius.synchronizer</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span>  The method 
+				<code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean, IProgressMonitor)</code> has been added similar to 
+				<code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean)</code> but taking a 
+				<code>IProgressMonitor</code> in parameter to have progression on synchronization.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.synchronizer.SemanticPartitionInvalidator.hasFastResult(EObject, SemanticPartition, CreatedOutput)</code> now takes a 
+				<code>CreatedOutput</code> as additional parameter element to allow to have the parent output element.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.synchronizer.SemanticPartition.evaluate(EObject, CreatedOutput)</code> now takes a 
+				<code>CreatedOutput</code> as additional parameter. This 
+				<code>CreatedOutput</code> represents the output model element which will become the parent of the elements created from the evaluation result.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.swt">Changes in 
+			<code>org.eclipse.sirius.ext.swt</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Moved</span> The 
+				<code>org.eclipse.sirius.ext.swt.ImageFileFormat</code> class has been moved in 
+				<code>org.eclipse.sirius.common.tools.api.resource</code> (in the 
+				<code>org.eclipse.sirius.common</code> plugin).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.e3.ui">Changes in 
+			<code>org.eclipse.sirius.ext.e3.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The classes 
+				<code>org.eclipse.sirius.ext.e3.ui.dialogs.FilteredTree</code> and 
+				<code>org.eclipse.sirius.ext.e3.ui.dialogs.PatternFilter</code> have been added in order to have the latest functionalites of 
+				<code>org.eclipse.ui.dialogs.FilteredTree</code> with Eclipse Juno.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.emf.tx">Changes in 
+			<code>org.eclipse.sirius.ext.emf.tx</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.ext.emf.tx.DelegatingValidateEditSupport</code> has been added to be able to have a 
+				<code>ValidateEditSupport</code> which delegate to an existing 
+				<code>ValidateEditSupport</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.eef.adapters">Changes in 
+			<code>org.eclipse.sirius.eef.adapters</code>
+		</h4>
+		<p>This plug-in now requires the version 1.5.0 of 
+			<code>org.eclipse.emf.eef.runtime</code> bundle.
+		</p>
+		<ul>
+			<li><span class="label label-success">Added</span>  The new class 
+				<code>org.eclipse.sirius.eef.components.SiriusAwarePropertiesEditingComponent</code> can be used as root class of the generated EEF components to greatly improve performances when using both EEF properties views with Sirius representations. Refer to 
+				<em>Using the Extended Editing Framework with Sirius</em> documentation for details.
+			</li>
+			<li><span class="label label-info">Modified</span>The following packages are set to 
+				<code>x-internal:=true</code>
+				<ul>
+					<li>
+						<code>org.eclipse.sirius.eef.actions</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.eef.adapters</code>
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> has been added to change the read only status of the given resources.
+			</li>
+			<li><span class="label label-success">Added</span> The 
+				<code>warnings</code> member variable has been added to 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to allow the recording of warning logs. Methods 
+				<code>doesAWarningOccurs()</code>, 
+				<code>clearWarnings()</code>, 
+				<code>setWarningCatchActive(boolean)</code>, 
+				<code>isWarningCatchActive()</code> and 
+				<code>getWarningLoggersMessage()</code> have also been added to manage the 
+				<code>warnings</code> member variable in the same way as the existing 
+				<code>errors</code> member variable.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase.loadModeler(URI, EditingDomain)</code> has been added to load a VSM resource and make the 
+				<code>Viewpoints</code> it defines accessible via the 
+				<code>SiriusTestsCase.viewpoints</code> field.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.support.api.ImageComposer</code> has been added to the test API to do assertions on image decorators.
+			</li>
+			<li><span class="label label-success">Added</span> The enum 
+				<code>SiriusTestCase.ResourceURIType</code> and the method 
+				<code>SiriusTestCase.toURI(final String, ResourceURIType)</code> have been added to allow choosing the type of URI created (
+				<code>platform:</code> or 
+				<code>plugin:</code>).
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>SiriusTestCase.genericSetUp(List&lt;URI&gt;, List&lt;URI&gt;, boolean, URI)</code> method has been set to protected so that it can be called from concrete test cases. This method allows initializing session.
+			</li>
+			<li><span class="label label-info">Moved</span> The class 
+				<code>TreeItemLabelFontFormatQuery</code> was moved into 
+				<code>org.eclipse.sirius.tests.support.api</code> (from 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.widget</code>), as it can be used in non-SWTBot tests..
+			</li>
+			<li><span class="label label-warning">Deprecated</span> The method 
+				<code>org.eclipse.sirius.tests.support.api.SiriusDiagramTestCase.setReadOnly(IFile)</code> has been deprecated, 
+				<code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> can be used instead.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The 
+				<code>warnings</code> member variable has been added to 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase</code> to allow the recording of warning logs. Methods 
+				<code>doesAWarningOccurs()</code>, 
+				<code>setWarningCatchActive(boolean)</code>, 
+				<code>isWarningCatchActive()</code> and 
+				<code>getWarningLoggersMessage()</code> have also been added to manage the 
+				<code>warnings</code> member variable in the same way as the existing 
+				<code>errors</code> member variable.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.getDRepresentation()</code> has been added to return the 
+				<code>org.eclipse.sirius.viewpoint.DRepresentation</code> instance available in the diagram editor.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase.getSectionButton()</code>  now only takes the button&#8217;s tooltip instead of a numerical position index and the tooltip.
+			</li>
+			<li><span class="label label-info">Modified</span> The methods 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.selectPropertyTabItem(String)</code> now returns a 
+				<code>boolean</code> that is true when the property tab item is found, false otherwise.
+			</li>
+			<li><span class="label label-info">Moved</span> The class 
+				<code>TreeItemLabelFontFormatQuery</code> was moved into 
+				<code>org.eclipse.sirius.tests.support.api</code> (from 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.widget</code>), as it can be used in non-SWTBot tests..
+			</li>
+			<li><span class="label label-warning">Deprecated</span> The methods 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UIPerspective.deleteProject(UIProject)</code> and 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UIPerspective.deleteProject(String)</code> have been deprecated, 
+				<code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> can be used instead.
+			</li>
+		</ul>
+		<h4 id="Newplugins">New plug-ins</h4>
+		<p>The following UI plug-ins has been added:</p>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.ext</code>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.common.ui.ext</code>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.ext</code>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.table.ui.ext</code>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tree.ui.ext</code>
+			</li>
+		</ul>
+		<p>These plug-ins own the extension definitions related to perspective, views, newWizard, menus, contextual menus, editors and preference pages that were previously in 
+			<code>org.eclipse.sirius.xxx.ui</code> plug-ins.
+			<br/>Now, downstream projects can define features that do not contain 
+			<code>org.eclipse.sirius.xxx.ui.ext</code>, allowing them not have all that functionalities they may not want.
+		</p>
+		<h2 id="sirius2.0.0">Changes in Sirius 2.0.0</h2>
+		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+		<ul>
+			<li>It is now possible to select element that intersects the selection rectangle and not that is completely contained by the selection rectangle. This new behavior is enabled when user selects elements from right to left. The normal mode (previous mode) remains when the user selects elements from left to right.</li>
+			<li>The edges appearance is now kept, as much as possible, when one of its extremity is moved. A move of an extremity should move only the closest segment of the edge.</li>
+			<li>The edges appearance is kept as much as possible when a node (container or not) is moved. A move of a node now impacts only the closest segment of the linked edges.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/moveNode-edgeImpact-changedBehavior.gif"/>
+		</p>
+		<ul>
+			<li>When a node, container or not, is resized to the left, upwards, or both, the location of its children (elements inside a container and border nodes) is not changed. It is possible to retrieve the previous behavior by pressing the F3 function key during the resize.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/containerResize-changedBehavior.gif"/>
+		</p>
+		<ul>
+			<li>The &#8220;snap to shapes&#8221; is now enabled by default (see  
+				<em>Sirius &gt; Sirius Diagram &gt; Rulers and Grid</em> preference page). This is true only for new diagrams. The existing diagrams are not impacted.
+			</li>
+			<li>The &#8220;Navigate&#8221; top-level contextual menu entry with mixed actions for creating new representations and opening existing ones has been changed by two top-level menus:
+				<ul>
+					<li>One named &#8220;New&#8221;, which lists only the available actions to create new representations on the selected element.</li>
+					<li>One named &#8220;Open&#8221;, which lists only the existing representations on the selected element. </li>
+				</ul>
+			</li>
+			<li>When a shape is resized (no matter the direction), the edge(s) connection location (toward or from this one) is kept. Before that, edges connections moved according to the ratio of the resizing.</li>
+		</ul>
+		<p>Example with this initial state before resizing:
+			<br/>
+			<img border="0" src="images/shapeResize1.png"/>
+			<br/>Result after resizing without this feature (the edges have moved):
+			<br/>
+			<img border="0" src="images/shapeResize2.png"/>
+			<br/>Result after resizing with this feature (the edges keep the same location):
+			<br/>
+			<img border="0" src="images/shapeResize3.png"/>
+		</p>
+		<ul>
+			<li>There is now the possibility to distribute the selected shapes (see 
+				<a href="user/diagrams/Diagrams.html#distribute">Sirius User Manual/Diagrams/Features Overview/Distribute elements</a> for more details):
+				<ul>
+					<li>Distribute gaps horizontally</li>
+					<li>Distribute centers horizontally</li>
+					<li>Distribute gaps vertically</li>
+					<li>Distribute centers vertically</li>
+				</ul>
+			</li>
+			<li>The end user can now remove all bend-points between the two edge ends. This action is available on edge context menu &#8220;Remove Bend-points&#8221; or by using the shortcut &#8220;Ctrl&#8221; + &#8220;Shift&#8221; + &#8220;-&#8221;.</li>
+			<li>Reconnection of an edge will only now move the minimum necessary bendpoints instead of reseting it to default.</li>
+			<li>A new action has been added to reset the diagram (or container) origin: the diagram (or container) bounds (the rectangle formed by the highest, the leftmost, the lowest and the rightmost children elements) can have a negative origin or can be shifted toward the bottom-right with a blank zone at the top-left. This action aims to move all diagram (or container) elements so that the it retrieves its origin while keeping elements layout.</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
+		<ul>
+			<li>The specifier can now choose to hold the edge ends toward the center of the source, target or both. New fields within the &#8220;advance&#8221; tab of EdgeStyle description have been added to choose for which source or target mappings an edge should be centered. See 
+				<a href="specifier/diagrams/Diagrams.html#edges_styles">Edges Styles &gt; Edge Centering</a> in the specifier manual for more details.
+			</li>
+			<li>When creating a new Viewpoint Specification Project using the supplied wizard: 
+				<em>New &gt; Viewpoint Specification Project</em>, the VSM name is now given according to the project name. If the project name is suffixed with &#8220;design&#8221;, the VSM name is provided by the last word before this suffix. Otherwise, the VSM name is given by the last word of the project name.
+			</li>
+			<li>&#8220;Lozenge&#8221; is replaced by &#8220;Diamond&#8221; in diagram style.</li>
+		</ul>
+		<h3 id="APIChanges">API Changes</h3>
+		<h4 id="Changesinorg.eclipse.sirius3">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.session.ViewpointSelector</code> class has been added, with easy-to-use methods to select/deselect viewpoint in a given session.
+			</li>
+			<li>The 
+				<code>VIEWPOINT_REGISTRY_INITIAL_SIZE</code> preference and 
+				<code>VIEWPOINT_REGISTRY_INITIAL_SIZE_DEFAULT_VALUE</code> default value has been removed from 
+				<code>org.eclipse.sirius.tools.api.preferences.DCorePreferences</code>.
+			</li>
+			<li>The method 
+				<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.isDanglingRepresentation()</code> has been added to introduce the possibility to check if a representation is a dangling representation, ie. if its a DSemanticDecorator, its target is null or does not belong to a session.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException</code> now can take several EObjects in constructor and a method 
+				<code>LockedInstanceException.getLockedElements()</code> has been added to get all EObjects put in constructor.
+			</li>
+		</ul>
+		<p>
+			<code>org.eclipse.sirius.tools.api.command.InvalidPermissionCommand</code> now can take several EObjects in constructor to throw a 
+			<code>LockedInstanceException</code> with several EObjects.
+		</p>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask</code> class has been renamed into 
+				<code>DeleteEObjectTask</code>.
+			</li>
+			<li>The interface 
+				<code>org.eclipse.sirius.tools.api.command.listener.IChangeListener</code> and all classes related to this mechanism (
+				<code>ChangeListenerFactory</code>, 
+				<code>TriggerOperation</code>) have been removed as this mechanism proves to be inefficient. It can be replaced by a pre/post commit listener or a 
+				<code>org.eclipse.sirius.business.api.session.ModelChangeTrigger</code>
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.tools.api.ui.IExternalAction2</code> interface has been removed. It was created to disable some 
+				<code>IChangeListener</code> when the action indicates it will not delete elements.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.refresh(DRepresentation, boolean, IProgressMonitor</code> has been added to specify if we want partial refresh or not. By default partial refresh is done. full refresh is only implements for tree dialect.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.refresh(DRepresentation, IProgressMonitor)</code> has been added to call by default 
+				<code>DialectServices.refresh(DRepresentation, false, IProgressMonitor)</code> to do a partial refresh.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.RefreshRepresentationsCommand(TransactionalEditingDomain, boolean, IProgressMonitor, DRepresentation...)</code> and 
+				<code>RefreshRepresentationsCommand(TransactionalEditingDomain, boolean, IProgressMonitor, Collection&lt;DRepresentation&gt;)</code> constructors has been added to specify a partial refresh or a full refresh.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.dialect.DRepresentationNotificationFilter</code> has been added to have
+			</li>
+		</ul>a common precommit/postcommit notifications filter to tree/table dialect.
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.tools.api.profiler.SiriusTasksKey.CHANGE_SWT_LINE_COLAPSE_STATE_KEY</code> constant has been deprecated in favor of 
+				<code>SiriusTasksKey.CHANGE_SWT_LINE_COLLAPSE_STATE_KEY</code> to fix a typo.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.color.AbstractColorUpdater.DEFAULT_RED_VALUE/DEFAULT_GREEN_VALUE/DEFAULT_BLUE_VALUE</code> constants have been added to have access to default 
+				<code>RGBValues</code>'s values. This is used during refresh when there isn&#8217;t any 
+				<code>ColorDescription</code>, for example in tree dialect where background color definition is optional.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.tool.ToolFilterDescriptionListener.ToolFilterDescriptionListener()</code> constructor now takes an 
+				<code>IInterpreter</code> as additional parameter to capture the current interpreter and avoid calls to the 
+				<code>IInterpreterRegistry</code> for each evaluation of the tool filter expressions.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.query.AirdResourceQuery.getAirDCrossReferenceAdapter()</code> and 
+				<code>org.eclipse.sirius.business.internal.resource.AirdCrossReferencerAdapter</code> have been removed. The adapter was here to customize GMF&#8217;s own 
+				<code>org.eclipse.gmf.runtime.emf.core.util.CrossReferenceAdapter</code>. However considering the way Sirius uses GMF, this adapter is not needed.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li>In 
+				<code>org.eclipse.sirius.ui.business.api.session.UserSession</code>, the methods 
+				<code>selectSirius()</code>, 
+				<code>selectOnlySirius()</code> and 
+				<code>findSiriusByName()</code> have been renamed into 
+				<code>selectViewpoint()</code>, 
+				<code>selectOnlyViewpoint()</code> and 
+				<code>findViewpointByName()</code> to correct a wrong rebranding.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common3">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li>The method 
+				<code>org.eclipse.sirius.common.tools.api.resource.ResourceSetSync.getResourceSetSync(TransactionalEditingDomain)</code> has been added to look for a 
+				<code>ResourceSetSync</code> without creating a new one if no synchronizer currently exists.
+			</li>
+			<li>The class 
+				<code>org.eclipse.sirius.common.tools.api.util.SmartAdapter</code> has been removed as this mechanism proves to be inefficient. The only user of this mechanism was the 
+				<code>org.eclipse.sirius.tools.api.command.listener.IChangeListener</code> which has also been removed.
+			</li>
+			<li>The class 
+				<code>org.eclipse.sirius.common.tools.api.ecore.WorkspaceEPackageRegistry</code> has been moved to the 
+				<code>org.eclipse.sirius.editor</code> plugin. 
+				<code>org.eclipse.sirius.common.tools.DslCommonPlugin.getWorkspaceEPackageRegistry</code> has been removed. The same method has been added in 
+				<code>org.eclipse.sirius.editor.editorPlugin.SiriusEditorPlugin</code>.
+			</li>
+			<li>A new class 
+				<code>org.eclipse.sirius.common.tools.api.resource.ResourceMigrationMarker</code> has been introduced for adopters. This marker can be attached to a Resource in order to indicate that some automatic migration 
+				<strong>might</strong> have change the structure of the model during the loading (with no isModified flag). Sirius will then use this information to consider saving the file even if there is no logical change. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common.ui2">Changes in 
+			<code>org.eclipse.sirius.common.ui</code>
+		</h4>
+		<ul>
+			<li>The method 
+				<code>org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil.addSelectionListener(IWorkbenchPart, ISelectionListener)</code> has been added to register a new selection listener to the site for the workbench part. This method looks for a 
+				<code>ISelectionService</code> by calling 
+				<code>IServiceLocator.getService()</code> on the site.
+			</li>
+			<li>The method 
+				<code>org.eclipse.sirius.common.ui.tools.api.util.EclipseUIUtil.removeSelectionListener(IWorkbenchPart, ISelectionListener)</code> has been added to unregister an existing selection listener from site for the workbench part. This method looks for a 
+				<code>ISelectionService</code> by calling 
+				<code>IServiceLocator.getService()</code> on the site.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.diagram.ui.business.api.view.refresh</code> package and all its content has been move into the 
+				<code>org.eclipse.sirius.diagram</code> plug-in, under the name 
+				<code>org.eclipse.sirius.diagram.business.api.view.refresh</code>.
+			</li>
+			<li>A new extension point 
+				<code>org.eclipse.sirius.diagram.canonicalSynchronizerFactoryOverride</code> has been defined. Its only intended implementer is the 
+				<code>org.eclipse.sirius.diagram.ui</code> plug-in. It is used by the diagram dialect&#8217;s core to delegate to the UI plug-in the canonical synchronizer logic, which depends on the UI.
+			</li>
+			<li>In 
+				<code>org.eclipse.sirius.diagram.business.api.refresh.CanonicalSynchronizer</code>, a new method 
+				<code>postCreation()</code> has been added. It is called exactly once, right after a diagram has been created and synchronized the first time.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.description.style.EdgeStyleDescription</code> metamodel class has three more features: 
+				<code>centeredSourceMappings</code>, 
+				<code>centeredTargetMappings</code> and 
+				<code>AlwaysCenter</code>. Those features let the specifier determine for which mappings the edge source/target should be centered or whether the source/target should be systematically centered. The 
+				<code>endsCentering</code> values are restricted by the new 
+				<code>org.eclipse.sirius.diagram.description.CenteringStyle</code> enumeration.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.EdgeStyle</code> metamodel class has now an attribute 
+				<code>centered</code> of type 
+				<code>org.eclipse.sirius.diagram.description.CenteringStyle</code>, to determine whether the edge target or source ends should be centered.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.diagram.ui.business.api.view.refresh</code> package and all its content has been move into the 
+				<code>org.eclipse.sirius.diagram</code> plug-in, under the name 
+				<code>org.eclipse.sirius.diagram.business.api.view.refresh</code>.  
+			</li>
+			<li>The method 
+				<code>org.eclipse.sirius.diagram.ui.business.internal.query.DNodeContainerQuery.getDefaultDimension()</code> has been added to compute the default size of a DNodeContainer.
+			</li>
+			<li>The parameter 
+				<code>additionalFiguresForConflictDetection</code> has been added to several methods of 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.locator.DBorderItemLocator</code>. This parameter is used in case of simultaneous border nodes moves. This list corresponds to the already known border nodes feedbacks. They are used to detect conflicts with other moved nodes.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionEditPartQuery</code> now provides two new methods 
+				<code>isEdgeWithRectilinearRoutingStyle()</code> and 
+				<code>isEdgeWithObliqueRoutingStyle()</code> that respectively checks if an edge has a rectilinear routing style or an oblique routing style.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.ConnectionQuery</code> now provides two new methods 
+				<code>getAbsoluteBendpointsConstraint()</code> and 
+				<code>getRelativeBendpointsConstraint()</code> that returns an option of list of 
+				<code>Bendpoint</code> of a connection whether they are respectively 
+				<code>AbsoluteBendpoint</code> or 
+				<code>RelatveBendpoint</code>.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.EdgeQuery</code> also provides two new methods 
+				<code>isEdgeWithRectilinearRoutingStyle()</code> and 
+				<code>isEdgeWithObliqueRoutingStyle()</code> that respectively checks if an edge has a rectilinear routing style or an oblique routing style.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.DistributeRequest</code>: A new 
+				<code>ChangeBoundsRequest</code> to manage distribution of shapes.
+			</li>
+			<li>A constant 
+				<code>REQ_DISTRIBUTE</code> has been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants</code> to identify the new type of request, 
+				<code>DistributeRequest</code>.
+			</li>
+			<li>Constants have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code> for the new drop down menu in tabbar and for the four new distribute actions.
+			</li>
+			<li>Constants have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new distribute actions.
+			</li>
+			<li>A new method has been added in 
+				<code>org.eclipse.sirius.diagram.ui.business.api.view.SiriusLayoutDataManager</code> to retrieve the opposite edge layout data of another edge layout data. An edge layout data stored in the incomingEdgeLayoutDatas ref of its parent data can have an opposite edge layout data in the outgoingEdgeLayoutDatas of the other ends.
+			</li>
+			<li>A Constant 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_RESET_ORIGIN</code> has been added to identify requests to get the ResetOrigin command.
+			</li>
+			<li>A new method 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isContainer()</code> has been added to test whether the GMF node visualID corresponds to a ContainerEditPart.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tree.ui2">Changes in 
+			<code>org.eclipse.sirius.tree.ui</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.business.api.helper.TreeUIHelper.toContentHTMl()</code> has changed of behavior: refresh of 
+				<code>DTree</code> is now partial, i.e. not done for children of collapsed 
+				<code>DTreeItemContainer</code>. Consequently code calling 
+				<code>TreeUIHelper.toContentHTMl()</code> must do a full refresh if children of collapsed 
+				<code>DTreeItemContainer</code> must be displayed in returned HTML.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.business.api.helper.TreeUIHelper.toTreeDescriptor()</code> same as for 
+				<code>TreeUIHelper.toContentHTMl()</code>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tree2">Changes in 
+			<code>org.eclipse.sirius.tree</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.tree.business.api.interaction.DTreeUserInteraction.refreshContent(boolean, IProgressMonitor)</code> has been added to specify if we want partial refresh or not.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.business.api.command.DTreeItemExpansionChangeCommand</code> has been added to execute an expansion/collapse of 
+				<code>DTreeItem</code>. On expansion a refresh of children is done.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.synchronizer3">Changes in 
+			<code>org.eclipse.sirius.synchronizer</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.synchronizer.CreatedOutput.synchronizeChildren()</code> has been added to allow doing a partial refresh of tree, i.e. to not refresh children of collapsed tree item.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean)</code> has been added to specify if we want partial refresh or not.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender2">Changes in 
+			<code>org.eclipse.sirius.ecore.extender</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.IMetamodelExtender.eRemoveInverseCrossReferences(EObject, ECrossReferenceAdapter, EReferencePredicate)</code> has been added as a way to remove the inverse cross references without removing an 
+				<code>EObject</code> from its container. For example it can be used to avoid the dangling references to an indirectly detached object without removing it from its already detached container and avoid additional REMOVE notifications. The method has been extracted from and is now used by 
+				<code>IMetamodelExtender.eDelete()</code>.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor.eRemoveCrossReferences(EObject, ECrossReferenceAdapter, EReferencePredicate)</code> has been added as a way to remove the inverse cross references without removing an 
+				<code>EObject</code> from its container after a check by the permission authority that all changeable feature to modify can be edited.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in 
+			<code>org.eclipse.sirius.ext.gmf.runtime</code>
+		</h4>
+		<ul>
+			<li>Several utilities have been added in 
+				<code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>:
+				<ul>
+					<li>
+						<code>applyZoomOnPoint(IGraphicalEditPart, Point)</code>: Apply the current zoom (of 
+						<code>IGraphicalEditPart</code>'s diagram) on the 
+						<code>Point</code> and return the 
+						<code>Point</code> for convenience.
+					</li>
+					<li>
+						<code>applyInverseZoomOnPoint(IGraphicalEditPart, Point)</code>: Apply the inverse of the current zoom (of 
+						<code>IGraphicalEditPart</code>'s diagram) on the 
+						<code>Point</code> and return the 
+						<code>Point</code> for convenience.
+					</li>
+					<li>
+						<code>appliedZoomOnRelativePoint(IGraphicalEditPart, Point)</code> is now deprecated. Use 
+						<code>applyZoomOnPoint(IGraphicalEditPart, Point)</code> instead.
+					</li>
+					<li>
+						<code>getAnchorPoint(IGraphicalEditPart parent, Anchor anchor)</code>: Get the 
+						<code>Point</code> (absolute draw2d coordinates) corresponding to this 
+						<code>Anchor</code>.
+					</li>
+					<li>
+						<code>getAnchorPoint(IGraphicalEditPart parent, IdentityAnchor anchor)</code>: Get the 
+						<code>Point</code> (absolute draw2d coordinates) corresponding to this 
+						<code>IdentityAnchor</code>.
+					</li>
+					<li>
+						<code>getIntersection(Point, Point, IGraphicalEditPart, boolean)</code>: Get intersection between a line between lineOrigin and lineTerminus, and the rectangle bounds of the 
+						<code>IGraphicalEditPart</code>. If there are several intersections, the shortest is returned.
+					</li>
+					<li>
+						<code>getAbsoluteBounds(IGraphicalEditPart)</code>: Get the absolute bounds of this 
+						<code>IGraphicalEditPart</code>.
+					</li>
+					<li>
+						<code>getAbsoluteBoundsIn100Percent(IGraphicalEditPart)</code>: Get the absolute bounds of this 
+						<code>IGraphicalEditPart</code> but adapted according to the current zoom level.
+					</li>
+					<li>
+						<code>isSnapToGridEnabled(EditPart)</code>: Return true if the snapToGrid is enabled for the diagram containing this edit part, false otherwise.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li>The method 
+				<code>SWTBotSiriusDiagramEditor.setSnapToGrid(boolean)</code> has been added. It allows to disable or enable the snapToGrid option for this editor.
+			</li>
+			<li>The method 
+				<code>SWTBotSiriusDiagramEditor.setSnapToGrid(boolean, double, int)</code> has been added. It allows to disable or enable the snapToGrid option for this editor. In case of activation, you can also set the grid spacing and the ruler units.
+			</li>
+			<li>The method 
+				<code>SWTBotSiriusDiagramEditor.disableSnapToGrid()</code> has been deprecated, use 
+				<code>SWTBotSiriusDiagramEditor.setSnapToGrid(false)</code> instead.
+			</li>
+			<li>The method 
+				<code>SWTBotSiriusDiagramEditor.adaptLocationToSnap(Point)</code> has been added. It allows to adapt location according to SnapToHelper of the current editor.
+			</li>
+			<li>The method 
+				<code>SWTBotSiriusDiagramEditor.getDiagramEditPart()</code> has been added. It allows to retrieve the diagram edit part of the current editor.
+			</li>
+			<li>In 
+				<code>ViewpointSelectionDialog</code>, the methods 
+				<code>selectViewpoints(String...)</code> and 
+				<code>deselectViewpoints(String...)</code> have been added to allow viewpoints selection and deselection from an array of 
+				<code>String</code>. These methods are shortcuts to the 
+				<code>selectViewpoints(Set&lt;String&gt;, Set&lt;String&gt;)</code> method.
+			</li>
+			<li>Add method 
+				<code>changeLayerActivation(String)</code> on 
+				<code>SWTBotSiriusDiagramEditor</code> to offer the same service as similar method on 
+				<code>UIDiagramRepresentation</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.support">Changes in 
+			<code>org.eclipse.sirius.tests.support</code>
+		</h4>
+		<ul>
+			<li>In 
+				<code>org.eclipse.sirius.test.support.SiriusTestCase</code>, the methods deactivateSirius(), initSirius() and findSirius() have been renamed into deactivateViewpoint(), initViewpoint() and findViewppoint() to correct a wrong rebranding.
+			</li>
+		</ul>
+		<h2 id="sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</h2>
+		<h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+		<ul>
+			<li>The ability to print table representations has been disabled for the 1.0.0 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=435204" target="_blank">bug #435204</a> for the details).</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
+		<ul>
+			<li>
+				<em>Node</em>, 
+				<em>Container</em> and 
+				<em>Edge</em> mappings can not be created as direct children of a 
+				<em>Diagram Description</em> anymore, the first level mappings must be created as direct children of a 
+				<em>Layer</em>.
+			</li>
+			<li>Mapping (resp. tools) can not be added as reused mapping (resp. tools) of a 
+				<em>Diagram Description</em>, they must be added to the reused mappings (resp. tools) of a 
+				<em>Layer</em>. The corresponding property sections will be shown only for old VSM with reused elements.
+			</li>
+		</ul>
+		<h3 id="APIChanges2">API Changes</h3>
+		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li>In package 
+				<code>org.eclipse.sirius.business.api.control</code>,  the constructors of 
+				<code>SiriusControlCommand</code> and 
+				<code>SiriusUncontrolCommand</code> which assume implicitly that the session should be saved as part of the command are now deprecated. Use the alternative constructors (a new one has been added to 
+				<code>SiriusUncontrolCommand</code>) to say explicitly if the command should save the session. Most code should do the save themselves outside of the command, and thus pass 
+				<code>false</code>  to the 
+				<code>shouldEndBySaving</code> argument of these constructors.
+			</li>
+			<li>In package 
+				<code>org.eclipse.sirius.business.api.session</code>, class 
+				<code>SavingPolicyImpl</code> (the default session saving policy) now inherits from the new 
+				<code>AbstractSavingPolicy</code> class. The new abstract class can be used as a base to implement different policies by simply overriding the 
+				<code>computeResourcesToSave()</code> method.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li>To enable the resize of border nodes whose parent is a list, the 
+				<code>createLayoutEditPolicy</code> and 
+				<code>getResizeBorderItemCommand</code> methods have been extracted from  
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramContainerPart</code> and placed into 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramElementContainerEditPart</code>. The 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramListEditPart.createLayoutEditPolicy</code> implementation has been removed.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.editor.tools.api.menu.AbstractMenuBuilder.getLabel()</code> visibility has been changed from protected to public.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.tools.api.menu.CompositeMenuBuilder</code> has been introduced to avoid duplicated menu. A 
+				<code>CompositeMenuBuilder</code> is created to encapsulate 
+				<code>AbstractMenuBuilder</code> with the same label.
+			</li>
+		</ul>
+		<h2 id="sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</h2>
+		<h3 id="SpecifierVisibleChanges5">Specifier-Visible Changes</h3>
+		<ul>
+			<li>The default value of the 
+				<em>Semantic Candidates Expression</em> for Tree Items has changed from an empty string (meaning &#8220;any compatible element in the session&#8221;) to 
+				<code>feature:eAllContents</code> which only looks for compatible candidates inside the current element (recursively). The new behavior is more efficient on large models and consistent with what happens for diagrams. The change does not affect existing VSMs which continue to work as before whatever was the expression they used. Users who want the old behavior on specific mappings can simply remove the expression in the properties view.
+			</li>
+			<li>In the 
+				<em>Time Profiler</em> view, the 
+				<em>Time (hh:mm:ss,ms)</em> has been removed. It was redundant with the existing 
+				<em>Time (ms)</em> column, harder to read/sort, and showed wrongly formatted results.
+			</li>
+		</ul>
+		<h3 id="APIChanges3">API Changes</h3>
+		<h4 id="separationOfDiagramSpecificConcept-step3">Move diagram.ecore in its own plugin</h4>
+		<p>This milestone (Sirius 1.0M7) includes the third, and final, step towards a full separation of the diagram-specific stuff out of the core of Sirius (see 
+			<a href="#separationOfDiagramSpecificConcept-step1">Step1</a> and 
+			<a href="#separationOfDiagramSpecificConcept-step2">Step2</a> for more details).
+		</p>
+		<p>All classes related to diagrams in 
+			<code>org.eclipse.sirius</code> have been moved to 
+			<code>org.eclipse.sirius.diagram</code>.
+			<br/>All classes related to diagrams in 
+			<code>org.eclipse.sirius.ui</code> have been moved to 
+			<code>org.eclipse.sirius.diagram.ui</code>.
+			<br/>All classes related to diagrams in 
+			<code>org.eclipse.sirius.editor</code> have been moved to 
+			<code>org.eclipse.sirius.editor.diagram</code>.
+			<br/>In the same way, all classes related to UI in 
+			<code>org.eclipse.diagram</code> have been moved to 
+			<code>org.eclipse.sirius.diagram.ui</code>. To simplify this step almost all classes of 
+			<code>org.eclipse.diagram</code> have been moved in 
+			<code>org.eclipse.sirius.diagram.ui</code> (and probably not only UI classes). These classes have been moved in 
+			<code>src-diag</code> source folder to facilitate future work about moving some of these classes in 
+			<code>org.eclipse.diagram</code> again.
+		</p>
+		<p>Unlike, the 
+			<a href="#separationOfDiagramSpecificConcept-step1">Step1</a>, a simple &#8220;Organize Imports&#8221; operation is not enough. First, you will probably need to add dependencies to 
+			<code>org.eclipse.sirius.diagram</code>, 
+			<code>org.eclipse.sirius.diagram.ui</code> or 
+			<code>org.eclipse.sirius.editor.diagram</code> in the MANIFEST.MF of your projects that depend on Sirius diagram classes. The dependencies to add depend on what you really use.
+		</p>
+		<ul>
+			<li>
+				<code>ViewpointRegistry.getDiagramDescriptionMappingsRegistry()</code> has been removed. You can now directly call 
+				<code>org.eclipse.sirius.diagram.business.api.componentization.DiagramDescriptionMappingsRegistry.INSTANCE.DialectServices</code>.
+			</li>
+			<li>New methods have been added to 
+				<code>IRepairParticipant</code> to isolate specific diagram repair steps.
+				<ul>
+					<li>
+						<code>removeElements(DView, TransactionalEditingDomain, IProgressMonitor)</code>: Removes elements from the 
+						<code>DView</code> that will be recreated by the refresh (called later).
+					</li>
+					<li>
+						<code>cleanRepresentations(EList&lt;DRepresentation&gt;)</code>: Cleans representations (specific representation states like filters) and eventually returns some of them if they need to be removed.
+					</li>
+					<li>
+						<code>refreshRepresentations(DAnalysis, DView)</code>: This method is only implemented by the diagram participant. To simplify work for this step, this method manages core and diagram elements. It should be clean up once the split will be done.
+					</li>
+				</ul>
+			</li>
+			<li>To break the dependencies from Core to Diagram, several services have been added to:
+				<ul>
+					<li>
+						<code>DialectServices</code>, with default implementations in 
+						<code>AbstractRepresentationDialectServices</code>:
+						<ul>
+							<li>
+								<code>createTask(CommandContext, ModelAccessor, ModelOperation, Session, UICallBack)</code>: Creates a new task corresponding to the ModelOperation. Only needed for ModelOperation specific to one dialect.
+							</li>
+							<li>
+								<code>handles(RepresentationExtensionDescription)</code>: Tells if the current dialect handles the given 
+								<code>RepresentationExtensionDescription</code>.
+							</li>
+							<li>
+								<code>invalidateMappingCache()</code>: Allows each dialect to clean and compute again its proper mapping cache.
+							</li>
+							<li>
+								<code>allowsEStructuralFeatureCustomization(EObject)</code>: allows dialects to indicate if they allow EStrucuralFeaturesCustomization for the given VSM element. It is currently supported for style descriptions in diagrams only.
+							</li>
+						</ul>
+					</li>
+					<li>
+						<code>DialectUIServices</code>
+						<ul>
+							<li>
+								<code>canHandle(RepresentationDescription)</code> and 
+								<code>canHandle(RepresentationExtensionDescription)</code>: tell whether the dialect is able to handle the given representation description or extension description.
+							</li>
+							<li>
+								<code>completeToolTipText(String, EObject)</code> allows the dialect to customize the tooltip displayed in a property section of a given VSM element.
+							</li>
+						</ul>
+					</li>
+					<li>
+						<code>DialectUIManager</code>
+						<ul>
+							<li>
+								<code>canExport(DRepresentation, ExportFormat)</code>: New method returning true if at least one dialect is able to export this representation to this format, false otherwise.
+							</li>
+						</ul>
+					</li>
+					<li>
+						<code>IDiagramDescriptionProvider</code>
+						<ul>
+							<li>
+								<code>completeToolTipText(String, EObject)</code> allows the diagram type to customize the tooltip displayed in a property section of a given VSM element. 
+								<code>SequenceDiagramTypeProvider</code> implements this method to mention some Sequence specific variable available in core and diagram tool preconditions in the context of a Sequence diagram.
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+			<li>All methods of 
+				<code>SiriusHelper</code> concerning diagrams have been moved to 
+				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramHelper</code>.
+			</li>
+			<li>All methods of 
+				<code>SiriusUtil</code> concerning diagrams have been moved to 
+				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil</code>.
+			</li>
+			<li>All methods of 
+				<code>org.eclipse.sirius.business.api.query.EObjectQuery</code> concerning diagrams have been moved to 
+				<code>org.eclipse.sirius.diagram.business.api.query.EObjectQuery</code>.
+			</li>
+			<li><a href="https://wiki.eclipse.org/Sirius/Modularization#Library_Extensions" target="_blank">Library Extensions</a>:
+				<ul>
+					<li>All methods depending only on draw2d of 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.draw2d.ui.figures.FigureUtilities</code> have been moved in 
+						<code>org.eclipse.sirius.ext.draw2d.figure.FigureUtilities</code>
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.diagram.ui.tools.api.layout.GraphicalHelper</code> has been moved to 
+						<code>org.eclipse.sirius.ext.gmf.runtime.editparts.GraphicalHelper</code>.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.diagram.part.SiriusDiagramEditorPlugin</code> has been renamed into 
+						<code>org.eclipse.sirius.diagram.DiagramPlugin</code>. This plugin is not a UI plugin any more, 
+						<code>org.eclipse.sirius.diagram.ui.provider.DiagramUIPlugin.getPlugin()</code> should be used instead for UI related aspects. For example 
+						<code>DiagramUIPlugin.getPlugin().getPreferenceStore()</code> should be used instead of 
+						<code>DiagramPlugin.getDefault().getPreferenceStore()</code> or 
+						<code>SiriusDiagramEditorPlugin.getInstance().getPreferenceStore()</code>.
+					</li>
+				</ul>
+			</li>
+			<li>
+				<code>DeleteFromDiagramContributionItem</code> and 
+				<code>SetStyleToWorkspaceImageContributionItem</code> have been merged into 
+				<code>SiriusActionBarActionContributionItem</code>
+			</li>
+			<li>Images
+				<ul>
+					<li>Images of 
+						<code>org.eclipse.sirius.diagram</code> have been moved to 
+						<code>org.eclipse.sirius.diagram.ui</code>. In your code, you should replace 
+						<code>SiriusDiagramEditorPlugin.getInstance().getImage()</code> and 
+						<code>DiagramPlugin.getInstance().getImage()</code> by 
+						<code>DiagramUIPlugin.getPlugin().getImage()</code>. That is the case for all methods concerning images in 
+						<code>DiagramPlugin</code> (previously named 
+						<code>SiriusDiagramEditorPlugin</code>).
+					</li>
+					<li>Some images of 
+						<code>org.eclipse.sirius.ui</code> have been moved to 
+						<code>org.eclipse.sirius.diagram.ui</code>, the corresponding constants in 
+						<code>org.eclipse.sirius.ui.tools.api.image.ImagesPath</code> have been moved in 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code>.
+					</li>
+				</ul>
+			</li>
+			<li>The method 
+				<code>static void refreshSelection(DiagramElementMapping)</code> from 
+				<code>org.eclipse.sirius.editor.tools.api.menu.AbstractEObjectRefactoringAction</code> is not available anymore.
+			</li>
+			<li>Preferences
+				<ul>
+					<li>
+						<code>org.eclipse.sirius.business.api.preferences.SiriusPreferencesKeys.PREF_AUTO_PIN_ON_CREATE</code> has been moved to 
+						<code>org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramPreferencesKeys</code>.
+					</li>
+				</ul>
+			</li>
+			<li>Ids
+				<ul>
+					<li>The Sirius diagram editor id is now 
+						<code>org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorID</code>
+					</li>
+					<li>Its property contributor is now 
+						<code>org.eclipse.sirius.diagram.ui</code>. This id has to be changed in plugins providing additional property sections to the Sirius diagram editor (created with EEF for example).
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h5 id="Movedextensionpoints">Moved extension points</h5>
+		<p>Several extension points have been moved:</p>
+		<ul>
+			<li>from 
+				<code>org.eclipse.sirius</code> to 
+				<code>org.eclipse.sirius.diagram</code>. You should change the id of the following extension point in your plugin.xml (
+				<code>org.eclipse.sirius.xxxx</code> replaced by 
+				<code>org.eclipse.sirius.diagram.xxxx</code>):
+				<ul>
+					<li>diagramTypeProvider</li>
+				</ul>
+			</li>
+			<li>from 
+				<code>org.eclipse.sirius.diagram</code> to 
+				<code>org.eclipse.sirius.diagram.ui</code>. You should change the id of the following extension points in your plugin.xml (
+				<code>org.eclipse.sirius.diagram.xxxx</code> replaced by 
+				<code>org.eclipse.sirius.diagram.ui.xxxx</code>):
+				<ul>
+					<li>diagramIdentifierProvider</li>
+					<li>imageSelector</li>
+					<li>layoutDataManager</li>
+					<li>layoutProvider</li>
+					<li>styleConfigurationProvider</li>
+					<li>viewOrderingProvider</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common4">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li>In class 
+				<code>org.eclipse.sirius.common.tools.api.util.EclipseUtil</code>, the method 
+				<code>getExtensionPlugins(Class&lt;T&gt;, String, String, String, Predicate&lt;String&gt;)</code> has been removed from API to avoid exposing a Guava-specific 
+				<code>Predicate</code>. Instead, use the new method 
+				<code>getExtensionPluginsByKey()</code> which returns all the extensions organized by the specified key, and filter the result according to whatever critera the 
+				<code>Predicate</code> tested on the key.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius5">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.business.api.query.URIQuery.isSiriusEnvironmentURI</code> has been replaced by
+				<ul>
+					<li>
+						<code>isSiriusCoreEnvironmentURI</code> which checks that the given resource is the Sirius core Environment.xmi file.
+					</li>
+					<li>and 
+						<code>isEnvironmentURI</code> which checks that the given resource has an 
+						<code>environment</code> uri scheme.
+					</li>
+				</ul>
+			</li>
+			<li>In 
+				<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>
+				<ul>
+					<li>the setter 
+						<code>setRefreshActivatedOnRepresentationOpening(boolean)</code> has been removed as the refresh on opening should be managed from the corresponding preference 
+						<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys.PREF_REFRESH_ON_REPRESENTATION_OPENING</code>.
+					</li>
+					<li>
+						<code>isRefreshActivatedOnRepresentationOpening()</code> has been moved into 
+						<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager</code> as it refers to an UI behavior.
+					</li>
+				</ul>
+			</li>
+			<li>The 
+				<code>DRepresentation.createContents()</code> (both variants) and 
+				<code>DRepresentation.updateContents()</code> EOperations have been removed. They were not used anywhere.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.MODELING_PROJECT_PREDICATE</code> constant has been removed to reduce Sirius&#8217;s exposure of Guava&#8217;specific types. Use the equivalent 
+				<code>ModelingProject.hasModelingProjectNature()</code> method instead.
+			</li>
+			<li>The method 
+				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getInverseReferences(Predicate&lt;Setting&gt;)</code> has been removed from API to avoid exposing a the Guava-specific 
+				<code>Predicate</code> type.
+			</li>
+			<li>In class 
+				<code>org.eclipse.sirius.business.api.dialect.description.AbstractInterpretedExpressionQuery</code>, the protected methods 
+				<code>appendAllLocalVariableDefinitions()</code> and 
+				<code>appendEditMaskVariables()</code> now take a 
+				<code>Map&lt;String, Collection&lt;String&gt;&gt;</code> instead of a Guava-specific 
+				<code>Multimap</code>. The new protected method 
+				<code>addDefinition()</code> can be used to make it easier to add entries to the map. Subclasses in Sirius have been updated to match the new signature.
+			</li>
+			<li>The message 
+				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.ZERO_REPRESENTATIONS_FILE_FOUND_IN</code> has been removed without replacement. It was not really an API constant.
+			</li>
+			<li>The behavior of method 
+				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> has changed. It now marks this project as invalid and adds a marker on it, if it is considered as invalid (no or many representations files).
+			</li>
+			<li>A new query 
+				<code>org.eclipse.sirius.business.api.query.IFileQuery</code> has been added with a method to check if file is handled by an opened session, ie:
+				<ul>
+					<li>a semantic resource of this session,</li>
+					<li>a referenced sub representations file,</li>
+					<li>a controlled resource.</li>
+				</ul>
+			</li>
+			<li>The 
+				<code>EObjectLink</code> class has been removed from the metamodel. It was not used anywhere.
+			</li>
+			<li>In interface 
+				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionTargetSwitch</code>, the 
+				<code>getFirstRelevantContainerFinder()</code> method which returned a Guava 
+				<code>Function&lt;EObject, EObject&gt;</code> has been replaced with the new method 
+				<code>getFirstRelevantContainer(EObject)</code> which directly returns the result of applying the previously returned function. All implementers in Sirius itself have been updated.
+			</li>
+			<li>The constructor 
+				<code>org.eclipse.sirius.business.api.dialect.description.DefaultInterpretedExpressionTargetSwitch(EStructuralFeature, IInterpretedExpressionTargetSwitch, Function&lt;EObject, EObject&gt;)</code> has been removed to avoid exposing a the Guava-specific 
+				<code>Predicate</code> type. Sub-classes which used it with a non-null 
+				<code>Function</code> should override the 
+				<code>getFirstRelevantContainer(EObject)</code> method to return the result of that function instead.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask</code> constructor which took a Guava 
+				<code>Predicate&lt;EReference&gt;</code> now takes an equivalent 
+				<code>EReferencePredicate</code> (from 
+				<code>org.eclipse.sirius.ext.emf</code>).
+			</li>
+			<li>The constants 
+				<code>DSEMANTICDECORATOR_REFERENCE_TO_IGNORE_PREDICATE</code> and 
+				<code>NOTATION_VIEW_ELEMENT_REFERENCE_TO_IGNORE_PREDICATE</code> from 
+				<code>org.eclipse.sirius.business.internal.session.danalysis.DanglingRefRemovalTrigger</code> are now instances of 
+				<code>EReferencePredicate</code> instead of Guava&#8217;s 
+				<code>Predicate&lt;EReference&gt;</code>.
+			</li>
+			<li>In class 
+				<code>org.eclipse.sirius.business.api.session.SessionEventBroker</code>, the method 
+				<code>addlLocalTrigger()</code> now takes a 
+				<code>org.eclipse.emf.transaction.NotificationFilter</code> instead of a Guava-specific 
+				<code>Predicate&lt;Notification&gt;</code> as first argument.
+			</li>
+			<li>The constant 
+				<code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener.IS_IMPACTING</code> is now a 
+				<code>NotificationFilter</code> instead of a 
+				<code>Predicate</code>, to match the API change in 
+				<code>SessionEventBroker.addLocalTrigger()</code>.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.session.Session</code> interface has a new 
+				<code>getSavingPolicy()</code> method which gives access to the currently configured saving policy.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li>The references 
+				<code>DNode.ownedDetails</code> and 
+				<code>DDiagramElementContainerImpl.ownedDetails</code> have been removed from the metamodel, along with the corresponding implementation methods. They were not used in practice.
+			</li>
+			<li>The 
+				<code>DDiagramLink</code> EClass has been removed from the meta-model, along with the corresponding generated Java code. It was not used in practice.
+			</li>
+			<li>The 
+				<code>DDiagram.clean()</code> EOperation has been removed. It was deprecated and not used anymore. All the Java code which existed only to help in the implementation of that operation has also been removed. This includes:
+				<ul>
+					<li>The 
+						<code>org.eclipse.sirius.diagram.tools.api.validation.constraint.AbstractDDiagramConstraint.activate()</code> and 
+						<code>deactivate()</code> methods.
+					</li>
+					<li>The 
+						<code>org.eclipse.sirius.business.api.helper.SiriusHelper.unSetHarmlessDanglingReferences()</code> method.
+					</li>
+					<li>The 
+						<code>org.eclipse.sirius.tools.api.profiler.SiriusTasksKey.CLEANING_NODES_KEY</code> constant.
+					</li>
+				</ul>
+			</li>
+			<li>The 
+				<code>DSemanticDiagram.getRootContents()</code> method (which was deprecated) has been removed.
+			</li>
+			<li>The 
+				<code>DDiagram.findDiagramElements()</code> EOperation has been removed. It was deprecated and always returned an empty list if called.
+			</li>
+			<li>The 
+				<code>DDiagram.info</code> attribute has been removed. It was not used anywhere.
+			</li>
+			<li>The 
+				<code>DDiagram.subDiagram</code> reference has been removed. It was not used anywhere.
+			</li>
+			<li>The 
+				<code>DDiagramElement.isFold()</code> EOperation has been removed. It was deprecated and edge folding has long been implemented using different mechanisms.
+			</li>
+			<li>In the 
+				<code>ContainerMapping</code> type, the following EOperations have been removed: 
+				<code>createContainer()</code>, 
+				<code>updateContainer()</code>, and 
+				<code>getNodesCandidate()</code>. Although their usage is highly discouraged, if you really need to you can currently use the corresponding methods in the internal 
+				<code>ContainerMappingHelper</code> instead (use 
+				<code>SiriusPlugin.getDefault().getInterpreterRegistry().getInterpreter(semanticElement)</code> to obtain the 
+				<code>IInterpreter</code> those methods need). As with all internal code, there is no guarantee these methods will still exist in future versions.
+			</li>
+			<li>The 
+				<code>AbstractNodeMapping.getDNodesDone()</code> EOperation has been removed. It was not used anywhere.
+			</li>
+			<li>In the 
+				<code>NodeMapping</code> type, the 
+				<code>getBestStyle()</code> and 
+				<code>createListElement()</code> EOperations have been removed. Although their usage is highly discouraged, if you really need to you can currently use the corresponding methods in the internal 
+				<code>MappingHelper</code> instead (use 
+				<code>SiriusPlugin.getDefault().getInterpreterRegistry().getInterpreter(semanticElement)</code> to obtain the 
+				<code>IInterpreter</code> these methods need). As with all internal code, there is no guarantee these methods will still exist in future versions.
+			</li>
+			<li>In interface 
+				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider</code>, the methods 
+				<code>allowsPinUnpin()</code>, 
+				<code>allowsHideReveal</code>, and 
+				<code>allowsCopyPasteLayout()</code>  have been modified to take directly the 
+				<code>DDiagramElement</code> to test (and return a 
+				<code>boolean</code>) instead of returning a Guava-specific 
+				<code>Predicate</code> which then had to be invoked.
+			</li>
+			<li>In class 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.PinHelper</code>, .the method 
+				<code>allowsPinUnpin()</code> has been modified to take a 
+				<code>DDiagramElement</code> directly and return a 
+				<code>boolean</code>, instead of taking a 
+				<code>DDiagram</code> and return a Guava-specific 
+				<code>Predicate</code> which then had to be invoked on actual 
+				<code>DDiagramElements</code>..
+			</li>
+			<li>The interface 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.ISiriusEditPart</code> has been added and is now part of all the type hierarchy of any EditPart provided by Sirius. This allows a simple 
+				<code>instanceof ISiriusEditPart</code> to discriminate the edit part instances coming from Sirius.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.sequence">Changes in 
+			<code>org.eclipse.sirius.diagram.sequence</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.diagram.sequence.util.SiriusFunctions</code> class has been removed. It was not used anywhere.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.diagram.sequence.util.NotificationQuery</code> class has been removed. It had been exposed by mistake.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.diagram.sequence.business.internal.util.NotationPredicate</code> class has been removed from API, to reduce Sirius&#8217;s exposure of Guava&#8217;specific types.
+			</li>
+			<li>All the static methods in 
+				<code>org.eclipse.sirius.diagram.sequence.util.Range</code> which returned Guava-specific types (
+				<code>Function</code> or 
+				<code>Ordering</code>) have been removed from API.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.sequence.template.AbstractRule</code> no longer inherits from Guava&#8217;s 
+				<code>Function</code> interface, but from the news ad-hoc 
+				<code>org.eclipse.sirius.diagram.sequence.template.Transformer</code> interface instead, which is functionally equivalent.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.ui.business.api.preferences.DesignerUIPreferencesKeys</code> has been renamed into 
+				<code>org.eclipse.sirius.ui.business.api.preferences.SiriusUIPreferencesKeys</code>
+			</li>
+			<li>Methods 
+				<code>getMissingDependencies()</code> and 
+				<code>getMissingDependenciesErrorMessage()</code> from 
+				<code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelection</code> now use 
+				<code>Map&lt;String, Collection&lt;String&gt;&gt;</code> instead of Guava&#8217;s 
+				<code>Multimap</code>.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.initializeAfterLoad()</code> method has been removed. There is no replacement for this method documented as &#8220;Not intended to be used by client&#8221;.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender3">Changes in 
+			<code>org.eclipse.sirius.ecore.extender</code>
+		</h4>
+		<ul>
+			<li>All variants of 
+				<code>eDelete()</code> methods which took a 
+				<code>Predicate&lt;EReference&gt;</code> in types 
+				<code>ModelAccessore</code>, 
+				<code>IMetamodelExtender</code> and 
+				<code>CompositeMetamodelExtender</code> now take an equivalent 
+				<code>EReferencePredicate</code> (from 
+				<code>org.eclipse.sirius.ext.emf</code>).
+			</li>
+			<li>The 
+				<code>ModelUtils.resolveAll(ResourceSet set, EReferencePredicate)</code> now takes an 
+				<code>EReferencePredicate</code> instead of a Guava-specific 
+				<code>Predicate&lt;EReference&gt;</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.base">Changes in 
+			<code>org.eclipse.sirius.ext.base</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.ext.base.Options.isSome()</code> method has been removed to reduce Sirius&#8217;s exposure of Guava&#8217;specific types. Use 
+				<code>Option.some()</code> directly instead.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ext.base.relations.Relation</code> no longer inherits from 
+				<code>com.google.common.base.Function</code>, but keeps the same API otherwise.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.synchronizer4">Changes in 
+			<code>org.eclipse.sirius.synchronizer</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.synchronizer.Mapping.IS_CHECK_ONLY</code> constant has been removed to reduce Sirius&#8217;s exposure of Guava&#8217;specific types. Use 
+				<code>!Mapping.getCreator().some()</code> instead.
+			</li>
+			<li>The 
+				<code>Maybe</code> and 
+				<code>MaybeFactory</code> types have been removed, and all their uses in 
+				<code>org.eclipse.sirius.synchronizer</code> converted to the equivalent 
+				<code>Option</code> and 
+				<code>Options</code> types from 
+				<code>org.eclipse.sirius.ext.base</code>.
+			</li>
+			<li>The internal class 
+				<code>MappingHiearchy.HiearchyIterator</code> has been removed from API.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.support2">Changes in 
+			<code>org.eclipse.sirius.tests.support</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>shouldReloadSession</code> boolean parameter has been removed from 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase.disableUICallBackOnDialectEditor(DialectEditor)</code>, it was not used and could let the tester think he can change the reload behavior from the dialog factory.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tests.swtbot.support.api.AbstractSiriusSwtBotGefTestCase.refreshDiagram()</code> has been removed. This method did not handle the non dynamic tabbar and was a duplicate of manualRefresh(). Callers must select the diagram before the call,the click(0,0) instruction was not sufficient in several cases (for example if there is a node/container in (0,0)).
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerEditor</code> has been renamed into 
+				<code>SWTBotSiriusDiagramEditor</code>.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerGefViewer</code> has been renamed into 
+				<code>SWTBotSiriusGefViewer</code>.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotDesignerHelper</code> has been renamed into 
+				<code>SWTBotSiriusHelper</code>.
+			</li>
+			<li>Methods 
+				<code>AbstractSiriusSwtBotGefTestCase.openRepresentation</code> with 
+				<code>SWTBotDesignerEditor</code> as returned type have been renamed into 
+				<code>openDiagram</code>, marked as deprecated and replaced with methods returning a 
+				<code>SWTBotEditor</code>. You can now use methods 
+				<code>openRepresentation</code> for DTree or DTable. If the 
+				<code>expectedRepresentationClass</code> is 
+				<code>DDiagram.class</code>, the returned type will be a 
+				<code>SWTBotSiriusDiagramEditor</code>.
+			</li>
+			<li>Method 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusHelper.getDesignerEditor(String)</code> has been renamed into 
+				<code>getSiriusDiagramEditor</code>.
+			</li>
+			<li>Add 
+				<code>SWTBotSiriusHelper.getSiriusEditor(String)</code> to return the 
+				<code>SWTBotEditor</code> (diagram, tree or table editor) with the given name. The name is the name as displayed on the editor&#8217;s tab in Eclipse. In case of multiple editors with the same fileName, the same method with an additional parameter, the index, has been added 
+				<code>SWTBotSiriusHelper.getSiriusEditor(String, int)</code>.
+			</li>
+			<li>Change the behavior of 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.zoom(ZoomLevel)</code> to directly change the zoom level of the current diagram editor without trying to change it from the zoom combo in the tabbar.
+			</li>
+			<li>Add 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor.zoomFromToolbar(ZoomLevel)</code> to add possibility to explicitly change the zoom level from the tabbar.
+			</li>
+		</ul>
+		<h2 id="sirius1.0M6">Changes in Sirius 1.0.0M6 (from Sirius 1.0M5)</h2>
+		<h3 id="APIChanges4">API Changes</h3>
+		<h4 id="tests">High-level API for Automated Tests Using JUnit and SWTBot</h4>
+		<p>Starting from version 1.0.0M6, Sirius includes high-level APIs to help creating automated tests using JUnit and/or SWTBot. These can be used either to test Sirius itself or to test Sirius-based modelers. These APIs are provided by two plug-ins:</p>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.tests.support</code>: support code for JUnit (plug-in) tests using Sirius.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tests.swtbot.support</code>: support code for SWTBot tests using Sirius.
+			</li>
+		</ul>
+		<p>Both plug-ins are only available if you install the new 
+			<code>org.eclipse.sirius.tests</code> feature.
+		</p>
+		<h4 id="separationOfDiagramSpecificConcept-step2">Move diagram-specific EPackages into their own diagram.ecore model</h4>
+		<p>This milestone (Sirius 1.0M6) includes the second step towards a full separation of the diagram-specific stuff out of the core of Sirius (see 
+			<a href="#separationOfDiagramSpecificConcept-step1">Step1</a> for more details).
+		</p>
+		<p>This step is less impactful on your code than the first step. Nevertheless, some missed classes during first step have moved during this step:</p>
+		<ul>
+			<li>Remove 
+				<code>DDiagramSet</code> and its corresponding reference from 
+				<code>DRepresentationContainer</code>: No longer needed
+			</li>
+			<li>
+				<code>DragAndDropTarget</code>, 
+				<code>DragAndDropTargetDescription</code> and 
+				<code>ContainerDropDescription</code> have been moved to diagram EPackage.
+			</li>
+			<li>
+				<code>viewpoint/diagram/description/validation</code> EPackage has been moved to 
+				<code>viewpoint/description/validation</code>: revert what was done in step 1 by mistake.
+			</li>
+		</ul>
+		<p>The existing VSM (
+			<code>*.odesign</code>) and representations file (
+			<code>*.aird</code>) are automatically migrated.
+		</p>
+		<p>Warning: If you have some code based on the root EPackage of an EClass, it may be necessary to adapt it. Example:</p>
+		<pre>EPackage rootPackage = (EPackage) EcoreUtil.getRootContainer(element.eClass());
+if (rootPackage != null &amp;&amp; rootPackage.getNsURI().equals(ViewpointPackage.eINSTANCE.getNsURI())) {
+</pre>
+		<p>should be adapted in</p>
+		<pre>EPackage rootPackage = (EPackage) EcoreUtil.getRootContainer(element.eClass());
+if (rootPackage != null &amp;&amp; rootPackage.getNsURI().equals(DiagramPackage.eINSTANCE.getNsURI())) {
+</pre>
+		<p>if 
+			<code>element</code> is a Diagram concept.
+		</p>
+		<h4 id="Changesinorg.eclipse.sirius6">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.tools.api.command.IDiagramCommandFactory.setAutoRefreshDView()</code> method was removed. It had no effect, any code which called it can simply be removed.
+			</li>
+			<li>The deprecated interface 
+				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryListener</code> has been removed. Use 
+				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryListener2</code> instead.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.session.SessionManagerListener2</code> and 
+				<code>org.eclipse.sirius.business.api.session.SessionManagerListener</code> have been merged into 
+				<code>org.eclipse.sirius.business.api.session.SessionManagerListener</code> which is not deprecated any more.
+			</li>
+			<li>The deprecated method 
+				<code>org.eclipse.sirius.business.api.session.SessionManagerListener.notifyUpdatedSession(Session)</code> has been removed. Use 
+				<code>org.eclipse.sirius.business.api.session.SessionManagerListener.notify(Session, int)</code> instead.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.business.api.helper.task.RemoveDanglingReferencesTask</code> and 
+				<code>org.eclipse.sirius.business.api.helper.task.RemoveSemanticDanglingReferenceTask</code> and 
+				<code>org.eclipse.sirius.tools.api.command.AbstractCommandFactory.addRemoveDanglingReferencesTask()</code> have been removed. These tasks were added to in several commands to remove dangling references at the end. They are now replaced by a specific 
+				<code>ModelChangeTrigger</code> to detect the detachment of 
+				<code>EObject</code> and remove the dangling references. It is added to the 
+				<code>SessionEventBroker</code> during the session opening.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tools.api.ui.RefreshEditorsPrecommitListener</code> was a precommit 
+				<code>ResourceSetListener</code>, it became a 
+				<code>ModelChangeTrigger</code> and is now added to the SessionEventBroker during the session opening. This modification allows to correctly manage the order of our different precommit commands. It is triggered after the dangling reference remover.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tools.api.command.semantic.RemoveDanglingReferences</code> is no more used in Sirius commands. It can still be used to clean a resourceSet or a resource (repair tool, import/export, ..). It also has a new static method 
+				<code>removeDanglingReferences(Resource)</code> to remove dangling references as an entry point.
+			</li>
+			<li>The protected predicate 
+				<code>org.eclipse.sirius.business.api.helper.task.AbstractDeleteDRepresentationElementTask.DSEMANTICDECORATOR_REFERENCE_T0_IGNORE_PREDICATE</code> has been removed, the internal predicate 
+				<code>DanglingRefRemovalTrigger.DSEMANTICDECORATOR_REFERENCE_T0_IGNORE_PREDICATE</code> is used instead.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.helper.SiriusUtil.findDiagram(EObject)</code> method has been removed. Use the equivalent 
+				<code>new org.eclipse.sirius.business.api.query.EObjectQuery(element).getParentDiagram()</code> instead.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui5">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.ui.tools.api.perspectives.DesignPerspective</code> interface has been moved to 
+				<code>org.eclipse.sirius.editor.tools.api.perspectives</code> package in 
+				<code>org.eclipse.sirius.editor</code> plugin. This perspective is now provided through the 
+				<code>org.eclipse.sirius.editor</code> plugin. The perspective ID is kept unchanged for a compatibility reason.
+			</li>
+			<li>The deprecated class 
+				<code>org.eclipse.sirius.ui.tools.api.dialogs.ExportRepresentationsAsImagesDialog</code> has been removed. Use 
+				<code>org.eclipse.sirius.ui.tools.api.dialogs.ExportSeveralRepresentationsAsImagesDialog</code> instead.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li>
+				<code>org.sirius.diagram.graphical.edit.policies.AirNoteAttachmentEditPolicy</code> has been removed, with the new dangling reference management, it became identical to its superclass, use 
+				<code>org.eclipse.gmf.runtime.diagram.ui.internal.editpolicies.ConnectionEditPolicy</code> instead. Its provider 
+				<code>org.sirius.diagram.graphicalou .edit.policies.AirNoteAttachmentEditPolicyProvider</code> and declaration in plugin.xml have been removed too.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.table2">Changes in 
+			<code>org.eclipse.sirius.table</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.table.tools.api.command.ITableCommandFactory.setAutoRefreshDTable()</code> method was removed. It had no effect, any code which called it can simply be removed.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tree3">Changes in 
+			<code>org.eclipse.sirius.tree</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.tree.business.api.command.ITreeCommandFactory.setAutoRefreshDTree()</code> method was removed. It had no effect, any code which called it can simply be removed.
+			</li>
+		</ul>
+		<h2 id="sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</h2>
+		<h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+		<ul>
+			<li>The table csv export has been improved to handle cropped label. In some specific cases, the cell label is automatically cropped and &#8216;...&#8217; is concatenated to the resulting value. This cropped displayed label was previously exported, now the complete semantic value is exported.</li>
+		</ul>
+		<h3 id="APIChanges5">API Changes</h3>
+		<h4 id="LibraryExtensions">Library Extensions</h4>
+		<p>This milestone (Sirius 1.0M5) introduces several new plug-ins, collectively called &#8220;library extensions&#8221;. They are all named 
+			<code>org.eclipse.sirius.ext.LIB</code>, where 
+			<code>LIB</code> is the name of a library or component Sirius depends on. These plug-ins are used to isolate generic code which extends existing libraries with features and helpers needed for Sirius, but which do not depend on Sirius themselves. A relatively large part of the code in Sirius is of this kind: things that could/should be in EMF, GMF, Eclipse itself, etc. and which are not Sirius-specific but which make it easier to build Sirius itself. Sirius 1.0M5 introduces several of these library extensions and starts to fill them with existing classes which were &#8220;hidden&#8221; inside Sirius and are now exposed in library extensions. Most of the time, existing code which used the Sirius API will only need to:
+		</p>
+		<ol>
+			<li>Add the necessary 
+				<code>Import-Package</code> (recommended) or 
+				<code>Require-Bundle</code> to depend on the library extension(s) where the code they use now lives;
+			</li>
+			<li>Perform a simple &#8220;Organize Imports&#8221; operation, which should find the classes and interfaces in their new locations.</li>
+		</ol>
+		<h4 id="separationOfDiagramSpecificConcept-step1">Move diagram-specific EClasses into a separate EPackage</h4>
+		<p>For historical reasons, the core Sirius metamodels defined in viewpoint.ecore contain both generic (dialect-independant like Viewpoint, RepresentationDescription, DAnalysis...) concepts and diagram-specific ones (e.g. DNode, EdgeStyle, ContainerCreationDescription...). The table and tree metamodels are more cleanly separated.
+			<br/>This milestone (Sirius 1.0M5) includes the first step towards a full separation of the diagram-specific stuff out of the core of Sirius. So many EClasses have been moved.
+		</p>
+		<p>Most of the time, existing code which used these Sirius EClasses will only need to perform a simple &#8220;Organize Imports&#8221; operation, which should find the classes and interfaces in their new locations.
+			<br/>The &#8220;Organize imports&#8221; is not sufficient in case of imported classes existing several time in different packages (
+			<code>EFactory</code> classes for example with 
+			<code>DescriptionFactory</code>, or 
+			<code>EPackage</code> classes for example with 
+			<code>DescriptionPackage</code>). And in some cases 
+			<code>ViewpointFactory</code> (and 
+			<code>ViewpointPackage</code>) will have to be replaced by 
+			<code>DiagramFactory</code> (and 
+			<code>DiagramPackage</code>).
+		</p>
+		<p>The 
+			<code>Switch</code> classes if overridden also require a particular attention.
+		</p>
+		<p>The existing VSM (
+			<code>*.odesign</code>) and representations file (
+			<code>*.aird</code>) are automatically migrated.
+			<br/>Warning: Nevertheless, if you reference these Sirius concepts with the EPackage qualifier in your VSM (
+			<code>*.odesign</code>), in interpreted expressions for example, you must change 
+			<code>viewpoint</code> in 
+			<code>diagram</code>. For example 
+			<code>viewpoint::DDiagramElement</code> becomes 
+			<code>diagram::DDiagramElement</code>.
+		</p>
+		<p>The impacted EPackages are :</p>
+		<ul>
+			<li>
+				<code>viewpoint</code> : some of its EClasses have been moved to 
+				<code>viewpoint/diagram</code>
+			</li>
+			<li>
+				<code>viewpoint/description</code> : some of its EClasses have been moved to 
+				<code>viewpoint/diagram/description</code>
+			</li>
+			<li>
+				<code>viewpoint/description/style</code> : some of its EClasses have been moved to 
+				<code>viewpoint/diagram/description/style</code>
+			</li>
+			<li>
+				<code>viewpoint/description/tool</code> : some of its EClasses have been moved to 
+				<code>viewpoint/diagram/description/tool</code>
+			</li>
+			<li>
+				<code>viewpoint/description/filter</code> : this EPackage has been moved to 
+				<code>viewpoint/diagram/description/filter</code>
+			</li>
+			<li>
+				<code>viewpoint/description/validation</code> : this EPackage has been moved to 
+				<code>viewpoint/diagram/description/validation</code>
+			</li>
+			<li>
+				<code>viewpoint/description/concern</code> : this EPackage has been moved to 
+				<code>viewpoint/diagram/description/concern</code>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius7">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.migration.resource.StringCouple</code> class has been removed.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionTargetSwitch.getFirstRelevantContainerFinder</code> method has been added to let each dialect use its own 
+				<code>Function</code> to retrieve the first relevant container of a given 
+				<code>EObject</code>, i.e. the first container from which a domain class can be determined.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common.ui3">Changes in 
+			<code>org.eclipse.sirius.common.ui</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.common.ui.business.api.interpreter.VariableContentProvider</code> class has been removed.
+			</li>
+			<li>The 
+				<code>org.eclipse.sirius.common.ui.tools.api.util.ISimpleAction</code> interface has been removed.
+			</li>
+			<li>The method 
+				<code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setText()</code> has been removed. You can now directly call  
+				<code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setDefaultNewName()</code> which has been added to set the default new name to display. Note that this method must be called before Dialog.create().
+			</li>
+			<li>The overriden method 
+				<code>org.eclipse.sirius.common.ui.tools.api.dialog.RenameDialog.setTitle()</code> has been removed. Note that the inherited 
+				<code>setTile()</code> method is still available but must be called before Dialog.create().
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.table3">Changes in 
+			<code>org.eclipse.sirius.table</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.table.business.api.query.DCellQuery.getExportableLabel()</code> method has been added to compute the label to export when the label is cropped by the 
+				<code>org.eclipse.emf.edit.provider.ItemPropertyDescriptor.ItemDelegator</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.table.ui2">Changes in 
+			<code>org.eclipse.sirius.table.ui</code>
+		</h4>
+		<ul>
+			<li>The 
+				<code>org.eclipse.sirius.table.ui.business.api.helper.TableUIHelper</code> now uses 
+				<code>DCellQuery.getExportableLabel()</code> to compute the cell labels used in HTML export.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui6">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li>The long-deprecated 
+				<code>org.eclipse.sirius.ui.business.api.session.DeprecatedIEditingSession</code> interface has been removed. Use the corresponding methods from 
+				<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code> instead.
+			</li>
+		</ul>
+		<h2 id="sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</h2>
+		<h3 id="UserVisibleChanges6">User-Visible Changes</h3>
+		<ul>
+			<li>The ability to print table representations, which had been disabled for the 0.9 release, has been re-enabled.</li>
+		</ul>
+		<h3 id="APIChanges6">API Changes</h3>
+		<p>Sirius 1.0.0M4 includes a lots of API-breaking changes, as part of a global effort to improve the quality of the Sirius internals. In this milestone in particular, most of the APIs which were marked as deprecated in previous versions of Sirius (and before that of Viewpoint) have been either removed (if a replacement exists) or marked as non-deprecated (if no replacement exists yet).</p>
+		<h4 id="Changesinorg.eclipse.sirius.common5">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li>Two deprecated constructors have been removed in 
+				<code>FeatureEditorDialog</code>. Use the remaining constructor instead, which provides proper behavior for both unique and non-unique features.
+			</li>
+			<li>The deprecated method 
+				<code>IEditingDomainFactory.createEditingDomain()</code> has been removed. Use the (inherited) 
+				<code>createEditingDomain(ResourceSet)</code> instead, which ensures correct behavior for all kinds of models (Xtext for example).
+			</li>
+			<li>The deprecated field 
+				<code>org.eclipse.sirius.common.tools.api.listener.Notification.FOLD</code> has been removed. It was never used by Sirius itself, so if your code tried to listen to this kind of notification it was never actually called and can be safely removed.
+			</li>
+			<li>The deprecated methods 
+				<code>getExtensionPlugins()</code> and 
+				<code>getElementsProvidedByPlugin</code> from 
+				<code>EcliseUtil</code> have been removed. If you need this kind of functionality, use the Eclipse APIs directly instead.
+			</li>
+			<li>The deprecated fields 
+				<code>COLUMN_SEMANTIC</code> and 
+				<code>LINE_SEMANTIC</code> of 
+				<code>IInterpreterSiriusVariables</code> have been removed. Use the constants of 
+				<code>org.eclipse.sirius.table.tools.api.interpreter.IInterpreterSiriusTableVariables</code> instead.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius8">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li>The deprecated method 
+				<code>DialectServices.initRepresentations(Viewpoint, EObject)</code> has been removed. Use the version which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated constructor in 
+				<code>CreateRepresentationCommand</code> has been removed. Use the alternative constructor which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The two deprecated constructors in 
+				<code>RefreshRepresentationCommand</code> have been removed. Use the alternative constructors which take an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>DisplayService.computeVisibility(Session, DDiagram, DDiagramElement)</code> has been removed. Use the variant 
+				<code>computeVisibility()</code> which takes a 
+				<code>DiagramMappingsManager</code> instead of a 
+				<code>Session</code>.
+			</li>
+			<li>The following deprecated methods in 
+				<code>FilterService</code> have been removed:
+				<ul>
+					<li>
+						<code>activateCache()</code>: use 
+						<code>DisplayService.activateCache()</code> instead.
+					</li>
+					<li>
+						<code>deactivateCache()</code>: use 
+						<code>DisplayService.deactivateCache()</code> instead.
+					</li>
+					<li>
+						<code>activate()</code>: use 
+						<code>DisplayService.activate()</code> instead.
+					</li>
+					<li>
+						<code>deactivate()</code>: use 
+						<code>DisplayService.deactivate()</code> instead.
+					</li>
+					<li>
+						<code>isActivated()</code>: use 
+						<code>DisplayServiceManager.INSTANCE.getMode() == DisplayMode.NORMAL</code> instead.
+					</li>
+					<li>
+						<code>isCollapse()</code>: use 
+						<code>isCollapsed()</code> instead.
+					</li>
+					<li>
+						<code>isVisibleForFilters()</code>: use 
+						<code>getAppliedFilters()</code> instead.
+					</li>
+					<li>
+						<code>isVisible()</code>: use 
+						<code>DisplayService.isDisplayed()</code> instead.
+					</li>
+					<li>
+						<code>isFiltered()</code>, 
+						<code>isNotFiltered()</code>, 
+						<code>isVisibleForActivatedFilters(), @checkFilters()</code>: use 
+						<code>getAppliedFilters()</code> and 
+						<code>DDiagram.getActivatedFilters()</code> instead.
+					</li>
+				</ul>
+			</li>
+			<li>The deprecated methods 
+				<code>isDirectlyHidden()</code> and 
+				<code>isIndirectlyHidden()</code> in 
+				<code>HideFilterHelper</code> have been removed. Use the corresponding methods in 
+				<code>DDiagramElementQuery</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SavingPolicy.save(Iterable, Map)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated constructor 
+				<code>AbstractCommandFactory(TransactionalEditingDomain, ModelAccessor)</code> has been removed. Use the variant without the 
+				<code>ModelAccessor</code> argument instead.
+			</li>
+			<li>The deprecated constructor 
+				<code>CommandContext(EObject)</code> has been removed. Use the variant which takes an additional 
+				<code>DRepresentation</code> instead.
+			</li>
+			<li>The deprecated methods 
+				<code>activate(TransactionalEditingDomain)</code> and 
+				<code>deactivate(TransactionalEditingDomain)</code> in 
+				<code>IChangeListener</code> have been removed. Use the variants with no argument instead.
+			</li>
+			<li>The deprecated constructor 
+				<code>AddSemanticResourceCommand(Session, URI)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated constructors of 
+				<code>RemoveSemanticResourceCommand</code> have been removed. Use the variants which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated constructor in 
+				<code>CreateDiagramWithInitialOperation</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SessionManager.addResource(Session, Resource)</code> has been removed. Use the 
+				<code>Session.addSemanticResource(URI, IProgressMonitor)</code> instead. In code, 
+				<code>mySessionManager.addResource(mySession, myResource)</code> should be replaced by 
+				<code>mySession.addSemanticResource(myResource.getURI(), new NullProgressMonitor())</code>. Notice that this replacement has not the exact same behavior. The notifications 
+				<code>SessionListener.ABOUT_TO_BE_REPLACED</code> and 
+				<code>SessionListener.REPLACED</code> are not thrown with 
+				<code>addSemanticResource</code> contrary to 
+				<code>addResource</code>. But this kind of notifications is more for reloading of resource.
+			</li>
+			<li>The deprecated constructor of 
+				<code>DefaultLocalSessionCreationOperation</code> have been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SessionManager.getSession(URI)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SessionFactory.createSession(URI)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>Deprecated class 
+				<code>RefreshRepresentationCommand</code> has been removed. Use the class 
+				<code>RefreshRepresentationsCommand</code> instead.
+			</li>
+			<li>Deprecated classes 
+				<code>RevealSiriusElement</code> and 
+				<code>RevealDDiagramElement</code> have been removed. Use the class 
+				<code>RevealDDiagramElements</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>DAnalysisSession.save(Map&lt;?, ?&gt;)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>MappingTableEntry.getImporter()</code> has been updated. It now returns an optional (
+				<code>org.eclipse.sirius.common.tools.api.util.Option</code>) of 
+				<code>MappingTableEntry</code>.
+			</li>
+			<li>The deprecated class 
+				<code>IEMFCommandFactory</code> has been removed. It is not used in Sirius code anymore.
+			</li>
+			<li>The deprecated method 
+				<code>IDiagramCommandFactory.buildCreateDiagramFromDescription(DiagramDescription, EObject)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated methods 
+				<code>dispose()</code> and 
+				<code>disposeInterpreterRegistry(EObject)</code> have been removed from 
+				<code>InterpreterRegistry</code>. They corresponded to dead code.
+			</li>
+			<li>The deprecated method 
+				<code>InterpreterRegistry.prepareImportsFromModelElement(IInterpreter, EObject)</code> has been removed. Use 
+				<code>InterpreterRegistry.prepareImportsFromSession(IInterpreter, Session)</code> instead. To get 
+				<code>Session</code> from 
+				<code>EObject</code>, you can use 
+				<code>SessionManager.INSTANCE.getSession(EObject)</code>.
+			</li>
+			<li>The deprecated method 
+				<code>SiriusHelper.createDAnalysis()</code> has been removed. Use 
+				<code>ViewpointFactory.eINSTANCE.createDAnalysis()</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SessionFactory.createSession(DAnalysis)</code> has been removed. It is not intended to be used, but it can be replaced by 
+				<code>SessionFactory.INSTANCE.createSession(analysis.eResource().getURI(), new NullProgressMonitor())</code>.
+			</li>
+			<li>The method 
+				<code>buildDoExecuteDetailsOperation(DSemanticDecorator, RepresentationCreationDescription, String) has been pull up from @ITableCommandFactory</code>, 
+				<code>ITreeCommandFactory</code> and 
+				<code>IDiagramCommandFactory</code> to 
+				<code>ICommandFactory</code>.
+			</li>
+			<li>The method 
+				<code>getUserInterfaceCallBack()</code> has been pull up from 
+				<code>ITableCommandFactory</code> and 
+				<code>ITreeCommandFactory</code> to 
+				<code>ICommandFactory</code>. And 
+				<code>AbstractCommandFactory</code> now implements this method.
+			</li>
+			<li>The unused reference 
+				<code>allActivatedEdgeMappings</code> from 
+				<code>Layer</code> and 
+				<code>DiagramDescription</code> has been removed from the viewpoint.ecore meta-model. This reference always returns empty list.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram5">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li>The deprecated methods 
+				<code>IDiagramEdgeEditPart.refreshPath()</code> and 
+				<code>AbstractDiagramEdgeEditPart.refreshPath()</code> have been removed. It is not called in Sirius code anymore
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender4">Changes in 
+			<code>org.eclipse.sirius.ecore.extender</code>
+		</h4>
+		<ul>
+			<li>The deprecated methods 
+				<code>IMetamodelExtender.eDelete(EObject)</code>, 
+				<code>CompositeMetamodelExtender.eDelete(EObject)</code> and 
+				<code>ModelAccessor.eDelete(EObject)</code> have been removed. Use the variants which takes an additional 
+				<code>ECrossReferenceAdapter</code> instead. This 
+				<code>ECrossReferenceAdapter</code> can be null.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui7">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li>All deprecated methods in 
+				<code>ModelingProjectManager</code> have been removed. Use the corresponding versions which take an additional 
+				<code>IProgressMonitor</code> parameter instead.
+			</li>
+			<li>All deprecated methods in 
+				<code>ViewpointSelection</code> have been removed. Use the corresponding versions which take an additional 
+				<code>IProgressMonitor</code> parameter instead.
+			</li>
+			<li>Deprecated class 
+				<code>org.eclipse.sirius.ui.business.api.control.SiriusControlCommand</code> has been removed. Use the class 
+				<code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code> instead (same constructor but with an additional 
+				<code>IProgressMonitor</code> parameter).
+				<ul>
+					<li>Ditto for 
+						<code>SiriusUnControlCommand</code>
+					</li>
+				</ul>
+			</li>
+			<li>The deprecated method 
+				<code>DialectUIServices.openEditor(Session, DRepresentation)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SessionHelper.openStartupRepresentations(Session)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SiriusControlHandler.performControl(Shell, EObject)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>The deprecated method 
+				<code>SiriusUncontrolHandler.performUncontrol(Shell, EObject)</code> has been removed. Use the variant which takes an additional 
+				<code>IProgressMonitor</code> instead.
+			</li>
+			<li>New class 
+				<code>AbstractCreateRepresentationFromRepresentationCreationDescription</code>: Generalization of all 
+				<code>CreateRepresentationFromRepresentationCreationDescription</code> classes (iof plug-ins sirius.diagram, sirius.table.ui, sirius.tree.ui).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.table4">Changes in 
+			<code>org.eclipse.sirius.table</code>
+		</h4>
+		<ul>
+			<li>The deprecated method 
+				<code>TableHelper.getCell(DLine, String)</code> has been removed. Use the variant which take a DLine and a DColumn as parameters.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tree4">Changes in 
+			<code>org.eclipse.sirius.tree</code>
+		</h4>
+		<ul>
+			<li>The deprecated method 
+				<code>DTreeUserInteraction.refreshContent()</code> has been removed. Use the variant which take an additional 
+				<code>IProgressMonitor</code> parameter instead.
+			</li>
+		</ul>
+		<h2 id="sirius0.9">Changes in Sirius 0.9.0</h2>
+		<p>Version 0.9.0 is the first release under the Sirius name and under the Eclipse Foundation umbrella. Except for the few cases mentioned below (in the &#8220;Other API Changes&#8221;, &#8220;Specifier-Visible Changes&#8221; and &#8220;User-Visible Changes&#8221; sections), Sirius 0.9.0 is functionally equivalent to the latest version of Viewpoint (version 6.10), which was the name of the project before it was open sourced at Eclipse. See the rest of the documentation for the complete list of feature of the Sirius platform.</p>
+		<h3 id="MigratingfromObeoDesignerorViewpointtoSirius">Migrating from Obeo Designer or Viewpoint to Sirius</h3>
+		<p>If you have existing projects which used this technology before it became Eclipse Sirius and want to migrate to Sirius, you must:</p>
+		<ol>
+			<li>first migrate your projects and models to the latest pre-Sirius version of Viewpoint or Obeo Designer available to you (Viewpoint is the previous name of Sirius);</li>
+			<li>then migrate those to Sirius 0.9.</li>
+		</ol>
+		<p>The latest version of Viewpoint which was available in an Obeo Designer release is Viewpoint 6.8, released in Obeo Designer 6.2. Sirius 0.9 is based on Viewpoint 6.10, which was not released publicly.</p>
+		<p>If you were using Obeo Designer, you must thus first migrate your projects and models to Obeo Designer 6.2, and then consult the 
+			<a href="release_notes_vp.html">release notes for Viewpoint 6.9 and 6.10</a>, which lists the API changes from Viewpoint 6.8 to 6.10.
+		</p>
+		<p>Once your projects are compatible with the latest Viewpoint available to you, you can migrate to Sirius, first by updating your Viewpoint Specification Projects and plug-ins which use the Viewpoint APIs, then by updating any Modeling Project and representation files (
+			<code>*.aird</code>).
+		</p>
+		<h4 id="MigratingViewpointSpecificationProjects">Migrating Viewpoint Specification Projects</h4>
+		<ul>
+			<li>Any plug-in dependencies towards Viewpoint plug-ins must be updated to the corresponding Sirius plug-in and version number. See the correspondence table below for the plug-in names to use.</li>
+			<li>If your plug-ins used any of the extension points defined in Viewpoint, you will need to update your 
+				<code>plugin.xml</code> files to reference the correct extension points identifiers. In particular, all Viewpoint Specification Projects created using Viewpoint use the 
+				<code>fr.obeo.dsl.viewpoint.componentization</code> in their 
+				<code>plugin.xml</code> to register the VSMs they define. This should be changed to use the equivalent 
+				<code>org.eclipse.sirius.componentization</code> extension point id. The identifier changes for the other extension points follow the same rules as the name changes of the plug-ins they are defined in.
+			</li>
+			<li>The migration of your VSMs (
+				<code>*.odesign</code> files) is automatic: simply open your files once in the VSM editor, perform some no-op change to make the editor &#8220;dirty&#8221; and save it. The saved version will have been migrated to Sirius.
+			</li>
+			<li>If you had Java code which used the Viewpoint APIs, you will need to update it to use the Sirius APIs. A simple &#8220;Source &gt; Organize Imports&#8221; on your source folders should find most classes you used in their new namespace. The Viewpoint code base and APIs used the term &#8220;Viewpoint&#8221; both for the name of the product and for the name of the concept. When it refered to the name of the product, the names were changed to use &#8220;Sirius&#8221; instead, so you may need to adjust some names in your code beyond just updating the imports (for example, 
+				<code>ViewpointControlCommand</code> is now 
+				<code>SiriusControlCommand</code>).
+			</li>
+		</ul>
+		<p>Note that if you used Obeo Designer, you may have used the legacy Acceleo 2.x language for the computed expressions inside the 
+			<code>*.odesign</code> files (if your expressions are of the form 
+			<code>&lt;%something%&gt;</code> then you used the legacy language). That language is not supported anymore in Sirius 0.9, so you must migrate your expressions to use Acceleo 3 and/or the specialized interpreters (
+			<code>var:</code>, 
+			<code>feature:</code> and 
+			<code>service:</code>, see the documentation).
+		</p>
+		<h4 id="MigratingModelingProjectsandRepresentationFiles">Migrating Modeling Projects and Representation Files</h4>
+		<ul>
+			<li>First migrate any modeler definitions used by your modeling projects and representation files (see the section above).</li>
+			<li>Modeling projects created using Viewpoint will not be recognized directly by Sirius, because the nature identfier has changed. You must use the &#8220;Configure/Convert to Modeling Project&#8221; action in the project&#8217;s context menu to make it a Sirius-compatible modeling project (see the section below for the technical details of the change).</li>
+			<li>The migration of you representation files (
+				<code>*.aird</code>) is performed automatically when they are loaded in memory. It will become permanent the first time you save it (you can force this by opening a representation, making some arbitrary change and saving the session).
+			</li>
+		</ul>
+		<h3 id="Pluginsversionnumbers.">Plug-ins version numbers.</h3>
+		<p>As of Sirius 0.9, and probably at least until Sirius 1.0 when the APIs will be more stable, all the bundles share the same version, which is also the version for the feature. If you used versioned dependencies to the old Viewpoint code (e.g. dependencies towards Viewpoint 6.8), you need to adjust the versions in your 
+			<code>MANIFEST.MF</code> files in addition to the namespaces.
+		</p>
+		<h3 id="Majornamespacechanges">Major namespace changes</h3>
+		<p>In the context of the move as an official Eclipse project named Sirius, all the namespaces used in the code have changed.</p>
+		<h4 id="Pluginandfeaturesidentifiers">Plug-in and features identifiers</h4>
+		<p>All identifiers have changed to start with the 
+			<code>org.eclipse.sirius</code> namespace prefix. The tables below give the mapping between the Viewpoint plug-in and features identifiers and their Sirius equivalent.
+		</p>
+		<table>
+			<tr>
+				<th>Viewpoint 6.x plug-in</th>
+				<th>Sirius 0.9 plug-in</th>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.common</td>
+				<td>org.eclipse.sirius.common</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.common.acceleo.mtl</td>
+				<td>org.eclipse.sirius.common.acceleo.mtl</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.common.acceleo.mtl.ide</td>
+				<td>org.eclipse.sirius.common.acceleo.mtl.ide</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.common.ocl</td>
+				<td>org.eclipse.sirius.common.ocl</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.common.ui</td>
+				<td>org.eclipse.sirius.common.ui</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.common.xtext</td>
+				<td>org.eclipse.sirius.common.xtext</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint</td>
+				<td>org.eclipse.sirius</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.diagram</td>
+				<td>org.eclipse.sirius.diagram</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.diagram.layoutdata</td>
+				<td>org.eclipse.sirius.layoutdata</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.diagram.sequence</td>
+				<td>org.eclipse.sirius.sequence</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.diagram.sequence.edit</td>
+				<td>org.eclipse.sirius.sequence.edit</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.diagram.sequence.ui</td>
+				<td>org.eclipse.sirius.sequence.edit.ui</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.doc</td>
+				<td>org.eclipse.sirius.doc</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.editor</td>
+				<td>org.eclipse.sirius.editor</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.editor.sequence</td>
+				<td>org.eclipse.sirius.editor.sequence</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.editor.table</td>
+				<td>org.eclipse.sirius.editor.table</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.editor.tree</td>
+				<td>org.eclipse.sirius.editor.tree</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.eef.adapters</td>
+				<td>org.eclipse.sirius.eef.adapters</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.interpreter</td>
+				<td>org.eclipse.sirius.interpreter</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.table</td>
+				<td>org.eclipse.sirius.table</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.table.ui</td>
+				<td>org.eclipse.sirius.table.ui</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.tree</td>
+				<td>org.eclipse.sirius.tree</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.tree.ui</td>
+				<td>org.eclipse.sirius.tree.ui</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.ui</td>
+				<td>org.eclipse.sirius.ui</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.mda.ecore.extender</td>
+				<td>org.eclipse.sirius.ecore.extender</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.mda.pim.ecore.design</td>
+				<td>org.eclipse.sirius.sample.ecore.design</td>
+			</tr>
+			<tr>
+				<td>org.eclipselab.emf.synchronizer</td>
+				<td>org.eclipse.sirius.synchronizer</td>
+			</tr>
+		</table>
+		<table>
+			<tr>
+				<th>Viewpoint 6.x feature</th>
+				<th>Sirius 0.9 feature</th>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.runtime</td>
+				<td>org.eclipse.sirius.runtime</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.runtime.acceleo</td>
+				<td>org.eclipse.sirius.runtime.acceleo</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.runtime.ide.eef</td>
+				<td>org.eclipse.sirius.runtime.ide.eef</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.runtime.ide.ui</td>
+				<td>org.eclipse.sirius.runtime.ide.ui</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.runtime.ide.ui.acceleo</td>
+				<td>org.eclipse.sirius.runtime.ide.ui.acceleo</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.runtime.ide.xtext</td>
+				<td>org.eclipse.sirius.runtime.ide.xtext</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.runtime.ocl</td>
+				<td>org.eclipse.sirius.runtime.ocl</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.specifier.ide.ui</td>
+				<td>org.eclipse.sirius.specifier.ide.ui</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.specifier.ide.ui.acceleo</td>
+				<td>org.eclipse.sirius.specifier.ide.ui.acceleo</td>
+			</tr>
+			<tr>
+				<td>fr.obeo.dsl.viewpoint.doc.feature</td>
+				<td>org.eclipse.sirius.doc.feature</td>
+			</tr>
+		</table>
+		<h4 id="JavaPackagesandClassesNames">Java Packages and Classes Names</h4>
+		<p>The Java package names have changed to start with the identifier of the plug-in they are defined in (which has changed). A simple &#8220;Source &gt; Organize Imports&#8221; on your source folders should find most classes you used in their new namespace.</p>
+		<p>The Viewpoint code base and APIs used the term &#8220;Viewpoint&#8221; both for the name of the product and for the name of the concept. When it refered to the name of the product, the names where changed to use &#8220;Sirius&#8221; instead (for example, 
+			<code>ViewpointControlCommand</code> is now 
+			<code>SiriusControlCommand</code>).
+		</p>
+		<h4 id="ModelsnamespaceURIs">Models namespace URIs</h4>
+		<p>All namespace URIs have also been changed from &#8220;http://www.obeo.fr/dsl/viewpoint*&#8221; to &#8220;http://www.eclipse.org/sirius/&#8221;.</p>
+		<p>If you have created VSM file (.odesign) or representations file (.aird) with Viewpoint, the changes of the namespace URIs will be automatically migrated during the loading of your VSM or your representations file. These new nsURIs will be stored physically in the file during the first save. If the file is not saved, the automatic migration will be replayed at the next opening.</p>
+		<h3 id="NatureID">Nature ID</h3>
+		<p>The modeling project has a specific nature (
+			<code>org.eclipse.sirius.nature.modelingproject</code>).
+			<br/>If you have modeling project created with Viewpoint, you must launch the action &#8220;Configure/Convert to Modeling Project&#8221; to replace old nature id (
+			<code>fr.obeo.dsl.viewpoint.nature.modelingproject</code>) by the new one.
+			<br/>If you have many modeling projects to &#8220;migrate&#8221;, you can easily make a script to replace 
+			<code>fr.obeo.dsl.viewpoint.nature.modelingproject</code> by 
+			<code>org.eclipse.sirius.nature.modelingproject</code> in all 
+			<code>.project</code> file of each modeling projects.
+		</p>
+		<h3 id="OtherAPIChanges">Other API Changes</h3>
+		<p>This section only lists API changes in Sirius 0.9.0 compared to the latest version of Viewpoint it is based on, i.e. Viewpoint 6.10.</p>
+		<h4 id="APIAdded">API Added</h4>
+		<ul>
+			<li>Add 
+				<code>IMigrationParticipant.getPackage()</code> to return the EPackage to use for the given namespace. This change concerns our internal migration framework. This is useful to handle our namespace changes (from Viewpoint to Sirius).
+			</li>
+		</ul>
+		<h4 id="APIRemoval">API Removal</h4>
+		<ul>
+			<li>Removed 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IAcceleoInterpreterVariables</code>: This interface only defined a single constant, which refered to the syntax of an obsolete version of the Acceleo language.
+			</li>
+			<li>Removed 
+				<code>org.eclipse.sirius.common.tools.api.resource.IFileContributorExtension</code>: This interface only defined a few constants relative to an extension point which does not exist anymore.
+			</li>
+			<li>Removed the 
+				<code>org.eclipse.sirius.reconciler</code> extension point definition (which used to be defined in the 
+				<code>org.eclipse.sirius</code> plug-in): This extension point is not supported anymore (and has not been for a long time).
+			</li>
+			<li>Removed all the deprecated methods from 
+				<code>Session</code> and replaced the internal calls with the equivalent versions with 
+				<code>IProgressMonitors</code>. The removed methods are:
+			</li>
+		</ul>
+		<pre>void open();
+void addSemanticResource(Resource newResource, boolean addCrossReferencedResources);
+void addSemanticResource(URI semanticModelURI, boolean addCrossReferencedResources);
+void addSemanticResource(URI semanticModelURI, boolean addCrossReferencedResources, IProgressMonitor monitor);
+void removeSemanticResource(Resource resource, boolean removeCrossReferencedResources);
+void removeSemanticResource(Resource semanticResource);
+void save();
+void close();
+Collection&lt;Viewpoint&gt; getSelectedViewpoints();
+void createView(Viewpoint viewpoint, Collection&lt;EObject&gt; semantics);
+void createView(Viewpoint viewpoint, Collection&lt;EObject&gt; semantics, boolean createNewRepresentations);
+void addSelectedView(DView view) throws IllegalArgumentException;
+void removeSelectedView(DView view);
+
+</pre>
+		<h3 id="SpecifierVisibleChanges6">Specifier-Visible Changes</h3>
+		<p>New variables are available for 
+			<code>sizeComputationExpression</code> to compute the size of edges on 
+			<code>EdgeStyleDescription</code> and 
+			<code>BracketEdgeStyleDescription</code>:
+		</p>
+		<ul>
+			<li>
+				<em>diagram</em>: the current 
+				<code>DDiagram</code>
+			</li>
+			<li>
+				<em>view</em>: the current 
+				<code>DEdge</code>
+			</li>
+			<li>
+				<em>sourceView</em>: the source view of the current edge.
+			</li>
+			<li>
+				<em>targetView</em>: the target view of the current edge.
+			</li>
+		</ul>
+		<h3 id="UserVisibleChanges7">User-Visible Changes</h3>
+		<ul>
+			<li>The ability to print table representations has been disabled for the 0.9 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=422223" target="_blank">bug #422223</a>: for the details). It should be re-introduced in 1.0.</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Architecture.html b/doc/5.1.x/developer/Architecture.html
new file mode 100644
index 0000000..6b714a5
--- /dev/null
+++ b/doc/5.1.x/developer/Architecture.html
@@ -0,0 +1,225 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Architecture</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusArchitectureandConcepts">Sirius Architecture and Concepts</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SiriusArchitectureandConcepts">Sirius Architecture and Concepts</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#session">Sessions</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#ted">Transactional Editing Domain</a>
+							</li>
+							<li>
+								<a href="#vp_selection">Changing the Viewpoint Selection</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#uisession">Editing Sessions</a>
+					</li>
+					<li>
+						<a href="#model_accessor">The Model Accessor</a>
+					</li>
+					<li>
+						<a href="#dialects">Dialects</a>
+					</li>
+					<li>
+						<a href="#viewpoint_registry">The Viewpoint Registry</a>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>This document presents an overview of the internal architecture of Sirius, and the main concepts and APIs.</p>
+		<p>Sirius relies heavily on the Eclipse platform, and reuses (and extends) many of the standard Eclipse frameworks, in particular the Eclipse Modeling Platform. This document assumes that you are already familiar with these frameworks and libraries, in particular EMF and EMF Transaction, GEF and GMF for diagrams. Refer to these frameworks' own documentation for more details about them.</p>
+		<h2 id="session">Sessions</h2>
+		<p>The central concept of Sirius&#8217;s API is the 
+			<code>Session</code>. In Sirius, all data is stored in EMF models: the semantic models themselves obviously, but also the representations (diagrams, tables) and the viewpoint configuration (the 
+			<em>Viewpoint Specification Models</em>). A session is a wrapper around a 
+			<em>Transactional Editing Domain</em> and its 
+			<em>Resource Set</em>. It ensures the consistency of the models inside the editing domain, from the platform&#8217;s point of view; for example it makes sure the representation files correctly reference all the semantic models they need to in order to handle the representations in the session. The session also provides high-level, Sirius-specific services through its own APIs and support classes and interfaces.
+		</p>
+		<p>In the standard UI, each 
+			<em>Modeling Project</em>  corresponds to exactly one 
+			<code>Session</code>, and each session contains its own 
+			<em>Editing Domain</em> and 
+			<em>Resource Set</em>. This means that sessions (and thus modeling projects) are isolated from each other.
+		</p>
+		<p>The 
+			<em>representation files</em> (
+			<code>*.aird</code> files) can be though as the serialized form of a 
+			<code>Session</code>, and symmetrically a session is the runtime incarnation of a representation file (or more precisely of the unique top-level representation file in a modeling project).
+		</p>
+		<p>A session, inside its resource set, contains three kinds of resources:</p>
+		<ul>
+			<li>the 
+				<em>semantic resources</em>, which contain the user&#8217;s semantic model;
+			</li>
+			<li>the 
+				<em>representation resources</em>, which correspond to the 
+				<code>aird</code> file(s), and contain representation data (e.g. diagrams);
+			</li>
+			<li>the 
+				<em>Viewpoint Specification Models</em> which contain all the viewpoints used by the representations inside the session. These are the 
+				<code>*.odesign</code> files, and are typically loaded from installed plug-in instead of from the workspace (except when using the 
+				<em>dynamic mode</em> to develop viewpoints).
+			</li>
+		</ul>
+		<p>The 
+			<code>SessionManager</code> is a global object which references all the sessions currently opened in the system. It can also be used to find which session is responsible for a given semantic element. This is very important because many Sirius APIs require that you provide a 
+			<code>Session</code> parameter. If what you have is an element from a user semantic model, you can use 
+			<code>SessionManager.INSTANCE.getSession(theSemanticElement)</code> to find in which of  the opened session, if any, this object is loaded. Note that this method can be relatively costly, so do not call it in tight loops to avoid hurting performance.
+		</p>
+		<p>To create a Session programmatically:</p>
+		<pre><code>URI sessionResourceURI = URI.createPlatformResourceURI("/Project/archi.aird", true);
+Session createdSession = SessionManager.INSTANCE.getSession(sessionResourceURI);
+createdSession.open();
+</code></pre>
+		<p>The 
+			<code>Session</code> API provides several methods to manage the different kind of resources it contains: finding all the 
+			<em>semantic resources</em> and adding new ones, finding about all the referenced session resources (all the secondary 
+			<code>*.aird</code> files which are part of the same session), etc. Refer to the 
+			<code>Session</code> interface&#8217;s JavaDoc for details.
+		</p>
+		<p>The 
+			<code>Session.getInterpreter()</code> method can be used to obtain an 
+			<code>IInterpreter</code> properly configured to query the models in that session. The interpreter it returns will handle expression from any of the supported query languages, and you can use it to run your own queries (see the 
+			<code>IInterpreter</code> API).
+		</p>
+		<p>Another interesting method in 
+			<code>Session</code> is 
+			<code>Session.getEventBroker()</code>. It returns a 
+			<code>SessionEventBroker</code> object, which can be used to add trigger actions that will be performed whenever a change in the session&#8217;s model occurs. See 
+			<code>SessionEventBroker</code> and 
+			<code>ModelChangeTrigger</code> for details.
+		</p>
+		<p>When you are finished working with a session, you must 
+			<code>close()</code> it. This will unload all the models in its resource set and free the corresponding memory. After a session has been close it can not be reopened, but you can open a new one on the same files if needed.
+		</p>
+		<h3 id="ted">Transactional Editing Domain</h3>
+		<p>The editing domain associated to each session is an EMFT 
+			<em>Transactional Editing Domain</em>. In addition to basic undo/redo, it supports advanced features like atomicity and pre- and post-commit listeners, which are triggered after a command has been executed, and can be used to perform additional work (for pre-commit listeners) or to update external application data like UI state for post-commit listeners.
+		</p>
+		<p>The 
+			<code>Session.getTransactionalEditingDomain()</code> will return the 
+			<code>TransactionlEditingDomain</code> for a session. 
+		</p>
+		<p>To modify a model element with a transactional editing domain, you must use a 
+			<code>RecordingCommand</code>. If you try to modify the models inside a session (semantic model or representations) outside the context of a recording command, you will get an exception. The proper usage pattern is:
+		</p>
+		<pre><code>TransactionalEditingDomain ted = ...;
+ted.getCommandStack().execute(myCommand);
+</code></pre>
+		<p>where 
+			<code>myCommand</code> is a 
+			<code>RecordingCommand</code>.
+		</p>
+		<h3 id="vp_selection">Changing the Viewpoint Selection</h3>
+		<p>Each session has its own set of Viewpoints enabled, which determine which representations and extension are available. Users can change that selection using the 
+			<em>Viewpoint Selection</em> action (for example on a 
+			<em>Modeling Project</em>). You can also change this selection programmatically.
+		</p>
+		<p>The simplest way to do this is to use the 
+			<code>UserSession</code> API; for example:
+		</p>
+		<pre><code>Session userSession = UserSession.from(createdSession);
+userSession.selectViewpoint("Design");
+</code></pre>
+		<h2 id="uisession">Editing Sessions</h2>
+		<p>An 
+			<em>editing session</em>, represented by an instance of 
+			<code>org.eclipse.sirius.ui.business.api.session.IEditingSession</code>,  manages the graphical editors associated to a session. A session can exist without an associated editing session, but some operations require that an editing session is explicitly opened. At most one editing session can exist for a given session.
+		</p>
+		<p>To retrieve the editing session associated to a session or create a new one, use the 
+			<code>org.eclipse.sirius.ui.business.api.session.SessionUIManager</code>  API. The manager serves both as a factory for editing sessions and as a registry of all the ones which are opened at a given time and which session they correspond to.
+		</p>
+		<p>The main services offered by an editing session are to open, close, save, and generally manage the lifecycle of the Eclipse editors associated with a session. Every time a representation (e.g. a diagram) is opened on a model, it happens through the corresponding editing session.</p>
+		<p>You can use the editing session&#8217;s APIs yourself to open representations, check their dirty states, save them, etc. Refer to the 
+			<code>EditingSession</code>'s JavaDoc for details.
+		</p>
+		<p>You can also register 
+			<code>IEditingSessionListeners</code> on an editing session, to be notified of state changes in the session, in particular when it becomes 
+			<em>dirty</em>, meaning that it contains unsaved changes.
+		</p>
+		<h2 id="model_accessor">The Model Accessor</h2>
+		<p>The semantic models inside a session are never manipulated directly by Sirius. All access to these models is mediated through the session&#8217;s 
+			<code>ModelAccessor</code> instead of directly through the normal EMF reflective APIs. This accessor serves two purposes:
+		</p>
+		<ul>
+			<li>It enables seamless extension (or restriction) of how the session views the semantic model. For example a model accessor could give access to virtual elements or properties, which do not exist &#8220;physically&#8221; inside the semantic model; it could also decide to hide some parts of the semantic model to viewpoint.</li>
+			<li>It allows the verification of any access or modification using the associated 
+				<code>IPermissionAuthorithy</code>. The permission authority is used to lock model elements (both diagram and semantic elements), and to check if you have read and/or write access to each element and feature before access or modification.
+			</li>
+		</ul>
+		<p>You can obtain the model accessor associated to a session using the 
+			<code>Session.getModelAccessor()</code> method, and the permission authority using 
+			<code>ModelAccessor.getPermissionAuthority()</code>.  If you extend Sirius, you should make sure to use the model accessor API to read and write the semantic model, and to use the permission authority to check any change you want to perform beforehand.
+		</p>
+		<h2 id="dialects">Dialects</h2>
+		<p>Sirius supports different kinds of representations: diagrams, tables and trees. These are all 
+			<strong>dialects</strong>, which are supported by default by the platform. The core of the platform only deals with the abstract notion of a dialect, and each one is simply an extension.
+		</p>
+		<p>The 
+			<code>DialectManager</code>  (
+			<code>org.eclipse.sirius.business.api.dialect.DialectManager</code>) offers some general APIs which can be used to manipulate representations in a uniform way, independently of which concrete dialect provides them. The 
+			<code>DialectManager</code> can be used to:
+		</p>
+		<ul>
+			<li>create new representations;</li>
+			<li>synchronize representations;</li>
+			<li>delete representations;</li>
+			<li>find existing representations.</li>
+		</ul>
+		<p>The 
+			<code>DialectManager</code> is a global object but the services it offers work on representations inside sessions, so all the methods it provides require a 
+			<code>Session</code> object as argument.
+		</p>
+		<p>In the same way as sessions are split in a core 
+			<code>Session</code> API and an 
+			<code>EditingSession</code> API to handle UI-specific services, the 
+			<code>DialectManager</code> is complemented with the 
+			<code>DialectUIManager</code>  (
+			<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager</code>), which offers generic APIs to representations services which depend on the UI. The main ones are:
+		</p>
+		<ul>
+			<li>opening and closing editors;</li>
+			<li>exporting representations into external files (e.g. images).</li>
+		</ul>
+		<h2 id="viewpoint_registry">The Viewpoint Registry</h2>
+		<p>The 
+			<code>ViewpointRegistry</code> is a global object which knows about all the Viewpoint definitions available in the system at every time.
+		</p>
+		<p>When a plug-in containing properly packaged 
+			<em>VSMs</em> is deployed, the registry will be notified (through the 
+			<code>org.eclipse.sirius.componentization</code> extension point) and register all the viewpoints defined in any of these 
+			<em>VSMs</em>. The registry also listens to changes in the Eclipse workspace to detect the creation, modification and deletion of any 
+			<code>*.odesign</code> files; this is (part of) what enables dynamic development of VSMs, with no need for a costly deployment of plug-ins to test your changes: the latest version of a Viewpoint definition from the workspace is always known from the registry.
+		</p>
+		<p>You can use the registry to discover about all the viewpoint definitions which are available, and introspect the corresponding models. However be aware that the Viewpoint registry maintains its own editing domain and EMF 
+			<code>ResourceSet</code> in which the viewpoints are loaded. The model loaded in the registry are 
+			<strong>not</strong> the same as the ones loaded in a session that uses a given viewpoint. It is a different instance of the same model. This means you must be careful when comparing or passing around elements from a viewpoint definition. For example if you have defined a viewpoint named 
+			<em>A</em>, and have two different sessions where 
+			<em>A</em> is enabled, you will have three equivalent but different instances of 
+			<em>A</em>: one in each of the sessions' 
+			<code>ResourceSet</code>, and one in the 
+			<code>ViewpointRegistry</code>'s private 
+			<code>ResourceSet</code>.
+		</p>
+		<p>You can register listeners on the 
+			<code>ViewpointRegistry</code> to be notified when Viewpoints are registered, unregistered, or when the definition of a viewpoint changes (for example because it was defined from an 
+			<code>*.odesign</code> file in the workspace that you have just modified, and the registry detected it and reloaded the new definition);
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Architecture_Overview.html b/doc/5.1.x/developer/Architecture_Overview.html
new file mode 100644
index 0000000..efa27fb
--- /dev/null
+++ b/doc/5.1.x/developer/Architecture_Overview.html
@@ -0,0 +1,74 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Architecture_Overview</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusArchitectureOverview">﻿Sirius Architecture Overview</h1>
+		<p>Sirius is a platform for developing and using graphical model editors for any domain. It is based on the Eclipse Platform, and in particular the Eclipse Modeling stack based on EMF. The Sirius platform itself is domain-agnostic, in that it can be used to create modelers for any business domain as long as they can described using EMF.
+			<br/>There are two categories of users of Sirius:
+		</p>
+		<ol>
+			<li> 
+				<strong>Architects</strong>  use Sirius to develop modelers for their specific business domains, provided they have defined their domain using EMF’s Ecore.
+			</li>
+			<li>
+				<strong>End Users</strong>  use the resulting modelers to create, view, edit, and in general manipulate actual business models of their domain.
+			</li>
+		</ol>
+		<p>The general architecture of Sirius is illustrated in the figure below and reflects this split:</p>
+		<img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - High-Level Architecture Overview.png"/> 
+		<p>On top of Eclipse and EMF, Sirius is made of two main parts.</p>
+		<p>The Sirius 
+			<strong>tooling</strong>   (on the right hand of the figure), is the part used by architects. It provides an environment in which they can specify the modeler(s) they want to give to their end-users. This specification is done in a declarative way, by configuring a 
+			<em>description model</em> . For each modeler, the architect must specify in the description model:
+		</p>
+		<ol>
+			<li>
+				<em>what</em>  is to be represented in the modeler, i.e. which elements of the domain model should be visible;
+			</li>
+			<li>how these elements should 
+				<em>look</em> , i.e. visual styling information;
+			</li>
+			<li>how these elements should 
+				<em>behave</em> , i.e. which tools and interaction modes are available to the end-users to modify the business models, and how each tool behaves.
+			</li>
+		</ol>
+		<p>The Sirius Tooling provides a complete, easy to use environment for architects to create these specifications. The result is a (set of) 
+			<em>description model(s)</em> , optionally with some accompanying Java code, that can be deployed as a normal Eclipse plug-in.
+		</p>
+		<p>The Sirius 
+			<strong>runtime</strong>  (on the left hand of the figure), is the part used by end-users, along with the modeler definition(s) produced by the architects. End-users do not need the Sirius Tooling in order to use Sirius-based modelers. The runtime is responsible for 
+			<em>interpreting</em>  the modeler description models and presenting to the user actual modeler(s) which look and behave as specified in the description.
+			<br/>To do this, the runtime uses a 
+			<em>representation model</em>  (and the corresponding meta-model), which describes the concrete representation(s) of end-users business models according to what is configured in the modelers’ specifications (i.e. which concrete business elements are represented, and how they look). These representation models are produced by the Sirius runtime using a refresh algorithm which produces a “projection” of the business data onto the representation domain using the rules defined in the modeler’s definitions.
+			<br/>The representation model is then shown to the end-user in a 
+			<em>graphical editor</em> , integrated into the Eclipse workbench. Through the editor, the end-user can visualize his business model according to the rules defined by the architect in the modeler’s specification. The end-user can  also 
+			<em>interact</em>  with his models as represented, but only in the ways configured by the architect. When the user interacts with the representation in the editor, some interactions (e.g. dragging and dropping and element on a diagram) can trigger behaviors defined by the architect, which will modify the underlying business model in ways that are consistent with the business rules. Whenever the business model is modified, Sirius re-launches the refresh algorithm, which is incremental: instead of creating a new representation model for the updated business model’s state, it updates the existing model and only changes the parts that need it. The ends-user can then see the effect of his changes immediately in the editor.
+		</p>
+		<p>
+			<img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - Representation Refresh-Sync.png"/>
+		</p>
+		<p>An important property of the refresh algorithm(s) is that they are not only incremental in terms of changes in the business model, but also in terms of changes in the modeler description model itself. This gives rise to one of the most important and distinctive features of Sirius: support for dynamic and incremental development of modelers by architects, with real-time feedback. In practice, this means that when an architect is developing a new modeler definition (or changing an existing one), he can have both the modeler’s definition open (using the Sirius Tooling) and an example representation also open alongside, and whenever he changes the modeler’s definition and saves it, the updated definition is automatically picked-up by the runtime and taken into account instantaneously by issuing a refresh.</p>
+		<p>In addition to the 
+			<em>runtime</em>  vs 
+			<em>tooling</em>  split, the Sirius architecture also separates the core part of the platform, which is independent on any specific kind of representation, and the 
+			<em>dialect-specific extensions</em> . Each dialect, which handles a specific kind of representation, is built on top of the core architecture. For example by default Sirius supports three different dialects: diagrams, tables, and trees. More dialects can be implemented by other parties using the public APIs exposed by the Sirius core parts.
+			<br/>Each dialect provides its own specific extensions to the architecture elements in the core:
+		</p>
+		<ol>
+			<li>The representation meta-model is extended with the dialect’s own concepts. For example a diagram can have nodes and connections between these nodes.</li>
+			<li>The core description meta-model is extended to support the definition of these specific concepts. The tooling environment must then be extended to allow architects to specify these new concepts (in general this part can mostly be inferred from the structure of description metamodel and thus automatically generated).</li>
+			<li>Each dialect must provide its own refresh algorithm (although the Sirius core provides some common code to facilitate this).</li>
+			<li>Finally, each dialect must implement the editor(s) used to present their representations to the end-users and allow them to interact with them. This is where dialects make use of additional frameworks and technologies, like GMF for example to render diagrams.</li>
+		</ol>
+		<p>The Sirius architecture as described in this document has the following important properties:</p>
+		<ul>
+			<li>separation of tooling from the runtime: smaller runtime for end-users (which are much more numerous) with no UI “pollution” by architects-specific concepts; the runtime does not care how the modeler definitions where produced: using the standard tooling, using an alternate tooling developed completely separately, produced by a program… the only requirement is that the resulting definition conforms to the meta-model.</li>
+			<li>separation of the core from dialect-specific parts: isolates technical dependencies required by some dialects out of the core; allow installations with only a subset of all the supported dialects; extensible; by making even the standard dialects normal clients of the core, keeps us “honest” about our APIs: the standard dialect do not (or at least should not) have privileged access to core features that externally-developed dialects can not access; the core still provides a good place to share common abstractions and code, which results in less code in dialects, a better integration and more uniform end-user experience across different types of representations.</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Meta-models.html b/doc/5.1.x/developer/Meta-models.html
new file mode 100644
index 0000000..afbcf1d
--- /dev/null
+++ b/doc/5.1.x/developer/Meta-models.html
@@ -0,0 +1,121 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Meta-models</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="OverviewoftheSiriusMetaModels">Overview of the Sirius Meta-Models</h1>
+		<h2 id="introduction">Introduction</h2>
+		<p>Sirius uses EMF models to store both 
+			<em>Viewpoint Specification Models</em> (the 
+			<code>*.odesign</code> files) and representation data (the 
+			<code>*.aird</code> files). If you need to extend the Sirius platform in Java, sooner or later you will have to deal with elements from these meta-models, so this document gives a very brief overview of which meta-models are used, where they are defined and how they are organized.
+		</p>
+		<h2 id="vsm_metamodels">Viewpoint Specification Meta-Models</h2>
+		<p>The structure of the 
+			<em>VSMs</em> is defined by several meta-models. The 
+			<code>org.eclipse.sirius</code> plug-in contains the 
+			<code>http://www.eclipse.org/sirius/1.1.0</code> Ecore package and its sub-packages, which defines the general structure of a VSM:
+		</p>
+		<ul>
+			<li>
+				<code>http://www.eclipse.org/sirius/description/1.1.0</code>: defines the overall structure (
+				<code>Group</code>, 
+				<code>Viewpoint</code>, the abstract 
+				<code>RepresentationDescription</code> type used for all dialects).
+			</li>
+			<li>
+				<code>http://www.eclipse.org/sirius/description/style/1.1.0</code>: defines the abstract and generic 
+				<code>StyleDescription</code> and associated types which are used by all dialects.
+			</li>
+			<li>
+				<code>http://www.eclipse.org/sirius/description/tool/1.1.0</code>: defines the generic 
+				<code>AbstractToolDescription</code> and generic tool types. This package also contains the definitions for all the 
+				<a href="../specifier/general/Model_Operations.html">Model Operations</a> like 
+				<code>If</code>, 
+				<code>CreateInstance</code>, etc.
+			</li>
+			<li>
+				<code>http://www.eclipse.org/sirius/description/validation/1.1.0</code>: defines the validation rules which can be added to viewpoints and diagrams, include the quick-fixes definitions.
+			</li>
+		</ul>
+		<p>The other dialects define their own extensions to these packages, in their own plug-ins. They follow the same structure:</p>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.diagram</code> defines 
+				<code>http://www.eclipse.org/sirius/diagram/description/1.1.0</code> and its sub-packages, with all the elements that are used to specify a diagram description inside a VSM.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.sequence</code> defines 
+				<code>http://www.eclipse.org/sirius/diagram/sequence/description/2.0.0</code> and 
+				<code>http://www.eclipse.org/sirius/diagram/sequence/description//tool/2.0.0</code> for sequence diagrams-specific mappings and tools.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table</code> defines 
+				<code>http://www.eclipse.org/sirius/table/description/1.1.0</code>  for table mappings and tools.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree</code>  defines 
+				<code>http://www.eclipse.org/sirius/tree/description/1.1.0</code>  for tree mappings and tools.
+			</li>
+		</ul>
+		<h2 id="representation_metamodels">Representation Meta-Models</h2>
+		<p>The meta-models described above correspond to the elements which are found inside the 
+			<code>*.odesign</code> files. The 
+			<em>representation files</em> (
+			<code>*.aird</code>) are also stored as models. A representation can be thought of as a serialized version of a session. It includes references to the semantic models represented in the session, and the model for each actual representation (diagram, table or tree). These representation models are organized into groups corresponding to which viewpoint defines them, and the representation file also stores the set of currently enabled viewpoints in the session.
+		</p>
+		<p>This means the representation file 
+			<em>contains</em> the representation and session data, 
+			<em>references</em> the semantic models, and also 
+			<em>references</em> the 
+			<em>VSMs</em> which define the representations it contains.
+		</p>
+		<p>The meta-model for representation files is defined in the 
+			<code>http://www.eclipse.org/sirius/1.1.0</code> package, from the main 
+			<code>org.eclipse.sirius</code> plug-in. Diagrams, sequence diagrams, tables and trees define their own meta-models to describe their representations' data:
+		</p>
+		<ul>
+			<li>
+				<code>http://www.eclipse.org/sirius/diagram/1.1.0</code> defined in 
+				<code>org.eclipse.sirius.diagram</code>.
+			</li>
+			<li>
+				<code>http://www.eclipse.org/sirius/diagram/sequence/2.0.0</code> defined in 
+				<code>org.eclipse.sirius.diagram.sequence</code>.
+			</li>
+			<li>
+				<code>http://www.eclipse.org/sirius/table/1.1.0</code> defined in 
+				<code>org.eclipse.sirius.table</code>.
+			</li>
+			<li>
+				<code>http://www.eclipse.org/sirius/tree/1.0.0</code> defined in 
+				<code>org.eclipse.sirius.tree</code>.
+			</li>
+		</ul>
+		<p>The concrete structure of an 
+			<code>aird</code> file is the following: An 
+			<code>aird</code> resource contains a single 
+			<code>DAnalysis</code>. The analysis references the semantic resources in the session, via its 
+			<code>semanticResources</code> reference, and may reference other &#8220;sub-aird&#8221; through its 
+			<code>referencedAnalysis</code> reference. It also contains through 
+			<code>ownedViews</code> a 
+			<code>DView</code> for every Viewpoint which was ever enabled in the session. The sub-set of 
+			<code>ownedViews</code> in 
+			<code>selectedViews</code> corresponds to the Viewpoints currently enabled in the session. Each 
+			<code>DView</code> references (through 
+			<code>viewpoint</code>) the viewpoint definition it is an &#8220;instance&#8221; of, and contains actual representations (from that viewpoint) in 
+			<code>ownedRepresentations</code>.
+		</p>
+		<p>The structure of the representations themselves depend on each dialect, which defines its own meta-model as mentioned above. However, they all use the 
+			<code>org.eclipse.sirius.viewpoint.DSemanticDecorator</code> interface for representation elements which stand for semantic elements. The 
+			<code>getTarget()</code> method of 
+			<code>DSemanticDecorator</code> can be used to obtain the actual semantic target element being represented. This means that both a node on a diagram (which is a 
+			<code>DNode</code>) and a cell in a table (a 
+			<code>DCell</code>), and any other representation element in Sirius, share the same API to retrieve the element in the user&#8217;s semantic model that it represents.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/Sirius Developer Manual.html b/doc/5.1.x/developer/Sirius Developer Manual.html
new file mode 100644
index 0000000..86692ef
--- /dev/null
+++ b/doc/5.1.x/developer/Sirius Developer Manual.html
@@ -0,0 +1,116 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Sirius Developer Manual</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusDeveloperManual">Sirius Developer Manual</h1>
+		<p>This document gives an overview of the internals of the 
+			<em>Sirius</em> platform, and describes the main APIs and extension points.
+		</p>
+		<ul>
+			<li>
+				<a href="Architecture_Overview.html">
+					<strong>Architecture Overview</strong>
+				</a> provides a high-level view of how Sirius is structured.
+			</li>
+			<li>
+				<a href="Architecture.html">
+					<strong>Architecture and Concepts</strong>
+				</a> describes the general architecture of the system, the main concepts and top-level entry points in the APIs.
+			</li>
+			<li>
+				<a href="Meta-models.html">
+					<strong>Meta-models</strong>
+				</a> gives a high-level description of the various meta-models used internally by Sirius, to represent both 
+				<em>VSMs</em> and representation files.
+			</li>
+			<li>The Sirius platform publishs a set of API, and the next sections describe some which require particular attention:
+				<ul>
+					<li>
+						<a href="siriusCrossReferenceAdapter.html">
+							<strong>SiriusCrossReferenceAdapter</strong>
+						</a>
+					</li>
+					<li>
+						<a href="representations_lazy_loading.html">
+							<strong>Representations lazy loading (experimental)</strong>
+						</a>
+					</li>
+				</ul>
+			</li>
+			<li>The Sirius platform is extensible, and the next sections describe some common extension scenarios:
+				<ul>
+					<li>
+						<a href="integration-plm.html">
+							<strong>Integration with Product Life Cycle Management</strong>
+						</a>
+					</li>
+					<li>
+						<a href="integration-modeler_description_file_deployment.html">
+							<strong>Deploy a Modeler Description File</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_save_dialog.html">
+							<strong>Provide custom save dialog</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_custom-arrange-all.html">
+							<strong>Provide custom arrange-all</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_custom_style.html">
+							<strong>Provide custom style</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_tabbar_extensions.html">
+							<strong>Provide tab-bar extensions</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_migrate_contribution.html">
+							<strong>Provide custom representation files migration</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_repair_contribution.html">
+							<strong>Provide custom repair participant</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_celleditor.html">
+							<strong>Provide custom cell editor</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_custom_bundled_image_shape.html">
+							<strong>Provide custom bundled image shape</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-properties_provide_custom_widget.html">
+							<strong>Provide custom widget for the properties view and dialogs</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_custom_model_operation.html">
+							<strong>Provide custom model operation</strong>
+						</a>
+					</li>
+					<li>
+						<a href="extensions-provide_custom_aird_editor_pages.html">
+							<strong>Provide custom aird editor pages</strong>
+						</a>
+					</li>
+				</ul>
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-properties_provide_custom_widget.html b/doc/5.1.x/developer/extensions-properties_provide_custom_widget.html
new file mode 100644
index 0000000..3983cac
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-properties_provide_custom_widget.html
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-properties_provide_custom_widget</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvideCustomWidgetForThePropertiesView">Sirius &#8211; Provide Custom Widget For The Properties View</h1>
+		<h2 id="Goal">Goal</h2>
+		<p>Using the Properties DSL in the odesign, a specifier can create the content of the Properties view for her/his Sirius-based designers. In some projects, a specifier may require the use of additional widgets not provided by the Sirius Properties runtime. In order to fulfill this need, the Sirius Properties runtime provide two ways for a developer to contribute additional widgets for specifiers.</p>
+		<h2 id="Strategies">Strategies</h2>
+		<p>Two strategies, 
+			<a href="extensions-properties_provide_custom_widget_basic.html">
+				<strong>Basic Custom Widget</strong>
+			</a> and 
+			<a href="extensions-properties_provide_custom_widget_advanced.html">
+				<strong>Advanced Custom Widget</strong>
+			</a>, exist to create a custom widget depending on the quality of the integration of the custom widget that you want to create.
+		</p>
+		<table class="table table-bordered" style="margin-left:0">
+			<tr>
+				<td></td>
+				<th>Basic Custom Widget</th>
+				<th>Advanced Custom Widget</th>
+			</tr>
+			<tr>
+				<td>Advantages</td>
+				<td>Easier to implement by the developer</td>
+				<td>Exactly the same integration in Sirius as any other concepts</td>
+			</tr>
+			<tr>
+				<td>Drawbacks</td>
+				<td>Poor user interface for the specifier to manipulate</td>
+				<td>Complex to implement by the developer</td>
+			</tr>
+		</table>
+		<p>Those two strategies have their own specific advantages and drawbacks but the &#8220;Advanced Custom Widget&#8221; strategy can developed as a follow-up of a &#8220;Basic Custom Widget&#8221; while keeping most of the code developed for the &#8220;Basic Custom Widget&#8221; approach.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-properties_provide_custom_widget_advanced.html b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_advanced.html
new file mode 100644
index 0000000..a0c8bd3
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_advanced.html
@@ -0,0 +1,623 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-properties_provide_custom_widget_advanced</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusPropertiesAdvancedCustomWidget">Sirius Properties &#8211; Advanced Custom Widget</h1>
+		<h2 id="Goal">Goal</h2>
+		<p>Using the Advanced Custom Widget approach, our goal aims at the creation of a custom widget with a great user experience for the Sirius specifier. This custom widget will be created after the development of the basic custom widget. You should be familiar with this approach first.</p>
+		<h2 id="Strategy">Strategy</h2>
+		<p>In order to create a custom widget, we will have to think about the two kind of users that will interact with our work, the Sirius specifier and the end-user. With this advanced approach, we will create a table widget for the end-user with a great experience for the Sirius specifier who will manipulate it.</p>
+		<h3 id="SpecificationofthecustomwidgetinEclipseSirius">Specification of the custom widget in Eclipse Sirius</h3>
+		<p>The specification of the advanced custom widget will be the main difference with the basic custom widget. While with the basic approach, the Sirius specifier had to use a generic and bland custom widget description, with the advanced approach we will create a real definition for the Sirius specifier to manipulate.</p>
+		<p>As a first step, we want to contribute a piece of model to be displayed in the odesign file for our Sirius specifiers. For that, you will have to create a plugin named 
+			<code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code> containing, in a folder named model, an Ecore model named 
+			<code>properties-ext-widgets-table.ecore</code>. In this Ecore model, you will have to load the resource 
+			<code>properties.ecore</code> used to define the Properties view description in the odesign. This meta-model can be found in the EPackage registry using its NsURI 
+			<code>http://www.eclipse.org/sirius/properties/1.0.0</code>.
+		</p>
+		<p>Once this resource has been loaded, give a name, NsPrefix and NsURI to your EPackage (the root element), for example:</p>
+		<ul>
+			<li>Name: 
+				<code>propertiesextwidgetstable</code>
+			</li>
+			<li>NsPrefix: 
+				<code>properties-ext-widgets-table</code>
+			</li>
+			<li>NsURI: 
+				<code>http://www.example.com/awesomeproject/properties/ext/widgets/table</code>
+			</li>
+		</ul>
+		<p>After that, you can create an EClass under the EPackage with the named 
+			<code>ExtTableDescription</code> and with the EClass 
+			<code>WidgetDescription</code> as a supertype. This EClass should contain for our example two EAttributes named 
+			<code>onClickExpression</code> and 
+			<code>valueExpression</code> and both should have the type 
+			<code>InterpretedExpresion</code>.
+		</p>
+		<p>You can then create a genmodel file for your Ecore model in the same repository. Make sure to configure your 
+			<code>genmodel</code> with a 
+			<em>Runtime Version</em> property set to 
+			<em>2.3</em> so that the generated Java is compatible with the &#8220;parent&#8221; metamodel from Sirius. Launching the generation of the model and its edit support will produce two plugins:
+		</p>
+		<ul>
+			<li>Sirius Properties model extension: 
+				<code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>
+			</li>
+			<li>Sirius Properties model extension Edit support: 
+				<code>com.example.awesomeproject.sirius.properties.ext.widgets.table.edit</code>
+			</li>
+		</ul>
+		<h3 id="SpecificationofthecustomwidgetinEclipseEEF">Specification of the custom widget in Eclipse EEF</h3>
+		<p>Eclipse EEF has a runtime independent of Eclipse Sirius and as such the definition of the widget that exist in the odesign file has to be transformed into a definition that can be maintained by Eclipse EEF. For most of the existing concepts this transformation is very basic since it only involves the transformation of the Sirius concepts directly into similar EEF concepts but both domain specific languages have very different roles.</p>
+		<p>The Eclipse Sirius Properties DSL is used as the user interface for the Eclipse Sirius specifier while the Eclipse EEF DSL is the model interpreted by the runtime. It is perfectly possible, and even recommended, to define, in the extension of the Sirius Properties DSL, high level concepts that should be user-friendly for the Sirius specifier and to keep in the extension of the EEF DSL raw concepts transformed from the extension of the Sirius Properties DSL.</p>
+		<p>You will now have to create a third plugin named 
+			<code>com.example.awesomeproject.eef.ext.widgets.table</code> with a model folder and an Ecore model inside named 
+			<code>eef-ext-widgets-table.ecore</code>. In this model you should load the resource 
+			<code>eef.ecore</code> containing the EEF DSL that you will have to extend. You can find it in the EPackage registry using its NsURI 
+			<code>http://www.eclipse.org/eef</code>. Once the EEF DSL is loaded, you can set the properties of your root EPackage:
+		</p>
+		<ul>
+			<li>Name: 
+				<code>eefextwidgetstable</code>
+			</li>
+			<li>NsPrefix: 
+				<code>eef-ext-widgets-table</code>
+			</li>
+			<li>NsURI: 
+				<code>http://www.example.com/awesomeproject/eef/ext/widgets/table</code>
+			</li>
+		</ul>
+		<p>Under this root EPackage, you can now create your EClass named 
+			<code>EEFExtTableDescription</code> which should have 
+			<code>EEFWidgetDescription</code> as a supertype. This EClass should contain for our example two EAttributes named 
+			<code>onClickExpression</code> and 
+			<code>valueExpression</code> and both should have the type 
+			<code>EString</code>. In our example, both the extension of the Sirius DSL and the EEF DSL have the same properties since we are using a very simple example.
+		</p>
+		<p>You can now create a genmodel for your extension of the EEF DSL and generate the code for the model (the Edit support is not necessary here). You will now have three plugins:</p>
+		<ul>
+			<li>Sirius Properties model extension: 
+				<code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>
+			</li>
+			<li>Sirius Properties model extension Edit support: 
+				<code>com.example.awesomeproject.sirius.properties.ext.widgets.table.edit</code>
+			</li>
+			<li>EEF model extension: 
+				<code>com.example.awesomeproject.eef.ext.widgets.table</code>
+			</li>
+		</ul>
+		<h3 id="ContributionoftheconverterfromSiriustoEEF">Contribution of the converter from Sirius to EEF</h3>
+		<p>Now that you have your extension to the Sirius Properties DSL and the EEF DSL, you need to inform the Sirius bridge how to transform the concepts from your extension to the Sirius DSL into EEF concepts. For that an extension point is available in order to contribute an IDescriptionConverter. This converter will have to depend on the Sirius bridge for Eclipse EEF and at least the extension to both the Sirius Properties DSL and the EEF DSL. As a result, this code will have to go into another plugin because having those dependencies on an existing plugins would be against the best practices. We will thus create a fourth plugin named 
+			<code>com.example.awesomeproject.sirius.ui.properties.ext.widgets.table</code>. In this plugin, we will declare our description converter using the following extension.
+		</p>
+		<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;?eclipse version="3.4"?&gt;
+&lt;plugin&gt;
+   &lt;extension
+         point="org.eclipse.sirius.ui.properties.descriptionConverter"&gt;
+      &lt;descriptor
+            class="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal.ExtTableDescriptionConverter"
+            description="%tableDescriptionConverter.Description"
+            id="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.descriptionConverter"
+            label="%tableDescriptionConverter.Label"&gt;
+      &lt;/descriptor&gt;
+   &lt;/extension&gt;
+&lt;/plugin&gt;
+
+</pre>
+		<p>
+			<br/>The transformation from the Sirius DSL to the EEF DSL occur in two parts, first the description are converted using an IDescriptionConverter and after an IDescriptionLinkResolver may be used to resolve some links. In our case, the description converter will simply be used to transform a instance of 
+			<code>ExtTableDescription</code> into an 
+			<code>EEFExtTableDescription</code> and we won&#8217;t use a description link resolver since it is not useful here.
+		</p>
+		<pre>package com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal;
+
+import java.util.Map;
+
+import com.example.awesomeproject.eef.ext.widgets.table.EEFExtTableDescription;
+import com.example.awesomeproject.eef.ext.widgets.table.EefExtWidgetsTableFactory;
+import org.eclipse.emf.ecore.EObject;
+import com.example.awesomeproject.sirius.properties.ext.widgets.table.ExtTableDescription;
+import org.eclipse.sirius.ui.properties.api.DescriptionCache;
+import org.eclipse.sirius.ui.properties.api.IDescriptionConverter;
+
+public class ExtTableDescriptionConverter implements IDescriptionConverter {
+
+    @Override
+    public boolean canHandle(EObject description) {
+        return description instanceof ExtTableDescription;
+    }
+
+    @Override
+    public EObject convert(EObject description, Map&lt;String, Object&gt; parameters, DescriptionCache cache) {
+        if (description instanceof ExtTableDescription) {
+            ExtTableDescription extTableDescription = (ExtTableDescription) description;
+
+            EEFExtTableDescription eefExtTableDescription = EefExtWidgetsTableFactory.eINSTANCE.createEEFExtTableDescription();
+            eefExtTableDescription.setIdentifier(extTableDescription.getIdentifier());
+            eefExtTableDescription.setHelpExpression(extTableDescription.getHelpExpression());
+            eefExtTableDescription.setIsEnabledExpression(extTableDescription.getIsEnabledExpression());
+            eefExtTableDescription.setLabelExpression(extTableDescription.getLabelExpression());
+
+            eefExtTableDescription.setValueExpression(extTableDescription.getValueExpression());
+            eefExtTableDescription.setOnClickExpression(extTableDescription.getOnClickExpression());
+
+            // Let's not forget to populate the cache for the other converters or link resolvers
+            cache.put(extTableDescription, eefExtTableDescription);
+
+            return eefExtTableDescription;
+        }
+        return null;
+    }
+}
+
+</pre>
+		<p>
+			<br/>An IDescriptionConverter can be used to convert any element from the Sirius Properties DSL into an EEF DSL element. In order to support custom widgets, you only have to handle your own objects but you could still modify other kind of objects from the Sirius Properties DSL. As a result, this mechanism can be used to dynamically modify anything in the description of the Properties view at runtime. This usage of the IDescriptionConverter should almost never be used, it&#8217;s a very powerful mechanism for extremely advanced users only.
+		</p>
+		<p>In order to help developer transform their Sirius entities into EEF entities, multiple possible super-classes are available:</p>
+		<ul>
+			<li>org.eclipse.sirius.ui.properties.api.AbstractDescriptionConverter &#8211; Common superclass with utility methods</li>
+			<li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionConverter &#8211; Converter for basic transformations</li>
+			<li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionWithInitialOperationConverter &#8211; Converter with support for the transformation of a basic operation into a regular expression</li>
+			<li>org.eclipse.sirius.ui.properties.api.DefaultStyleDescriptionConverter &#8211; Converter with support for styling</li>
+		</ul>
+		<h3 id="ContributionofthepreprocessorfromSiriuswithextensibilityfeaturestoflattenSirius">Contribution of the preprocessor from Sirius with extensibility features to flatten Sirius</h3>
+		<p>Now that you have your extension to the Sirius Properties DSL, you need to inform the Sirius bridge how to transform the concepts from your new widget with extensibility to the Sirius DSL without extends or overrides mechanism. For that an extension point is available in order to contribute an IDescriptionPreprocessor. This preprocessor will have to depend on the Sirius bridge. As a result, this code will have to go into the same plugin as the converter for best practices. We will thus contribute to the plugin named 
+			<code>com.example.awesomeproject.sirius.ui.properties.ext.widgets.table</code>. In this plugin, we will declare our description preprocessor using the following extension.
+		</p>
+		<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;?eclipse version="3.4"?&gt;
+&lt;plugin&gt;
+   &lt;extension
+         point="org.eclipse.sirius.ui.properties.descriptionPreprocessor"&gt;
+      &lt;descriptor
+            class="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal.ExtTableDescriptionPreprocessor"
+            description="%tableDescriptionPreprocessor.Description"
+            id="com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.descriptionPreprocessor"
+            label="%tableDescriptionPreprocessor.Label"&gt;
+      &lt;/descriptor&gt;
+   &lt;/extension&gt;
+&lt;/plugin&gt;
+
+</pre>
+		<p>
+			<br/>The transformation from the Sirius DSL with extends/overrides to the Sirius DSL occur in two parts, first the description are converted using an IDescriptionPreprocessor and after an IDescriptionLinkResolver may be used to resolve some links. In our case, the description preprocessor will simply be used to transform a instance of 
+			<code>ExtTableDescription</code> with extends into a flatten 
+			<code>ExtTableDescription</code> without extends/overrides and we won&#8217;t use a description link resolver since it is not useful here.
+		</p>
+		<pre>package com.example.awesomeproject.sirius.ui.properties.ext.widgets.table.internal;
+
+import java.util.Map;
+
+import com.example.awesomeproject.eef.ext.widgets.table.EEFExtTableDescription;
+import com.example.awesomeproject.eef.ext.widgets.table.EefExtWidgetsTableFactory;
+import org.eclipse.emf.ecore.EObject;
+import com.example.awesomeproject.sirius.properties.ext.widgets.table.ExtTableDescription;
+import org.eclipse.sirius.ui.properties.api.DescriptionCache;
+import org.eclipse.sirius.ui.properties.api.IDescriptionPreprocessor;
+
+public class ExtTableDescriptionPreprocessor extends PreconfiguredPreprocessor&lt;ExtTableDescription&gt; {
+
+    @Override
+    public boolean canHandle(EObject description) {
+        return description instanceof ExtTableDescription;
+    }
+}
+
+</pre>
+		<p>
+			<br/>An IDescriptionPreprocessor can be used to convert any element from the Sirius Properties DSL with extends/overrides to a flatten Sirius DSL.
+		</p>
+		<p>In order to help developer transform their Sirius entities into Sirius flatten entities, multiple possible super-classes are available:</p>
+		<ul>
+			<li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionPreprocessor &#8211; Preprocessor for basic transformations</li>
+			<li>org.eclipse.sirius.ui.properties.api.DefaultDescriptionPreprocessorWithFiltering &#8211; Preprocessor with support for ignoring some features and copying the value of some other features. This means that in the models resulting from the preprocessing, the ignored values are not copied or inherited.</li>
+			<li>org.eclipse.sirius.ui.properties.api.PreconfiguredPreprocessor &#8211; Preprocessor with support for most of the cases by ignoring : the extends reference, all the filters of the extension mechanism and by copying: the actions, the initial operation, the style, the conditional styles.</li>
+		</ul>
+		<h3 id="ContributionofthePropertiessectionfortheodesign">Contribution of the Properties section for the odesign</h3>
+		<p>If you try to edit your extension of the Sirius DSL in the odesign editor, you will find out that it does not work. In order to be able to view the properties of your widget, in our case the 
+			<code>onClickExpression</code> and the 
+			<code>valueExpression</code>, you will need to contribute to the Properties view of the odesign editor. Since this contribution will require a dependency with the framework used for the Properties view of the odesign editor, it will require another plugin named 
+			<code>com.example.awesomeproject.sirius.editor.properties.ext.widgets.table</code> with a dependency to at least:
+		</p>
+		<ul>
+			<li>com.example.awesomeproject.sirius.properties.ext.widgets.table</li>
+			<li>com.example.awesomeproject.sirius.properties.ext.widgets.table.edit</li>
+			<li>org.eclipse.ui.views.properties.tabbed</li>
+			<li>org.eclipse.sirius.editor</li>
+		</ul>
+		<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;?eclipse version="3.4"?&gt;
+&lt;plugin&gt;
+   &lt;extension
+         point="org.eclipse.ui.views.properties.tabbed.propertySections"&gt;
+      &lt;propertySections
+            contributorId="org.eclipse.sirius.editor.editorPlugin.SiriusEditorContributor"&gt;
+         &lt;propertySection
+               afterSection="properties.section.widgetDescription.IsEnabledExpression"
+               class="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionValueExpressionPropertySection"
+               filter="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionValueExpressionFilter"
+               id="properties.section.extTableDescription.valueExpression"
+               tab="viewpoint.tab.general"&gt;
+            &lt;input
+                  type="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.ExtTableDescription"&gt;
+            &lt;/input&gt;
+         &lt;/propertySection&gt;
+         &lt;propertySection
+               afterSection="properties.section.extTableDescription.valueExpression"
+               class="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionOnClickExpressionPropertySection"
+               filter="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal.ExtTableDescriptionOnClickExpressionFilter"
+               id="properties.section.extTableDescription.valueExpression"
+               tab="viewpoint.tab.general"&gt;
+            &lt;input
+                  type="com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.ExtTableDescription"&gt;
+            &lt;/input&gt;
+         &lt;/propertySection&gt;
+      &lt;/propertySections&gt;
+   &lt;/extension&gt;
+&lt;/plugin&gt;
+
+
+</pre>
+		<p>
+			<br/>Two property sections will be necessary in order to display a text field for the value expression and the on click expression.
+		</p>
+		<pre>package com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal;
+
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.sirius.editor.properties.filters.common.ViewpointPropertyFilter;
+import com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.PropertiesExtTablePackage;
+
+public class ExtTableDescriptionOnClickExpressionFilter extends ViewpointPropertyFilter {
+
+    @Override
+    protected EStructuralFeature getFeature() {
+        return PropertiesExtTablePackage.eINSTANCE.getExtTableDescription_OnClickExpression();
+    }
+
+    @Override
+    protected boolean isRightInputType(Object arg0) {
+        return arg0 instanceof com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.ExtTableDescription;
+    }
+
+}
+
+</pre>
+		<p>
+			<br/>Both filter will look almost the same, the only difference will be the structural feature that they will return.
+		</p>
+		<pre>package com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.internal;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.sirius.editor.editorPlugin.SiriusEditor;
+import org.eclipse.sirius.editor.properties.sections.common.AbstractTextWithButtonPropertySection;
+import org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider;
+import org.eclipse.sirius.editor.tools.internal.presentation.TextWithContentProposalDialog;
+import com.example.awesomeproject.sirius.editor.properties.ext.widgets.table.propertiesextwidgetstablee.PropertiesExtTablePackage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage;
+
+@SuppressWarnings("restriction")
+public class ExtTableDescriptionOnClickExpressionPropertySection extends AbstractTextWithButtonPropertySection {
+
+    @Override
+    protected String getDefaultLabelText() {
+        return "On Click Expression"; //$NON-NLS-1$
+    }
+
+    @Override
+    protected String getLabelText() {
+        String labelText;
+        labelText = super.getLabelText() + "*:"; //$NON-NLS-1$
+        return labelText;
+    }
+
+    @Override
+    public EAttribute getFeature() {
+        return PropertiesExtTablePackage.eINSTANCE.getExtTableDescription_OnClickExpression();
+    }
+
+    @Override
+    protected Object getFeatureValue(String newText) {
+        return newText;
+    }
+
+    @Override
+    protected boolean isEqual(String newText) {
+        return this.getFeatureAsText().equals(newText);
+    }
+
+    @Override
+    public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) {
+        super.createControls(parent, tabbedPropertySheetPage);
+
+        text.setToolTipText(getToolTipText());
+        /*
+         * We set the color as it's a InterpretedExpression
+         */
+        text.setBackground(SiriusEditor.getColorRegistry().get("yellow")); //$NON-NLS-1$
+
+        TypeContentProposalProvider.bindPluginsCompletionProcessors(this, text);
+
+        FormData data = new FormData();
+        data.top = new FormAttachment(text, 0, SWT.TOP);
+        data.left = new FormAttachment(nameLabel);
+
+        nameLabel.setFont(SiriusEditor.getFontRegistry().get("required")); //$NON-NLS-1$
+    }
+
+    @Override
+    protected SelectionListener createButtonListener() {
+        return new SelectionAdapter() {
+            @Override
+            public void widgetSelected(SelectionEvent e) {
+                TextWithContentProposalDialog dialog = new TextWithContentProposalDialog(composite.getShell(), ExtTableDescriptionOnClickExpressionPropertySection.this, text.getText());
+                dialog.open();
+                text.setText(dialog.getResult());
+                handleTextModified();
+            }
+        };
+    }
+
+    @Override
+    protected String getPropertyDescription() {
+        return ""; //$NON-NLS-1$
+    }
+
+}
+
+
+</pre>
+		<p>
+			<br/>This property section will create a text field and label in the Properties view of the odesign editor in order to let the Sirius specifier edit the 
+			<code>onClickExpression</code> of the table. Our text field will have the same appear and feature as the regular yellow text fields used by Sirius. 
+		</p>
+		<h3 id="Updatetothepluginsofourbasicwidgetapproach">Update to the plugins of our basic widget approach</h3>
+		<p>Now we can reuse our work in the basic approach but this time with our own specific DSL instead of reusing the CustomElements from the EEF DSL. First we will have to modify the lifecycle manager provider to support our EEFExtTableDescription.</p>
+		<pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import org.eclipse.eef.EEFControlDescription;
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManager;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManagerProvider;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableLifecycleManagerProvider implements IEEFLifecycleManagerProvider {
+    /**
+     * The identifier of the control description supported.
+     */
+    private static final String SUPPORTED_ID = "com.example.awesomeproject.sirius.properties.ext.widgets.table"; //$NON-NLS-1$
+
+    @Override
+    public boolean canHandle(EEFControlDescription controlDescription) {
+        // only support custom widgets with the proper identifier
+        return SUPPORTED_ID.equals(controlDescription.getIdentifier()) &amp;&amp; controlDescription instanceof EEFCustomWidgetDescription;
+    }
+
+    @Override
+    public IEEFLifecycleManager getLifecycleManager(EEFControlDescription controlDescription, IVariableManager variableManager, IInterpreter interpreter, EditingContextAdapter contextAdapter) {
+        if (controlDescription instanceof EEFCustomWidgetDescription) {
+            return new TableLifecycleManager((EEFCustomWidgetDescription) controlDescription, variableManager, interpreter, contextAdapter);
+        }
+        throw new IllegalArgumentException();
+    }
+}
+
+
+</pre>
+		<p>
+			<br/>Now we can just modify our lifecycle manager to support our EEFExtTableDescription.
+		</p>
+		<pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.EEFWidgetDescription;
+import org.eclipse.eef.common.ui.api.IEEFFormContainer;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.IEEFWidgetController;
+import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Table;
+
+import com.example.awesomeproject.eef.core.ext.widgets.table.internal.TableController;
+
+public class TableLifecycleManager extends AbstractEEFWidgetLifecycleManager {
+
+    private EEFCustomWidgetDescription description;
+
+    private TableViewer tableViewer;
+
+    private ComposedAdapterFactory composedAdapterFactory;
+
+    private SelectionListener onClickListener;
+
+    private TableController controller;
+
+    private Consumer&lt;Object&gt; newValueConsumer;
+    
+    public TableLifecycleManager(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+            EditingContextAdapter contextAdapter) {
+        super(variableManager, interpreter, contextAdapter);
+        this.description = description;
+    }
+
+    @Override
+    protected void createMainControl(Composite parent, IEEFFormContainer formContainer) {
+        Table table = formContainer.getWidgetFactory().createTable(parent,
+                SWT.READ_ONLY | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.SINGLE);
+        this.tableViewer = new TableViewer(table);
+        this.composedAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+        this.tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+        this.tableViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(new AdapterFactoryLabelProvider.StyledLabelProvider(
+                this.composedAdapterFactory, this.tableViewer)));
+
+        this.controller = new TableController(description, variableManager, interpreter, editingContextAdapter);
+    }
+
+    @Override
+    public void aboutToBeShown() {
+        super.aboutToBeShown();
+
+        this.newValueConsumer = (newValue) -&gt; this.tableViewer.setInput(newValue);
+        this.controller.onNewValue(this.newValueConsumer);
+
+        this.onClickListener = new SelectionListener() {
+            @Override
+            public void widgetSelected(SelectionEvent event) {
+                Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+                TableLifecycleManager.this.controller.handleClick(selection);
+            }
+
+            @Override
+            public void widgetDefaultSelected(SelectionEvent event) {
+                Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+                TableLifecycleManager.this.controller.handleClick(selection);
+            }
+        };
+        this.tableViewer.getTable().addSelectionListener(this.onClickListener);
+    }
+
+    @Override
+    public void refresh() {
+        super.refresh();
+
+        this.controller.refresh();
+    }
+
+    @Override
+    public void aboutToBeHidden() {
+        super.aboutToBeHidden();
+        this.controller.removeValueConsumer();
+        this.newValueConsumer = null;
+
+        this.tableViewer.getTable().removeSelectionListener(this.onClickListener);
+        this.onClickListener = null;
+    }
+
+    @Override
+    protected IEEFWidgetController getController() {
+        return this.controller;
+    }
+
+    @Override
+    protected EEFWidgetDescription getWidgetDescription() {
+        return this.description;
+    }
+
+    @Override
+    protected Control getValidationControl() {
+        return this.tableViewer.getTable();
+    }
+
+    @Override
+    public void dispose() {
+        super.dispose();
+
+        this.composedAdapterFactory.dispose();
+    }
+    
+    @Override
+    protected void setEnabled(boolean isEnabled) {
+        this.tableViewer.getTable().setEnabled(isEnabled);
+    }
+}
+
+</pre>
+		<p>
+			<br/>And finally we can easily adapter our controller.
+		</p>
+		<pre>package com.example.awesomeproject.eef.core.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.AbstractEEFCustomWidgetController;
+import org.eclipse.eef.core.api.utils.EvalFactory;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableController extends AbstractEEFCustomWidgetController {
+
+    private static final String VALUE_EXPRESSION_ID = "valueExpression"; //$NON-NLS-1$
+
+    private static final String ON_CLICK_EXPRESSION_ID = "onClickExpression"; //$NON-NLS-1$
+
+    private static final String SELECTION_VARIABLE_NAME = "selection"; //$NON-NLS-1$
+
+    private Consumer&lt;Object&gt; newValueConsumer;
+    
+    public TableController(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+            EditingContextAdapter contextAdapter) {
+        super(description, variableManager, interpreter, contextAdapter);
+    }
+
+    @Override
+    protected EEFCustomWidgetDescription getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public void refresh() {
+        super.refresh();
+        this.newEval().call(this.getCustomExpression(VALUE_EXPRESSION_ID).get(), this.newValueConsumer);
+    }
+
+    public void handleClick(Object object) {
+        this.editingContextAdapter.performModelChange(() -&gt; {
+            String onClickExpression = this.getCustomExpression(ON_CLICK_EXPRESSION_ID).get();
+
+            Map&lt;String, Object&gt; variables = new HashMap&lt;String, Object&gt;();
+            variables.putAll(this.variableManager.getVariables());
+            variables.put(SELECTION_VARIABLE_NAME, object);
+
+            EvalFactory.of(this.interpreter, variables).call(onClickExpression);
+        });
+    }
+
+    public void onNewValue(Consumer&lt;Object&gt; consumer) {
+        this.newValueConsumer = consumer;
+    }
+
+    public void removeValueConsumer() {
+        this.newValueConsumer = null;
+    }
+}
+
+</pre>
+		<p>
+			<br/>With minimal changes, we can reuse the code of the basic approach in this advanced approach. But now we have the ability to provide the Sirius specifiers with a proper user interface for the manipulation of our widget and we can manipulate our own concepts in the EEF runtime.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-properties_provide_custom_widget_basic.html b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_basic.html
new file mode 100644
index 0000000..aebe5ac
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-properties_provide_custom_widget_basic.html
@@ -0,0 +1,332 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-properties_provide_custom_widget_basic</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusPropertiesBasicCustomWidget">Sirius Properties &#8211; Basic Custom Widget</h1>
+		<h2 id="Goal">Goal</h2>
+		<p>Using the Basic Custom Widget approach, our goal aims at the quick creation of a custom widget with a minimal amount of code even if it creates only a basic user interface for the specifier to use our widget. In this example, we will try to create a simple table widget.</p>
+		<h2 id="Strategy">Strategy</h2>
+		<p>In order to create a custom widget, we will have to think about the two kind of users that will interact with our work, the Sirius specifier and the end-user. With this basic approach, we will create a nice table widget for the end-user but we will be a bit limited regarding what we can offer to the specifier.</p>
+		<h3 id="Specificationofthecustomwidget">Specification of the custom widget</h3>
+		<p>The implementation of the Properties view support in Eclipse Sirius is based on the Eclipse EEF project. While both projects are closely related, EEF can be used without Eclipse Sirius and in order to contribute a basic custom widget, we will only have to contribute to the EEF runtime. Both Eclipse EEF and Eclipse Sirius have the ability to let the specifier define a custom widget with a custom widget description.</p>
+		<p>This custom widget description in Eclipse Sirius is manipulated, like any other widget, in the odesign file. In this widget, you can specify the following properties of your widget:</p>
+		<ul>
+			<li>identifier</li>
+			<li>labelExpression</li>
+			<li>helpExpression</li>
+			<li>isEnabledExpression</li>
+			<li>customExpressions</li>
+			<li>customOperations</li>
+			<li>style</li>
+			<li>conditionalStyles</li>
+		</ul>
+		<p>Most of those properties are inherited from the description of the widget (identifier, labelExpression, helpExpression, isEnabledExpression) and the others are specific to the custom widget description (customExpressions, customOperations, style, conditionalStyles). In order to provide a basic custom widget to a Sirius specifier, you will have to indicate her/him the proper identifier to use for the widget, its expressions and its operations. For example, we will specify that in order to make our custom table widget work, the specifier will have to use a custom widget description with the identifier 
+			<code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>.
+		</p>
+		<p>In order to provide the implementation of our table, we will need to use Eclipse EEF&#8217;s lifecycle manager provider extension point. This extension point let you define the appearance and behavior of a custom widget using a lifecycle manager.</p>
+		<h3 id="Extensioncontribution">Extension contribution</h3>
+		<p>You will have to start by creating an Eclipse plugin named 
+			<code>com.example.awesomeproject.eef.ide.ui.ext.widgets.table</code> which will contain the provider of the lifecycle manager. In Eclipse EEF, a lifecycle manager is used to create the user interface of a widget and manage its lifecycle (add listeners, refresh, remove listeners, dispose etc) while a controller is used to define its behavior. The controller is not compulsary but it is highly recommended. In order to create the lifecycle manager provider, you will have to define the following extension.
+		</p>
+		<pre>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;?eclipse version="3.4"?&gt;
+&lt;plugin&gt;
+   &lt;extension
+         point="org.eclipse.eef.ide.ui.eefLifecycleManagerProvider"&gt;
+      &lt;descriptor
+            class="com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal.TableLifecycleManagerProvider"
+            description="%tableLifecycleManagerProvider.Description"
+            id="com.example.awesomeproject.eef.ide.ui.ext.widgets.table"
+            label="%tableLifecycleManagerProvider.Label"&gt;
+      &lt;/descriptor&gt;
+   &lt;/extension&gt;
+&lt;/plugin&gt;
+
+</pre>
+		<p>
+			<br/>To make your code compile, you will have to add at least some dependencies (Required Bundle) to the following plugins:
+		</p>
+		<ul>
+			<li>org.eclipse.eef</li>
+			<li>org.eclipse.eef.core</li>
+			<li>org.eclipse.eef.ide.ui</li>
+			<li>org.eclipse.sirius.common.interpreter</li>
+		</ul>
+		<h3 id="EEFlifecyclemanagerprovider">EEF lifecycle manager provider</h3>
+		<p>
+			<br/>The properties label and description should both be internationalized and the class should reference a Java class implementing IEEFLifecycleManagerProvider. Our lifecycle manager provider will have two methods, one to indicate if it can handle the description given by the EEF runtime and one to return a proper lifecycle manager for this description. In our case, the only description that we want to support is a custom widget with the identifier 
+			<code>com.example.awesomeproject.sirius.properties.ext.widgets.table</code>.
+		</p>
+		<pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import org.eclipse.eef.EEFControlDescription;
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManager;
+import org.eclipse.eef.ide.ui.api.widgets.IEEFLifecycleManagerProvider;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableLifecycleManagerProvider implements IEEFLifecycleManagerProvider {
+	/**
+	 * The identifier of the control description supported.
+	 */
+	private static final String SUPPORTED_ID = "com.example.awesomeproject.sirius.properties.ext.widgets.table"; //$NON-NLS-1$
+
+	@Override
+	public boolean canHandle(EEFControlDescription controlDescription) {
+		// only support custom widgets with the proper identifier
+		return SUPPORTED_ID.equals(controlDescription.getIdentifier()) &amp;&amp; controlDescription instanceof EEFCustomWidgetDescription;
+	}
+
+	@Override
+	public IEEFLifecycleManager getLifecycleManager(EEFControlDescription controlDescription, IVariableManager variableManager,
+			IInterpreter interpreter, EditingContextAdapter contextAdapter) {
+		if (controlDescription instanceof EEFCustomWidgetDescription) {
+			return new TableLifecycleManager((EEFCustomWidgetDescription) controlDescription, variableManager, interpreter, contextAdapter);
+		}
+		throw new IllegalArgumentException();
+	}
+}
+
+
+</pre>
+		<p>
+			<br/>To create the lifecycle manager, the EEF runtime gives us access to several variables:
+		</p>
+		<ul>
+			<li>controlDescription: The description of the control that we support</li>
+			<li>variableManager: The variables available for this control, we can use it to add new variables and even create child contexts with new variables</li>
+			<li>interpreter: The interpreter used to run expression given by the Sirius specifier</li>
+			<li>contextAdapter: The wrapper used to run modifications of the model with optional support for transactions</li>
+		</ul>
+		<h3 id="EEFlifecyclemanager">EEF lifecycle manager</h3>
+		<p>The lifecycle manager must implements the interface 
+			<code>IEEFLifecycleManager</code> but for a custom widget it is easier to extends on of its default abstract implementation, in our case 
+			<code>org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager</code>.
+		</p>
+		<pre>package com.example.awesomeproject.eef.ide.ui.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.EEFWidgetDescription;
+import org.eclipse.eef.common.ui.api.IEEFFormContainer;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.IEEFWidgetController;
+import org.eclipse.eef.ide.ui.api.widgets.AbstractEEFWidgetLifecycleManager;
+import org.eclipse.emf.edit.provider.ComposedAdapterFactory;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Table;
+
+import com.example.awesomeproject.eef.core.ext.widgets.table.internal.TableController;
+
+public class TableLifecycleManager extends AbstractEEFWidgetLifecycleManager {
+
+    private EEFCustomWidgetDescription description;
+
+    private TableViewer tableViewer;
+
+    private ComposedAdapterFactory composedAdapterFactory;
+
+    private SelectionListener onClickListener;
+
+    private TableController controller;
+
+    private Consumer&lt;Object&gt; newValueConsumer;
+    
+    public TableLifecycleManager(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+            EditingContextAdapter contextAdapter) {
+        super(variableManager, interpreter, contextAdapter);
+        this.description = description;
+    }
+
+    @Override
+    protected void createMainControl(Composite parent, IEEFFormContainer formContainer) {
+        Table table = formContainer.getWidgetFactory().createTable(parent,
+                SWT.READ_ONLY | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER | SWT.SINGLE);
+        this.tableViewer = new TableViewer(table);
+        this.composedAdapterFactory = new ComposedAdapterFactory(ComposedAdapterFactory.Descriptor.Registry.INSTANCE);
+
+        this.tableViewer.setContentProvider(ArrayContentProvider.getInstance());
+        this.tableViewer.setLabelProvider(new DelegatingStyledCellLabelProvider(new AdapterFactoryLabelProvider.StyledLabelProvider(
+                this.composedAdapterFactory, this.tableViewer)));
+
+        this.controller = new TableController(description, variableManager, interpreter, editingContextAdapter);
+    }
+
+    @Override
+    public void aboutToBeShown() {
+        super.aboutToBeShown();
+
+        this.newValueConsumer = (newValue) -&gt; this.tableViewer.setInput(newValue);
+        this.controller.onNewValue(this.newValueConsumer);
+
+        this.onClickListener = new SelectionListener() {
+            @Override
+            public void widgetSelected(SelectionEvent event) {
+                Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+                TableLifecycleManager.this.controller.handleClick(selection);
+            }
+
+            @Override
+            public void widgetDefaultSelected(SelectionEvent event) {
+                Object selection = ((IStructuredSelection) TableLifecycleManager.this.tableViewer.getSelection()).getFirstElement();
+                TableLifecycleManager.this.controller.handleClick(selection);
+            }
+        };
+        this.tableViewer.getTable().addSelectionListener(this.onClickListener);
+    }
+
+    @Override
+    public void refresh() {
+        super.refresh();
+
+        this.controller.refresh();
+    }
+
+    @Override
+    public void aboutToBeHidden() {
+        super.aboutToBeHidden();
+        this.controller.removeValueConsumer();
+        this.newValueConsumer = null;
+
+        this.tableViewer.getTable().removeSelectionListener(this.onClickListener);
+        this.onClickListener = null;
+    }
+
+    @Override
+    protected IEEFWidgetController getController() {
+        return this.controller;
+    }
+
+    @Override
+    protected EEFWidgetDescription getWidgetDescription() {
+        return this.description;
+    }
+
+    @Override
+    protected Control getValidationControl() {
+        return this.tableViewer.getTable();
+    }
+
+    @Override
+    public void dispose() {
+        super.dispose();
+
+        this.composedAdapterFactory.dispose();
+    }
+    
+    @Override
+    protected void setEnabled(boolean isEnabled) {
+        this.tableViewer.getTable().setEnabled(isEnabled);
+    }
+}
+
+</pre>
+		<p>
+			<br/>The lifecycle manager will first create the controls of the table widget and it will initialized a controller for the table.
+		</p>
+		<h3 id="EEFcontroller">EEF controller</h3>
+		<p>The controller is not required but it will handle several keys problems for us, for example by extending the proper abstract class it can handle the validation rules of your widget. For a basic custom widget, it is highly recommended to extend 
+			<code>org.eclipse.eef.core.api.controllers.AbstractEEFCustomWidgetController</code>. The controller does not have any reason to depend on the user interface, thus it will be created in another Eclipse plugin which will be usable without any dependency to an user interface specific plugins. This plugin will be named 
+			<code>com.example.awesomeproject.eef.core.ext.widgets.table</code>. It will depend on at least the following plugins:
+		</p>
+		<ul>
+			<li>org.eclipse.eef</li>
+			<li>org.eclipse.eef.core</li>
+			<li>org.eclipse.sirius.common.interpreter</li>
+		</ul>
+		<pre>package com.example.awesomeproject.eef.core.ext.widgets.table.internal;
+
+import java.util.function.Consumer;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.eef.EEFCustomWidgetDescription;
+import org.eclipse.eef.core.api.EditingContextAdapter;
+import org.eclipse.eef.core.api.controllers.AbstractEEFCustomWidgetController;
+import org.eclipse.eef.core.api.utils.EvalFactory;
+import org.eclipse.sirius.common.interpreter.api.IInterpreter;
+import org.eclipse.sirius.common.interpreter.api.IVariableManager;
+
+public class TableController extends AbstractEEFCustomWidgetController {
+
+    private static final String VALUE_EXPRESSION_ID = "valueExpression"; //$NON-NLS-1$
+
+    private static final String ON_CLICK_EXPRESSION_ID = "onClickExpression"; //$NON-NLS-1$
+
+    private static final String SELECTION_VARIABLE_NAME = "selection"; //$NON-NLS-1$
+
+    private Consumer&lt;Object&gt; newValueConsumer;
+    
+    public TableController(EEFCustomWidgetDescription description, IVariableManager variableManager, IInterpreter interpreter,
+            EditingContextAdapter contextAdapter) {
+        super(description, variableManager, interpreter, contextAdapter);
+    }
+
+    @Override
+    protected EEFCustomWidgetDescription getDescription() {
+        return this.description;
+    }
+
+    @Override
+    public void refresh() {
+        super.refresh();
+        this.newEval().call(this.getCustomExpression(VALUE_EXPRESSION_ID).get(), this.newValueConsumer);
+    }
+
+    public void handleClick(Object object) {
+        this.editingContextAdapter.performModelChange(() -&gt; {
+            String onClickExpression = this.getCustomExpression(ON_CLICK_EXPRESSION_ID).get();
+
+            Map&lt;String, Object&gt; variables = new HashMap&lt;String, Object&gt;();
+            variables.putAll(this.variableManager.getVariables());
+            variables.put(SELECTION_VARIABLE_NAME, object);
+
+            EvalFactory.of(this.interpreter, variables).call(onClickExpression);
+        });
+    }
+
+    public void onNewValue(Consumer&lt;Object&gt; consumer) {
+        this.newValueConsumer = consumer;
+    }
+
+    public void removeValueConsumer() {
+        this.newValueConsumer = null;
+    }
+}
+
+</pre>
+		<p>
+			<br/>The controller here will handle two different situations. Firstly, it will react to the refresh in order to compute the new value of the table widget. For that, it will look for an expression with the identifier 
+			<code>valueExpression</code> and it will execute it. Once executed, it will give its result to the 
+			<code>newValueConsumer</code>. In the table lifecycle manager, we have set, in the method 
+			<code>aboutToBeShown</code>, this new value consumer to a lambda which will set a new input for the table. Each time that the lifecycle manager will be refreshed by the framework, its call to 
+			<code>super.refresh()</code> will trigger the refresh of the controller (among other things) which will compute the new value to display and given this value to the callback (consumer) registered by the lifecycle manager.
+		</p>
+		<p>Secondly, the controller will be used to handle the click in the table. For that it has a method named 
+			<code>handleClick</code> which will be called with the selected object in the table. The controller will then evaluate an expression with the identifier 
+			<code>onClickExpression</code> with the variables available along with an additional variable specifically for this use case. The additional variable named 
+			<code>selection</code> will here be used to give access to the current selection to the 
+			<code>onClickExpression</code>.
+		</p>
+		<p>Now your end users can use your two plugins to create tables in their Properties view using the custom widget description.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_celleditor.html b/doc/5.1.x/developer/extensions-provide_celleditor.html
new file mode 100644
index 0000000..36bd293
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_celleditor.html
@@ -0,0 +1,27 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_celleditor</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvideCustomCellEditors">Sirius &#8211; Provide Custom Cell Editors</h1>
+		<h2 id="SiriusSemanticPropertiesView">Sirius Semantic Properties View</h2>
+		<p>You can override the default CellEditors in the Sirius semantic properties views by implementing 
+			<code>org.eclipse.sirius.ext.emf.ui.ICellEditorProvider</code> and provide it through the 
+			<code>org.eclipse.sirius.ui.siriuspropertiescelleditor</code> extension point.
+		</p>
+		<p>
+			<img border="0" src="images/propertiesView.png"/>
+			<br/>
+			<em>The semantic properties view</em>
+		</p>
+		<h2 id="OtherEditorsPropertiesView">Other Editors Properties View</h2>
+		<p>This extension mechanism can also be used for other editors properties view. That can be done by providing the 
+			<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> instead of the default EMF one by replacing the 
+			<code>propertySourceProvider</code> in the generated editor.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom-arrange-all.html b/doc/5.1.x/developer/extensions-provide_custom-arrange-all.html
new file mode 100644
index 0000000..8dfdcde
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom-arrange-all.html
@@ -0,0 +1,352 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_custom-arrange-all</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="Provideacustomarrangeall">Provide a custom arrange-all</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>One of the main issues of visual modelers is the global arrangement of all elements. GMF provides a default implementation of an &quot;Arrange All&quot; algorithm to solve this issue but it happens that this default behavior is not adapted for some diagrams. Imagine a diagram representing the hierarchy between a program classes, the &quot;natural&quot; representation a human thinks about is that of a tree. When you add associations on such diagrams, GMF won&#8217;t keep the tree representation of the diagram. Sirius provides an API to arrange diagrams according to custom business rules.</p>
+		<h2 id="ThearrangeallconceptasimplementedbyGMF">The arrange all concept as implemented by GMF</h2>
+		<p>GMF provides basic API and implementations to ease the customization of the &quot;Arrange All&quot; mechanism. It also implements a complete algorithm that is based on the graphical elements.</p>
+		<p>The top level type of this this API is 
+			<code>ILayoutNodeProvider</code>
+		</p>
+		<p>
+			<img border="0" src="images/arrange-all/arrange-all-tlinterface.jpg"/>
+		</p>
+		<p>As you can see, this interface is designed for genericity. Fortunately, GMF provides abstract classes that handle the low-level work while letting you define the business rules:</p>
+		<p>
+			<img border="0" src="images/arrange-all/arrange-all-ls.jpg"/>
+		</p>
+		<p>This can be done by implementing three operations:</p>
+		<ul>
+			<li>
+				<code>boolean provides(IOperation operation)</code>
+			</li>
+			<li>
+				<code>Command layoutEditParts(GraphicalEditPart containerEditPart, IAdaptable layoutHint)</code>
+			</li>
+			<li>
+				<code>Command layoutEditParts(selectedObjectst List, IAdaptable layoutHint)</code>
+			</li>
+		</ul>
+		<p>The 
+			<code>provides</code> operation is meant to return true if the class can arrange the diagram for the specified operation.
+		</p>
+		<p>The 
+			<code>layoutEditParts</code> operations will return the commands that will actually be in charge of arranging the diagrams' edit parts. The first one takes the main container that is to be arranged while the latter accepts a list of edit parts to arrange.
+		</p>
+		<h2 id="TheLayoutProvidersasprovidedbySirius">The LayoutProviders as provided by Sirius</h2>
+		<p>The class 
+			<code>AbstractLayoutEditPartProvider</code> is the simplest one. Sirius provides utility classes to ease the implementation of &quot;Arrange All&quot; algorithms:
+		</p>
+		<p>
+			<img border="0" src="images/arrange-all/arrange-all-air.jpg"/>
+		</p>
+		<p>Here is a list of all provided layout providers and a basic description of each:</p>
+		<ul>
+			<li>
+				<code>LineLayoutProvider</code>: lays out all views on a single line (either vertical or horizontal).
+			</li>
+			<li>
+				<code>GrigLayoutProvider</code>: lays out all views as a grid.
+			</li>
+			<li>
+				<code>InlineEdgeLayoutProvider</code>: lays out connections alongside their source and target nodes (useful on the sequence diagram for example).
+			</li>
+		</ul>
+		<h2 id="TheViewOrderings">The ViewOrderings</h2>
+		<h3 id="TheAPI">The API</h3>
+		<p>
+			<img border="0" src="images/arrange-all/viewordering.jpg"/>
+		</p>
+		<p>All 
+			<code>LayoutProvider</code> provided by Sirius can be used with a 
+			<code>ViewOrdering</code> which has the responsibility of actually ordering the views.
+		</p>
+		<p>The aim of all these classes is to order the GMF views and to provide this result to an 
+			<code>AbstractLayoutProvider</code>.
+		</p>
+		<h3 id="Sample">Sample</h3>
+		<p>Here is a sample ordering all views to get a tree from a list of UML2 packages :</p>
+		<pre>/**
+ * Orders packages.
+ */
+public class PackageTreeOrdering extends SemanticTreeOrdering {
+
+    public List getSemanticChildren(EObject semanticParent, List candidates) {
+        List result = Collections.EMPTY_LIST;
+        if (semanticParent instanceof Package) {
+            result = new LinkedList&amp;lt;Package&amp;gt;(((Package) semanticParent).getNestedPackages());
+            result.retainAll(candidates);
+        }
+        return result;
+    }
+
+    public List getSemanticRoots(List objects) {
+        List&amp;lt;Package&amp;gt; roots = new LinkedList&amp;lt;Package&amp;gt;();
+        for (Object object : objects) {
+            EObject semantic = (EObject) object;
+            if (semantic instanceof Package) {
+                Package package_ = (Package) semantic;
+                if (package_.eContainer() == null || !objects.contains(package_.eContainer())) {
+                    roots.add(package_);
+                }
+            }
+        }
+        return roots;
+    }
+
+}
+
+This tells us how to order the packages. We must notify Sirius that this @ViewOrdering@ has to be used for the Package Hierarchy diagram.
+
+</pre>
+		<h3 id="TheViewOrderingProvider">The 
+			<code>ViewOrderingProvider</code>
+		</h3>
+		<p>Here is the implementation of a 
+			<code>ViewOrderingProvider</code> for an UML2 modeler :
+		</p>
+		<pre>/**
+ * The view ordering provider for UML2 modeler.
+ */
+public class Uml2ViewOrderingProvider implements ViewOrderingProvider {
+
+    /** The classifier ordering. */
+    private ClassifierTreeOrdering classifierOrdering = new ClassifierTreeOrdering();
+
+    public Uml2ViewOrderingProvider() {
+        classifierOrdering.setUserAwareCapable(true);
+    }
+
+    public ViewOrdering getViewOrdering(DiagramElementMapping mapping) {
+        return (ViewOrdering) getMappingToViewOrdering().get(getMappingName(mapping));
+    }
+
+    public boolean provides(DiagramElementMapping mapping) {
+        return getMappingToViewOrdering().containsKey(getMappingName(mapping));
+    }
+
+    private String getMappingName(DiagramElementMapping mapping) {
+        String result = null;
+        if (mapping instanceof NodeMapping) {
+            result = ((NodeMapping) mapping).getName();
+        } else if (mapping instanceof EdgeMapping) {
+            result = ((EdgeMapping) mapping).getName();
+        } else if (mapping instanceof ContainerMapping) {
+            result = ((ContainerMapping) mapping).getName();
+        }
+        return result;
+    }
+
+    /**
+     * Returns a map : MappingName(String) -&amp;gt; ViewOrdering.
+     *
+     * @return a map : MappingName(String) -&amp;gt; ViewOrdering.
+     */
+    private Map getMappingToViewOrdering() {
+        Map result = new HashMap();
+        result.put(Uml2Constants.LIFELINE_MAPPING_NAME, new LifelineOrdering());
+        result.put(Uml2Constants.MESSAGE_MAPPING_NAME, new MessageOrdering());
+        result.put(Uml2Constants.CLASS_MAPPING_NAME, this.classifierOrdering);
+        result.put(Uml2Constants.INTERFACE_MAPPING_NAME, this.classifierOrdering);
+        return result;
+    }
+
+}
+
+
+</pre>
+		<p>Once this has been implemented, we need to add the extension to the plugin.xml :</p>
+		<p>
+			<img border="0" src="images/arrange-all/arrange-all-provider-extension.png"/>
+		</p>
+		<pre><code>&lt;extension point="org.eclipse.sirius.diagram.viewOrderingProvider"&gt;
+   &lt;viewOrderingProvider providerClass="com.example.uml2.specific.provider.Uml2ViewOrderingProvider" /&gt;
+&lt;/extension&gt;
+</code></pre>
+		<h2 id="HowtomapaLayoutProviderwithaDiagram">How to map a Layout Provider with a Diagram</h2>
+		<p>Now, we know how to both order and arrange views. We still need to let Sirius know that we want to use a custom Layout Provider for a specific Diagram.</p>
+		<p>
+			<img border="0" src="images/arrange-all/airlayoutprovider.jpg"/>
+		</p>
+		<p>Here is a provider designed for an UML2 modeler:</p>
+		<pre>public class Uml2LayoutProvider implements LayoutProvider {
+
+    /** The GMF layout provider. */
+    private CompoundLayoutProvider layoutProvider;
+
+    /** The class diagram layout provider. */
+    private GridLayoutProvider classDiagramLayoutProvider;
+
+    /** The package hierarchy layout provider. */
+    private GridLayoutProvider packageHierarchyLayoutProvider;
+
+
+    public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
+        if (isSequenceDiagram(container)) {
+            if (this.layoutProvider == null) {
+                this.layoutProvider = new CompoundLayoutProvider();
+                LineLayoutProvider lineLayoutProvider = new LineLayoutProvider();
+                lineLayoutProvider.getPadding().right = 80;
+                lineLayoutProvider.setHorizontal(true);
+                this.layoutProvider.addProvider(lineLayoutProvider);
+                inlineEdgeLayoutProvider inlineEdgeLayoutProvider = new InlineEdgeLayoutProvider();
+                inlineEdgeLayoutProvider.setSide(PositionConstants.EAST_WEST);
+                inlineEdgeLayoutProvider.setStart(PositionConstants.RIGHT);
+                inlineEdgeLayoutProvider.setAlignment(PositionConstants.VERTICAL);
+                inlineEdgeLayoutProvider.setChangeNodeHeight(true);
+                inlineEdgeLayoutProvider.setChangeNodeWidth(true);
+                inlineEdgeLayoutProvider.getPaddings().top = 50;
+                this.layoutProvider.addProvider(inlineEdgeLayoutProvider);
+            }
+            return this.layoutProvider;
+        } else if (isClassDiagram(container)) {
+            return this.getClassDiagramLayoutProvider();
+        } else if (isPackageHierarchyDiagram(container)) {
+            return this.getPackageHierarchyLayoutProvider();
+        }
+        return null;
+    }
+
+    public boolean provides(IGraphicalEditPart container) {
+        return (isClassDiagram(container) &amp;amp;&amp;amp; isAbleToLayoutClassDiagram(container)) || isSequenceDiagram(container) || isPackageHierarchyDiagram(container);
+    }
+
+    private boolean isSequenceDiagram(IGraphicalEditPart container) {
+        if (container instanceof AbstractDDiagramEditPart) {
+            AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
+            if (editPart.resolveSemanticElement() instanceof DDiagram) {
+                DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
+                if (viewPoint.getDescription() != null) {
+                    DiagramDescription diagramDescription = diagram.getDescription();
+                    return Uml2Constants.SEQUENCE_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
+                }
+            }
+        }
+        return false;
+    }
+
+    private boolean isClassDiagram(IGraphicalEditPart container) {
+        if (container instanceof AbstractDDiagramEditPart) {
+            AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
+            if (editPart.resolveSemanticElement() instanceof ViewPoint) {
+                DDiagram diagram = (DDaiagram) editPart.resolveSemanticElement();
+                if (diagram.getDescription() != null) {
+                    DiagramDescription diagramDescription = diagram.getDescription();
+                    return Uml2Constants.CLASS_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
+                }
+            }
+        }
+        return false;
+    }
+
+    private boolean isPackageHierarchyDiagram(IGraphicalEditPart container) {
+        if (container instanceof AbstractDDiagramEditPart) {
+            AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
+            if (editPart.resolveSemanticElement() instanceof DDiagram) {
+                DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
+                if (viewPoint.getDescription() != null) {
+                    DiagramDescription diagramDescription = diagram.getDescription();
+                    return Uml2Constants.PACKAGE_HIERARCHY_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
+                }
+            }
+        }
+        return false;
+    }
+
+    private boolean isAbleToLayoutClassDiagram(IGraphicalEditPart container) {
+        if (container instanceof DiagramEditPart) {
+            int nbNoInherance = 0;
+            int nbInheritance = 0;
+            Iterator iterConnections = ((DiagramEditPart) container).getConnections().iterator();
+            while (iterConnections.hasNext()) {
+                ConnectionEditPart connectionEditPart = (ConnectionEditPart) iterConnections.next();
+                EObject semantic = connectionEditPart.resolveSemanticElement();
+                if (semantic != null &amp;amp;&amp;amp; semantic instanceof DecorateSemanticElement) {
+                    EObject realSemantic = ((DecorateSemanticElement) semantic).getTarget();
+                    if (realSemantic instanceof Generalization) {
+                        nbInheritance++;
+                    } else {
+                        nbNoInherance++;
+                    }
+                } else {
+                    nbNoInherance++;
+                }
+            }
+            return nbInheritance &amp;gt; nbNoInherance;
+        }
+        return false;
+    }
+
+    /**
+     * Returns the class diagram layout provider.
+     *
+     * @return the class diagram layout provider.
+     */
+    public GridLayoutProvider getClassDiagramLayoutProvider() {
+        if (classDiagramLayoutProvider == null) {
+            classDiagramLayoutProvider = new GridLayoutProvider();
+            classDiagramLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+            classDiagramLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+            classDiagramLayoutProvider.getPadding().top = 20;
+            classDiagramLayoutProvider.getPadding().bottom = 20;
+            classDiagramLayoutProvider.getPadding().left = 20;
+            classDiagramLayoutProvider.getPadding().right = 20;
+        }
+        return classDiagramLayoutProvider;
+    }
+
+    public GridLayoutProvider getPackageHierarchyLayoutProvider() {
+        if (packageHierarchyLayoutProvider == null) {
+            packageHierarchyLayoutProvider = new GridLayoutProvider();
+            packageHierarchyLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+            packageHierarchyLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
+            packageHierarchyLayoutProvider.getPadding().top = 20;
+            packageHierarchyLayoutProvider.getPadding().bottom = 20;
+            packageHierarchyLayoutProvider.getPadding().left = 30;
+            packageHierarchyLayoutProvider.getPadding().right = 30;
+        }
+        return packageHierarchyLayoutProvider;
+    }
+
+    public boolean isDiagramLayoutProvider() {
+        return false;
+    }
+
+}
+
+</pre>
+		<p>Finally, we add the extension in the plug-in file :</p>
+		<p>
+			<img border="0" src="images/arrange-all/arrange-all-layoutprovider-extension.png"/>
+		</p>
+		<pre><code>&lt;extension point="org.eclipse.sirius.diagram.layoutProvider"&gt;
+   &lt;layoutProvider priority="high" providerClass="com.example.uml2.specific.provider.Uml2LayoutProvider"&gt;
+   &lt;/layoutProvider&gt;
+&lt;/extension&gt;
+</code></pre>
+		<h2 id="EnabletheborderednodeslayoutonacustomLayoutProvider">Enable the bordered nodes layout on a custom LayoutProvider</h2>
+		<p>The bordered nodes layout arranges all the bordered nodes which are connected to one edge. This arrange reduces the path of the edge between each extremity.</p>
+		<p>Currently, the layout of the bordered nodes is activated on the default Layout Provider (CompositeDownTopProvider, CompositeLeftRightProvider and OrderedTreeLayoutProvider. To enable the bordered nodes layout on a new LayoutProvider, in the method getLayoutNodeProvider(IGraphicalEditPart), you must create a new BorderItemAwareLayoutProvider with your own LayoutProvider in parameter. This new BorderItemAwareLayoutProvider must be return instead of your own.</p>
+		<p>Example of the OrderedTreeLayoutProvider</p>
+		<pre><code>public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
+    if (isDDiagramWithConfiguredOrderedTreeLayout(container)) {
+    //Get the expected layout provider
+        AbstractLayoutProvider layoutNodeProvider = getGridLayoutProvider();
+    //Create new BorderItemAwareLayoutProvider
+        layoutNodeProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(layoutNodeProvider);
+    //Return the BorderItemAwareLayoutProvider which wrap the previous one
+        return layoutNodeProvider;
+    } else {
+        return null;
+    }
+}
+</code></pre>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_aird_editor_pages.html b/doc/5.1.x/developer/extensions-provide_custom_aird_editor_pages.html
new file mode 100644
index 0000000..ac8cf91
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_aird_editor_pages.html
@@ -0,0 +1,339 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_custom_aird_editor_pages</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvidecustomairdeditorpages">Sirius &#8211; Provide custom aird editor pages</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>Sirius provides an aird editor with a default page allowing to handle viewpoints and representations as well as semantic models. It is the entry point to any Sirius project for end user.</p>
+		<p>Custom pages can be provided to aird editor instances to show different information not available in the default page. It can be anything from business information to aird information. The functionalities around custom page providing are the following: </p>
+		<ul>
+			<li>Custom page can replace the default page or any other contributed pages.  </li>
+			<li>Custom pages can be located before or after other pages.</li>
+			<li>Custom pages can be dynamically updated. I.e for any change in the resource set of the aird opened with the editor owing your page instance, you can tell the editor to execute reordering, removing or editor page tab refreshing commands in addition of a refresh done internally by your class.</li>
+			<li>Custom pages are displayed by aird editors only if a required context specified by your page is present. It no such context is specified, the page will always be shown in aird editors.</li>
+			<li>The update commands computing and internal refresh can be deferred to when your page is visible to avoid performance problem when browsing other page whereas yours is not used. This can be useful if you do heavy computing when refreshing or computing update commands.</li>
+		</ul>
+		<p>Sirius offers two distinct ways of providing custom pages for aird editor:</p>
+		<ul>
+			<li>an API with the 
+				<code>PageRegistry</code> as entry point.
+			</li>
+			<li>and the same API with 
+				<code>sessionEditorPageProvider</code> extension point as entry point.
+			</li>
+		</ul>
+		<h2 id="UsingtheAPItoprovidecustompages">Using the API to provide custom pages</h2>
+		<p>The API is composed of the following classes:</p>
+		<ul>
+			<li>The 
+				<code>AbstractSessionEditorPage</code>
+			</li>
+			<li>The 
+				<code>PageProvider</code>
+			</li>
+			<li>The 
+				<code>PageUpdateCOmmand</code>
+			</li>
+			<li>The 
+				<code>PositioningKind</code>
+			</li>
+			<li>The 
+				<code>PageUpdateCommandBuilder</code>
+			</li>
+			<li>The 
+				<code>PageRegistry</code>
+			</li>
+		</ul>
+		<p>and are available in the package 
+			<code>org.eclipse.sirius.ui.editor.api.pages</code> from the plugin 
+			<code>org.eclipse.sirius.ui.editor</code>
+		</p>
+		<p>To provide a custom page by using this API you have to:</p>
+		<ol>
+			<li>Build your custom page that extends 
+				<code>AbstractSessionEditorPage</code> and with the help of 
+				<code>PageUpdateCommandBuilder</code> if needed.
+			</li>
+			<li>Create a 
+				<code>PageProvider</code> that will provide your custom page as well as other custom pages you want.
+			</li>
+			<li>Register your 
+				<code>PageProvider</code> either directly in the 
+				<code>PageRegistry</code> or by using the provided extension point.
+			</li>
+			<li>Launch the runtime and open the aird editor of a modeling project. If the display context required by your custom page is present it will be visible.</li>
+		</ol>
+		<p>Example with the Sirius Debug Page:
+			<br/>
+			<img border="0" src="images/customPageApi_debugPage_example.png"/>
+		</p>
+		<h3 id="pagePositioning">Page positioning</h3>
+		<p>When contributing a custom page, you can tell where the editor tab corresponding to your page will be located regarding other pages' tab in different contexts:</p>
+		<ul>
+			<li>when the page is initialized by your 
+				<code>PageProvider</code>
+			</li>
+			<li>when the page position is updated by a reorder command in response to an aird editor&#8217;s session&#8217;s resource set event or a page visibility update.</li>
+		</ul>
+		<p>Whatever the context is, you always need to provide two kind of information to position your page regarding others:</p>
+		<ul>
+			<li>The 
+				<b>id</b> of the page from which your page will be placed relatively to it. The default aird editor page id is accessible in 
+				<code>org.eclipse.sirius.ui.editor.SessionEditorPlugin.DEFAULT_PAGE_ID</code>
+			</li>
+			<li>The kind of positioning you want to achieve. The different kinds are defined by the enum 
+				<code>org.eclipse.sirius.ui.editor.api.pages.PageProviderRegistry.PositioningKind</code>:
+				<ul>
+					<li>The 
+						<code>BEFORE</code> kind will place your page&#8217;s tab in the aird editor before the target page&#8217;s tab. For example with the debug page before 
+						<i>Overview</i>:
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/customPageApi_debugPage_before.png"/>
+		</p>
+		<ul>
+			<li>
+				<ul>
+					<li>The 
+						<code>AFTER</code> kind will place your page&#8217;s tab in the aird editor after the target page&#8217;s tab. For example with the debug page after 
+						<i>Overview</i>:
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/customPageApi_debugPage_after.png"/>
+		</p>
+		<ul>
+			<li>
+				<ul>
+					<li>The 
+						<code>REPLACE</code> kind will replace the target page&#8217;s tab in the aird editor by your page&#8217;s tab. For example with the debug page replace the default page 
+						<em>Overview</em>:
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/customPageApi_debugPage_replace.png"/>
+		</p>
+		<p>If a page identified by the id used to position your custom page does not exists in the aird editor when positioning your page, then your page will be added to the leftmost position.</p>
+		<h3 id="Buildingthecustompage">Building the custom page</h3>
+		<p>To build a custom page you need to create a class extending 
+			<code>org.eclipse.sirius.ui.editor.api.pages.AbstractSessionEditorPage</code> that also extends 
+			<code>FormPage</code>.  
+			<br/>The UI creation part of your page is handled by the methods of 
+			<code>FormPage</code> with the method 
+			<code>createFormContent(IManagedForm managedForm)</code> as entry point.
+			<br/>The 
+			<code>AbstractSessionEditorPage</code> abstract class brings the following methods to implement:
+		</p>
+		<ul>
+			<li>
+				<code>Optional&lt;PageUpdateCommand&gt; pageChanged(boolean)</code>
+			</li>
+			<li>
+				<code>Optional&lt;PageUpdateCommand&gt; resourceSetChanged(ResourceSetChangeEvent)</code>
+			</li>
+			<li>
+				<code>Optional&lt;PositioningKind&gt; getPositioning()</code>
+			</li>
+			<li>
+				<code>Optional&lt;String&gt; getLocationId()</code>
+			</li>
+		</ul>
+		<p>There is also a method 
+			<code>NotificationFilter getFilterForPageRequesting()</code> with default behavior that can be overridden.
+		</p>
+		<h4 id="resourceSetChanged">resourceSetChanged</h4>
+		<p>This method is called by the aird editor whenever a resource set event occurs on its session&#8217;s resource set. The event can be a change regarding the aird file, or the loaded resources or viewpoints. </p>
+		<p>You can internally refresh your graphic components when called according to the change event. You also can return a list of 
+			<code>PageUpdateCommand</code> that the editor needs to execute to update your page by using the builder 
+			<code>PageUpdateCommandBuilder</code>. For example:
+		</p>
+		<pre><code>return Optional.of(new PageUpdateCommandBuilder().removePage().build());
+</code></pre>
+		<p>This builder allows you to build a command the owning aird editor must execute. The built command can do one or a combination of the following command:</p>
+		<ul>
+			<li>the REMOVE command (
+				<code>PageUpdateCommandBuilder removePage()</code>): when the aird editor execute this command, your page will be removed from the editor.
+			</li>
+			<li>the REORDER command (
+				<code>PageUpdateCommandBuilder reorderPage(PositioningKind positioningKind, String targetPageId)</code>): when the aird editor execute this command, your page will be placed at the defined position. To know more about positioning, please read the section 
+				<a href="#pagePositioning">Page Positioning</a>  
+			</li>
+			<li>the RENAME command 
+				<code>PageUpdateCommandBuilder renameTab(String newLabel)</code>: when the aird editor execute this command, the editor tab owning your page will have its label updated with the one given to build the command.
+			</li>
+		</ul>
+		<p>If the built command contains the remove command and a reorder, rename or both command, then the remove command will be executed but not the other(s).</p>
+		<p>If you does not need to use this functionality you must return 
+			<code>Optional.empty()</code>.
+		</p>
+		<h4 id="pageChanged">pageChanged</h4>
+		<p>This method is called with true as parameter when your page just becomes visible (i.e it is selected). It is called with false as parameter when any other page than yours is selected. </p>
+		<p>You can use the parameter to avoid doing heavy computation on model changes when you know your page is not visible to the end-user, and defer these to later, when it will become visible again (i.e. when pageChanged is invoked with 
+			<code>true</code>).
+		</p>
+		<p>You also can internally refresh your graphic components when called according to the change event. You also can return a list of 
+			<code>PageUpdateCommand</code>  that the editor needs to execute to update your page by using the builder 
+			<code>PageUpdateCommandBuilder</code>. See section 
+			<a href="#resourceSetChanged">resourceSetChanged</a> to have details about the commands. 
+		</p>
+		<p>If you want to apply page update only when the page is visible and if certain conditions are fulfilled regarding the session, then it is your responsibility to keep track of what happens since the last page selection with calls to 
+			<code>resourceSetChanged(ResourceSetChangeEvent)</code> to know if some update must be done.
+		</p>
+		<p>If you does not need to use this functionality you must return 
+			<code>Optional.empty()</code>.
+		</p>
+		<h4 id="getFilterForPageRequesting">getFilterForPageRequesting</h4>
+		<p>This method defined with a default implementation in 
+			<code>AbstractSessionEditorPage</code> allows to prevent calls to 
+			<code>AbstractSessionEditorPage.resourceSetChanged(ResourceSetChangeEvent)</code> for events you does not want to consider because you know your page will not refresh anything from these. 
+		</p>
+		<p>By default the filter 
+			<code>org.eclipse.emf.transaction.NotificationFilter.NOT_TOUCH</code> is used. This filter makes sure you are not called when all the event&#8217;s notification does not change any values.
+		</p>
+		<p>You can override this method to provide your own filter.</p>
+		<h4 id="getPositioning">getPositioning</h4>
+		<p>This method is used when your page is created to position it among other pages. See section 
+			<a href="#pagePositioning">Page Positioning</a>  to now more about how positioning works.
+		</p>
+		<p>It defines the kind of positioning to achieve.</p>
+		<p>If you don&#8217;t want to position your page relatively to another one, you can return 
+			<code>Optional.empty()</code>. In this case your page will be added to the leftmost position (first position).
+		</p>
+		<h4 id="getLocationId">getLocationId</h4>
+		<p>This method is used when your page is created to position it among other pages. See section 
+			<a href="#pagePositioning">Page Positioning</a>  to now more about how positioning works.
+		</p>
+		<p>It defines the page id from which your page should be positioned relatively to.</p>
+		<p>If you don&#8217;t want to position your page relatively to another one, you can return 
+			<code>Optional.empty()</code>. In this case your page will be added to the leftmost position (first position).
+		</p>
+		<h3 id="BuildingthePageProvider">Building the PageProvider</h3>
+		<p>The PageProvider responsibilities are:  </p>
+		<ul>
+			<li>to provide all the custom pages you want to Sirius.</li>
+			<li>to give the id of the pages provided by it.</li>
+		</ul>
+		<p>To build a custom page you need to create a class extending 
+			<code>org.eclipse.sirius.ui.editor.api.pages.PageProvider</code>.
+			<br/>This abstract class brings the following methods to implements:
+		</p>
+		<ul>
+			<li>
+				<code>Map&lt;String, Supplier&lt;AbstractSessionEditorPage&gt;&gt; getPages(SessionEditor)</code>
+			</li>
+			<li>
+				<code>NotificationFilter getFilterForPageRequesting()</code>
+			</li>
+			<li>
+				<code>boolean provides(String)</code>
+			</li>
+		</ul>
+		<h4 id="getPages">getPages</h4>
+		<p>This method returns all custom pages instances extending 
+			<code>AbstractSessionEditorPage</code> to initialize.
+		</p>
+		<p>This method must return a map of page id to its supplier initializing a new instance of the page.</p>
+		<p>For example with the debug page:</p>
+		<pre><code>Map&lt;String, Supplier&lt;AbstractSessionEditorPage&gt;&gt; resultMap = new HashMap&lt;&gt;();
+resultMap.put(DebugPage.PAGE_ID, () -&gt; {
+    return new DebugPage(editor, DebugPage.PAGE_ID, DEBUG_PAGE_TITLE);
+});
+return resultMap;
+</code></pre>
+		<p>You can use the given parameter to determine if your pages should be provided at the moment. You have access to the editor 
+			<code>org.eclipse.sirius.ui.editor.SessionEditor</code> asking for the pages of your provider. From this parameter you can access to its session by using the method 
+			<code>org.eclipse.sirius.ui.editor.SessionEditor.getSession()</code>. You also can use any singleton like 
+			<code>PlatformUI</code> to know if your pages should be created at the moment.
+		</p>
+		<p>If the required conditions to display a page that can be computed from the session are not verified, then you should not return a new instance of this page.</p>
+		<p>The method is called when: </p>
+		<ul>
+			<li>the aird editor is created.</li>
+			<li>a resource set event occurs from the resource set of the editor&#8217;s session excepted if all notifications of the event are not filtered by the filter returned by method 
+				<code>getFilterForPageRequesting</code>.
+			</li>
+			<li>a 
+				<code>PageProvider</code> is added or removed from the providers registry.
+			</li>
+		</ul>
+		<h4 id="getFilterForPageRequesting2">getFilterForPageRequesting</h4>
+		<p>This method defined with a default implementation in 
+			<code>PageProvider</code> allows to prevent calls to 
+			<code>PageProvider.getPages(SessionEditor)</code> for events you does not want to consider because you know that the initial conditions to show your pages will not be fulfilled. 
+		</p>
+		<p>By default the filter 
+			<code>org.eclipse.emf.transaction.NotificationFilter.NOT_TOUCH</code> is used. This filter makes sure you are not called when the event does not change any values.
+		</p>
+		<p>You can override this method to provide your own filter.</p>
+		<h4 id="provides">provides</h4>
+		<p>This method tells if your provider can create a page instance of the given id as parameter. It is used when computing page positions. </p>
+		<p>Warning: If you don&#8217;t return true for the id of a page you provide, then positioning may not be what you expect.</p>
+		<h3 id="Pagestatussynchronization">Page status synchronization</h3>
+		<p>You can create pages at a given position of an editor only when some initial conditions are fulfilled. This mechanism involves the methods:</p>
+		<ul>
+			<li>
+				<code>PageProvider.getPages(SessionEditor)</code>
+			</li>
+			<li>
+				<code>AbstractSessionEditorPage.getPositioning()</code>
+			</li>
+			<li>
+				<code>AbstractSessionEditorPage.getLocationId()</code>
+			</li>
+		</ul>
+		<p>You also can dynamically change the page position by reacting to session&#8217;s resource set events or even tell the editor to remove the page no longer useful. This mechanism involves the methods:</p>
+		<ul>
+			<li>
+				<code>AbstractSessionEditorPage.resourceSetChanged(ResourceSetChangeEvent)</code>
+			</li>
+			<li>
+				<code>AbstractSessionEditorPage.pageChanged(boolean)</code>
+			</li>
+		</ul>
+		<p>So we have two distinct mechanism allowing for page positioning that can be conflicted if not careful.
+			<br/>For example, your 
+			<code>AbstractSessionEditorPage</code> page can dynamically be removed when a condition A is verified. But your page creation initial condition in 
+			<code>PageProvider</code> is also A. In this situation, if A is verified a first time, the page is created. Then if A is verified a second time, the page will be removed dynamically and created again.
+		</p>
+		<p>So to avoid conflicts, the page position and creation/removal must have the most specific conditions in the 
+			<code>PageProvider</code> and the less specific in 
+			<code>AbstractSessionEditorPage</code>
+		</p>
+		<p>For example, if a page can be created from 
+			<code>PageProvider</code> when condition A and B are verified, then this page can be dynamically removed only if !A or !B is verified but not if another condition is verified like C or !C.
+		</p>
+		<h3 id="RegisteringthePageProvider">Registering the PageProvider</h3>
+		<p>When your PageProvider providing your custom pages is done, you have to register it to Sirius so it can be use to display your pages in aird editors.
+			<br/>You have two ways to do that either by using the 
+			<code>PageRegistry</code> or an extension point.
+		</p>
+		<h4 id="Programmaticregistering">Programmatic registering</h4>
+		<p>The 
+			<code>PageRegistry</code> is the registry containing all 
+			<code>PageProvider</code> used by aird editors. 
+			<br/>To be used, your provider can be registered in this registry.
+		</p>
+		<p>You can do this programmatically by calling the method 
+			<code>org.eclipse.sirius.ui.editor.SessionEditorPlugin.getPlugin().getPageRegistry().addPageProvider(parameter)</code> with a new instance of your page provider as parameter.
+		</p>
+		<h4 id="Declarativeregistering">Declarative registering</h4>
+		<p>The extension point 
+			<code>org.eclipse.sirius.ui.editor.sessionEditorPageProvider</code> allows you to define the class of your page provider that should be taken in consideration when Sirius populates pages of aird editors:
+		</p>
+		<p>
+			<img border="0" src="images/customPageApi_debugPage_extensionPoint.png"/>
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_bundled_image_shape.html b/doc/5.1.x/developer/extensions-provide_custom_bundled_image_shape.html
new file mode 100644
index 0000000..98bdbb1
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_bundled_image_shape.html
@@ -0,0 +1,89 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_custom_bundled_image_shape</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvidecustombundledimageshape">Sirius &#8211; Provide custom bundled image shape</h1>
+		<h2 id="Goals">Goals</h2>
+		<ul>
+			<li>Sirius provides a basic image style for node mappings. This style offer a selection of five different shapes. This extension point is used to allow specifiers to provide their own shapes defined in a SVG file.</li>
+		</ul>
+		<h2 id="Defineabundledimageshapeextension">Define a bundled image shape extension</h2>
+		<ul>
+			<li>This extension point is identified as 
+				<code>org.eclipse.sirius.diagram.bundledImageShape</code>. In this extension, there are three required fields:
+				<ul>
+					<li>The Id of the extension is for once required as it will be used to identify the provided shape in the models (VSM and graphical models).</li>
+					<li>The image path, that needs to start with the plug-in name as it is possible to define a bundled image shape extension using an image in a different plug-in.</li>
+					<li>The image label displayed in VSMs (suffixed with the plug-in name where the bundled image shape extension is declared).</li>
+				</ul>
+			</li>
+		</ul>
+		<ul>
+			<li>There are 6 optional parameters in this extension point. These parameters are used to provide the identifier or attribute name concerning the color, border color and border size used in the given SVG file, if these parameters are not the default ones (used in the 5 default shapes). Here is a list of these parameters and the default value.
+				<ul>
+					<li>colorIdentifier, the identifier of the tag defining the inner color of the figure. The default identifier is &#8220;stop1&#8221;.</li>
+					<li>colorAttribute, the attribute of the tag defining the inner color of the figure. The default identifier is &#8220;style&#8221;.</li>
+					<li>borderColorIdentifier, the identifier of the tag defining the border color of the figure. The default identifier is &#8220;elementWithGradient&#8221;.</li>
+					<li>borderColorAttribute, the attribute of the tag defining the border color of the figure. The default identifier is &#8220;style&#8221;.</li>
+					<li>borderSizeIdentifier, the identifier of the tag defining the border size of the figure. The default identifier is &#8220;externalBorder&#8221;.</li>
+					<li>borderSizeAttribute, the attribute of the tag defining the border color of the figure. The default identifier is &#8220;style&#8221;.</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Note that it is possible to provide a non SVG file but the colors and border size will not be synchronized with the selected information in the VSM.</p>
+		<h2 id="Example">Example</h2>
+		<p>The following example defines a new bundled image shape using an image file donut.svg.</p>
+		<pre>	&lt;extension
+        id="org.eclipse.sirius.tests.swtbot.donut"
+        point="org.eclipse.sirius.diagram.bundledImageShape"&gt;
+     &lt;image
+           imagePath="/org.eclipse.sirius.tests.swtbot/images/donut.svg"
+           label="Donut"&gt;
+        &lt;colorIdentifier
+              colorIdentifier="stop8224-2"&gt;
+        &lt;/colorIdentifier&gt;
+        &lt;colorAttribute
+              colorAttribute="style"&gt;
+        &lt;/colorAttribute&gt;
+        &lt;borderColorIdentifier
+              borderColorIdentifier="path10796-2-6-2-7"&gt;
+        &lt;/borderColorIdentifier&gt;
+        &lt;borderColorAttribute
+              borderColorAttribute="style"&gt;
+        &lt;/borderColorAttribute&gt;
+        &lt;borderSizeIdentifier
+              borderSizeIdentifier="path10796-2-6-2-7"&gt;
+        &lt;/borderSizeIdentifier&gt;
+        &lt;borderSizeAttribute
+              borderSizeAttribute="style"&gt;
+        &lt;/borderSizeAttribute&gt;
+     &lt;/image&gt;
+  &lt;/extension&gt;
+
+</pre>
+		<p>In this sample, the identifier concerning the tags for the inner color (colorIdentifier), the border color (borderColorIdentifier) and the border size (borderSizeIdentifier) are not the default one. However, the attributes are all the default values. Therefore, we can simplify the extension as follows.</p>
+		<pre>	&lt;extension
+        id="org.eclipse.sirius.tests.swtbot.donut"
+        point="org.eclipse.sirius.diagram.bundledImageShape"&gt;
+     &lt;image
+           imagePath="/org.eclipse.sirius.tests.swtbot/images/donut.svg"
+           label="Donut"&gt;
+        &lt;colorIdentifier
+              colorIdentifier="stop8224-2"&gt;
+        &lt;/colorIdentifier&gt;
+        &lt;borderColorIdentifier
+              borderColorIdentifier="path10796-2-6-2-7"&gt;
+        &lt;/borderColorIdentifier&gt;
+        &lt;borderSizeIdentifier
+              borderSizeIdentifier="path10796-2-6-2-7"&gt;
+        &lt;/borderSizeIdentifier&gt;
+     &lt;/image&gt;
+  &lt;/extension&gt;
+</pre>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_model_operation.html b/doc/5.1.x/developer/extensions-provide_custom_model_operation.html
new file mode 100644
index 0000000..1c4109c
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_model_operation.html
@@ -0,0 +1,43 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_custom_model_operation</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvidecustommodeloperation">Sirius &#8211; Provide custom model operation</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>Sirius provides various model operations (change context, if, for, create instance, etc). This extension point allows the contribution of additional model operations.</p>
+		<h2 id="Defineamodeloperationextension">Define a model operation extension</h2>
+		<p>This extension point is identified as 
+			<code>org.eclipse.sirius.diagram.bundledImageShape</code>. In this extension, there are three required fields:
+		</p>
+		<ul>
+			<li>id &#8211; The identifier of the contribution</li>
+			<li>name &#8211; The human readable name of the contribution</li>
+			<li>modelOperationManager &#8211; The Java class used to handle the model operation</li>
+		</ul>
+		<p>The model operation manager will have to create a Sirius task from the given description of the model operation. An example is available in the plugin 
+			<code>org.eclipse.sirius.ui.properties</code> with the class 
+			<code>org.eclipse.sirius.ui.properties.internal.dialog.DialogModelOperationManager</code>.
+		</p>
+		<pre>public class DialogModelOperationManager implements IModelOperationManager {
+
+    @Override
+    public Optional&lt;ICommandTask&gt; createTask(ModelOperation modelOperation, ModelAccessor modelAccessor, UICallBack uiCallback,
+             Session session, IInterpreter interpreter, CommandContext context) {
+        if (modelOperation instanceof DialogModelOperation) {
+            DialogModelOperation dialogModelOperation = (DialogModelOperation) modelOperation;
+            return Optional.of(new DialogTask(context, modelAccessor, interpreter, session, dialogModelOperation));
+        }
+        return Optional.empty();
+    }
+
+}
+
+</pre>
+		<p>In this example, we will only consider the DialogModelOperation and we will return a new DialogTask used to open a dialog.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_permission_authority.html b/doc/5.1.x/developer/extensions-provide_custom_permission_authority.html
new file mode 100644
index 0000000..67ae3b7
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_permission_authority.html
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_custom_permission_authority</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="ProvidingaCustomPermissionAuthority">Providing a Custom Permission Authority</h1>
+		<p>Both read and write operations on the model are executed through an accessibility layer called the model accessor, implemented by 
+			<code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessor</code>.  Each session has an an associated 
+			<code>ModelAccessor</code> which can be obtained with 
+			<code>Session.getModelAccessor()</code>.
+		</p>
+		<p>The model accessor itself delegates the permission checking to an 
+			<code>IPermissionAuthority</code> , which is responsible for checking which operations are permitted on a given model element. The permission authority is also used to lock model elements (both representation and semantic elements), query their lock status and be notified (through 
+			<code>IAuthorityListener</code>) when a lock is taken or released. 
+		</p>
+		<p>You can provide a custom permission authority by implementing the interface 
+			<code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority</code>  and registering your custom implementation with the 
+			<code>org.eclipse.sirius.ecore.extender.PermissionProvider</code> extension point.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_custom_style.html b/doc/5.1.x/developer/extensions-provide_custom_style.html
new file mode 100644
index 0000000..5c72ea1
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_custom_style.html
@@ -0,0 +1,697 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_custom_style</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvidecustomstyle">Sirius &#8211; Provide custom style</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>Sirius provides tools to design and display diagrams. These diagrams are essentially composed of figures of distinct styles
+			<br/>and shapes and, even though the tooling initially allows for the usage of a wide array of styles, many diagrams will still require
+			<br/>customized styles to conform to the company&#8217;s theme.
+		</p>
+		<p>Sirius offers three distinct ways of customizing its graphical styles:</p>
+		<ol>
+			<li>the 
+				<code>StyleConfiguration</code> extension point.
+			</li>
+			<li>the 
+				<code>CustomStyle</code> in addition to the 
+				<code>EditPartProvider</code> GMF extension point.
+			</li>
+			<li>the GMF-provided extension points.</li>
+		</ol>
+		<h2 id="StyleConfiguration">StyleConfiguration</h2>
+		<p>StyleConfiguration is a mechanism that enables the customization of a specific style. It aims at providing support for different
+			<br/>ways of displaying labels, anchors, ...
+		</p>
+		<h3 id="TheStyleConfigurationinterface">The StyleConfiguration interface</h3>
+		<p>This interface defines a set of methods that need be implemented in order for the syle to be customizable:</p>
+		<ul>
+			<li>
+				<code>void adaptNodeLabel(DNode node, WrapLabel nodeLabel)</code>
+			</li>
+			<li>
+				<code>BorderItemLocatorProvider getBorderItemLocatorProvider()</code>
+			</li>
+			<li>
+				<code>IBorderItemLocator getNameBorderItemLocator(DNode node, IFigure mainFigure)</code>
+			</li>
+			<li>
+				<code>int adaptViewNodeSizeWithLabel(DNode viewNode, WrapLabel nodeLabel, int nodeWidth)</code>
+			</li>
+			<li>
+				<code>AnchorProvider getAnchorProvider()</code>
+			</li>
+			<li>
+				<code>Image getLabelIcon(DDiagramElement element)</code>
+			</li>
+			<li>
+				<code>Dimension fitToText(DNode node, WrapLabel nodeLabel, DefaultSizeNodeFigure defaultSizeNodeFigure)</code>
+			</li>
+		</ul>
+		<h4 id="adaptNodeLabel">adaptNodeLabel</h4>
+		<p>This method can be used to alter the size and location of a given label according to a given node.</p>
+		<ul>
+			<li>Parameters
+				<ul>
+					<li>
+						<code>viewNode</code>: The node representation.
+					</li>
+					<li>
+						<code>nodeLabel</code>: Label of the node.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="getBorderItemLocatorProvider">getBorderItemLocatorProvider</h4>
+		<p>This method returns the instance currently providing border item locators for the node. A border item is a node located on the border of another node.</p>
+		<h4 id="getNameBorderItemLocator">getNameBorderItemLocator</h4>
+		<p>This method returns the item locator for the label of the node. This method is meaningless if the position of the label isn&#8217;t 
+			<code>BORDER</code>.
+		</p>
+		<ul>
+			<li>Parameters
+				<ul>
+					<li>
+						<code>node</code>: The node representation.
+					</li>
+					<li>
+						<code>mainFigure</code>: The Draw2D figure representing the node.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="adaptViewNodeSizeWithLabel">adaptViewNodeSizeWithLabel</h4>
+		<p>This method returns the minimum width a node needs to be correctly displayed with its label.</p>
+		<ul>
+			<li>Parameters
+				<ul>
+					<li>
+						<code>viewNode</code>: The node representation.
+					</li>
+					<li>
+						<code>nodeLabel</code>: Label of the node.
+					</li>
+					<li>
+						<code>nodeWidth</code>: Current width of the node.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="getAnchorProvider">getAnchorProvider</h4>
+		<p>This method returns the instance providing connections anchors.</p>
+		<h4 id="getLabelIcon">getLabelIcon</h4>
+		<p>This method returns the icon that will displayed for this element&#8217;s representations.</p>
+		<ul>
+			<li>Parameters
+				<ul>
+					<li>
+						<code>vpElement</code>: The element for which we need an icon.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="fitToText">fitToText</h4>
+		<p>This method returns the optimal dimension of the node.</p>
+		<ul>
+			<li>Parameters
+				<ul>
+					<li>
+						<code>node</code>: The node representation.
+					</li>
+					<li>
+						<code>nodeLabel</code>: Label of the node.
+					</li>
+					<li>
+						<code>defaultSizeNodeFigure</code>: The draw2d representation of the node.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h3 id="ProvidingcustomStyleConfiguration">Providing custom StyleConfiguration</h3>
+		<p>The 
+			<code>StyleConfiguration</code> mechanism is only available for 
+			<code>ViewNode</code> at the moment. Default configurations are initially installed on nodes.
+		</p>
+		<p>
+			<b>SimpleStyleConfiguration</b>
+		</p>
+		<p>This configuration is the simplest implementation.</p>
+		<p>
+			<b>SquareStyleConfiguration</b>
+		</p>
+		<p>This is the minimal configuration for nodes using the 
+			<code>BundledImage</code> style with a square shape.
+		</p>
+		<p>
+			<b>SimpleSquareStyleConfiguration</b>
+		</p>
+		<p>This is the minimal configuration for nodes with a 
+			<code>Square</code> style.
+		</p>
+		<h4 id="ProvidersofStyleConfiguration">Providers of StyleConfiguration</h4>
+		<p>Installing your own configurations can be done through the 
+			<code>org.eclipse.sirius.diagram.styleConfigurationProvider</code> extension
+			<br/>point. This extension point requires only one attribute: the qualified name of the provider class.
+		</p>
+		<pre><code>&lt;extension point="org.eclipse.sirius.diagram.styleConfigurationProvider"&gt;
+   &lt;styleConfigurationProvider providerClass="com.example.diagseq.style.DiagSeqStyleConfigurationProvider" /&gt;
+&lt;/extension&gt;
+
+</code></pre>
+		<p>Here is a sample of the extension tab of the PDE editor when filling in this extension point:</p>
+		<p>
+			<img border="0" src="./images/style/styleConfigurationProviderExt.png"/>
+		</p>
+		<p>This example records the 
+			<code>DiagSeqStyleConfigurationProvider</code> as a configuration provider. This class must implement the
+			<br/>
+			<code>IStyleConfigrationProvider</code> interface.
+		</p>
+		<p>The latter interface defines two methods:</p>
+		<p>
+			<strong>
+				<code>boolean provides(DiagramElementMapping mapping, Style style)</code>
+			</strong>
+		</p>
+		<p>This method returns true if the provider provides a configuration for the given mapping and style.</p>
+		<ul>
+			<li>Parameters
+				<ul>
+					<li>
+						<code>mapping</code>: The mapping of the node.
+					</li>
+					<li>
+						<code>style</code>: Style of the node.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<strong>
+				<code>StyleConfiguration createStyleConfiguration(DiagramElementMapping mapping, Style style)</code>
+			</strong>
+		</p>
+		<p>This method creates a StyleConfiguration for the specified mapping and style.</p>
+		<ul>
+			<li>Parameters
+				<ul>
+					<li>
+						<code>mapping</code>: Mapping of the node.
+					</li>
+					<li>
+						<code>style</code>: Style of the node.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Here is an example of a provider:</p>
+		<pre><code>public class DiagSeqStyleConfigurationProvider implements IStyleConfigurationProvider {
+    public StyleConfiguration createStyleConfiguration(DiagramElementMapping mapping, Style style) {
+        if (mapping instanceof NodeMapping) {
+            NodeMapping nodeMapping = (NodeMapping) mapping;
+            if (nodeMapping.getName() != null &amp;&amp; nodeMapping.getName().equals(DiagSeqConstants.INSTANCE_ROLE_MAPPING_NAME)) {
+                return new InstanceRoleStyleConfiguration();
+            }
+            if (nodeMapping.getName() != null &amp;&amp; nodeMapping.getName().equals(DiagSeqConstants.EXECUTION_MAPPING_NAME)) {
+                return new ExecutionSpecificationStyleConfiguration();
+            }
+        }
+        return null;
+    }
+
+    public boolean provides(DiagramElementMapping mapping, Style style) {
+        return mapping instanceof NodeMapping &amp;&amp; ((NodeMapping) mapping).getName() != null
+                &amp;&amp; (((NodeMapping) mapping).getName().equals(DiagSeqConstants.INSTANCE_ROLE_MAPPING_NAME)
+                	|| DiagSeqConstants.EXECUTION_MAPPING_NAME.equals(((NodeMapping) mapping).getName()));
+    }
+}
+
+
+</code></pre>
+		<h3 id="ExampleofaStyleConfigurationimplementation">Example of a StyleConfiguration implementation</h3>
+		<pre><code>public class SimpleStyleConfiguration implements StyleConfiguration {
+    public void adaptNodeLabel(DNode node, WrapLabel nodeLabel) {
+        if (nodeLabel.getParent() != null) {
+            Rectangle constraint = nodeLabel.getParent().getBounds().getCopy();
+
+            Insets borderDimension = this.getBorderDimension(node);
+            constraint.height -= (borderDimension.top + borderDimension.bottom);
+            constraint.width -= (borderDimension.left + borderDimension.right);
+            constraint.x += borderDimension.left;
+            constraint.y += borderDimension.top;
+
+            nodeLabel.setBounds(constraint);
+            nodeLabel.getParent().setConstraint(nodeLabel, constraint);
+        }
+    }
+
+    public int adaptViewNodeSizeWithLabel(DNode viewNode, WrapLabel nodeLabel, int nodeWidth) {
+        if (viewNode.getResizeKind() != ResizeKind.NONE_LITERAL) {
+
+        }
+        return nodeWidth;
+    }
+
+    public AnchorProvider getAnchorProvider() {
+        return null;
+    }
+
+    public BorderItemLocatorProvider getBorderItemLocatorProvider() {
+        return DefaultBorderItemLocatorProvider.getInstance();
+    }
+
+    public IBorderItemLocator getNameBorderItemLocator(DNode node, IFigure mainFigure) {
+        BorderItemLocator locator = new AirBorderItemLocator(mainFigure, PositionConstants.NSEW);
+        locator.setBorderItemOffset(new Dimension(1, 1));
+        return locator;
+    }
+
+    public Image getLabelIcon(DDiagramElement vpElement) {
+        EObject target = vpElement;
+        if (vpElement instanceof DSemanticDecorator) {
+            target = ((DSemanticDecorator) vpElement).getTarget();
+        }
+        if (isShowIcon(vpElement)) {
+            if (target != null) {
+                IItemLabelProvider labelProvider = (IItemLabelProvider) SiriusDiagramEditorPlugin.getInstance()
+                		.getItemProvidersAdapterFactory().adapt(target, IItemLabelProvider.class);
+                if (labelProvider != null) {
+                    ImageDescriptor descriptor = ExtendedImageRegistry.getInstance().getImageDescriptor(labelProvider.getImage(target));
+                    if (descriptor == null) {
+                        descriptor = ImageDescriptor.getMissingImageDescriptor();
+                    }
+                    return SiriusDiagramEditorPlugin.getInstance().getImage(descriptor);
+                }
+            }
+        }
+        return null;
+    }
+
+    protected boolean isShowIcon(DDiagramElement vpElement) {
+        if (vpElement instanceof MappingBased) {
+            DiagramElementMapping vpElementMapping = ((MappingBased) vpElement).getMapping();
+            if (vpElementMapping instanceof NodeMapping) {
+                return ((NodeMapping) vpElementMapping).isShowIcon();
+            }
+            if (vpElementMapping instanceof EdgeMapping) {
+                return ((EdgeMapping) vpElementMapping).isShowIcon();
+            }
+            if (vpElementMapping instanceof ContainerMapping) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public Dimension fitToText(DNode node, WrapLabel nodeLabel, DefaultSizeNodeFigure defaultSizeNodeFigure) {
+        if (nodeLabel.getFont() != null) {
+            String text = node.getName();
+
+            int charHeight = FigureUtilities.getStringExtents("ABCDEF", nodeLabel.getFont()).height + 5;
+            int charWidth = FigureUtilities.getTextWidth("ABCDEFGHIJKLMNOPQRSTUVWXYZ", nodeLabel.getFont()) / 26;
+
+            double ratio = charHeight / charWidth;
+
+            int nbLines = (int) (Math.sqrt(text.length()) / ratio) + 1;
+            int nbCols = (int) (Math.sqrt(text.length()) * ratio) + 1;
+
+            int longestWord = this.getTheLongestWord(text.split("\\s"));
+            nbCols = Math.max(nbCols, longestWord);
+
+            int hHeight = nbLines * charHeight;
+            int hWidth = nbCols * charWidth;
+
+            Dimension size = nodeLabel.getPreferredSize(hWidth + nodeLabel.getIconBounds().width +
+            		nodeLabel.getIconTextGap(), hHeight).getCopy();
+
+            size.width += 20;
+            size.height += 30;
+
+            Insets borderDimension = this.getBorderDimension(node);
+            size.width += (borderDimension.left + borderDimension.right);
+            size.height += (borderDimension.top + borderDimension.bottom);
+
+            //
+            // Square ?
+            if (node.getHeight().intValue() == node.getWidth().intValue()) {
+                // size.width = Math.max(size.height, size.width);
+                // size.height = Math.max(size.height, size.width);
+            }
+
+            return size;
+        }
+        return defaultSizeNodeFigure.getBounds().getSize().getCopy();
+    }
+
+    private int getTheLongestWord(String[] strings) {
+        int max = -1;
+        for (int i = 0; i &lt; strings.length; i++) {
+            if (strings[i].length() &gt; max) {
+                max = strings[i].length();
+            }
+        }
+        return max;
+    }
+
+    /**
+     * Return the dimension of the border.
+     *
+     * @param nodeth
+     *            view node.
+     * @return the dimension of the border.
+     */
+    public Insets getBorderDimension(DNode node) {
+        return new Insets(0, 0, 0, 0);
+    }
+
+}
+
+</code></pre>
+		<p>The easiest way to implement your own configuration is to make it a sub class of 
+			<code>SimpleStyleConfiguration</code>.
+		</p>
+		<h2 id="GMFextensionpointsCustomStyleandEditPartProvider">GMF extension points, CustomStyle and EditPartProvider</h2>
+		<p>
+			<code>CustomStyle</code> is a style that can be applied to a node. Its only property is 
+			<code>id</code> that is a string value. By default,
+			<br/>applying a CustomStyle will have a Green Square be displayed. A custom 
+			<code>EditPart</code> describing the appearance of the node
+			<br/>must be implemented.
+		</p>
+		<p>Here is how to apply a 
+			<code>CustomStyle</code>:
+		</p>
+		<p>
+			<img border="0" src="./images/style/customStyle.png"/>
+		</p>
+		<p>Next step is to create and record an 
+			<code>EditPart</code> to define the way this style will be managed.
+		</p>
+		<p>An 
+			<code>EditPart</code> is a GEF class. It references both a model element and the shape that represents it. GMF adds a layer to GEF
+			<br/>and exposes its own 
+			<strong>EditPart</strong> API. The base type of this API is 
+			<code>IGraphicalEditPart</code> (in package
+			<br/>
+			<code>org.eclipse.gmf.runtime.diagram.ui.editparts</code>). Here are the main methods this interface defines:
+		</p>
+		<ul>
+			<li>
+				<code>EObject resolveSemanticElement()</code>: This method returns the semantic element of the edit part. The type of this semantic element is a type contained by the Sirius package (see 
+				<code>SiriusPackage</code>). For instance, if we were to write an 
+				<code>EditPart</code> for our 
+				<code>CustomStyle</code>, the semantic element would be the said 
+				<code>CustomStyle</code>. It is possible to get the ViewNode with it and, then, the target element.
+			</li>
+			<li>
+				<code>View getNotationView()</code>: This method returns the GMF View of the edit part. This is the view that will be saved into the GMF Diagram.
+			</li>
+		</ul>
+		<p>All Custom Style Edit Part must implement the 
+			<code>IStyleEditPart</code> interface. Semantically, a Style Edit Part should not be selectable: it is selected when the Shape or Connector that contains  it is selected. Therefore, 
+			<strong>all Custom Style Edit Part should override the 
+				<code>isSelectable()</code> method and return false
+			</strong>. If you can, inherit from the abstract class 
+			<code>AbstractNotSelectableShapeNodeEditPart</code> that already overrides correctly this method. You should also override the 
+			<code>createDefaultEditPolicies</code> to do nothing if you want to let Sirius control your custom node as it is done in the provided Sirius style edit parts: the style part is responsible for the style/figure aspects while its parent part will mainly control the behavior by its policies. Otherwise you will need to properly add policies to override the default GMF policies, add your own specific policies or the Sirius ones.
+		</p>
+		<p>Here is a sample of a Custom Style Edit Part:</p>
+		<pre><code>public class InstanceRoleStyleEditPart extends AbstractNotSelectableShapeNodeEditPart implements IStyleEditPart {
+
+    /**
+     * the content pane.
+     */
+    protected IFigure contentPane;
+
+    /**
+     * the primary shape.
+     */
+    protected ImageFigure primaryShape;
+
+    /**
+     * Create a new {@link ChangingImageEditPart}.
+     *
+     * @param view
+     *            the view.
+     */
+    public InstanceRoleStyleEditPart(View view) {
+        super(view);
+    }
+
+    public DragTracker getDragTracker(Request request) {
+        return getParent().getDragTracker(request);
+    }
+
+    protected NodeFigure createNodeFigure() {
+        NodeFigure figure = createNodePlate();
+        figure.setLayoutManager(new XYLayout());
+        IFigure shape = createNodeShape();
+        figure.add(shape);
+        contentPane = setupContentPane(shape);
+        return figure;
+    }
+
+    private NodeFigure createNodePlate() {
+        DefaultSizeNodeFigure result = new AirStyleDefaultSizeNodeFigure(getMapMode().DPtoLP(40), getMapMode().DPtoLP(40));
+        return result;
+    }
+
+    /**
+     * Create the instance role figure.
+     *
+     * @return the created figure.
+     */
+    protected ImageFigure createNodeShape() {
+        if (primaryShape == null) {
+            primaryShape = new ImageFigure();
+        }
+        return primaryShape;
+    }
+
+    /**
+     * Return the instance role figure.
+     *
+     * @return the instance role figure.
+     */
+    public ImageFigure getPrimaryShape() {
+        return primaryShape;
+    }
+
+    /**
+     * Default implementation treats passed figure as content pane. Respects
+     * layout one may have set for generated figure.
+     *
+     * @param nodeShape
+     *            instance of generated figure class
+     * @return the figure
+     */
+    protected IFigure setupContentPane(IFigure nodeShape) {
+        return nodeShape; // use nodeShape itself as contentPane
+    }
+
+    public IFigure getContentPane() {
+        if (contentPane != null) {
+            return contentPane;
+        }
+        return super.getContentPane();
+    }
+
+    protected void refreshVisuals() {
+        CustomStyle customStyle = (CustomStyle) this.resolveSemanticElement();
+        if (customStyle.eContainer() instanceof DNode) {
+            this.getPrimaryShape().setImage(SiriusPlugin.getDefault().getBundledImage(((DNode) customStyle.eContainer()).getName()));
+        }
+    }
+
+    protected void createDefaultEditPolicies() {
+        // empty.
+    }
+}
+
+</code></pre>
+		<p>We now have to notify Sirius that we are providing a new 
+			<code>EditPart</code> for nodes having a CustomStyle of that id.
+			<br/>The GMF extension mechanism can be used to achieve this.
+		</p>
+		<p>plugin.xml:</p>
+		<p>
+			<img border="0" src="./images/style/editPartProvider_plugin1.png"/>
+		</p>
+		<pre><code>&lt;extension point="org.eclipse.gmf.runtime.diagram.ui.editpartProviders"&gt;
+  &lt;editpartProvider class="com.example.diagseq.provider.DiagSeqEditPartProvider"&gt;
+    &lt;Priority name="High"/&gt;
+  &lt;/editpartProvider&gt;
+&lt;/extension&gt;
+
+</code></pre>
+		<p>The provider class (
+			<code>com.example.diagseq.provider.DiagSeqEditPartProvider</code>) extends the GMF class
+			<br/>
+			<code>org.eclipse.gmf.runtime.diagram.ui.services.editpart.AbstractEditPartProvider</code>. Our custom Edit part will be
+			<br/>provided by overriding 
+			<code>getNodeEditPartClass</code>. Here is how this class looks like:
+		</p>
+		<pre><code>public class DiagSeqEditPartProvider extends AbstractEditPartProvider {
+    @Override
+    protected Class getNodeEditPartClass(View view) {
+        if (view.getElement() instanceof CustomStyle) {
+            CustomStyle customStyle = (CustomStyle) view.getElement();
+            if (customStyle.getId().equals(DiagSeqConstants.INSTANCE_ROLE_STYLE_ID)) {
+                return InstanceRoleStyleEditPart.class;
+            }
+        }
+        return super.getNodeEditPartClass(view);
+    }
+}
+
+</code></pre>
+		<p>Where 
+			<code>DiagSeqConstants.INSTANCE_ROLE_STYLE_ID</code> is the id of our custom style.
+		</p>
+		<p>In the modeler, the result looks like this:</p>
+		<p>
+			<img border="0" src="./images/style/instanceRole.png"/>
+		</p>
+		<h2 id="GMFextensionpoints">GMF extension points</h2>
+		<p>GMF exposes all of the necessary API to extend the default behavior of a modeler.</p>
+		<ul>
+			<li>Edit Part provider.</li>
+			<li>Edit Policy Provider.</li>
+			<li>Layout Provider</li>
+		</ul>
+		<h3 id="EditPartProvider">Edit Part Provider</h3>
+		<p>We saw earlier how to provide custom edit parts. Here is how the result looks like in Sirius.</p>
+		<p>Snapshot of the Sirius meta-model:</p>
+		<p>
+			<img border="0" src="./images/style/viewpoint.jpg"/>
+		</p>
+		<p>The types DNode, DNodeContainer, DNodeList, DNodeListElement, etc. have their own edit parts:</p>
+		<p>
+			<img border="0" src="./images/style/editParts.jpg"/>
+		</p>
+		<h3 id="EditPolicyProvider">Edit Policy Provider</h3>
+		<p>Edit Policies are objects responsible for the handling of user actions. There are Edit Policies for different behaviors:</p>
+		<ul>
+			<li>Creation</li>
+			<li>Deletion</li>
+			<li>Move elements</li>
+			<li>Selection</li>
+			<li>etc.</li>
+		</ul>
+		<p>As with edit parts, it is necessary to write an Edit Policy Provider as well as the Edit Policy that is to be provided. The
+			<br/>Edit Policy Provider must implement the 
+			<code>IEditPolicyProvider</code> interface:
+		</p>
+		<ul>
+			<li>
+				<code>public void addProviderChangeListener(IProviderChangeListener listener)</code>: Registers a listener on the provider.
+			</li>
+			<li>
+				<code>public boolean provides(IOperation operation)</code>: Returns true if this instance provides edit policies for the specified operation.
+			</li>
+			<li>
+				<code>public void removeProviderChangeListener(IProviderChangeListener listener)</code>: Removes a listener from this provider.
+			</li>
+			<li>
+				<code>public void createEditPolicies(EditPart editPart)</code>: Adds edit policies on the specified edit part.
+			</li>
+		</ul>
+		<p>Here is an example of an Edit Policy Provider</p>
+		<pre><code>/**
+ * Provides Edit Policy for Note Attachment.
+ */
+public class AirNoteAttachmentEditPolicyProvider implements IEditPolicyProvider {
+
+    /** the property change support. */
+    private List listeners;
+
+    /**
+     * Create a new {@link AirNoteAttachmentEditPolicyProvider}.
+     */
+    public AirNoteAttachmentEditPolicyProvider() {
+        this.listeners = new ArrayList(2);
+    }
+
+    public void createEditPolicies(EditPart editPart) {
+        if (editPart instanceof NoteAttachmentEditPart) {
+            editPart.installEditPolicy(EditPolicy.CONNECTION_ROLE, new AirNoteAttachmentEditPolicy());
+        }
+    }
+
+    public void addProviderChangeListener(IProviderChangeListener listener) {
+        this.listeners.add(listener);
+    }
+
+    public boolean provides(IOperation operation) {
+        if (operation instanceof CreateEditPoliciesOperation) {
+            CreateEditPoliciesOperation castedOperation = (CreateEditPoliciesOperation) operation;
+            EditPart editPart = castedOperation.getEditPart();
+            Object model = editPart.getModel();
+            if (model instanceof View) {
+                View view = (View) model;
+                if (view.getDiagram() != null &amp;&amp; view.getDiagram().getElement() != null
+                        &amp;&amp; view.getDiagram().getElement().eClass().getEPackage().getNsURI().equals(ViewpointPackage.eINSTANCE.getNsURI())) {
+                    if ("NoteAttachment".equals(view.getType())) {
+                        return true;
+                    }
+                }
+            }
+        }
+        return false;
+    }
+
+    public void removeProviderChangeListener(IProviderChangeListener listener) {
+        this.listeners.remove(listener);
+    }
+
+    /**
+     * Fire a {@link ProviderChangeEvent}.
+     */
+    protected void fireProviderChanged() {
+        ProviderChangeEvent event = new ProviderChangeEvent(this);
+        Iterator iterListener = this.listeners.iterator();
+        while (iterListener.hasNext()) {
+            IProviderChangeListener listener = (IProviderChangeListener) iterListener.next();
+            listener.providerChanged(event);
+        }
+    }
+
+}
+
+</code></pre>
+		<p>More flexibility can be achieved by writing an abstract provider:</p>
+		<pre><code>public abstract class AbstractEditPolicyProvider implements IEditPolicyProvider {
+
+    /** All listeners. */
+    private List listeners = new ArrayList(1);
+
+    public void addProviderChangeListener(IProviderChangeListener listener) {
+        this.listeners.add(listener);
+    }
+
+    public void removeProviderChangeListener(IProviderChangeListener listener) {
+        this.listeners.remove(listener);
+    }
+
+    protected void fireProviderChanged() {
+        ProviderChangeEvent event = new ProviderChangeEvent(this);
+        Iterator iterListener = this.listeners.iterator();
+        while (iterListener.hasNext()) {
+            IProviderChangeListener listener = (IProviderChangeListener) iterListener.next();
+            listener.providerChanged(event);
+        }
+    }
+}
+
+</code></pre>
+		<p>There only remains to override the methods 
+			<code>provides()</code> and 
+			<code>createEditPolicies()</code> in this provider&#8217;s implementations.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_migrate_contribution.html b/doc/5.1.x/developer/extensions-provide_migrate_contribution.html
new file mode 100644
index 0000000..2b8fe6f
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_migrate_contribution.html
@@ -0,0 +1,69 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_migrate_contribution</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvideCustomMigrationParticipants">Sirius &#8211; Provide Custom Migration Participants</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>In some cases, a migration of representation files or VSMs between two versions of meta-model is required. The migration process has been rewritten to be performed automatically at resource loading time. This migration is transparent for the end-user.
+			<br/>If you have extended Sirius meta-models, you may need to implement your own migration rules.
+		</p>
+		<p>To contribute to the Sirius migration process, you need to implement an 
+			<code>org.eclipse.sirius.business.api.migration.IMigrationParticipant</code> and provide it through the 
+			<code>org.eclipse.sirius.migrationParticipant</code> extension point.
+		</p>
+		<h2 id="Extensionpoint">Extension point</h2>
+		<p>The 
+			<code>org.eclipse.sirius.migrationParticipant</code> extension point allows to contribute migration participants. Each contribution must provide an implementation of 
+			<code>IMigrationParticipant</code> and a &#8220;kind&#8221; attribute which gives informations about what kind of file is concerned (
+			<code>REPRESENTATIONSFILE_KIND</code> for Representation files and 
+			<code>VSM_KIND</code> for VSMs).
+		</p>
+		<h2 id="MigrationParticipantsimplementation">MigrationParticipants implementation</h2>
+		<p>Each methods of an 
+			<code>IMigrationParticipant</code> receives the current version of the model to migrate, corresponding to the 
+			<code>org.eclipse.sirius</code> bundle version.
+		</p>
+		<ul>
+			<li>
+				<code>EStructuralFeature getAttribute(EClass eClass, String name, String version)</code> is called during the parsing of XMIResources (at loading time). It allows to retrieve a renamed 
+				<code>EAttribute</code> from its old name. For example, if an attribute 
+				<em>foo</em> has been renamed to 
+				<em>bar</em>, then your MigrationParticipant should return the 
+				<em>bar</em> attribute when given the 
+				<em>'foo'</em> name.
+			</li>
+			<li>
+				<code>EStructuralFeature getLocalElement(EClass eClass, String name, String version)</code> is called during the parsing of XMIResources (at loading time). If the feature name has changed, you should return the correct one.
+			</li>
+			<li>
+				<code>EClassifier getType(EPackage ePackage, String name, String version)</code> is called during the parsing of XMIResources (at loading time). If an 
+				<code>EClassifier</code> name has changed, then you should return the correct one.
+			</li>
+			<li>
+				<code>Object getValue(EObject object, EStructuralFeature feature, Object value, String version)</code> is called during the parsing of XMIResources (at loading time). If a feature value has changed since a previous version, use this method to return the correct expected value. 
+			</li>
+			<li>
+				<code>void postLoad(XMLResource resource, String version)</code> is called after the resource loading. All other structural changes in meta-models should be migrated here.
+			</li>
+			<li>
+				<code>Version getMigrationVersion()</code> is used by the migration framework to determine if at least one migration is needed. This method has to provide the Sirius version for which your migration is written. The framework doesn&#8217;t decide whether your participant need to be launched or not, you have to make sure that the Sirius version number of the loaded resource (available via the version parameter) requires a migration.
+			</li>
+		</ul>
+		<h2 id="Managetheversionnumber">Manage the version number</h2>
+		<p>Your migration participant has to return the Sirius version number where your migration is introduced. For example, you have to write a new migration for viewpoint 6.7.0, your migration participant 
+			<code>getMigrationVersion()</code> has to return 6.7.0.qualifier, where the qualifier may be the current date.
+		</p>
+		<p>
+			<code>getMigrationVersion()</code> is used by the migration framework to determine if at least one participant has to be called, in that case the migration mechanism is launched.
+		</p>
+		<p>
+			<strong>Your migration participant is responsible to make sure that it has to perform its migration</strong>. Indeed, 
+			<code>getMigrationVersion()</code> is only used by the migration framework to determine if at least one migration is needed. You have to make sure that the viewpoint version number of the loaded resource requires a migration.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_repair_contribution.html b/doc/5.1.x/developer/extensions-provide_repair_contribution.html
new file mode 100644
index 0000000..d5974f2
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_repair_contribution.html
@@ -0,0 +1,16 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_repair_contribution</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvideCustomRepairParticipants">Sirius &#8211; Provide Custom Repair Participants</h1>
+		<p>In some cases, some repair operations are specific to representation nature (like sequence diagram for example). You need to implement 
+			<code>org.eclipse.sirius.business.api.repair.IRepairParticipant</code> through the 
+			<code>org.eclipse.sirius.viewpoint.repair.repairParticipant</code> extension point to contribute to repair process.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_resource_strategy.html b/doc/5.1.x/developer/extensions-provide_resource_strategy.html
new file mode 100644
index 0000000..3299559
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_resource_strategy.html
@@ -0,0 +1,77 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_resource_strategy</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvidearesourcestrategy">Sirius &#8211; Provide a resource strategy</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>The 
+			<em>resource strategy registry</em>, 
+			<code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategyRegistry</code>, centralizes all behaviors related to resource used in Sirius Session that can be overridden.
+			<br/>The extension point 
+			<code>org.eclipse.sirius.resourceStrategy</code> allows to contribute a new behavior for each 
+			<em>resource strategy type</em>.
+			<br/>When you contribute a new 
+			<code>ResourceStrategy</code>, you need to handle one or more of the 
+			<code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType</code> by using 
+			<code>canHandle</code> methods. For each type, there is one or more methods to override from 
+			<code>org.eclipse.sirius.business.api.resource.strategy.AbstractResourceStrategyImpl</code>. The methods to override are documented in javadoc of each 
+			<code>ResourceStrategyType</code>.
+		</p>
+		<p>To know all behaviors that can be overridden, you must refer to 
+			<code>org.eclipse.sirius.business.api.resource.strategy.ResourceStrategy.ResourceStrategyType</code>.
+		</p>
+		<h2 id="Example">Example</h2>
+		<p>Here is an example that ignore &#8220;*.genmodel&#8221; files as semantic model of Sirius Session.</p>
+		<p>You have to add your resource strategy contribution in the plugin.xml file.</p>
+		<pre>&lt;extension point="org.eclipse.sirius.resourceStrategy"&gt;
+   &lt;resourceStrategy
+     class="org.eclipse.sirius.tests.unit.api.convert.TestResourceStrategyToIgnoreGenModelFile"&gt;
+   &lt;/resourceStrategy&gt;
+&lt;/extension&gt;
+
+</pre>
+		<p>The class references a class extending the 
+			<code>AbstractResourceStrategyImpl</code>. The corresponding code is:
+		</p>
+		<pre>/**
+ * This class overrides AbstractResourceStrategyImpl and also ignores genmodel
+ * files.
+ */
+public class TestResourceStrategyToIgnoreGenModelFile extends AbstractResourceStrategyImpl {
+
+    @Override
+    public boolean isPotentialSemanticResource(URI uri) {
+        boolean result = super.isPotentialSemanticResource(uri);
+        if (result &amp;&amp; uri != null) {
+            result = !"genmodel".equals(uri.fileExtension());
+        }
+        return result;
+    }
+
+    @Override
+    public boolean canHandle(URI resourceURI, ResourceStrategyType resourceStrategyType) {
+        return ResourceStrategyType.SEMANTIC_RESOURCE.equals(resourceStrategyType);
+    }
+}
+
+</pre>
+		<p></p>
+		<ul>
+			<li>
+				<code>canHandle</code> allows to restrict this new resource strategy to only one type (
+				<code>ResourceStrategyType.SEMANTIC_RESOURCE</code>).
+			</li>
+			<li>
+				<code>isPotentialSemanticResource(URI)</code> is overridden to also ignore genmodel.
+			</li>
+			<li>
+				<code>isLoadableModel(URI, Session)</code> is not overridden as we want to keep the default behavior for this method.
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_save_dialog.html b/doc/5.1.x/developer/extensions-provide_save_dialog.html
new file mode 100644
index 0000000..228f51c
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_save_dialog.html
@@ -0,0 +1,100 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_save_dialog</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvidecustomsavedialog">Sirius &#8211; Provide custom save dialog</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>Sirius uses the same 
+			<em>Save Dialog</em> for any operation that implies to the end-user whether changes made on session should be saved or discarded (when closing a session through the 
+			<code>CloseUISessionCommand</code>, when controlling resources...).
+		</p>
+		<p>Developer may need to extend this save dialog to propose other choices to the end-user.</p>
+		<h2 id="CustomizeSiriussavedialogs">Customize Sirius save dialogs</h2>
+		<h3 id="TheISaveDialogExtensioninterface">The 
+			<code>ISaveDialogExtension</code> interface
+		</h3>
+		<p>This interface allows to:</p>
+		<ul>
+			<li>Customize the choices given to the end-user when a save dialog opens (for example default is 
+				<em>Save</em> and 
+				<em>Discard</em>)
+			</li>
+			<li>Add additional behavior according to the choice made by user.</li>
+		</ul>
+		<ul>
+			<li>
+				<code>boolean isSaveDialogFor(Object objectToSave)</code> : allows to indicates whether this extension should be applied (condition on the Session for example)
+			</li>
+			<li>
+				<code>Collection&lt;String&gt; getButtons();</code> : returns a collection of String corresponding to the available choices for a save dialog (do no override CANCEL, this will be added automatically if possible)
+			</li>
+			<li>
+				<code>int reactToValue(Object objectToSave, int userChoice);</code> : defines the behavior to apply when faced to the given user choice.
+			</li>
+		</ul>
+		<h3 id="ProvideyourISaveDialogExtensionusingtheorg.eclipse.sirius.common.ui.savedialogextensionextensionpoint">Provide your 
+			<code>ISaveDialogExtension</code> using the 
+			<code>org.eclipse.sirius.common.ui.savedialogextension</code> extension point
+		</h3>
+		<p>Please refer to this extension point documentation  for more details.</p>
+		<h2 id="Example">Example</h2>
+		<pre><code>package myPackage;
+
+import com.google.common.collect.Lists;
+import java.util.Collection;
+import org.eclipse.sirius.business.api.session.Session;
+import org.eclipse.ui.ISaveablePart2;
+
+public class CustomSaveDialogExtension {
+
+    public boolean isSaveDialogFor(Object objectToSave) {
+        // This save dialog is active if
+        // - the saved element is a session
+        return (objectToSave instanceof Session)
+        // - the session ID is "SaveSession"
+                &amp;&amp; "SaveSession".equals(((Session) objectToSave).getID());
+    }
+
+    public Collection&lt;String&gt; getButtons() {
+        return Lists.newArrayList("Save", "Make something special", "Discard");
+    }
+
+    public int reactToValue(Object objectToSave, int temporaryResult) {
+        Session session = (Session) objectToSave;
+        int returnedValue = ISaveablePart2.YES;
+
+        switch (temporaryResult) {
+        // Case 0 : "Save"
+        case 0:
+            // we will return ISaveablePart2.YES =&gt; the session will be saved
+            // normally
+            break;
+        // Case 1 : "Make something special"
+        case 1:
+            makeSomethingSpecial(session);
+            // we will return CANCEL =&gt; nothing else willl be done
+            returnedValue = ISaveablePart2.CANCEL;
+            break;
+        // Case 2 : "Discard"
+        case 2:
+            // we return NO =&gt; changes will be discarded
+            returnedValue = ISaveablePart2.NO;
+            break;
+        // Default : "CANCEL" or any other
+        default:
+            returnedValue = ISaveablePart2.CANCEL;
+            break;
+
+        }
+        return returnedValue;
+    }
+}
+
+</code></pre>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/extensions-provide_tabbar_extensions.html b/doc/5.1.x/developer/extensions-provide_tabbar_extensions.html
new file mode 100644
index 0000000..617f1e7
--- /dev/null
+++ b/doc/5.1.x/developer/extensions-provide_tabbar_extensions.html
@@ -0,0 +1,296 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>extensions-provide_tabbar_extensions</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusProvidetabbarextensions">Sirius &#8211; Provide tab-bar extensions</h1>
+		<h2 id="Goals">Goals</h2>
+		<p>The top area of all Sirius diagram editors is filled with the 
+			<em>tab-bar</em>, which provides access to many operations on diagrams and their elements. The content of the tab-bar will depends on whether the current selection is the diagram itself (i.e. no element is selected) or one or several diagram elements.
+		</p>
+		<p>When the diagram itself (and not a specific element) is selected, the tab-bar contains the following buttons: 
+			<br/>	
+			<img border="0" src="images/tabbar01.png"/>
+		</p>
+		<p>The tab-bar contains a different set of actions when at least one element is selected:	
+			<br/>	
+			<img border="0" src="images/tabbar02.png"/>
+		</p>
+		<p>Sirius allows to define new operations and to add them at the end of the tab-bar.</p>
+		<h2 id="Addanewtabbaritem">Add a new tab-bar item</h2>
+		<p>Sirius asks the workbench&#8217;s 
+			<code>IMenuService</code> service to populate the tab-bar with provided contributions. This service leans on the 
+			<code>org.eclipse.ui.menus</code> extension point.
+		</p>
+		<p>Sirius defines the tab-bar as a toolbar with the id 
+			<em>org.eclipse.sirius.diagram.ui.tabbar</em>. 
+			<br/>Menu contributions to tab-bar must be declared with the 
+			<em>toolbar</em> scheme and the Sirius tab-bar id.
+		</p>
+		<p>You can use the insertion point part of the 
+			<em>locationUri</em> to organize your contributions. Sirius defines the 
+			<em>additions</em> group, this group and all contribution will be placed at the end of the tab-bar.
+		</p>
+		<p>You can choose when to make your contribution visible (see the example) with the 
+			<em>visibleWhen</em> element and some property testers: show a menu for diagram selection or only on some diagram with a specific description, ... Sirius defines several property testers like 
+			<em>org.eclipse.sirius.diagram.ui.isDDiagram</em> and 
+			<em>org.eclipse.sirius.diagram.ui.isDDiagramElement</em>, but you can define your own domain specific testers.
+		</p>
+		<h3 id="Provideyourtabbaritemsusingtheorg.eclipse.ui.menusextensionpoint">Provide your tab-bar items using the 
+			<code>org.eclipse.ui.menus</code> extension point
+		</h3>
+		<p>Please refer to this extension point documentation for more details.</p>
+		<h3 id="Provideyouroperationusingtheorg.eclipse.ui.commandsextensionpoint">Provide your operation using the 
+			<code>org.eclipse.ui.commands</code> extension point
+		</h3>
+		<p>Please refer to this extension point documentation for more details.</p>
+		<h3 id="Example">Example</h3>
+		<p>The following example defines a new push button for the tab-bar. The contribution will only be visible when an element is selected on diagram which correspond to a specific description.</p>
+		<p>You have to add your menu contribution in the plugin.xml file.</p>
+		<p>	
+			<img border="0" src="images/tabbar_extension_plugin_xml.png"/>
+		</p>
+		<p>The first step is to create the menu contribution to reference an existing command:</p>
+		<pre> &lt;extension point="org.eclipse.ui.menus"&gt;
+    &lt;menuContribution
+          allPopups="false"
+          locationURI="toolbar:org.eclipse.sirius.diagram.ui.tabbar?after=additions"&gt;
+        &lt;command
+              commandId="org.example.myproject.command.id"
+              icon="images/action.gif"
+              id="org.eclipse.sirius.diagram.tabbar.test.action.on.diagramelement"
+              label="Action on DDiagramElement"
+              tooltip="Action on DDiagramElement"&gt;
+   &lt;!-- [...] a visible when element will be added later to control the visibility --&gt;
+        &lt;/command&gt;
+    &lt;/menuContribution&gt;
+ &lt;/extension&gt;
+
+</pre>
+		<p>The 
+			<em>locationURI</em> references the Sirius tabbar with 
+			<code>toolbar:org.eclipse.sirius.diagram.ui.tabbar</code> and and insertion point 
+			<code>?after=additions</code>.
+			<br/> The command element references an existing 
+			<em>commandID</em>, and defines its own menu id (can be used as insertion/organization point in other contributions 
+			<em>locationURI</em>), its label and tooltip. If a key binding exists on the referenced command, the workbench will add it to the tooltip.
+		</p>
+		<p>Then you can control the visibility of your contribution with a visible when element. </p>
+		<pre>   &lt;!-- [...] continued from the example above --&gt;
+   &lt;visibleWhen checkEnabled="false"&gt;
+      &lt;and&gt;
+         &lt;with variable="activeEditorId"&gt;
+            &lt;equals value="org.eclipse.sirius.diagram.ui.part.SiriusDiagramEditorID"/&gt;
+         &lt;/with&gt;
+         &lt;with variable="activeEditor"&gt;
+             &lt;test property="org.eclipse.sirius.sample.tabbar.isConcernedEditor"/&gt;
+         &lt;/with&gt;
+         &lt;with variable="selection"&gt;
+            &lt;iterate ifEmpty="false" operator="or"&gt;
+               &lt;and&gt;
+                  &lt;test property="org.eclipse.sirius.diagram.ui.isDDiagramElement"/&gt;
+                  &lt;test property="org.eclipse.sirius.sample.tabbar.shouldActivateTabbarExtension"/&gt;
+               &lt;/and&gt;
+            &lt;/iterate&gt;
+         &lt;/with&gt;
+      &lt;/and&gt;
+   &lt;/visibleWhen&gt;
+&lt;/command&gt;
+     
+</pre>
+		<p>The sample contribution declares four conditions to enable its visibility:</p>
+		<ul>
+			<li>it checks that the active editor is a Sirius Diagram Editor using the workbench variable 
+				<em>activeEditorId</em> and the Sirius Diagram Editor id.
+			</li>
+			<li>it asks a property tester if the active editor should trigger the contribution visibility (see next section for the sample property tester explanation)</li>
+			<li>it iterates over the selection with a &#8220;OR&#8221; operator between elements and a false result for empty selection:
+				<ul>
+					<li>it uses the Sirius predefined property tester to check that a selected element is a diagram element.</li>
+					<li>it asks a property tester if the current element should trigger the contribution visibility (see next section for the sample property tester explanation)</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Property testers are defined in the plug-in.xml file. They define namespace, some properties and the type of elements they can test.</p>
+		<pre>&lt;extension point="org.eclipse.core.expressions.propertyTesters"&gt;
+   &lt;propertyTester
+         class="org.eclipse.sirius.sample.tabbar.SampleTestTabbarExtensionActivationPropertyTester"
+         id="org.eclipse.sirius.sample.tabbar.ActiveExtensionTester"
+         namespace="org.eclipse.sirius.sample.tabbar"
+         properties="shouldActivateTabbarExtension"
+         type="org.eclipse.gmf.runtime.diagram.ui.editparts.IGraphicalEditPart"&gt;
+   &lt;/propertyTester&gt;
+   &lt;propertyTester
+         class="org.eclipse.sirius.sample.tabbar.SampleTestTabbarExtensionActivationPropertyTester"
+         id="org.eclipse.sirius.sample.tabbar.ConcernEditorTester"
+         namespace="org.eclipse.sirius.sample.tabbar"
+         properties="isConcernedEditor"
+         type="org.eclipse.ui.IEditorPart"&gt;
+   &lt;/propertyTester&gt;
+&lt;/extension&gt;
+
+</pre>
+		<p>Here is the implementation of the corresponding property tester. The 
+			<em>isConcerned</em> property will lead to check the 
+			<code>DiagramDescription</code> id of the current editor. The 
+			<em>shouldActivateTabbarExtension</em> will lead to check a property of the selected domain object.
+		</p>
+		<pre><code>package org.eclipse.sirius.sample.tabbar;
+
+import org.eclipse.core.expressions.PropertyTester;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+
+import org.eclipse.sirius.diagram.DDiagram;
+import org.eclipse.sirius.diagram.DRepresentation;
+import org.eclipse.sirius.diagram.edit.api.part.IDiagramElementEditPart;
+import org.eclipse.sirius.ui.business.api.dialect.DialectEditor;
+
+/**
+ * Sample property tester.
+ * 
+ * @author mporhel
+ */
+public class SampleTestTabbarExtensionActivationPropertyTester extends PropertyTester {
+    public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
+        if ("isConcernedEditor".equals(property)) {
+            // called in a with activeEditor element
+            if (receiver instanceof DialectEditor) {
+                DRepresentation activeRepresentation = ((DialectEditor) receiver).getRepresentation();
+                if (activeRepresentation instanceof DDiagram) {
+                    // the id property in the VSM editor : name in the meta
+                    // model.
+                    return "diagram.description.sample.id".equals(((DDiagram) activeRepresentation).getDescription().getName());
+                }
+            }
+        } else if ("shouldActivateTabbarExtension".equals(property)) {
+            if (receiver instanceof IDiagramElementEditPart) {
+                EObject domainElement = ((IDiagramElementEditPart) receiver).resolveTargetSemanticElement();
+                // sample condition
+                return domainElement instanceof EClass &amp;&amp; ((EClass) domainElement).isAbstract();
+            }
+        }
+        return false;
+    }
+}
+
+
+</code></pre>
+		<p>The a new button is added to the tab-bar only when the selection contains an abstract 
+			<code>EClass</code> is selected and the active editor corresponds to the expected description id: 
+		</p>
+		<p>	
+			<img border="0" src="images/tabbar_extension_result.png"/>
+		</p>
+		<h2 id="contributeFullTabbar">Contribute a full customized tab-bar</h2>
+		<p>Sirius lets the possibility to contribute an entire customized tab-bar. To do so, the developer has to contribute an 
+			<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> to the 
+			<code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. An abstract implementation of 
+			<code>ITabbarContributor</code> exists: 
+			<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>. This implementation contains protected methods that allows creating one or several contributions of the default Sirius tab-bar. See the 
+			<a href="../user/diagrams/Diagrams.html#ref_tabbar">Tab-bar</a> section in user manual for more details about each items.
+		</p>
+		<p>here is an example of 
+			<code>ITabbarContributor</code> implementation. This sample provides two different tab-bar whether the selection is done on a diagram element (a Node or a Container for instance) or on the diagram (no specific selection). If the selection is done on an Edge, the tab-bar will be empty since the sample doesn&#8217;t return any contributionItem.
+		</p>
+		<pre><code>public class TestTabbarExt extends AbstractTabbarContributor {
+
+    private ArrayList&lt;IContributionItem&gt; diagramContributionItems;
+
+    private ArrayList&lt;IContributionItem&gt; diagramElementContributionItems;
+
+    @Override
+    public List&lt;IContributionItem&gt; getContributionItems(ISelection selection, IDiagramWorkbenchPart part, ToolBarManager manager) {
+        List&lt;IContributionItem&gt; contributionItems = new ArrayList&lt;IContributionItem&gt;();
+        if (selection instanceof IStructuredSelection) {
+            Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+            if (firstElement instanceof AbstractDDiagramEditPart) {
+                contributionItems = getDiagramContributionItem(part, manager);
+            } else if (firstElement instanceof IAbstractDiagramNodeEditPart) {
+                contributionItems = getDiagramElementContributionItem(part, manager);
+            }
+        }
+        return contributionItems;
+    }
+
+    @Override
+    public boolean accept(ISelection selection) {
+        boolean accept = false;
+        if (selection == null) {
+            accept = true;
+        } else if (selection instanceof IStructuredSelection) {
+            Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+            if (firstElement instanceof AbstractDDiagramEditPart || firstElement instanceof IAbstractDiagramNodeEditPart) {
+                accept = true;
+            }
+        }
+        return accept;
+    }
+
+    @Override
+    public List&lt;IContributionItem&gt; getContributionItems(IDiagramWorkbenchPart part, ToolBarManager manager) {
+        return getDiagramContributionItem(part, manager);
+    }
+
+    private List&lt;IContributionItem&gt; getDiagramContributionItem(IDiagramWorkbenchPart part, ToolBarManager manager) {
+        if (diagramContributionItems == null) {
+            diagramContributionItems = new ArrayList&lt;IContributionItem&gt;();
+            diagramContributionItems.add(createArrangeMenuManager(part));
+            diagramContributionItems.add(createSelectMenuManager());
+            diagramContributionItems.add(createLayerContribution(part, manager));
+            diagramContributionItems.add(createZoomInContribution(part));
+            diagramContributionItems.add(createZoomOutContribution(part));
+            diagramContributionItems.add(createZoomContribution(part));
+            diagramContributionItems.add(createSelectPinnedElementsContribution(part));
+            diagramContributionItems.add(createSelectHiddenElementsContribution(part));
+            diagramContributionItems.add(createFilterContribution(part, manager));
+            diagramContributionItems.add(createPasteLayoutContribution(part));
+            diagramContributionItems.add(createRefreshContribution());
+            diagramContributionItems.add(createSaveAsImageContributionItem());
+            diagramContributionItems.add(createLayoutingModeContributionItem(part));
+            diagramContributionItems.add(createCopyAppearancePropertiesContribution(part));
+            diagramContributionItems.add(createCopyLayoutContribution(part));
+        }
+        return diagramContributionItems;
+    }
+
+    private List&lt;IContributionItem&gt; getDiagramElementContributionItem(IDiagramWorkbenchPart part, ToolBarManager manager) {
+        if (diagramElementContributionItems == null) {
+            diagramElementContributionItems = new ArrayList&lt;IContributionItem&gt;();
+            diagramElementContributionItems.add(createArrangeMenuManager(part));
+            diagramElementContributionItems.add(createAlignMenuManager());
+            diagramElementContributionItems.add(createHideElementLabelContribution(part));
+            diagramElementContributionItems.add(createHideElementContribution(part));
+            diagramElementContributionItems.add(createDeleteFromDiagramContribution(part));
+            diagramElementContributionItems.add(createDeleteFromModelContribution(part));
+            IContributionItem pinElementContributionItem = createPinElementContribution(part);
+            diagramElementContributionItems.add(pinElementContributionItem);
+            diagramElementContributionItems.add(createUnPinElementContribution(part, pinElementContributionItem));
+            diagramElementContributionItems.add(createFontColorContribution(part));
+            diagramElementContributionItems.add(createPasteLayoutContribution(part));
+            diagramElementContributionItems.add(createBoldFontStyleContribution(part));
+            diagramElementContributionItems.add(createItalicFontStyleContribution(part));
+            diagramElementContributionItems.add(createFontDialogContribution(part));
+            diagramElementContributionItems.add(createFillColorContribution(part));
+            diagramElementContributionItems.add(createLineColorPropertyContribution(part));
+            diagramElementContributionItems.add(createResetStylePropertyContribution(part));
+            diagramElementContributionItems.add(createSetStyleToWorkspaceImageContribution(part));
+            diagramElementContributionItems.add(createSaveAsImageContributionItem());
+            diagramElementContributionItems.add(createDistributeContribution());
+            diagramElementContributionItems.add(createLayoutingModeContributionItem(part));
+            diagramElementContributionItems.add(createRouterContribution());
+            diagramElementContributionItems.add(createCopyAppearancePropertiesContribution(part));
+            diagramElementContributionItems.add(createCopyLayoutContribution(part));
+            diagramElementContributionItems.add(createSizeBothContribution(part));
+            diagramElementContributionItems.add(createAutoSizeContribution(part));
+        }
+        return diagramElementContributionItems;
+    }
+
+</code></pre>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.png b/doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.png
similarity index 100%
rename from doc/developer/images/Sirius - High-Level Architecture Overview.png
rename to doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.png
Binary files differ
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.svg b/doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.svg
similarity index 100%
rename from doc/developer/images/Sirius - High-Level Architecture Overview.svg
rename to doc/5.1.x/developer/images/Sirius - High-Level Architecture Overview.svg
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.png b/doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.png
similarity index 100%
rename from doc/developer/images/Sirius - Representation Refresh-Sync.png
rename to doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.png
Binary files differ
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.svg b/doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.svg
similarity index 100%
rename from doc/developer/images/Sirius - Representation Refresh-Sync.svg
rename to doc/5.1.x/developer/images/Sirius - Representation Refresh-Sync.svg
diff --git a/doc/5.1.x/developer/images/architecture.jpg b/doc/5.1.x/developer/images/architecture.jpg
new file mode 100644
index 0000000..5bc9f4e
--- /dev/null
+++ b/doc/5.1.x/developer/images/architecture.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/airlayoutprovider.jpg b/doc/5.1.x/developer/images/arrange-all/airlayoutprovider.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/airlayoutprovider.jpg
rename to doc/5.1.x/developer/images/arrange-all/airlayoutprovider.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-air.jpg b/doc/5.1.x/developer/images/arrange-all/arrange-all-air.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-air.jpg
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-air.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/arrange-all/arrange-all-layoutprovider-extension.png b/doc/5.1.x/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
new file mode 100644
index 0000000..db453d3
--- /dev/null
+++ b/doc/5.1.x/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-ls.jpg b/doc/5.1.x/developer/images/arrange-all/arrange-all-ls.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-ls.jpg
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-ls.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-provider-extension.png b/doc/5.1.x/developer/images/arrange-all/arrange-all-provider-extension.png
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-provider-extension.png
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-provider-extension.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-tlinterface.jpg b/doc/5.1.x/developer/images/arrange-all/arrange-all-tlinterface.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/arrange-all-tlinterface.jpg
rename to doc/5.1.x/developer/images/arrange-all/arrange-all-tlinterface.jpg
Binary files differ
diff --git a/doc/developer/images/arrange-all/viewordering.jpg b/doc/5.1.x/developer/images/arrange-all/viewordering.jpg
similarity index 100%
rename from doc/developer/images/arrange-all/viewordering.jpg
rename to doc/5.1.x/developer/images/arrange-all/viewordering.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_after.png b/doc/5.1.x/developer/images/customPageApi_debugPage_after.png
new file mode 100644
index 0000000..237a416
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_after.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_before.png b/doc/5.1.x/developer/images/customPageApi_debugPage_before.png
new file mode 100644
index 0000000..fc2049f
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_before.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_example.png b/doc/5.1.x/developer/images/customPageApi_debugPage_example.png
new file mode 100644
index 0000000..0686080
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_example.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_extensionPoint.png b/doc/5.1.x/developer/images/customPageApi_debugPage_extensionPoint.png
new file mode 100644
index 0000000..0fbff20
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_extensionPoint.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/customPageApi_debugPage_replace.png b/doc/5.1.x/developer/images/customPageApi_debugPage_replace.png
new file mode 100644
index 0000000..cb7f81e
--- /dev/null
+++ b/doc/5.1.x/developer/images/customPageApi_debugPage_replace.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/propertiesView.png b/doc/5.1.x/developer/images/propertiesView.png
new file mode 100644
index 0000000..7a59d51
--- /dev/null
+++ b/doc/5.1.x/developer/images/propertiesView.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/sessionCreation.png b/doc/5.1.x/developer/images/sessionCreation.png
new file mode 100644
index 0000000..f91b638
--- /dev/null
+++ b/doc/5.1.x/developer/images/sessionCreation.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/customStyle.png b/doc/5.1.x/developer/images/style/customStyle.png
new file mode 100644
index 0000000..094eb01
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/customStyle.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/editPartProvider_plugin1.png b/doc/5.1.x/developer/images/style/editPartProvider_plugin1.png
new file mode 100644
index 0000000..269f25c
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/editPartProvider_plugin1.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/editParts.jpg b/doc/5.1.x/developer/images/style/editParts.jpg
new file mode 100644
index 0000000..40dce69
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/editParts.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/instanceRole.png b/doc/5.1.x/developer/images/style/instanceRole.png
new file mode 100644
index 0000000..7b2ba13
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/instanceRole.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/styleConfigurationProviderExt.png b/doc/5.1.x/developer/images/style/styleConfigurationProviderExt.png
new file mode 100644
index 0000000..52740dd
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/styleConfigurationProviderExt.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/style/viewpoint.jpg b/doc/5.1.x/developer/images/style/viewpoint.jpg
new file mode 100644
index 0000000..f146149
--- /dev/null
+++ b/doc/5.1.x/developer/images/style/viewpoint.jpg
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar01.png b/doc/5.1.x/developer/images/tabbar01.png
new file mode 100644
index 0000000..6a71098
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar01.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar02.png b/doc/5.1.x/developer/images/tabbar02.png
new file mode 100644
index 0000000..f4811ac
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar02.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar_extension_plugin_xml.png b/doc/5.1.x/developer/images/tabbar_extension_plugin_xml.png
new file mode 100644
index 0000000..707eb63
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar_extension_plugin_xml.png
Binary files differ
diff --git a/doc/5.1.x/developer/images/tabbar_extension_result.png b/doc/5.1.x/developer/images/tabbar_extension_result.png
new file mode 100644
index 0000000..f3d4fd2
--- /dev/null
+++ b/doc/5.1.x/developer/images/tabbar_extension_result.png
Binary files differ
diff --git a/doc/5.1.x/developer/integration-modeler_description_file_deployment.html b/doc/5.1.x/developer/integration-modeler_description_file_deployment.html
new file mode 100644
index 0000000..73755a0
--- /dev/null
+++ b/doc/5.1.x/developer/integration-modeler_description_file_deployment.html
@@ -0,0 +1,78 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>integration-modeler_description_file_deployment</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusDeployaModelerdescriptionfile">Sirius &#8211; Deploy a Modeler description file</h1>
+		<p>This document describes how to deploy a modeler description file as an Eclipse plug-in through the available APIs.</p>
+		<h2 id="CreateanewEclipseplugin">Create a new Eclipse plug-in</h2>
+		<ul>
+			<li>Select 
+				<strong>File -&gt; New -&gt; Plug-in project</strong>
+			</li>
+			<li>Choose a name; for instance 
+				<code>com.yourcompany.yourproject.mymodeler</code>
+			</li>
+			<li>Select 
+				<em>Generate an activator</em> and uncheck the checkbox labelled 
+				<em>This plug-in will make contributions to the UI</em>
+			</li>
+			<li>Create a new folder named &quot;description&quot; in the created project&#8217;s root</li>
+			<li>Activate to true the option &quot;Activate this plug-in when one of its classes is loaded&quot; of your plugin.xml</li>
+		</ul>
+		<h2 id="Importyourmodeler">Import your modeler</h2>
+		<ul>
+			<li>Select 
+				<strong>File -&gt; Import... -&gt; File System</strong>
+			</li>
+			<li>Select the directory where your modeler description file is located.</li>
+			<li>Check that the modeler description file is checked as file to import.</li>
+			<li>import it in the previously created project</li>
+		</ul>
+		<h2 id="Contributetoorg.eclipse.sirius.componentization">Contribute to 
+			<code>org.eclipse.sirius.componentization</code>
+		</h2>
+		<ul>
+			<li>Open the 
+				<em>META-INF/MANIFEST.MF</em> file.
+			</li>
+			<li>In the 
+				<em>Extensions</em> tab, add a new extensions based on the 
+				<code>org.eclipse.sirius.componentization</code> extension point
+			</li>
+			<li>Fill the properties with the following values :
+				<ul>
+					<li>id: an identifier string</li>
+					<li>name: a name string</li>
+					<li>class: the activator of the previously created plug-in</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Here is an example :</p>
+		<pre> id="com.mycompany.yourproject.mymodeler.modeler"
+ name="com.mycompany.yourproject.mymodeler.modeler"
+ class="com.mycompany.yourproject.mymodeler.modeler.MyActivator"
+</pre>
+		<h2 id="Registeryourviewpointsatthestartofyourplugin">Register your viewpoints at the start of your plug-in</h2>
+		<ul>
+			<li>Add your viewpoints in the function start of the activator of your plug-in:</li>
+		</ul>
+		<pre>viewpoints = new HashSet&amp;lt;Viewpoint&amp;gt;();
+viewpoints.addAll(ViewpointRegistry.getInstance().registerFromPlugin(PLUGIN&amp;#95;ID+&amp;quot;/&amp;lt;path&amp;#95;from&amp;#95;the&amp;#95;plugin&amp;#95;project&amp;gt;/&amp;lt;myModeler&amp;gt;.odesign&amp;quot;));
+</pre>
+		<ul>
+			<li>Suppress your viewpoints in the function stop of the activator of your plug-in</li>
+		</ul>
+		<pre>if (viewpoints != null) {
+  for (Viewpoint viewpoint : viewpoints) {
+    ViewpointRegistry.getInstance().disposeFromPlugin(viewpoint);
+  }
+  viewpoints.clear();
+}
+</pre>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/integration-plm.html b/doc/5.1.x/developer/integration-plm.html
new file mode 100644
index 0000000..b19e35e
--- /dev/null
+++ b/doc/5.1.x/developer/integration-plm.html
@@ -0,0 +1,104 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>integration-plm</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="IntegrationwithProductLifeCycleManagement">Integration with Product Life Cycle Management</h1>
+		<h2 id="API">API</h2>
+		<h3 id="Description">Description</h3>
+		<p>Sirius can be used in a concurrent environment and should therefore provide a mean to lock/unlock elements and adapt its behavior according to this information. The PermissionAuthority is responsible for telling whether an element feature is locked or not.</p>
+		<h3 id="GettingthecurrentPermissionAuthority">Getting the current Permission Authority</h3>
+		<p>The 
+			<code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionProvider</code> service will return an instance of 
+			<code>org.eclipse.sirius.ecore.extender.business.api.permission.IPermissionAuthority</code> given a resource set. Convenience methods have been added in 
+			<code>ModelAccessor</code> to retrieve the current authority.
+		</p>
+		<h3 id="WritingyourownPermissionauthority">Writing your own Permission authority</h3>
+		<p>Custom Permission Authorities can be implemented in order to activate the lock/unlock support for your own concurrent handling
+			<br/>mechanism within Sirius.
+		</p>
+		<p>Providing your own Permission Authority to determine whether an element (either semantic or diagrammatic) is locked or not can
+			<br/>be done through the 
+			<code>org.eclipse.sirius.ecore.extender.PermissionProvider</code> extension point.
+		</p>
+		<p>Permission Authorities must implement the interface 
+			<code>IPermissionAuthority</code> and be described in the plug-in&#8217;s plugin.xml:
+		</p>
+		<pre>&lt;extension point="org.eclipse.sirius.ecore.extender.PermissionProvider"&gt;
+    &lt;permissionprovider priority="high" providerClass="com.example.MyAuthorityProvider" /&gt;
+&lt;/extension&gt;
+</pre>
+		<p>Your provider will the be prompted whether this permission authority should be provided considering a ResourceSet.</p>
+		<h2 id="Implementationnotes">Implementation notes</h2>
+		<p>Dynamic PLM allows for the locking and unlocking of any element as well as determining at any moment if an element has been
+			<br/>modified, created, ...
+		</p>
+		<p>These features require a tight integration of the tooling (Modelers and editors) with the permission manager. </p>
+		<p>We can logically divide these aspects in a number of components of Sirius:</p>
+		<ul>
+			<li>Core components
+				<ul>
+					<li>File Modification Validation</li>
+					<li>Semantic Model Access</li>
+					<li>ViewPoint Model Access</li>
+				</ul>
+			</li>
+			<li>Editor components
+				<ul>
+					<li>GMF model access</li>
+					<li>Graphical Viewer access</li>
+					<li>Tool Access</li>
+					<li>Properties Access (Semantic, Extension, Style and Graphical Properties)</li>
+				</ul>
+			</li>
+		</ul>
+		<h3 id="FileModificationValidation">File Modification Validation</h3>
+		<p>You can provide specific file modification validator to integrate with your legacy SCM System.
+			<br/>A file modification validator should implement  
+			<code>IFileModificationValidator</code> interface and could be contributed through  an extension point :
+		</p>
+		<p>
+			<code>org.elipse.sirius.common.fileModificationValidator</code>
+		</p>
+		<p>An default implementation (which override default eclipse to handle a Clearcase SCM specific issue) is provided in the 
+			<code>org.elipse.sirius.common.ui</code> plug-in, by the class 
+			<code>FileModificationValidator</code>.
+		</p>
+		<h3 id="SemanticAccess">Semantic Access</h3>
+		<p>Every semantic access to model elements is done through the &#8220;ModelAccessor&#8221;. This accessor is the common facade of the Ecore intrinsic data access and of any kind of extended data access. It also handles the inter-weaving of the elements provided by both the Ecore semantic model and the annotations.</p>
+		<p>Having the permission to set/unset a value or to create an instance of the semantic model are therefore done through instances of this class and a permission authority coupled with this class may be used to prompt for permission or notify changes and element creations.</p>
+		<h3 id="SiriusModelAccess">Sirius Model Access</h3>
+		<p>Every access made to the viewpoint model checks whether it has the rights to create/delete/update an element, which means every possible creation or setting of a value automatically request the permission beforehand.</p>
+		<h3 id="GMFModelAccess">GMF Model Access</h3>
+		<p>GMF models should be understood as the Annotation model used by GMF to keep track of the diagram data. It is composed of 
+			<code>Node</code>\ s, 
+			<code>Edge</code>\ s and positions for instance. The GMF model is automatically updated trough the 
+			<code>CannonicalEditPolicy</code> of every edit part in the diagram editor. We have virtually no control on that though we can tell if an edit part&#8217;s &#8220;edit mode&#8221; is enabled or not. If the edit mode is disabled then nothing 
+			<strong>should</strong> lead to a change in the GMF model.
+		</p>
+		<p>We ensure that when a 
+			<code>DDiagram</code> cannot be edited, GMF won&#8217;t bypass any EditPart to refresh the annotation model at the diagram opening.
+		</p>
+		<h3 id="GraphicalVieweraccess">Graphical Viewer access</h3>
+		<p>Mouse or keyboard editing will be prevented thanks to the disable/enable edit mode in the GMF edit parts and specific code in the properties view.</p>
+		<h3 id="ToolAccess">Tool Access</h3>
+		<p>Every tool in the modeler&#8217;s palette can cause changes in the model. As every command launched re-uses the 
+			<code>ModelAccessor</code>, it wouldn&#8217;t really change anything in a locked model. Yet since we don&#8217;t want the tool to be enabled on a locked element either, the EMFCommandFactory asks for permission before allowing the usage of a tool. When no permission is given, it will return an UnexecutableCommand.
+		</p>
+		<h3 id="PropertiesAccess">Properties Access</h3>
+		<p>Properties will ask for permission on a &#8220;per instance&#8221; basis right now, when not given, no CellEditor will be returned which means the feature won&#8217;t be editable.</p>
+		<h3 id="Notifyingthechanges">Notifying the changes</h3>
+		<p>The Permission authority should be notified on instances creation and modification. To this end the PermissionAuthority initialization will install a listener on the ResourceSet and will automatically be notified when a change occurs. This will also help in checking for unauthorized changes. In 
+			<strong>strict</strong> mode the permission authority will throw Exceptions when a change is made to a locked element. If the process was in a transactional environment, a rollback will then happen.
+		</p>
+		<h3 id="Accesserrors">Access errors</h3>
+		<p>The current implementation provides 2 modes for the ModelAccessor. The &#8220;silent&#8221; mode won&#8217;t complain about an invalid access on a locked element, it will simply ignore it. When not in &#8220;silent&#8221; mode, an Exception will be thrown in these cases. </p>
+		<h3 id="Status">Status</h3>
+		<p>Semantic Model accesses are handled through the command or properties. Extended information too. Notification are handled through the usual EMF notifiers + the notification of instance creation in the Model Accessor.</p>
+		<p>EditParts are disabled when the corresponding semantic element is locked. Permission listeners are set up to handle dynamic locking/unlocking.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_extender.txt b/doc/5.1.x/developer/later/extensions-provide_custom_extender.txt
new file mode 100644
index 0000000..bc48cfa
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_extender.txt
@@ -0,0 +1,76 @@
+===================================================
+Sirius - Model Extension
+===================================================
+
+Writing your own Extender
+-------------------------
+You may want to write your own Extender if you want to define a new Metamodel extension mechanism or if you want to change the way 
+the model accesses are done on EMF objects.
+ 
+To provide your own Extender you should use the ::
+ 
+  org.eclipse.sirius.ecore.extender.ExtenderProvider 
+
+extension point and provides your own::
+
+  org.eclipse.sirius.ecore.extender.business.api.accessor.IExtenderProvider
+
+implementation.
+ 
+And then describe it through plugin.xml::
+
+  <extension
+         point="org.eclipse.sirius.ecore.extender.ExtenderProvider">
+      <extenderprovider
+            priority="highest"
+            providerClass="com.example.MyExtenderProvider">
+      </extenderprovider>
+   </extension>
+   
+And your provider will be asked to tell if yes or no the extender should be provided considering the resourceset.
+
+The priority field will be used to organize the order of the extender calls. 
+If you set the priority to highest, then you are sure every model access request will first go through
+your extender. If it set to lowest, then you know your extender will only be called if no other extenders 
+fullfilled the request.
+
+Dynamic update of the Extender
+------------------------------
+
+Your extender might need to update it's state depending on the selected viewpoints. A new API is available for that need. You can provide a MetamodelDescriptorProviders (org.eclipse.sirius.api.extender.MetamodelDescriptorProvider)  which will be asked
+for each change in the viewpoint selection, whether it provides MetamodelDescriptors or not. Then these descriptors will be passed by the ModelAccessor API to every instance of IMetamodelExtender so 
+that it can change it's internal state. For instance the EcoreIntrinsicExtender provides MetamodelDescriptors ::
+
+    DiagramDescription diag = (DiagramDescription) desc;
+                for (EPackage pak : diag.getMetamodel()) {
+                    String nsURI = pak.getNsURI();
+                    EPackage registeredPackage = EPackage.Registry.INSTANCE.getEPackage(nsURI);
+                    if (registeredPackage != null) {
+                        result.add(new EcoreMetamodelDescriptor(registeredPackage));
+                    } else {
+
+                        result.add(new EcoreMetamodelDescriptor(pak));
+                    }
+                }
+
+And then the extender reuse them in the updateMetamodels(..) Method ::
+
+	public void updateMetamodels(final Collection metamodelDescriptors) {
+	        final Iterator it = metamodelDescriptors.iterator();
+	        while (it.hasNext()) {
+	            final Object obj = it.next();
+	            if (obj instanceof EcoreMetamodelDescriptor) {
+	                final EPackage pak = ((EcoreMetamodelDescriptor) obj).resolve();
+	                if (pak != null)
+	                    addEClassFromEPackage(pak);
+	            }
+	
+	        }
+	
+	    }                
+
+
+
+
+
+
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_representation.txt b/doc/5.1.x/developer/later/extensions-provide_custom_representation.txt
new file mode 100644
index 0000000..8fa540e
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_representation.txt
@@ -0,0 +1,85 @@
+============================================
+ Sirius - Provide custom representation
+============================================
+
+Description
+============
+
+Overview
+---------------------
+
+Sirius allows one to define new kind of representations.
+A representation kind is called "dialect".
+
+API
+=======
+
+Interface
+-------------------------------
+
+To provide a new dialect you must implement four interfaces.
+
+First step is to implement`org.eclipse.sirius.business.api.dialect.Dialect``. Your implementation should like this ::
+
+   public class ExampleDialect implements Dialect {
+
+     private DialectServices services;
+
+      public String getName() {
+          return "example";
+      }
+
+      public DialectServices getServices() {
+        if (services == null) {
+          services = new ExampleDialectServices();
+        }
+        return services;
+      }
+  }
+
+Second step is to implement ``org.eclipse.sirius.business.api.dialect.DialectServices``.
+
+Third step is to implement ``org.eclipse.sirius.ui.business.api.dialect.DialectUI``. Your implementation should look like this ::
+
+  public class ExampleDialectUI implements DialectUI {
+
+      private DialectUIServices services;
+
+      public String getName() {
+          return "example";
+      }
+
+      public DialectUIServices getServices() {
+          if (services == null) {
+              services = new ExampleDialectUIServices();
+          }
+          return services;
+      }
+  }
+
+Last step is to implement ``org.eclipse.sirius.ui.business.api.dialect.DialectUIServices``.
+When you have finished, you can contribute to dialect extension points.
+
+Extension points
+-------------------------------
+
+To contribute our dialect implementation, we have to provide two extensions.
+First to contribute to ``org.eclipse.sirius.dialect`` extension point.
+Here is a example ::
+
+	<extension point="org.eclipse.sirius.dialect">
+	    <dialect
+	    class="com.example.project.extension.dialect.ExampleDialect">
+	    </dialect>
+	</extension>
+
+Then we need to contribute to ``org.eclipse.sirius.ui.dialectui``
+Here is a example ::
+
+   <extension
+         point="org.eclipse.sirius.ui.dialectui">
+      <dialectUI
+            class="com.example.project.ui.extension.dialect.ExampleDialectUI">
+      </dialectUI>
+   </extension>
+	
\ No newline at end of file
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_representations_export.txt b/doc/5.1.x/developer/later/extensions-provide_custom_representations_export.txt
new file mode 100644
index 0000000..ae94baf
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_representations_export.txt
@@ -0,0 +1,39 @@
+=================================================
+Sirius - Provide custom representation export
+=================================================
+
+Description
+============
+
+Overview
+---------------------
+
+Viewpoint has the functionality to export representations as images. Currently it works only with diagrams.
+
+The default export behavior is customizable in an aspect like way.
+
+API
+=======
+
+Interfaces to extends export
+------------------------------------------------
+``org.eclipse.sirius.ui.tools.api.actions.export.IBeforeExport``
+
+It contains methods that will be executed *before* representation export operations.
+
+``org.eclipse.sirius.ui.tools.api.actions.export.IAfterExport``
+
+It contains methods that will be executed *after* representation export operations.
+
+Interface to override export
+------------------------------------------------
+
+``org.eclipse.sirius.ui.tools.api.actions.export.IAroundExport``
+
+It contains one method that will be executed *instead* of the standard export
+
+Extension point
+----------------------------
+
+``org.eclipse.sirius.ui.exportRepresentationsAsImagesExtension``.
+
diff --git a/doc/5.1.x/developer/later/extensions-provide_custom_specific_editor.txt b/doc/5.1.x/developer/later/extensions-provide_custom_specific_editor.txt
new file mode 100644
index 0000000..8944e6a
--- /dev/null
+++ b/doc/5.1.x/developer/later/extensions-provide_custom_specific_editor.txt
@@ -0,0 +1,60 @@
+=================================
+Sirius - Provide specific editor
+=================================
+
+Description
+============
+
+Overview
+---------------------
+
+Sirius allows one to define eclipse editor dedicated to a viewpoint and a representation description.
+A specific editor hides session creation, opening, viewpoint activation, and session closing to end user.
+
+API
+=======
+
+Interface
+-------------------------------
+
+To provide a new specific editor you simply need to create an editor.
+
+For the first step the easiest is to extend one existing editor for your kind of representation. For instance for diagram you simply need to extend
+`org.eclipse.sirius.diagram.tools.api.editor.AbstractSpecificDDiagramEditor``. Your implementation should like this ::
+
+public class MySpecificEditor extends AbstractSpecificDDiagramEditor {
+
+    public String getDiagramDescriptionName() {
+        return "YourDiagramDescriptionName";
+    }
+
+    public URI getViewpointURI() {
+        return URI.createURI("viewpoint:/com.yourcompany.yourproject.odesign/YourViewpointName");
+    }
+
+    public boolean isSessionStoredInWorkspace() {
+        return false;
+    }
+}
+
+Second and last step is to contribute to eclipse editor extension point.
+
+Extension points
+-------------------------------
+
+To contribute our specific editor, we have to provide one extension to ``org.eclipse.ui.editors`` extension point.
+Here is a example ::
+
+   <extension
+         point="org.eclipse.ui.editors">
+      <editor
+            class="com.yourcompany.yourproject.design.editor.MySpecificEditor"
+            contributorClass="org.eclipse.sirius.diagram.part.ViewpointDiagramActionBarContributor"
+            default="false"
+            extensions="YourModelFileExtension"
+            icon="icons/full/obj16/YourModelFile.gif"
+            id="com.yourcompany.yourproject.design.editor."
+            name="YourModel Editor">
+      </editor>
+   </extension>
+	
\ No newline at end of file
diff --git a/doc/5.1.x/developer/later/integration-model_access.txt b/doc/5.1.x/developer/later/integration-model_access.txt
new file mode 100644
index 0000000..bbb7e07
--- /dev/null
+++ b/doc/5.1.x/developer/later/integration-model_access.txt
@@ -0,0 +1,91 @@
+===================================================
+Sirius - Model Access
+===================================================
+
+Description
+============
+
+Overview
+-----------
+
+Every access (set or get) to the semantic model is going through a unified layer called the *ModelAccessor*. This model accessor is 
+responsible for setting and getting values in an unified way, not knowing whether we are setting an intrinsic data attribute or an extended one
+from a annotation.   
+
+The ModelAccessor uses a set of Extenders which are responsible for a part of the model data. For instance we have an EcoreIntrinsicExtender which handle
+the classical (defined in the metamodel) attributes accesses. And an AnnotationExtender which use an annotation model to add data to an existing model 
+without changing the metamodel implementation.
+
+All these extenders are working together and provides, through the ModelAccessor instance, an unified model access layer.
+
+
+   Dynamic PLM is about being able to lock/unlock a given element and  being able to tell at any moment if this element has been modified or not, if it's a new element and so on.
+   
+   
+All these features requires a tight integration of the tooling (Modelers and editors) and the permission manager. 
+
+We can logically cut these aspects in a number of components in Viewpoint :
+
+# Core components considering
+  -  Semantic Model Access
+  -  ViewPoint Model Access
+# Editor components
+  -  GMF model access
+  -  Graphical Viewer access
+  -  Tool Access
+  -  Properties Access (Semantic, Extension, Style and Graphical Properties)
+ 
+Semantic Access
+---------------
+ 
+ Every semantic access of model elements is done through the "ModelAccessor". This accessor is the common facade of the Ecore intrinsic data access and 
+ of any kind of extended data access. It also handle the inter-weaving of the elements provided by both the Ecore semantic model and the annotations.
+ 
+ Having the permission to set/unset a value or to create an instance of the semantic model is then done in this class and a permission authority coupled with this class may then be used 
+ to ask for permission or notify a change or instance creation.
+ 
+ 
+ViewPoint Model Access
+----------------------
+ 
+ Every access made to the viewpoint model is manually checking whether it has rights or not to create/delete/update an element. That means every possible creation or setting of a value manually request the permission at first.
+ 
+GMF Model Access
+----------------
+GMF model should be understood as the Annotation model used by GMF to keep track of the diagram data. It is composed of "Node" and "Edge" and positions for instance.
+The GMF model is automatically updated trough the CannonicalEditPolicy of every edit part in the diagram editor. 
+We pretty much have no control on that but we can tell an edit part its "edit mode" is enabled or not. If the edit mode is disabled then nothing *should* lead to a change in the GMF model.    
+
+We make sure that if a "ViewPoint" can't be edited, then at the diagram opening GMF won't bypass any EditPart to refresh the annotation model.
+
+Graphical Viewer access
+-----------------------
+Mouse or keyboard editing is prevented thanks to the disable/enable edit mode in the GMF edit parts and specific code in the properties.
+
+Tool Access
+-----------
+Every tool in the modeler palette is able to cause the a change in the model. As every command launched re-use the ModelAccessor it won't really change something in the model, 
+but as  we don't want the tool to be enabled on a locked element, then the EMFCommandFactory ask for permission too, and if no permission is given, will return an UnexecutableCommand.
+
+Properties Access
+-----------------
+Properties will ask for permission on a "per instance" basis right now, if it is not given, no CellEditor will be returned meaning the feature won't be editable.
+
+Notifying the changes
+----------------------
+The Permission authority should be notified on new instance creation and on changes of the instances. To do so the PermissionAuthority initialization will install a listener on the given ResourceSet and will automatically notify it-self when a change appears.
+This system will also help in checking that some unauthorized changes are not done.   
+In *strict* mode the permission authority will throw Exceptions when a change is made to a locked element. Then if the process was in a transactional environment, then a rollback will happen.
+
+Access errors
+-------------
+Current implementation provides 2 modes of usage of the ModelAccessor. The "silent" mode won't complain about an invalid access on a locked element, it will just ignore it.
+If the current model accessor is not in silent mode then an Exception will be thrown in these cases. 
+
+Status
+------
+
+Semantic Model accesses are handled through the command or properties. Extended information too.
+Notification are handled through the usual EMF notifiers  + the notification of instance creation in the Model Accessor.
+
+EditParts are disabled when the corresponding semantic element is locked. Permission listeners are setup to handle dynamic locking/unlocking.
diff --git a/doc/5.1.x/developer/representations_lazy_loading.html b/doc/5.1.x/developer/representations_lazy_loading.html
new file mode 100644
index 0000000..62d6d6a
--- /dev/null
+++ b/doc/5.1.x/developer/representations_lazy_loading.html
@@ -0,0 +1,62 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>representations_lazy_loading</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusRepresentationslazyloadingexperimental">Sirius &#8211; Representations lazy loading (experimental)</h1>
+		<h2 id="Overview">Overview</h2>
+		<p>An experimental mode allows to have the representation lazy loading. This mode is available with the system property 
+			<code>createLocalRepresentationInSeparateResource=true</code>.
+		</p>
+		<p>There is two main changes to keep in mind with this mode:</p>
+		<ul>
+			<li>The representations are (by default) serialized in separate *.srm files in a .representation folder. This folder is created at the same location than the *.aird file.</li>
+			<li>The representations are loaded on demand. That means the session opening does not load the representations. They will be loaded as soon as Sirius needs it to perform the functionality. For example: open an editor, copy, rename or delete a representation, export a diagram as image etc. From a developer point of view, the representation is loaded when 
+				<code>DRepresentationDescriptor.getRepresentation()</code> is called.
+			</li>
+		</ul>
+		<h2 id="Impacts">Impacts</h2>
+		<p>The Sirius API used to retrieve 
+			<code>DRepresentation</code>, such as the 
+			<code>DialectManager</code>, keep the same behavior: the representation will be loaded where necessary. New API (see the release note for more details) has been added to retrieve only loaded representations.
+		</p>
+		<p>
+			<strong>Warning</strong>, if some of your features depend on the Sirius crossReferencer, it may not return the same result than before. It works on the scope of only what is loaded in the session. Before, all the models was loaded whereas now some representations will not be. 
+			<code>ECrossReferenceAdapter.getInverseReferences(EObject )</code> or 
+			<code>ECrossReferenceAdapter.getInverseReferences(EObject , boolean)</code> will not provide potential inverse references that would be in not loaded representation. The typical case is getting DRepresentationElement referencing a semantic element as DSemanticDecorator.target.
+		</p>
+		<h2 id="Overridetherepresentationlocationrule.">Override the representation location rule.</h2>
+		<p>By default Sirius creates an *.srm file per representation. Developer may need to override this rule by choosing to add one or several representations in a specific resource.</p>
+		<h3 id="TheDRepresentationLocationRuleinterface">The 
+			<code>DRepresentationLocationRule</code> interface
+		</h3>
+		<ul>
+			<li>
+				<code>boolean providesURI(DRepresentation representation, Resource dViewResource)</code>: Indicates if this 
+				<code>DRepresentationLocationRule</code> provides a custom URI for this kind of representation and the resource that holds the 
+				<code>DView</code>. If not and if there is no other 
+				<code>DRepresentationLocationRule</code> that provides, Sirius fall back to the default implementation.
+			</li>
+		</ul>
+		<ul>
+			<li>
+				<code>URI getResourceURI(DRepresentation representation, Resource dViewResource)</code>: Provides the new URI for the given representation.
+			</li>
+		</ul>
+		<ul>
+			<li>
+				<code>Boolean isARepresentationResource(String fileExtension)</code>: Indicates if the given file extension is considered as a representation file. This extension point allows to define its own extension to hold representations. The developer still needs to register the Resource Factory to 
+				<code>org.eclipse.emf.ecore.extension_parser</code> extension point.
+			</li>
+		</ul>
+		<h3 id="ProvideyourDRepresentationLocationRuleusingtheorg.eclipse.sirius.dRepresentationLocationRuleextensionpoint">Provide your 
+			<code>DRepresentationLocationRule</code> using the 
+			<code>org.eclipse.sirius.dRepresentationLocationRule</code> extension point
+		</h3>
+		<p>Please refer to this extension point documentation for more details.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/developer/siriusCrossReferenceAdapter.html b/doc/5.1.x/developer/siriusCrossReferenceAdapter.html
new file mode 100644
index 0000000..2878977
--- /dev/null
+++ b/doc/5.1.x/developer/siriusCrossReferenceAdapter.html
@@ -0,0 +1,25 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>siriusCrossReferenceAdapter</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusCrossReferenceAdapter">SiriusCrossReferenceAdapter</h1>
+		<p>The 
+			<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapter</code> interface is designed to disable the proxy resolution of the InverseCrossReferencer.
+		</p>
+		<p>This capability is typically used to prevent loading a resource during its unloading.</p>
+		<p>Furthermore, it is not recommended to add other ECrossReferenceAdapter additionally to those created by Sirius. Note that you can get the semantic CrossReferencer with 
+			<code>org.eclipse.sirius.business.api.session.Session.getSemanticCrossReferencer()</code>.
+		</p>
+		<p>However, in the case where an additional custom ECrossReferenceAdapter is needed, it should extend 
+			<code>org.eclipse.sirius.common.tools.api.util.SiriusCrossReferenceAdapterImpl</code> or at least implement 
+			<code>SiriusCrossReferenceAdapter</code> with the same implementation as 
+			<code>SiriusCrossReferenceAdapterImpl</code>.
+			<br/>Otherwise, there is no guarantee that load during unload won&#8217;t come up.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/i18n_changes.html b/doc/5.1.x/i18n_changes.html
new file mode 100644
index 0000000..3e9430d
--- /dev/null
+++ b/doc/5.1.x/i18n_changes.html
@@ -0,0 +1,508 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>i18n_changes</title>
+		<link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="TranslationKeysChanges">Translation Keys Changes</h1>
+		<p>This document lists the changes in 
+			<code>TranslatableMessage</code> used for Sirius internationalization in each Sirius version.
+		</p>
+		<h2 id="sirius51">Translation Keys Changes in Sirius 5.1 (from Sirius 5.0)</h2>
+		<h3 id="MessageKeysAdded">Message Keys Added</h3>
+		<ul>
+			<li>`org.eclipse.sirius.diagram.sequence.Messages.Range_wrongArgument`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.BundledImageShape_attributeAbsent`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_showSynchronizeStatusDecoratorLabel`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_edgesModified`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_title`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramSynchronized`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramUnsynchronized`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_nodesMoved`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_oneLabelSnapBacked`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_severalLabelsSnapBacked`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_title`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedLabel`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedTooltip`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedLabel`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedTooltip`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedLabel`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedTooltip`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedLabel`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedTooltip`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagSynchronized`</li>
+			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagUnsynchronized`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_label`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_tooltip`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_addModelButton_tooltip`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_newModelButton_tooltip`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_removeModelButton_tooltip`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_badClassType`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_classInitialization`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageActivation_Failure`</li>
+			<li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageCommand_Integrity_Error`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message_plural`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title_plural`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disableViewpointButton_tooltip`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_enableViewpointButton_tooltip`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_newRepresentationButton_tooltip`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_removeRepresentationButton_tooltip`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Active_Representation_Message`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Controlled_Resources_Message`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Error_Removal_Title`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Not_External_Dependency_Message`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_errorMsg`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_label`</li>
+			<li>`org.eclipse.sirius.viewpoint.Messages.DRepresentationDescriptorToDRepresentationLinkManager_repLoading`</li>
+			<li>`org.eclipse.sirius.viewpoint.Messages.ModelOperationToTask_cannotCreateTaskWarningMsg`</li>
+			<li>`org.eclipse.sirius.viewpoint.Messages.SessionFactoryImpl_ResourceTypeErrorMsg`</li>
+		</ul>
+		<h3 id="MessageKeysRemoved">Message Keys Removed</h3>
+		<ul>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message_plural`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title`</li>
+			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title_plural`</li>
+		</ul>
+		<h2 id="sirius50">Translation Keys Changes in Sirius 5.0 (from Sirius 4.1)</h2>
+		<h3 id="MessageKeysAdded2">Message Keys Added</h3>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.common.acceleo.aql.business.Messages.AQLInterpreter_errorWithExpression</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramAppearancePreferencePage_authorizeOverlapGroupText</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramAppearancePreferencePage_decorationGroupText</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramPrintingPreferencePage_optionsGroupText</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramPrintingPreferencePage_printDecorations</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SiriusDiagramGraphicalViewer_tooltipDisplayDelay</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ecore.extender.business.internal.Messages.PermissionService_permissionProviderInstantiationError</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.ext.widgets.reference.internal.Messages.DefaultReferenceDescriptionFactory_name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.ext.widgets.reference.internal.Messages.DefaultReferenceDescriptionFactory_widgetLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.CategoryMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.ConditionalStyleMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.ContainerMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.CreateWidgetForAllFeaturesCommand_text</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.CreateWidgetFromDomainClassMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.CustomExpressionMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.CustomOperationMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultBooleanDescriptionFactory_name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultBooleanDescriptionFactory_widgetLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultEnumerationDescriptionFactory_name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultEnumerationDescriptionFactory_widgetLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMonolineTextDescriptionFactory_name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMonolineTextDescriptionFactory_widgetLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultilineTextDescriptionFactory_name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultilineTextDescriptionFactory_widgetLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultivaluedEAttributeDescriptionFactory_name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DefaultMultivaluedEAttributeDescriptionFactory_widgetLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DialogButtonMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.DynamicMappingMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.GroupMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.LayoutMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.OverridesMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.PageMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_ExtendPropertiesView_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_ImportPropertiesView_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_NewPropertiesView_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.PropertiesMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.StyleMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.ToolbarActionMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.ValidationMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.WidgetActionMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.internal.Messages.WidgetMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.core.internal.Messages.AbstractDescriptionConverter_noConverterFound</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.core.internal.Messages.IDescriptionConverter_InvalidDescriptionType</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.core.internal.Messages.SiriusToolServices_MainTabLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.defaultrules.internal.Messages.DefaultRulesProvider_DefaultPropertiesNotFound</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.provider.Messages.Category__name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.provider.Messages.GridLayoutDescription__label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.provider.Messages.GroupDescription__name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.provider.Messages.PageDescription__name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.properties.provider.Messages.ViewExtensionDescription__name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Refresh_cancelled</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Refresh_error</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Refresh_errorDuringRefresh</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Table_LineElement</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Table_TableElement</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.tools.internal.Messages.TableToolVariables_LineElement</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.tools.internal.Messages.TableToolVariables_TableElement</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefresh_error</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefresh_refreshCancelled</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefresh_treeRefreshError</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.SiriusTreePreferencePage_alwaysUseStandardFont</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.SiriusTreePreferencePage_alwaysUseStandardFont_help</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.SiriusTreePreferencePage_globalGroupName</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_collapseAllAction_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_selectFilterAction_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.GraphicalRepresentationHandler_disabledViewpoint_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.GraphicalRepresentationHandler_missingDependencies_requirements</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.GraphicalRepresentationHandler_representationNumber_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_default_page_tab_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_header_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_inputNotHandled_error_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_models_button_newSemanticModel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_models_button_removeSemanticModel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_models_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_new_semantic_model_action_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_page_loading_error_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_representation_button_newRepresentation</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_representation_button_removeRepresentation</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_representation_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_session_loading_error_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_session_loading_task_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.UI_SessionEditor_viewpoints_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.Messages.DialogTask_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.Messages.WizardTask_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.preferences.Messages.SiriusPropertiesPreferencePage_maxLengthTabName_invalidInteger</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.preferences.Messages.SiriusPropertiesPreferencePage_maxLengthTabName_invalidValue</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_decorationExport</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.CreateEMFModelWizard_errorInstantiateRootElement</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.CreateEMFModelWizard_modelNamePrefix</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.CreateEMFModelWizard_windowTitle</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.DynamicViewpointsSelectionComponent_missingDependencies_requirements</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_CreateRepresentationWizard_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_activateDeactivateViewpoint_incorrectSelection_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_activateDeactivateViewpoint_incorrectSelection_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_activateViewpoint</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_deactivateViewpoint</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_newRepresentation</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_button_removeRepresentation</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_checkBoxGroupByRepresentationDescription_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_checkBoxGroupByViewpoint_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disabledViewpoint_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_missingDependencies_requirements</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_representationNumber_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.NameAndLocationWizardPage_description</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.NameAndLocationWizardPage_errorMessage</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.NameAndLocationWizardPage_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.OtherRepresentationAction_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.OtherRepresentationAction_noRepresentation_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.OtherRepresentationAction_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_description</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_documentationLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_metamodelLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectEMFMetamodelWizardPage_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_checkboxLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_description</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SelectRootElementWizardPage_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusPreferencePage_autoSessionEditorOpening</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusPreferencePage_sessionEditorGroup</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusRepresentationWithInactiveStatusLabelProvider_representationDescriptionItem_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusRepresentationWithInactiveStatusLabelProvider_viewpointItem_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_activateLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_deactivateLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_confirmDependencyActivation_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_missingDependency_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ViewpointSelectionCallbackWithConfimationAndDependenciesHandling_missingDependency_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.AbstractResourceStrategyImpl_methodReleaseNotHandleMsg</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.LetTask_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.SessionInterpreter_evaluationError</code>
+			</li>
+		</ul>
+		<h3 id="MessageKeysRemoved2">Message Keys Removed</h3>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.editor.properties.Messages.ImportingDefaultPropertiesViewDescriptionCommand_text</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Action_cancelled</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.Action_error</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.table.metamodel.table.provider.Messages.RefreshAction_errorDuringRefresh</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefreshAction_error</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefreshAction_refreshCancelled</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.tree.ui.provider.Messages.EditorRefreshAction_treeRefreshError</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.Messages.AbstractDescriptionConverter_noConverterFound</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.Messages.IDescriptionConverter_InvalidDescriptionType</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.Messages.SiriusTabDescriptorProvider_DefaultPropertiesNotFound</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.internal.Messages.SiriusToolServices_MainTabLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SiriusCommonLabelProvider_eClassDisabled</code>
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/images/1 - Initializing EEF models.png b/doc/5.1.x/images/1 - Initializing EEF models.png
similarity index 100%
rename from doc/images/1 - Initializing EEF models.png
rename to doc/5.1.x/images/1 - Initializing EEF models.png
Binary files differ
diff --git a/doc/images/2 - VP Contributor ID.png b/doc/5.1.x/images/2 - VP Contributor ID.png
similarity index 100%
rename from doc/images/2 - VP Contributor ID.png
rename to doc/5.1.x/images/2 - VP Contributor ID.png
Binary files differ
diff --git a/doc/images/2-1 - Leaf Components.png b/doc/5.1.x/images/2-1 - Leaf Components.png
similarity index 100%
rename from doc/images/2-1 - Leaf Components.png
rename to doc/5.1.x/images/2-1 - Leaf Components.png
Binary files differ
diff --git a/doc/images/3 - EEF runtime dependency.png b/doc/5.1.x/images/3 - EEF runtime dependency.png
similarity index 100%
rename from doc/images/3 - EEF runtime dependency.png
rename to doc/5.1.x/images/3 - EEF runtime dependency.png
Binary files differ
diff --git a/doc/images/4 - Copying EEF extensions.png b/doc/5.1.x/images/4 - Copying EEF extensions.png
similarity index 100%
rename from doc/images/4 - Copying EEF extensions.png
rename to doc/5.1.x/images/4 - Copying EEF extensions.png
Binary files differ
diff --git a/doc/images/5 - Properties view testing.png b/doc/5.1.x/images/5 - Properties view testing.png
similarity index 100%
rename from doc/images/5 - Properties view testing.png
rename to doc/5.1.x/images/5 - Properties view testing.png
Binary files differ
diff --git a/doc/images/6 - Property sheet on top.png b/doc/5.1.x/images/6 - Property sheet on top.png
similarity index 100%
rename from doc/images/6 - Property sheet on top.png
rename to doc/5.1.x/images/6 - Property sheet on top.png
Binary files differ
diff --git a/doc/images/7 - Multiple tabs.png b/doc/5.1.x/images/7 - Multiple tabs.png
similarity index 100%
rename from doc/images/7 - Multiple tabs.png
rename to doc/5.1.x/images/7 - Multiple tabs.png
Binary files differ
diff --git a/doc/images/8 - Double click descriptor.png b/doc/5.1.x/images/8 - Double click descriptor.png
similarity index 100%
rename from doc/images/8 - Double click descriptor.png
rename to doc/5.1.x/images/8 - Double click descriptor.png
Binary files differ
diff --git a/doc/images/9 - EEF Wizard on VP.png b/doc/5.1.x/images/9 - EEF Wizard on VP.png
similarity index 100%
rename from doc/images/9 - EEF Wizard on VP.png
rename to doc/5.1.x/images/9 - EEF Wizard on VP.png
Binary files differ
diff --git a/doc/5.1.x/images/ApplyAppearanceProperties.png b/doc/5.1.x/images/ApplyAppearanceProperties.png
new file mode 100644
index 0000000..5f935dd
--- /dev/null
+++ b/doc/5.1.x/images/ApplyAppearanceProperties.png
Binary files differ
diff --git a/doc/5.1.x/images/PreferencePageMaxTabName.png b/doc/5.1.x/images/PreferencePageMaxTabName.png
new file mode 100644
index 0000000..c7efb06
--- /dev/null
+++ b/doc/5.1.x/images/PreferencePageMaxTabName.png
Binary files differ
diff --git a/doc/5.1.x/images/borderNodesWithSnapToGrid.png b/doc/5.1.x/images/borderNodesWithSnapToGrid.png
new file mode 100644
index 0000000..b7a82f2
--- /dev/null
+++ b/doc/5.1.x/images/borderNodesWithSnapToGrid.png
Binary files differ
diff --git a/doc/5.1.x/images/compartments_collapse.png b/doc/5.1.x/images/compartments_collapse.png
new file mode 100644
index 0000000..9422f0a
--- /dev/null
+++ b/doc/5.1.x/images/compartments_collapse.png
Binary files differ
diff --git a/doc/5.1.x/images/compartments_collapse2.png b/doc/5.1.x/images/compartments_collapse2.png
new file mode 100644
index 0000000..e3dce1b
--- /dev/null
+++ b/doc/5.1.x/images/compartments_collapse2.png
Binary files differ
diff --git a/doc/5.1.x/images/containerResize-changedBehavior.gif b/doc/5.1.x/images/containerResize-changedBehavior.gif
new file mode 100644
index 0000000..c422d9f
--- /dev/null
+++ b/doc/5.1.x/images/containerResize-changedBehavior.gif
Binary files differ
diff --git a/doc/5.1.x/images/edgeLabelMoveAfterSirius3.1.gif b/doc/5.1.x/images/edgeLabelMoveAfterSirius3.1.gif
new file mode 100644
index 0000000..cf14fa7
--- /dev/null
+++ b/doc/5.1.x/images/edgeLabelMoveAfterSirius3.1.gif
Binary files differ
diff --git a/doc/5.1.x/images/edgeLabelMoveBeforeSirius3.1.gif b/doc/5.1.x/images/edgeLabelMoveBeforeSirius3.1.gif
new file mode 100644
index 0000000..1484a84
--- /dev/null
+++ b/doc/5.1.x/images/edgeLabelMoveBeforeSirius3.1.gif
Binary files differ
diff --git a/doc/5.1.x/images/improvedsiriusinterpreter.png b/doc/5.1.x/images/improvedsiriusinterpreter.png
new file mode 100644
index 0000000..601e629
--- /dev/null
+++ b/doc/5.1.x/images/improvedsiriusinterpreter.png
Binary files differ
diff --git a/doc/5.1.x/images/improvedsiriusinterpreter_thumbnail.png b/doc/5.1.x/images/improvedsiriusinterpreter_thumbnail.png
new file mode 100644
index 0000000..fc844ad
--- /dev/null
+++ b/doc/5.1.x/images/improvedsiriusinterpreter_thumbnail.png
Binary files differ
diff --git a/doc/5.1.x/images/moveNode-edgeImpact-changedBehavior.gif b/doc/5.1.x/images/moveNode-edgeImpact-changedBehavior.gif
new file mode 100644
index 0000000..9b7892e
--- /dev/null
+++ b/doc/5.1.x/images/moveNode-edgeImpact-changedBehavior.gif
Binary files differ
diff --git a/doc/5.1.x/images/representationNameWizardChange.png b/doc/5.1.x/images/representationNameWizardChange.png
new file mode 100644
index 0000000..41e85f6
--- /dev/null
+++ b/doc/5.1.x/images/representationNameWizardChange.png
Binary files differ
diff --git a/doc/5.1.x/images/shapeResize1.png b/doc/5.1.x/images/shapeResize1.png
new file mode 100644
index 0000000..e5e6481
--- /dev/null
+++ b/doc/5.1.x/images/shapeResize1.png
Binary files differ
diff --git a/doc/5.1.x/images/shapeResize2.png b/doc/5.1.x/images/shapeResize2.png
new file mode 100644
index 0000000..4368dd4
--- /dev/null
+++ b/doc/5.1.x/images/shapeResize2.png
Binary files differ
diff --git a/doc/5.1.x/images/shapeResize3.png b/doc/5.1.x/images/shapeResize3.png
new file mode 100644
index 0000000..3e3c0bc
--- /dev/null
+++ b/doc/5.1.x/images/shapeResize3.png
Binary files differ
diff --git a/doc/5.1.x/index.html b/doc/5.1.x/index.html
new file mode 100644
index 0000000..22beac0
--- /dev/null
+++ b/doc/5.1.x/index.html
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+    <title>Eclipse Sirius Documentation</title>
+    <link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+    <link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+  </head>
+  <body>
+
+    <div id="header">
+      <a href="http://www.eclipse.org/sirius/" target="_blank"><div id="logo" class="left"></div></a>
+
+      <div class="visit right">
+	<a class="right" href="http://www.eclipse.org/sirius/" target="_blank">eclipse.org/sirius</a>
+      </div>
+    </div>
+
+    <div class="clear"></div>
+
+    <div class="description">
+      <p>Sirius is an Eclipse project which allows you to easily create your own graphical modeling workbench by leveraging the Eclipse Modeling technologies, including EMF and GMF.</p>
+      <p>It provides a generic workbench for model-based architecture engineering that could be easily tailored to fit specific needs.</p>
+      <p>Based on a viewpoint approach, Sirius makes it possible to equip teams who have to deal with complex architectures on specific domains.</p>
+    </div>
+
+    <div class="col1 left">
+      <h3 id="SiriusDocumentation">Contents</h3>
+      <ul>
+	<li class="borderlist">
+	  <a href="Release_Notes.html">Release Notes</a>: see what's new in each release of Sirius.
+	</li>
+	<li>
+	  <a href="user/Sirius%20User%20Manual.html">Sirius User Manual</a>: learn how to use Sirius-based modelers.
+	  <ul>
+	    <li>
+	      <a href="user/general/Modeling%20Project.html">Modeling Project</a>
+	    </li>
+        <li>
+          <a href="user/general/Aird_Editor.html">Aird Editor</a>
+        </li>
+	    <li>
+	      <a href="user/diagrams/Diagrams.html">Diagrams</a>
+	    </li>
+	    <li>
+	      <a href="user/sequences/Sequence%20Diagrams.html">Sequence Diagrams</a>
+	    </li>
+	    <li>
+	      <a href="user/tables/Tables.html">Tables</a>
+	    </li>
+	    <li>
+	      <a href="user/trees/Trees.html">Trees</a>
+	    </li>
+        <li>
+          <a href="user/properties/Properties%20View.html">Properties Views</a>
+        </li>
+	  </ul>
+	</li>
+	<li>
+	  <a href="specifier/Sirius%20Specifier%20Manual.html">Sirius Specifier Manual</a>: learn how to create your own modelers using Sirius. 
+	  <ul>
+	    <li>
+	      <a href="specifier/general/Specifying_Viewpoints.html">Specifying Viewpoints</a>
+	    </li>
+	    <li>
+	      <a href="specifier/diagrams/Diagrams.html">Diagrams</a>
+	    </li>
+	    <li>
+	      <a href="specifier/sequences/Sequence%20Diagrams.html">Sequence Diagrams</a>
+	    </li>
+	    <li>
+	      <a href="specifier/tables/Tables.html">Tables</a>
+	    </li>
+	    <li>
+	      <a href="specifier/trees/Trees.html">Trees</a>
+	    </li>
+        <li>
+          <a href="specifier/properties/Properties_View_Description.html">Properties View</a>
+        </li>
+	    <li>
+	      <a href="specifier/general/Model_Operations.html">Model Operations</a>
+	    </li>
+	    <li>
+	      <a href="specifier/general/ToolsSpecification.html">Tools Specification</a>
+	    </li>
+	    <li>
+	      <a href="specifier/general/Colors.html">Defining Color Palettes</a>
+	    </li>
+	    <li>
+	      <a href="specifier/general/Writing_Queries.html">Writing Queries</a>
+	    </li>
+	  </ul>
+	</li>
+	<li>
+	  <a href="developer/Sirius%20Developer%20Manual.html">Sirius Developer Manual</a>: learn how to extend Sirius and leverage its APIs 
+	</li>
+	<li>
+	  <a href="http://www.obeodesigner.com/best-practices" target="_blank">Best Practices</a>
+	</li>
+	<li>
+	  <a href="Glossary.html">Glossary</a> of terms. 
+	</li>
+      </ul>
+    </div>
+
+    <div class="col2 right">
+      <img src="resources/images/screenshot.png" alt="The easiest way to get your own modeling tool" />  
+    </div>
+
+    <div class="clear"></div>
+    <div class="clear"></div>
+    <p>For further information, please visit our website at <a href="http://www.eclipse.org/sirius/" target="_blank">www.eclipse.org/sirius</a>.</p>
+  </body>
+</html>
diff --git a/doc/5.1.x/release_notes_vp.html b/doc/5.1.x/release_notes_vp.html
new file mode 100644
index 0000000..7938a61
--- /dev/null
+++ b/doc/5.1.x/release_notes_vp.html
@@ -0,0 +1,150 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>release_notes_vp</title>
+		<link type="text/css" rel="stylesheet" href="resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="ReleaseNotesforViewpoint">Release Notes for Viewpoint</h1>
+		<h2 id="vp6.10">Viewpoint 6.10</h2>
+		<p>Viewpoint 6.10 contains no API or feature changes compared to Viewpoint 6.9.</p>
+		<h2 id="vp6.9">Viewpoint 6.9</h2>
+		<h3 id="ChangesVisibletoEndUsers">Changes Visible to End-Users</h3>
+		<ul>
+			<li>New notion for layers: Additional layers (formerly Optional layer) cannot be disabled by end-user if the specifier unchecked the &#8220;optional&#8221; option. In this case, the layers become mandatory. The end-user do not see the mandatory layers in the layer activation menu.</li>
+			<li>A new graphical wrapper have been provided to group huge hierarchy children in tree items. Several preferences allow to customize this feature in the viewpoint preference page.
+				<ul>
+					<li>We find this wrapper on the model explorer tree viewer and on viewpoint selection wizards that use a tree viewer.</li>
+					<li>On viewpoint selection wizards
+						<ul>
+							<li>if the wrapper is disabled, we expand all children like in previous releases of viewpoint.</li>
+							<li>if the wrapper is enabled and root items are not grouping items, we expand only the first level of children.</li>
+							<li>if the wrapper is enabled and root items are grouping items, we not expand children.</li>
+						</ul>
+					</li>
+					<li>For more graphical details about this feature, please refer to the 
+						<a href="user/general/Modeling%20Project.html#ModelExplorer">Modeling Project section</a> in the user documentation.
+					</li>
+				</ul>
+			</li>
+			<li>Until Viewpoint 6.2, the endÂ­-user had access to the Connections preference page (Viewpoint/Viewpoint Diagram/Connections). This page is provided by default by GMF but was unsuitable for Viewpoint use. Indeed, in Viewpoint the default routing style is defined in VSM. This preference page is available again. It has been adapted to Viewpoint (see 
+				<a href="user/diagrams/Diagrams.html#routingStylePref">
+					<em>Viewpoint User Manual/Diagrams/Features Overview/Style customizations/Customize edge routing style from preferences</em>
+				</a> for further details).
+			</li>
+		</ul>
+		<h3 id="ChangesVisibletoSpecifiers">Changes Visible to Specifiers</h3>
+		<ul>
+			<li>Optional Layer has been renamed to Additional Layer.</li>
+			<li>A new attribute &#8220;Optional&#8221; is available to specified whether the additional layer can be disabled or not by end-user.</li>
+			<li>A new checkbox about 
+				<code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.applyOnAll</code> under the 
+				<code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.appliedOn</code> property section has been added. When this checkbox will be checked the 
+				<code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.appliedOn</code> section will turn gray and disabled.
+			</li>
+			<li>The fields ViewpointURI and representationName on Diagram Extension Description can be a regular expression as well.</li>
+		</ul>
+		<h3 id="ChangesVisibletoDevelopers">Changes Visible to Developers</h3>
+		<ul>
+			<li>Changed APIs:
+				<ul>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.description.OptionalLayer</code> type has been renamed to 
+						<code>fr.obeo.dsl.viewpoint.description.AdditionalLayer</code>
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.description.DiagramDescription.optionalLayers</code> meta-model reference has been renamed to 
+						<code>fr.obeo.dsl.viewpoint.description.DiagramDescription.additionalLayers</code>
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonItem.getSession()</code> is now refactored in 
+						<code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonSessionItem</code>.
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonItem</code> is now moved in 
+						<code>fr.obeo.dsl.common.ui.tools.api.view.common.item.CommonItem</code>.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<ul>
+			<li>New APIs:
+				<ul>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.description.AdditionalLayer.optional:Boolean</code> meta-model attribute has been added.
+					</li>
+					<li>Four new preferences to customize the new tree item group wrapper.
+						<ol>
+							<li>
+								<code>PREF_GROUP_ENABLE</code>:Boolean (default=true)
+								<ul>
+									<li>has been added in 
+										<code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to say the tree item group wrapper is enable.
+									</li>
+								</ul>
+							</li>
+							<li>
+								<code>PREF_GROUP_BY_CONTAINING_FEATURE</code>:Boolean (default=false) 
+								<ul>
+									<li>has been added in 
+										<code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to say if the grouping strategy uses the containing feature instead of the basic hierarchy.
+									</li>
+									<li>This preference cannot be directly edited by the final user. A developer can override this default value, for example in its own AbstractUIPlugin implementation, in the start() method : ViewPointTransPlugin.getPlugin().getPreferenceStore().setValue(CommonPreferencesConstants.PREF_GROUP_BY_CONTAINING_FEATURE, true)</li>
+								</ul>
+							</li>
+							<li>
+								<code>PREF_GROUP_TRIGGER</code>:Integer (default=10000)
+								<ul>
+									<li>has been added in 
+										<code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to define the size of children that triggers the group in sub block.
+									</li>
+								</ul>
+							</li>
+							<li>
+								<code>PREF_GROUP_SIZE</code>:Integer (default=100)
+								<ul>
+									<li>has been added in 
+										<code>fr.obeo.dsl.common.tools.api.constant.CommonPreferencesConstants</code> to define the size of elements contained in a group.
+									</li>
+								</ul>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<code>fr.obeo.dsl.common.ui.tools.api.navigator.GroupingContentProvider</code> a new content provider wrapper that delegates everything to the replaced content provider excepted if groups are expected.
+					</li>
+					<li>
+						<code>fr.obeo.dsl.common.ui.tools.api.navigator.GroupingItem</code> a dedicated group tree item to provide an new ui render.
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.ui.tools.api.views.common.item.CommonSessionItem</code> extends 
+						<code>fr.obeo.dsl.common.ui.tools.api.view.common.item.CommonItem</code> and provide getSession().
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.diagram.business.api.view.ViewpointGMFHelper.getGmfEdge(DDiagramElement, ECrossReferenceAdapter)</code> has been added in complementary of 
+						<code>getGmfEdge(DDiagramElement, Session)</code>. This method uses directly the parameter 
+						<code>ECrossReferenceAdapter</code> (instead of 
+						<code>Session.getSemanticCrossReferencer()</code>) to retrieve the GMF edge corresponding to the DDiagramElement.
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.tools.api.preferences.ViewpointDiagramCorePreferences</code> has been added. This interface declares constants corresponding to default routing styles. These constants are set via the UI preference page of 
+						<code>fr.obeo.dsl.viewpoint.diagram</code> but declared here to allow access outside UI plug-in.
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.description.EStructuralFeatureCustomization.applyOnAll:Boolean</code> meta-model attribute has been added.
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.ui.tools.api.dialogs.AbstractExportRepresentationsAsImagesDialog.FILE_SEPARATOR_ALTERNATIVE</code> constant has been added. It defines the alternative character in 
+						<em>export diagram as image dialog</em> when file separators are found in the representation name.
+					</li>
+					<li>
+						<code>fr.obeo.dsl.viewpoint.business.api.migration.IMigrationParticipant.getNewFragment(String)</code> returns the new fragment if the corresponding reference has changed. This method is added in the migration framework to handle the rename of a reference. The abstract implementation, 
+						<code>fr.obeo.dsl.viewpoint.business.api.migration.AbstractMigrationParticipant</code>,  has also been changed.
+					</li>
+				</ul>
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/resources/bootstrap.css b/doc/5.1.x/resources/bootstrap.css
new file mode 100644
index 0000000..7d519a6
--- /dev/null
+++ b/doc/5.1.x/resources/bootstrap.css
@@ -0,0 +1,3363 @@
+/*!
+ * Bootstrap v2.0.0
+ *
+ * Copyright 2012 Twitter, Inc
+ * Licensed under the Apache License v2.0
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Designed and built with all the love in the world @twitter by @mdo and @fat.
+ */
+article,
+aside,
+details,
+figcaption,
+figure,
+footer,
+header,
+hgroup,
+nav,
+section {
+  display: block;
+}
+audio, canvas, video {
+  display: inline-block;
+  *display: inline;
+  *zoom: 1;
+}
+audio:not([controls]) {
+  display: none;
+}
+html {
+  font-size: 100%;
+  -webkit-text-size-adjust: 100%;
+  -ms-text-size-adjust: 100%;
+}
+a:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+a:hover, a:active {
+  outline: 0;
+}
+sub, sup {
+  position: relative;
+  font-size: 75%;
+  line-height: 0;
+  vertical-align: baseline;
+}
+sup {
+  top: -0.5em;
+}
+sub {
+  bottom: -0.25em;
+}
+img {
+  max-width: 100%;
+  height: auto;
+  border: 0;
+  -ms-interpolation-mode: bicubic;
+}
+button,
+input,
+select,
+textarea {
+  margin: 0;
+  font-size: 100%;
+  vertical-align: middle;
+}
+button, input {
+  *overflow: visible;
+  line-height: normal;
+}
+button::-moz-focus-inner, input::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+button,
+input[type="button"],
+input[type="reset"],
+input[type="submit"] {
+  cursor: pointer;
+  -webkit-appearance: button;
+}
+input[type="search"] {
+  -webkit-appearance: textfield;
+  -webkit-box-sizing: content-box;
+  -moz-box-sizing: content-box;
+  box-sizing: content-box;
+}
+input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button {
+  -webkit-appearance: none;
+}
+textarea {
+  overflow: auto;
+  vertical-align: top;
+}
+body {
+  margin: 0;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  line-height: 18px;
+  color: #333333;
+  background-color: #ffffff;
+}
+a {
+  color: #0088cc;
+  text-decoration: none;
+}
+a:hover {
+  color: #005580;
+  text-decoration: underline;
+}
+.row {
+  margin-left: -20px;
+  *zoom: 1;
+}
+.row:before, .row:after {
+  display: table;
+  content: "";
+}
+.row:after {
+  clear: both;
+}
+[class*="span"] {
+  float: left;
+  margin-left: 20px;
+}
+.span1 {
+  width: 60px;
+}
+.span2 {
+  width: 140px;
+}
+.span3 {
+  width: 220px;
+}
+.span4 {
+  width: 300px;
+}
+.span5 {
+  width: 380px;
+}
+.span6 {
+  width: 460px;
+}
+.span7 {
+  width: 540px;
+}
+.span8 {
+  width: 620px;
+}
+.span9 {
+  width: 700px;
+}
+.span10 {
+  width: 780px;
+}
+.span11 {
+  width: 860px;
+}
+.span12, .container {
+  width: 940px;
+}
+.offset1 {
+  margin-left: 100px;
+}
+.offset2 {
+  margin-left: 180px;
+}
+.offset3 {
+  margin-left: 260px;
+}
+.offset4 {
+  margin-left: 340px;
+}
+.offset5 {
+  margin-left: 420px;
+}
+.offset6 {
+  margin-left: 500px;
+}
+.offset7 {
+  margin-left: 580px;
+}
+.offset8 {
+  margin-left: 660px;
+}
+.offset9 {
+  margin-left: 740px;
+}
+.offset10 {
+  margin-left: 820px;
+}
+.offset11 {
+  margin-left: 900px;
+}
+.row-fluid {
+  width: 100%;
+  *zoom: 1;
+}
+.row-fluid:before, .row-fluid:after {
+  display: table;
+  content: "";
+}
+.row-fluid:after {
+  clear: both;
+}
+.row-fluid > [class*="span"] {
+  float: left;
+  margin-left: 2.127659574%;
+}
+.row-fluid > [class*="span"]:first-child {
+  margin-left: 0;
+}
+.row-fluid .span1 {
+  width: 6.382978723%;
+}
+.row-fluid .span2 {
+  width: 14.89361702%;
+}
+.row-fluid .span3 {
+  width: 23.404255317%;
+}
+.row-fluid .span4 {
+  width: 31.914893614%;
+}
+.row-fluid .span5 {
+  width: 40.425531911%;
+}
+.row-fluid .span6 {
+  width: 48.93617020799999%;
+}
+.row-fluid .span7 {
+  width: 57.446808505%;
+}
+.row-fluid .span8 {
+  width: 65.95744680199999%;
+}
+.row-fluid .span9 {
+  width: 74.468085099%;
+}
+.row-fluid .span10 {
+  width: 82.97872339599999%;
+}
+.row-fluid .span11 {
+  width: 91.489361693%;
+}
+.row-fluid .span12 {
+  width: 99.99999998999999%;
+}
+.container {
+  width: 940px;
+  margin-left: auto;
+  margin-right: auto;
+  *zoom: 1;
+}
+.container:before, .container:after {
+  display: table;
+  content: "";
+}
+.container:after {
+  clear: both;
+}
+.container-fluid {
+  padding-left: 20px;
+  padding-right: 20px;
+  *zoom: 1;
+}
+.container-fluid:before, .container-fluid:after {
+  display: table;
+  content: "";
+}
+.container-fluid:after {
+  clear: both;
+}
+p {
+  margin: 0 0 9px;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  line-height: 18px;
+}
+p small {
+  font-size: 11px;
+  color: #999999;
+}
+.lead {
+  margin-bottom: 18px;
+  font-size: 20px;
+  font-weight: 200;
+  line-height: 27px;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6 {
+  margin: 0;
+  font-weight: bold;
+  color: #333333;
+  text-rendering: optimizelegibility;
+}
+h1 small,
+h2 small,
+h3 small,
+h4 small,
+h5 small,
+h6 small {
+  font-weight: normal;
+  color: #999999;
+}
+h1 {
+  font-size: 30px;
+  line-height: 36px;
+}
+h1 small {
+  font-size: 18px;
+}
+h2 {
+  font-size: 24px;
+  line-height: 36px;
+}
+h2 small {
+  font-size: 18px;
+}
+h3 {
+  line-height: 27px;
+  font-size: 18px;
+}
+h3 small {
+  font-size: 14px;
+}
+h4, h5, h6 {
+  line-height: 18px;
+}
+h4 {
+  font-size: 14px;
+}
+h4 small {
+  font-size: 12px;
+}
+h5 {
+  font-size: 12px;
+}
+h6 {
+  font-size: 11px;
+  color: #999999;
+  text-transform: uppercase;
+}
+.page-header {
+  padding-bottom: 17px;
+  margin: 18px 0;
+  border-bottom: 1px solid #eeeeee;
+}
+.page-header h1 {
+  line-height: 1;
+}
+ul, ol {
+  padding: 0;
+  margin: 0 0 9px 25px;
+}
+ul ul,
+ul ol,
+ol ol,
+ol ul {
+  margin-bottom: 0;
+}
+ul {
+  list-style: disc;
+}
+ol {
+  list-style: decimal;
+}
+li {
+  line-height: 18px;
+}
+ul.unstyled {
+  margin-left: 0;
+  list-style: none;
+}
+dl {
+  margin-bottom: 18px;
+}
+dt, dd {
+  line-height: 18px;
+}
+dt {
+  font-weight: bold;
+}
+dd {
+  margin-left: 9px;
+}
+hr {
+  margin: 18px 0;
+  border: 0;
+  border-top: 1px solid #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+}
+strong {
+  font-weight: bold;
+}
+em {
+  font-style: italic;
+}
+.muted {
+  color: #999999;
+}
+abbr {
+  font-size: 90%;
+  text-transform: uppercase;
+  border-bottom: 1px dotted #ddd;
+  cursor: help;
+}
+blockquote {
+  padding: 0 0 0 15px;
+  margin: 0 0 18px;
+  border-left: 5px solid #eeeeee;
+}
+blockquote p {
+  margin-bottom: 0;
+  font-size: 16px;
+  font-weight: 300;
+  line-height: 22.5px;
+}
+blockquote small {
+  display: block;
+  line-height: 18px;
+  color: #999999;
+}
+blockquote small:before {
+  content: '\2014 \00A0';
+}
+blockquote.pull-right {
+  float: right;
+  padding-left: 0;
+  padding-right: 15px;
+  border-left: 0;
+  border-right: 5px solid #eeeeee;
+}
+blockquote.pull-right p, blockquote.pull-right small {
+  text-align: right;
+}
+q:before,
+q:after,
+blockquote:before,
+blockquote:after {
+  content: "";
+}
+address {
+  display: block;
+  margin-bottom: 18px;
+  line-height: 18px;
+  font-style: normal;
+}
+small {
+  font-size: 100%;
+}
+cite {
+  font-style: normal;
+}
+code, pre {
+  padding: 0 3px 2px;
+  font-family: Menlo, Monaco, "Courier New", monospace;
+  font-size: 12px;
+  color: #333333;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+}
+code {
+  padding: 3px 4px;
+  color: #d14;
+  background-color: #f7f7f9;
+  border: 1px solid #e1e1e8;
+}
+pre {
+  display: block;
+  padding: 8.5px;
+  margin: 0 0 9px;
+  font-size: 12px;
+  line-height: 18px;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  border: 1px solid rgba(0, 0, 0, 0.15);
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  white-space: pre;
+  white-space: pre-wrap;
+  word-break: break-all;
+}
+pre.prettyprint {
+  margin-bottom: 18px;
+}
+pre code {
+  padding: 0;
+  background-color: transparent;
+}
+form {
+  margin: 0 0 18px;
+}
+fieldset {
+  padding: 0;
+  margin: 0;
+  border: 0;
+}
+legend {
+  display: block;
+  width: 100%;
+  padding: 0;
+  margin-bottom: 27px;
+  font-size: 19.5px;
+  line-height: 36px;
+  color: #333333;
+  border: 0;
+  border-bottom: 1px solid #eee;
+}
+label,
+input,
+button,
+select,
+textarea {
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  font-weight: normal;
+  line-height: 18px;
+}
+label {
+  display: block;
+  margin-bottom: 5px;
+  color: #333333;
+}
+input,
+textarea,
+select,
+.uneditable-input {
+  display: inline-block;
+  width: 210px;
+  height: 18px;
+  padding: 4px;
+  margin-bottom: 9px;
+  font-size: 13px;
+  line-height: 18px;
+  color: #555555;
+  border: 1px solid #ccc;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+}
+.uneditable-textarea {
+  width: auto;
+  height: auto;
+}
+label input, label textarea, label select {
+  display: block;
+}
+input[type="image"], input[type="checkbox"], input[type="radio"] {
+  width: auto;
+  height: auto;
+  padding: 0;
+  margin: 3px 0;
+  *margin-top: 0;
+  /* IE7 */
+
+  line-height: normal;
+  border: 0;
+  cursor: pointer;
+  border-radius: 0 \0/;
+}
+input[type="file"] {
+  padding: initial;
+  line-height: initial;
+  border: initial;
+  background-color: #ffffff;
+  background-color: initial;
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+input[type="button"], input[type="reset"], input[type="submit"] {
+  width: auto;
+  height: auto;
+}
+select, input[type="file"] {
+  height: 28px;
+  /* In IE7, the height of the select element cannot be changed by height, only font-size */
+
+  *margin-top: 4px;
+  /* For IE7, add top margin to align select with labels */
+
+  line-height: 28px;
+}
+select {
+  width: 220px;
+  background-color: #ffffff;
+}
+select[multiple], select[size] {
+  height: auto;
+}
+input[type="image"] {
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+textarea {
+  height: auto;
+}
+input[type="hidden"] {
+  display: none;
+}
+.radio, .checkbox {
+  padding-left: 18px;
+}
+.radio input[type="radio"], .checkbox input[type="checkbox"] {
+  float: left;
+  margin-left: -18px;
+}
+.controls > .radio:first-child, .controls > .checkbox:first-child {
+  padding-top: 5px;
+}
+.radio.inline, .checkbox.inline {
+  display: inline-block;
+  margin-bottom: 0;
+  vertical-align: middle;
+}
+.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline {
+  margin-left: 10px;
+}
+.controls > .radio.inline:first-child, .controls > .checkbox.inline:first-child {
+  padding-top: 0;
+}
+input, textarea {
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
+  -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
+  -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
+  -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
+  -o-transition: border linear 0.2s, box-shadow linear 0.2s;
+  transition: border linear 0.2s, box-shadow linear 0.2s;
+}
+input:focus, textarea:focus {
+  border-color: rgba(82, 168, 236, 0.8);
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6);
+  outline: 0;
+  outline: thin dotted \9;
+  /* IE6-8 */
+
+}
+input[type="file"]:focus, input[type="checkbox"]:focus, select:focus {
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.input-mini {
+  width: 60px;
+}
+.input-small {
+  width: 90px;
+}
+.input-medium {
+  width: 150px;
+}
+.input-large {
+  width: 210px;
+}
+.input-xlarge {
+  width: 270px;
+}
+.input-xxlarge {
+  width: 530px;
+}
+input[class*="span"],
+select[class*="span"],
+textarea[class*="span"],
+.uneditable-input {
+  float: none;
+  margin-left: 0;
+}
+input.span1, textarea.span1, .uneditable-input.span1 {
+  width: 50px;
+}
+input.span2, textarea.span2, .uneditable-input.span2 {
+  width: 130px;
+}
+input.span3, textarea.span3, .uneditable-input.span3 {
+  width: 210px;
+}
+input.span4, textarea.span4, .uneditable-input.span4 {
+  width: 290px;
+}
+input.span5, textarea.span5, .uneditable-input.span5 {
+  width: 370px;
+}
+input.span6, textarea.span6, .uneditable-input.span6 {
+  width: 450px;
+}
+input.span7, textarea.span7, .uneditable-input.span7 {
+  width: 530px;
+}
+input.span8, textarea.span8, .uneditable-input.span8 {
+  width: 610px;
+}
+input.span9, textarea.span9, .uneditable-input.span9 {
+  width: 690px;
+}
+input.span10, textarea.span10, .uneditable-input.span10 {
+  width: 770px;
+}
+input.span11, textarea.span11, .uneditable-input.span11 {
+  width: 850px;
+}
+input.span12, textarea.span12, .uneditable-input.span12 {
+  width: 930px;
+}
+input[disabled],
+select[disabled],
+textarea[disabled],
+input[readonly],
+select[readonly],
+textarea[readonly] {
+  background-color: #f5f5f5;
+  border-color: #ddd;
+  cursor: not-allowed;
+}
+.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline {
+  color: #c09853;
+}
+.control-group.warning input, .control-group.warning select, .control-group.warning textarea {
+  color: #c09853;
+  border-color: #c09853;
+}
+.control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus {
+  border-color: #a47e3c;
+  -webkit-box-shadow: 0 0 6px #dbc59e;
+  -moz-box-shadow: 0 0 6px #dbc59e;
+  box-shadow: 0 0 6px #dbc59e;
+}
+.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on {
+  color: #c09853;
+  background-color: #fcf8e3;
+  border-color: #c09853;
+}
+.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline {
+  color: #b94a48;
+}
+.control-group.error input, .control-group.error select, .control-group.error textarea {
+  color: #b94a48;
+  border-color: #b94a48;
+}
+.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus {
+  border-color: #953b39;
+  -webkit-box-shadow: 0 0 6px #d59392;
+  -moz-box-shadow: 0 0 6px #d59392;
+  box-shadow: 0 0 6px #d59392;
+}
+.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on {
+  color: #b94a48;
+  background-color: #f2dede;
+  border-color: #b94a48;
+}
+.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline {
+  color: #468847;
+}
+.control-group.success input, .control-group.success select, .control-group.success textarea {
+  color: #468847;
+  border-color: #468847;
+}
+.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus {
+  border-color: #356635;
+  -webkit-box-shadow: 0 0 6px #7aba7b;
+  -moz-box-shadow: 0 0 6px #7aba7b;
+  box-shadow: 0 0 6px #7aba7b;
+}
+.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on {
+  color: #468847;
+  background-color: #dff0d8;
+  border-color: #468847;
+}
+input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid {
+  color: #b94a48;
+  border-color: #ee5f5b;
+}
+input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus {
+  border-color: #e9322d;
+  -webkit-box-shadow: 0 0 6px #f8b9b7;
+  -moz-box-shadow: 0 0 6px #f8b9b7;
+  box-shadow: 0 0 6px #f8b9b7;
+}
+.form-actions {
+  padding: 17px 20px 18px;
+  margin-top: 18px;
+  margin-bottom: 18px;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+}
+.uneditable-input {
+  display: block;
+  background-color: #ffffff;
+  border-color: #eee;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025);
+  cursor: not-allowed;
+}
+:-moz-placeholder {
+  color: #999999;
+}
+::-webkit-input-placeholder {
+  color: #999999;
+}
+.help-block {
+  margin-top: 5px;
+  margin-bottom: 0;
+  color: #999999;
+}
+.help-inline {
+  display: inline-block;
+  *display: inline;
+  /* IE7 inline-block hack */
+
+  *zoom: 1;
+  margin-bottom: 9px;
+  vertical-align: middle;
+  padding-left: 5px;
+}
+.input-prepend, .input-append {
+  margin-bottom: 5px;
+  *zoom: 1;
+}
+.input-prepend:before,
+.input-append:before,
+.input-prepend:after,
+.input-append:after {
+  display: table;
+  content: "";
+}
+.input-prepend:after, .input-append:after {
+  clear: both;
+}
+.input-prepend input,
+.input-append input,
+.input-prepend .uneditable-input,
+.input-append .uneditable-input {
+  -webkit-border-radius: 0 3px 3px 0;
+  -moz-border-radius: 0 3px 3px 0;
+  border-radius: 0 3px 3px 0;
+}
+.input-prepend input:focus,
+.input-append input:focus,
+.input-prepend .uneditable-input:focus,
+.input-append .uneditable-input:focus {
+  position: relative;
+  z-index: 2;
+}
+.input-prepend .uneditable-input, .input-append .uneditable-input {
+  border-left-color: #ccc;
+}
+.input-prepend .add-on, .input-append .add-on {
+  float: left;
+  display: block;
+  width: auto;
+  min-width: 16px;
+  height: 18px;
+  margin-right: -1px;
+  padding: 4px 5px;
+  font-weight: normal;
+  line-height: 18px;
+  color: #999999;
+  text-align: center;
+  text-shadow: 0 1px 0 #ffffff;
+  background-color: #f5f5f5;
+  border: 1px solid #ccc;
+  -webkit-border-radius: 3px 0 0 3px;
+  -moz-border-radius: 3px 0 0 3px;
+  border-radius: 3px 0 0 3px;
+}
+.input-prepend .active, .input-append .active {
+  background-color: #a9dba9;
+  border-color: #46a546;
+}
+.input-prepend .add-on {
+  *margin-top: 1px;
+  /* IE6-7 */
+
+}
+.input-append input, .input-append .uneditable-input {
+  float: left;
+  -webkit-border-radius: 3px 0 0 3px;
+  -moz-border-radius: 3px 0 0 3px;
+  border-radius: 3px 0 0 3px;
+}
+.input-append .uneditable-input {
+  border-right-color: #ccc;
+}
+.input-append .add-on {
+  margin-right: 0;
+  margin-left: -1px;
+  -webkit-border-radius: 0 3px 3px 0;
+  -moz-border-radius: 0 3px 3px 0;
+  border-radius: 0 3px 3px 0;
+}
+.input-append input:first-child {
+  *margin-left: -160px;
+}
+.input-append input:first-child + .add-on {
+  *margin-left: -21px;
+}
+.search-query {
+  padding-left: 14px;
+  padding-right: 14px;
+  margin-bottom: 0;
+  -webkit-border-radius: 14px;
+  -moz-border-radius: 14px;
+  border-radius: 14px;
+}
+.form-search input,
+.form-inline input,
+.form-horizontal input,
+.form-search textarea,
+.form-inline textarea,
+.form-horizontal textarea,
+.form-search select,
+.form-inline select,
+.form-horizontal select,
+.form-search .help-inline,
+.form-inline .help-inline,
+.form-horizontal .help-inline,
+.form-search .uneditable-input,
+.form-inline .uneditable-input,
+.form-horizontal .uneditable-input {
+  display: inline-block;
+  margin-bottom: 0;
+}
+.form-search label,
+.form-inline label,
+.form-search .input-append,
+.form-inline .input-append,
+.form-search .input-prepend,
+.form-inline .input-prepend {
+  display: inline-block;
+}
+.form-search .input-append .add-on,
+.form-inline .input-prepend .add-on,
+.form-search .input-append .add-on,
+.form-inline .input-prepend .add-on {
+  vertical-align: middle;
+}
+.control-group {
+  margin-bottom: 9px;
+}
+.form-horizontal legend + .control-group {
+  margin-top: 18px;
+  -webkit-margin-top-collapse: separate;
+}
+.form-horizontal .control-group {
+  margin-bottom: 18px;
+  *zoom: 1;
+}
+.form-horizontal .control-group:before, .form-horizontal .control-group:after {
+  display: table;
+  content: "";
+}
+.form-horizontal .control-group:after {
+  clear: both;
+}
+.form-horizontal .control-group > label {
+  float: left;
+  width: 140px;
+  padding-top: 5px;
+  text-align: right;
+}
+.form-horizontal .controls {
+  margin-left: 160px;
+}
+.form-horizontal .form-actions {
+  padding-left: 160px;
+}
+table {
+  max-width: 100%;
+  border-collapse: collapse;
+  border-spacing: 0;
+}
+.table {
+  width: 100%;
+  margin-bottom: 18px;
+}
+.table th, .table td {
+  padding: 8px;
+  line-height: 18px;
+  text-align: left;
+  border-top: 1px solid #ddd;
+}
+.table th {
+  font-weight: bold;
+  vertical-align: bottom;
+}
+.table td {
+  vertical-align: top;
+}
+.table thead:first-child tr th, .table thead:first-child tr td {
+  border-top: 0;
+}
+.table tbody + tbody {
+  border-top: 2px solid #ddd;
+}
+.table-condensed th, .table-condensed td {
+  padding: 4px 5px;
+}
+.table-bordered {
+  border: 1px solid #ddd;
+  border-collapse: separate;
+  *border-collapse: collapsed;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.table-bordered th + th,
+.table-bordered td + td,
+.table-bordered th + td,
+.table-bordered td + th {
+  border-left: 1px solid #ddd;
+}
+.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td {
+  border-top: 0;
+}
+.table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child {
+  -webkit-border-radius: 4px 0 0 0;
+  -moz-border-radius: 4px 0 0 0;
+  border-radius: 4px 0 0 0;
+}
+.table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child {
+  -webkit-border-radius: 0 4px 0 0;
+  -moz-border-radius: 0 4px 0 0;
+  border-radius: 0 4px 0 0;
+}
+.table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child {
+  -webkit-border-radius: 0 0 0 4px;
+  -moz-border-radius: 0 0 0 4px;
+  border-radius: 0 0 0 4px;
+}
+.table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child {
+  -webkit-border-radius: 0 0 4px 0;
+  -moz-border-radius: 0 0 4px 0;
+  border-radius: 0 0 4px 0;
+}
+.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th {
+  background-color: #f9f9f9;
+}
+table .span1 {
+  float: none;
+  width: 44px;
+  margin-left: 0;
+}
+table .span2 {
+  float: none;
+  width: 124px;
+  margin-left: 0;
+}
+table .span3 {
+  float: none;
+  width: 204px;
+  margin-left: 0;
+}
+table .span4 {
+  float: none;
+  width: 284px;
+  margin-left: 0;
+}
+table .span5 {
+  float: none;
+  width: 364px;
+  margin-left: 0;
+}
+table .span6 {
+  float: none;
+  width: 444px;
+  margin-left: 0;
+}
+table .span7 {
+  float: none;
+  width: 524px;
+  margin-left: 0;
+}
+table .span8 {
+  float: none;
+  width: 604px;
+  margin-left: 0;
+}
+table .span9 {
+  float: none;
+  width: 684px;
+  margin-left: 0;
+}
+table .span10 {
+  float: none;
+  width: 764px;
+  margin-left: 0;
+}
+table .span11 {
+  float: none;
+  width: 844px;
+  margin-left: 0;
+}
+table .span12 {
+  float: none;
+  width: 924px;
+  margin-left: 0;
+}
+[class*="icon-"] {
+  display: inline-block;
+  width: 14px;
+  height: 14px;
+  vertical-align: text-top;
+  background-image: url(../img/glyphicons-halflings.png);
+  background-position: 14px 14px;
+  background-repeat: no-repeat;
+  *margin-right: .3em;
+}
+[class*="icon-"]:last-child {
+  *margin-left: 0;
+}
+.icon-white {
+  background-image: url(../img/glyphicons-halflings-white.png);
+}
+.icon-glass {
+  background-position: 0      0;
+}
+.icon-music {
+  background-position: -24px 0;
+}
+.icon-search {
+  background-position: -48px 0;
+}
+.icon-envelope {
+  background-position: -72px 0;
+}
+.icon-heart {
+  background-position: -96px 0;
+}
+.icon-star {
+  background-position: -120px 0;
+}
+.icon-star-empty {
+  background-position: -144px 0;
+}
+.icon-user {
+  background-position: -168px 0;
+}
+.icon-film {
+  background-position: -192px 0;
+}
+.icon-th-large {
+  background-position: -216px 0;
+}
+.icon-th {
+  background-position: -240px 0;
+}
+.icon-th-list {
+  background-position: -264px 0;
+}
+.icon-ok {
+  background-position: -288px 0;
+}
+.icon-remove {
+  background-position: -312px 0;
+}
+.icon-zoom-in {
+  background-position: -336px 0;
+}
+.icon-zoom-out {
+  background-position: -360px 0;
+}
+.icon-off {
+  background-position: -384px 0;
+}
+.icon-signal {
+  background-position: -408px 0;
+}
+.icon-cog {
+  background-position: -432px 0;
+}
+.icon-trash {
+  background-position: -456px 0;
+}
+.icon-home {
+  background-position: 0 -24px;
+}
+.icon-file {
+  background-position: -24px -24px;
+}
+.icon-time {
+  background-position: -48px -24px;
+}
+.icon-road {
+  background-position: -72px -24px;
+}
+.icon-download-alt {
+  background-position: -96px -24px;
+}
+.icon-download {
+  background-position: -120px -24px;
+}
+.icon-upload {
+  background-position: -144px -24px;
+}
+.icon-inbox {
+  background-position: -168px -24px;
+}
+.icon-play-circle {
+  background-position: -192px -24px;
+}
+.icon-repeat {
+  background-position: -216px -24px;
+}
+.icon-refresh {
+  background-position: -240px -24px;
+}
+.icon-list-alt {
+  background-position: -264px -24px;
+}
+.icon-lock {
+  background-position: -287px -24px;
+}
+.icon-flag {
+  background-position: -312px -24px;
+}
+.icon-headphones {
+  background-position: -336px -24px;
+}
+.icon-volume-off {
+  background-position: -360px -24px;
+}
+.icon-volume-down {
+  background-position: -384px -24px;
+}
+.icon-volume-up {
+  background-position: -408px -24px;
+}
+.icon-qrcode {
+  background-position: -432px -24px;
+}
+.icon-barcode {
+  background-position: -456px -24px;
+}
+.icon-tag {
+  background-position: 0 -48px;
+}
+.icon-tags {
+  background-position: -25px -48px;
+}
+.icon-book {
+  background-position: -48px -48px;
+}
+.icon-bookmark {
+  background-position: -72px -48px;
+}
+.icon-print {
+  background-position: -96px -48px;
+}
+.icon-camera {
+  background-position: -120px -48px;
+}
+.icon-font {
+  background-position: -144px -48px;
+}
+.icon-bold {
+  background-position: -167px -48px;
+}
+.icon-italic {
+  background-position: -192px -48px;
+}
+.icon-text-height {
+  background-position: -216px -48px;
+}
+.icon-text-width {
+  background-position: -240px -48px;
+}
+.icon-align-left {
+  background-position: -264px -48px;
+}
+.icon-align-center {
+  background-position: -288px -48px;
+}
+.icon-align-right {
+  background-position: -312px -48px;
+}
+.icon-align-justify {
+  background-position: -336px -48px;
+}
+.icon-list {
+  background-position: -360px -48px;
+}
+.icon-indent-left {
+  background-position: -384px -48px;
+}
+.icon-indent-right {
+  background-position: -408px -48px;
+}
+.icon-facetime-video {
+  background-position: -432px -48px;
+}
+.icon-picture {
+  background-position: -456px -48px;
+}
+.icon-pencil {
+  background-position: 0 -72px;
+}
+.icon-map-marker {
+  background-position: -24px -72px;
+}
+.icon-adjust {
+  background-position: -48px -72px;
+}
+.icon-tint {
+  background-position: -72px -72px;
+}
+.icon-edit {
+  background-position: -96px -72px;
+}
+.icon-share {
+  background-position: -120px -72px;
+}
+.icon-check {
+  background-position: -144px -72px;
+}
+.icon-move {
+  background-position: -168px -72px;
+}
+.icon-step-backward {
+  background-position: -192px -72px;
+}
+.icon-fast-backward {
+  background-position: -216px -72px;
+}
+.icon-backward {
+  background-position: -240px -72px;
+}
+.icon-play {
+  background-position: -264px -72px;
+}
+.icon-pause {
+  background-position: -288px -72px;
+}
+.icon-stop {
+  background-position: -312px -72px;
+}
+.icon-forward {
+  background-position: -336px -72px;
+}
+.icon-fast-forward {
+  background-position: -360px -72px;
+}
+.icon-step-forward {
+  background-position: -384px -72px;
+}
+.icon-eject {
+  background-position: -408px -72px;
+}
+.icon-chevron-left {
+  background-position: -432px -72px;
+}
+.icon-chevron-right {
+  background-position: -456px -72px;
+}
+.icon-plus-sign {
+  background-position: 0 -96px;
+}
+.icon-minus-sign {
+  background-position: -24px -96px;
+}
+.icon-remove-sign {
+  background-position: -48px -96px;
+}
+.icon-ok-sign {
+  background-position: -72px -96px;
+}
+.icon-question-sign {
+  background-position: -96px -96px;
+}
+.icon-info-sign {
+  background-position: -120px -96px;
+}
+.icon-screenshot {
+  background-position: -144px -96px;
+}
+.icon-remove-circle {
+  background-position: -168px -96px;
+}
+.icon-ok-circle {
+  background-position: -192px -96px;
+}
+.icon-ban-circle {
+  background-position: -216px -96px;
+}
+.icon-arrow-left {
+  background-position: -240px -96px;
+}
+.icon-arrow-right {
+  background-position: -264px -96px;
+}
+.icon-arrow-up {
+  background-position: -289px -96px;
+}
+.icon-arrow-down {
+  background-position: -312px -96px;
+}
+.icon-share-alt {
+  background-position: -336px -96px;
+}
+.icon-resize-full {
+  background-position: -360px -96px;
+}
+.icon-resize-small {
+  background-position: -384px -96px;
+}
+.icon-plus {
+  background-position: -408px -96px;
+}
+.icon-minus {
+  background-position: -433px -96px;
+}
+.icon-asterisk {
+  background-position: -456px -96px;
+}
+.icon-exclamation-sign {
+  background-position: 0 -120px;
+}
+.icon-gift {
+  background-position: -24px -120px;
+}
+.icon-leaf {
+  background-position: -48px -120px;
+}
+.icon-fire {
+  background-position: -72px -120px;
+}
+.icon-eye-open {
+  background-position: -96px -120px;
+}
+.icon-eye-close {
+  background-position: -120px -120px;
+}
+.icon-warning-sign {
+  background-position: -144px -120px;
+}
+.icon-plane {
+  background-position: -168px -120px;
+}
+.icon-calendar {
+  background-position: -192px -120px;
+}
+.icon-random {
+  background-position: -216px -120px;
+}
+.icon-comment {
+  background-position: -240px -120px;
+}
+.icon-magnet {
+  background-position: -264px -120px;
+}
+.icon-chevron-up {
+  background-position: -288px -120px;
+}
+.icon-chevron-down {
+  background-position: -313px -119px;
+}
+.icon-retweet {
+  background-position: -336px -120px;
+}
+.icon-shopping-cart {
+  background-position: -360px -120px;
+}
+.icon-folder-close {
+  background-position: -384px -120px;
+}
+.icon-folder-open {
+  background-position: -408px -120px;
+}
+.icon-resize-vertical {
+  background-position: -432px -119px;
+}
+.icon-resize-horizontal {
+  background-position: -456px -118px;
+}
+.dropdown {
+  position: relative;
+}
+.dropdown-toggle {
+  *margin-bottom: -3px;
+}
+.dropdown-toggle:active, .open .dropdown-toggle {
+  outline: 0;
+}
+.caret {
+  display: inline-block;
+  width: 0;
+  height: 0;
+  text-indent: -99999px;
+  *text-indent: 0;
+  vertical-align: top;
+  border-left: 4px solid transparent;
+  border-right: 4px solid transparent;
+  border-top: 4px solid #000000;
+  opacity: 0.3;
+  filter: alpha(opacity=30);
+  content: "\2193";
+}
+.dropdown .caret {
+  margin-top: 8px;
+  margin-left: 2px;
+}
+.dropdown:hover .caret, .open.dropdown .caret {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.dropdown-menu {
+  position: absolute;
+  top: 100%;
+  left: 0;
+  z-index: 1000;
+  float: left;
+  display: none;
+  min-width: 160px;
+  max-width: 220px;
+  _width: 160px;
+  padding: 4px 0;
+  margin: 0;
+  list-style: none;
+  background-color: #ffffff;
+  border-color: #ccc;
+  border-color: rgba(0, 0, 0, 0.2);
+  border-style: solid;
+  border-width: 1px;
+  -webkit-border-radius: 0 0 5px 5px;
+  -moz-border-radius: 0 0 5px 5px;
+  border-radius: 0 0 5px 5px;
+  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);
+  -webkit-background-clip: padding-box;
+  -moz-background-clip: padding;
+  background-clip: padding-box;
+  *border-right-width: 2px;
+  *border-bottom-width: 2px;
+}
+.dropdown-menu.bottom-up {
+  top: auto;
+  bottom: 100%;
+  margin-bottom: 2px;
+}
+.dropdown-menu .divider {
+  height: 1px;
+  margin: 5px 1px;
+  overflow: hidden;
+  background-color: #e5e5e5;
+  border-bottom: 1px solid #ffffff;
+  *width: 100%;
+  *margin: -5px 0 5px;
+}
+.dropdown-menu a {
+  display: block;
+  padding: 3px 15px;
+  clear: both;
+  font-weight: normal;
+  line-height: 18px;
+  color: #555555;
+  white-space: nowrap;
+}
+.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #0088cc;
+}
+.dropdown.open {
+  *z-index: 1000;
+}
+.dropdown.open .dropdown-toggle {
+  color: #ffffff;
+  background: #ccc;
+  background: rgba(0, 0, 0, 0.3);
+}
+.dropdown.open .dropdown-menu {
+  display: block;
+}
+.typeahead {
+  margin-top: 2px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.well {
+  min-height: 20px;
+  padding: 19px;
+  margin-bottom: 20px;
+  background-color: #f5f5f5;
+  border: 1px solid #eee;
+  border: 1px solid rgba(0, 0, 0, 0.05);
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05);
+}
+.well blockquote {
+  border-color: #ddd;
+  border-color: rgba(0, 0, 0, 0.15);
+}
+.fade {
+  -webkit-transition: opacity 0.15s linear;
+  -moz-transition: opacity 0.15s linear;
+  -ms-transition: opacity 0.15s linear;
+  -o-transition: opacity 0.15s linear;
+  transition: opacity 0.15s linear;
+  opacity: 0;
+}
+.fade.in {
+  opacity: 1;
+}
+.collapse {
+  -webkit-transition: height 0.35s ease;
+  -moz-transition: height 0.35s ease;
+  -ms-transition: height 0.35s ease;
+  -o-transition: height 0.35s ease;
+  transition: height 0.35s ease;
+  position: relative;
+  overflow: hidden;
+  height: 0;
+}
+.collapse.in {
+  height: auto;
+}
+.close {
+  float: right;
+  font-size: 20px;
+  font-weight: bold;
+  line-height: 18px;
+  color: #000000;
+  text-shadow: 0 1px 0 #ffffff;
+  opacity: 0.2;
+  filter: alpha(opacity=20);
+}
+.close:hover {
+  color: #000000;
+  text-decoration: none;
+  opacity: 0.4;
+  filter: alpha(opacity=40);
+  cursor: pointer;
+}
+.btn {
+  display: inline-block;
+  padding: 4px 10px 4px;
+  font-size: 13px;
+  line-height: 18px;
+  color: #333333;
+  text-align: center;
+  text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);
+  background-color: #fafafa;
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));
+  background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+  background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);
+  background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+  background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+  background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);
+  background-repeat: no-repeat;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);
+  border: 1px solid #ccc;
+  border-bottom-color: #bbb;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  cursor: pointer;
+  *margin-left: .3em;
+}
+.btn:first-child {
+  *margin-left: 0;
+}
+.btn:hover {
+  color: #333333;
+  text-decoration: none;
+  background-color: #e6e6e6;
+  background-position: 0 -15px;
+  -webkit-transition: background-position 0.1s linear;
+  -moz-transition: background-position 0.1s linear;
+  -ms-transition: background-position 0.1s linear;
+  -o-transition: background-position 0.1s linear;
+  transition: background-position 0.1s linear;
+}
+.btn:focus {
+  outline: thin dotted;
+  outline: 5px auto -webkit-focus-ring-color;
+  outline-offset: -2px;
+}
+.btn.active, .btn:active {
+  background-image: none;
+  -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  background-color: #e6e6e6;
+  background-color: #d9d9d9 \9;
+  color: rgba(0, 0, 0, 0.5);
+  outline: 0;
+}
+.btn.disabled, .btn[disabled] {
+  cursor: default;
+  background-image: none;
+  background-color: #e6e6e6;
+  opacity: 0.65;
+  filter: alpha(opacity=65);
+  -webkit-box-shadow: none;
+  -moz-box-shadow: none;
+  box-shadow: none;
+}
+.btn-large {
+  padding: 9px 14px;
+  font-size: 15px;
+  line-height: normal;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+.btn-large .icon {
+  margin-top: 1px;
+}
+.btn-small {
+  padding: 5px 9px;
+  font-size: 11px;
+  line-height: 16px;
+}
+.btn-small .icon {
+  margin-top: -1px;
+}
+.btn-primary,
+.btn-primary:hover,
+.btn-warning,
+.btn-warning:hover,
+.btn-danger,
+.btn-danger:hover,
+.btn-success,
+.btn-success:hover,
+.btn-info,
+.btn-info:hover {
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  color: #ffffff;
+}
+.btn-primary.active,
+.btn-warning.active,
+.btn-danger.active,
+.btn-success.active,
+.btn-info.active {
+  color: rgba(255, 255, 255, 0.75);
+}
+.btn-primary {
+  background-color: #006dcc;
+  background-image: -moz-linear-gradient(top, #0088cc, #0044cc);
+  background-image: -ms-linear-gradient(top, #0088cc, #0044cc);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));
+  background-image: -webkit-linear-gradient(top, #0088cc, #0044cc);
+  background-image: -o-linear-gradient(top, #0088cc, #0044cc);
+  background-image: linear-gradient(top, #0088cc, #0044cc);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);
+  border-color: #0044cc #0044cc #002a80;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-primary:hover,
+.btn-primary:active,
+.btn-primary.active,
+.btn-primary.disabled,
+.btn-primary[disabled] {
+  background-color: #0044cc;
+}
+.btn-primary:active, .btn-primary.active {
+  background-color: #003399 \9;
+}
+.btn-warning {
+  background-color: #faa732;
+  background-image: -moz-linear-gradient(top, #fbb450, #f89406);
+  background-image: -ms-linear-gradient(top, #fbb450, #f89406);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));
+  background-image: -webkit-linear-gradient(top, #fbb450, #f89406);
+  background-image: -o-linear-gradient(top, #fbb450, #f89406);
+  background-image: linear-gradient(top, #fbb450, #f89406);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);
+  border-color: #f89406 #f89406 #ad6704;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-warning:hover,
+.btn-warning:active,
+.btn-warning.active,
+.btn-warning.disabled,
+.btn-warning[disabled] {
+  background-color: #f89406;
+}
+.btn-warning:active, .btn-warning.active {
+  background-color: #c67605 \9;
+}
+.btn-danger {
+  background-color: #da4f49;
+  background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));
+  background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: -o-linear-gradient(top, #ee5f5b, #bd362f);
+  background-image: linear-gradient(top, #ee5f5b, #bd362f);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);
+  border-color: #bd362f #bd362f #802420;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-danger:hover,
+.btn-danger:active,
+.btn-danger.active,
+.btn-danger.disabled,
+.btn-danger[disabled] {
+  background-color: #bd362f;
+}
+.btn-danger:active, .btn-danger.active {
+  background-color: #942a25 \9;
+}
+.btn-success {
+  background-color: #5bb75b;
+  background-image: -moz-linear-gradient(top, #62c462, #51a351);
+  background-image: -ms-linear-gradient(top, #62c462, #51a351);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));
+  background-image: -webkit-linear-gradient(top, #62c462, #51a351);
+  background-image: -o-linear-gradient(top, #62c462, #51a351);
+  background-image: linear-gradient(top, #62c462, #51a351);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);
+  border-color: #51a351 #51a351 #387038;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-success:hover,
+.btn-success:active,
+.btn-success.active,
+.btn-success.disabled,
+.btn-success[disabled] {
+  background-color: #51a351;
+}
+.btn-success:active, .btn-success.active {
+  background-color: #408140 \9;
+}
+.btn-info {
+  background-color: #49afcd;
+  background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));
+  background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: -o-linear-gradient(top, #5bc0de, #2f96b4);
+  background-image: linear-gradient(top, #5bc0de, #2f96b4);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);
+  border-color: #2f96b4 #2f96b4 #1f6377;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+}
+.btn-info:hover,
+.btn-info:active,
+.btn-info.active,
+.btn-info.disabled,
+.btn-info[disabled] {
+  background-color: #2f96b4;
+}
+.btn-info:active, .btn-info.active {
+  background-color: #24748c \9;
+}
+button.btn, input[type="submit"].btn {
+  *padding-top: 2px;
+  *padding-bottom: 2px;
+}
+button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner {
+  padding: 0;
+  border: 0;
+}
+button.btn.large, input[type="submit"].btn.large {
+  *padding-top: 7px;
+  *padding-bottom: 7px;
+}
+button.btn.small, input[type="submit"].btn.small {
+  *padding-top: 3px;
+  *padding-bottom: 3px;
+}
+.btn-group {
+  position: relative;
+  *zoom: 1;
+  *margin-left: .3em;
+}
+.btn-group:before, .btn-group:after {
+  display: table;
+  content: "";
+}
+.btn-group:after {
+  clear: both;
+}
+.btn-group:first-child {
+  *margin-left: 0;
+}
+.btn-group + .btn-group {
+  margin-left: 5px;
+}
+.btn-toolbar {
+  margin-top: 9px;
+  margin-bottom: 9px;
+}
+.btn-toolbar .btn-group {
+  display: inline-block;
+  *display: inline;
+  /* IE7 inline-block hack */
+
+  *zoom: 1;
+}
+.btn-group .btn {
+  position: relative;
+  float: left;
+  margin-left: -1px;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+}
+.btn-group .btn:first-child {
+  margin-left: 0;
+  -webkit-border-top-left-radius: 4px;
+  -moz-border-radius-topleft: 4px;
+  border-top-left-radius: 4px;
+  -webkit-border-bottom-left-radius: 4px;
+  -moz-border-radius-bottomleft: 4px;
+  border-bottom-left-radius: 4px;
+}
+.btn-group .btn:last-child, .btn-group .dropdown-toggle {
+  -webkit-border-top-right-radius: 4px;
+  -moz-border-radius-topright: 4px;
+  border-top-right-radius: 4px;
+  -webkit-border-bottom-right-radius: 4px;
+  -moz-border-radius-bottomright: 4px;
+  border-bottom-right-radius: 4px;
+}
+.btn-group .btn.large:first-child {
+  margin-left: 0;
+  -webkit-border-top-left-radius: 6px;
+  -moz-border-radius-topleft: 6px;
+  border-top-left-radius: 6px;
+  -webkit-border-bottom-left-radius: 6px;
+  -moz-border-radius-bottomleft: 6px;
+  border-bottom-left-radius: 6px;
+}
+.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle {
+  -webkit-border-top-right-radius: 6px;
+  -moz-border-radius-topright: 6px;
+  border-top-right-radius: 6px;
+  -webkit-border-bottom-right-radius: 6px;
+  -moz-border-radius-bottomright: 6px;
+  border-bottom-right-radius: 6px;
+}
+.btn-group .btn:hover,
+.btn-group .btn:focus,
+.btn-group .btn:active,
+.btn-group .btn.active {
+  z-index: 2;
+}
+.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle {
+  outline: 0;
+}
+.btn-group .dropdown-toggle {
+  padding-left: 8px;
+  padding-right: 8px;
+  -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);
+  *padding-top: 5px;
+  *padding-bottom: 5px;
+}
+.btn-group.open {
+  *z-index: 1000;
+}
+.btn-group.open .dropdown-menu {
+  display: block;
+  margin-top: 1px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+.btn-group.open .dropdown-toggle {
+  background-image: none;
+  -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.btn .caret {
+  margin-top: 7px;
+  margin-left: 0;
+}
+.btn:hover .caret, .open.btn-group .caret {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.btn-primary .caret,
+.btn-danger .caret,
+.btn-info .caret,
+.btn-success .caret {
+  border-top-color: #ffffff;
+  opacity: 0.75;
+  filter: alpha(opacity=75);
+}
+.btn-small .caret {
+  margin-top: 4px;
+}
+.alert {
+  padding: 8px 35px 8px 14px;
+  margin-bottom: 18px;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+  background-color: #fcf8e3;
+  border: 1px solid #fbeed5;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.alert, .alert-heading {
+  color: #c09853;
+}
+.alert .close {
+  position: relative;
+  top: -2px;
+  right: -21px;
+  line-height: 18px;
+}
+.alert-success {
+  background-color: #dff0d8;
+  border-color: #d6e9c6;
+}
+.alert-success, .alert-success .alert-heading {
+  color: #468847;
+}
+.alert-danger, .alert-error {
+  background-color: #f2dede;
+  border-color: #eed3d7;
+}
+.alert-danger,
+.alert-error,
+.alert-danger .alert-heading,
+.alert-error .alert-heading {
+  color: #b94a48;
+}
+.alert-info {
+  background-color: #d9edf7;
+  border-color: #bce8f1;
+}
+.alert-info, .alert-info .alert-heading {
+  color: #3a87ad;
+}
+.alert-block {
+  padding-top: 14px;
+  padding-bottom: 14px;
+}
+.alert-block > p, .alert-block > ul {
+  margin-bottom: 0;
+}
+.alert-block p + p {
+  margin-top: 5px;
+}
+.nav {
+  margin-left: 0;
+  margin-bottom: 18px;
+  list-style: none;
+}
+.nav > li > a {
+  display: block;
+}
+.nav > li > a:hover {
+  text-decoration: none;
+  background-color: #eeeeee;
+}
+.nav-list {
+  padding-left: 14px;
+  padding-right: 14px;
+  margin-bottom: 0;
+}
+.nav-list > li > a, .nav-list .nav-header {
+  display: block;
+  padding: 3px 15px;
+  margin-left: -15px;
+  margin-right: -15px;
+  text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+.nav-list .nav-header {
+  font-size: 11px;
+  font-weight: bold;
+  line-height: 18px;
+  color: #999999;
+  text-transform: uppercase;
+}
+.nav-list > li + .nav-header {
+  margin-top: 9px;
+}
+.nav-list .active > a {
+  color: #ffffff;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2);
+  background-color: #0088cc;
+}
+.nav-list .icon {
+  margin-right: 2px;
+}
+.nav-tabs, .nav-pills {
+  *zoom: 1;
+}
+.nav-tabs:before,
+.nav-pills:before,
+.nav-tabs:after,
+.nav-pills:after {
+  display: table;
+  content: "";
+}
+.nav-tabs:after, .nav-pills:after {
+  clear: both;
+}
+.nav-tabs > li, .nav-pills > li {
+  float: left;
+}
+.nav-tabs > li > a, .nav-pills > li > a {
+  padding-right: 12px;
+  padding-left: 12px;
+  margin-right: 2px;
+  line-height: 14px;
+}
+.nav-tabs {
+  border-bottom: 1px solid #ddd;
+}
+.nav-tabs > li {
+  margin-bottom: -1px;
+}
+.nav-tabs > li > a {
+  padding-top: 9px;
+  padding-bottom: 9px;
+  border: 1px solid transparent;
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.nav-tabs > li > a:hover {
+  border-color: #eeeeee #eeeeee #dddddd;
+}
+.nav-tabs > .active > a, .nav-tabs > .active > a:hover {
+  color: #555555;
+  background-color: #ffffff;
+  border: 1px solid #ddd;
+  border-bottom-color: transparent;
+  cursor: default;
+}
+.nav-pills > li > a {
+  padding-top: 8px;
+  padding-bottom: 8px;
+  margin-top: 2px;
+  margin-bottom: 2px;
+  -webkit-border-radius: 5px;
+  -moz-border-radius: 5px;
+  border-radius: 5px;
+}
+.nav-pills .active > a, .nav-pills .active > a:hover {
+  color: #ffffff;
+  background-color: #0088cc;
+}
+.nav-stacked > li {
+  float: none;
+}
+.nav-stacked > li > a {
+  margin-right: 0;
+}
+.nav-tabs.nav-stacked {
+  border-bottom: 0;
+}
+.nav-tabs.nav-stacked > li > a {
+  border: 1px solid #ddd;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+}
+.nav-tabs.nav-stacked > li:first-child > a {
+  -webkit-border-radius: 4px 4px 0 0;
+  -moz-border-radius: 4px 4px 0 0;
+  border-radius: 4px 4px 0 0;
+}
+.nav-tabs.nav-stacked > li:last-child > a {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+.nav-tabs.nav-stacked > li > a:hover {
+  border-color: #ddd;
+  z-index: 2;
+}
+.nav-pills.nav-stacked > li > a {
+  margin-bottom: 3px;
+}
+.nav-pills.nav-stacked > li:last-child > a {
+  margin-bottom: 1px;
+}
+.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu {
+  margin-top: 1px;
+  border-width: 1px;
+}
+.nav-pills .dropdown-menu {
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret {
+  border-top-color: #0088cc;
+  margin-top: 6px;
+}
+.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret {
+  border-top-color: #005580;
+}
+.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret {
+  border-top-color: #333333;
+}
+.nav > .dropdown.active > a:hover {
+  color: #000000;
+  cursor: pointer;
+}
+.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover {
+  color: #ffffff;
+  background-color: #999999;
+  border-color: #999999;
+}
+.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret {
+  border-top-color: #ffffff;
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.tabs-stacked .open > a:hover {
+  border-color: #999999;
+}
+.tabbable {
+  *zoom: 1;
+}
+.tabbable:before, .tabbable:after {
+  display: table;
+  content: "";
+}
+.tabbable:after {
+  clear: both;
+}
+.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs {
+  border-bottom: 0;
+}
+.tab-content > .tab-pane, .pill-content > .pill-pane {
+  display: none;
+}
+.tab-content > .active, .pill-content > .active {
+  display: block;
+}
+.tabs-below .nav-tabs {
+  border-top: 1px solid #ddd;
+}
+.tabs-below .nav-tabs > li {
+  margin-top: -1px;
+  margin-bottom: 0;
+}
+.tabs-below .nav-tabs > li > a {
+  -webkit-border-radius: 0 0 4px 4px;
+  -moz-border-radius: 0 0 4px 4px;
+  border-radius: 0 0 4px 4px;
+}
+.tabs-below .nav-tabs > li > a:hover {
+  border-bottom-color: transparent;
+  border-top-color: #ddd;
+}
+.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover {
+  border-color: transparent #ddd #ddd #ddd;
+}
+.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li {
+  float: none;
+}
+.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a {
+  min-width: 74px;
+  margin-right: 0;
+  margin-bottom: 3px;
+}
+.tabs-left .nav-tabs {
+  float: left;
+  margin-right: 19px;
+  border-right: 1px solid #ddd;
+}
+.tabs-left .nav-tabs > li > a {
+  margin-right: -1px;
+  -webkit-border-radius: 4px 0 0 4px;
+  -moz-border-radius: 4px 0 0 4px;
+  border-radius: 4px 0 0 4px;
+}
+.tabs-left .nav-tabs > li > a:hover {
+  border-color: #eeeeee #dddddd #eeeeee #eeeeee;
+}
+.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover {
+  border-color: #ddd transparent #ddd #ddd;
+  *border-right-color: #ffffff;
+}
+.tabs-right .nav-tabs {
+  float: right;
+  margin-left: 19px;
+  border-left: 1px solid #ddd;
+}
+.tabs-right .nav-tabs > li > a {
+  margin-left: -1px;
+  -webkit-border-radius: 0 4px 4px 0;
+  -moz-border-radius: 0 4px 4px 0;
+  border-radius: 0 4px 4px 0;
+}
+.tabs-right .nav-tabs > li > a:hover {
+  border-color: #eeeeee #eeeeee #eeeeee #dddddd;
+}
+.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover {
+  border-color: #ddd #ddd #ddd transparent;
+  *border-left-color: #ffffff;
+}
+.navbar {
+  overflow: visible;
+  margin-bottom: 18px;
+}
+.navbar-inner {
+  padding-left: 20px;
+  padding-right: 20px;
+  background-color: #2c2c2c;
+  background-image: -moz-linear-gradient(top, #333333, #222222);
+  background-image: -ms-linear-gradient(top, #333333, #222222);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
+  background-image: -webkit-linear-gradient(top, #333333, #222222);
+  background-image: -o-linear-gradient(top, #333333, #222222);
+  background-image: linear-gradient(top, #333333, #222222);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1);
+}
+.btn-navbar {
+  display: none;
+  float: right;
+  padding: 7px 10px;
+  margin-left: 5px;
+  margin-right: 5px;
+  background-color: #2c2c2c;
+  background-image: -moz-linear-gradient(top, #333333, #222222);
+  background-image: -ms-linear-gradient(top, #333333, #222222);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));
+  background-image: -webkit-linear-gradient(top, #333333, #222222);
+  background-image: -o-linear-gradient(top, #333333, #222222);
+  background-image: linear-gradient(top, #333333, #222222);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);
+  border-color: #222222 #222222 #000000;
+  border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
+  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);
+  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+  -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075);
+}
+.btn-navbar:hover,
+.btn-navbar:active,
+.btn-navbar.active,
+.btn-navbar.disabled,
+.btn-navbar[disabled] {
+  background-color: #222222;
+}
+.btn-navbar:active, .btn-navbar.active {
+  background-color: #080808 \9;
+}
+.btn-navbar .icon-bar {
+  display: block;
+  width: 18px;
+  height: 2px;
+  background-color: #f5f5f5;
+  -webkit-border-radius: 1px;
+  -moz-border-radius: 1px;
+  border-radius: 1px;
+  -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+  -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+  box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25);
+}
+.btn-navbar .icon-bar + .icon-bar {
+  margin-top: 3px;
+}
+.nav-collapse.collapse {
+  height: auto;
+}
+.navbar .brand:hover {
+  text-decoration: none;
+}
+.navbar .brand {
+  float: left;
+  display: block;
+  padding: 8px 20px 12px;
+  margin-left: -20px;
+  font-size: 20px;
+  font-weight: 200;
+  line-height: 1;
+  color: #ffffff;
+}
+.navbar .navbar-text {
+  margin-bottom: 0;
+  line-height: 40px;
+  color: #999999;
+}
+.navbar .navbar-text a:hover {
+  color: #ffffff;
+  background-color: transparent;
+}
+.navbar .btn, .navbar .btn-group {
+  margin-top: 5px;
+}
+.navbar .btn-group .btn {
+  margin-top: 0;
+}
+.navbar-form {
+  margin-bottom: 0;
+  *zoom: 1;
+}
+.navbar-form:before, .navbar-form:after {
+  display: table;
+  content: "";
+}
+.navbar-form:after {
+  clear: both;
+}
+.navbar-form input, .navbar-form select {
+  display: inline-block;
+  margin-top: 5px;
+  margin-bottom: 0;
+}
+.navbar-form .radio, .navbar-form .checkbox {
+  margin-top: 5px;
+}
+.navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] {
+  margin-top: 3px;
+}
+.navbar-search {
+  position: relative;
+  float: left;
+  margin-top: 6px;
+  margin-bottom: 0;
+}
+.navbar-search .search-query {
+  padding: 4px 9px;
+  font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
+  font-size: 13px;
+  font-weight: normal;
+  line-height: 1;
+  color: #ffffff;
+  color: rgba(255, 255, 255, 0.75);
+  background: #666;
+  background: rgba(255, 255, 255, 0.3);
+  border: 1px solid #111;
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
+  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15);
+  -webkit-transition: none;
+  -moz-transition: none;
+  -ms-transition: none;
+  -o-transition: none;
+  transition: none;
+}
+.navbar-search .search-query :-moz-placeholder {
+  color: #eeeeee;
+}
+.navbar-search .search-query::-webkit-input-placeholder {
+  color: #eeeeee;
+}
+.navbar-search .search-query:hover {
+  color: #ffffff;
+  background-color: #999999;
+  background-color: rgba(255, 255, 255, 0.5);
+}
+.navbar-search .search-query:focus, .navbar-search .search-query.focused {
+  padding: 5px 10px;
+  color: #333333;
+  text-shadow: 0 1px 0 #ffffff;
+  background-color: #ffffff;
+  border: 0;
+  -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+  -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+  box-shadow: 0 0 3px rgba(0, 0, 0, 0.15);
+  outline: 0;
+}
+.navbar-fixed-top {
+  position: fixed;
+  top: 0;
+  right: 0;
+  left: 0;
+  z-index: 1030;
+}
+.navbar-fixed-top .navbar-inner {
+  padding-left: 0;
+  padding-right: 0;
+  -webkit-border-radius: 0;
+  -moz-border-radius: 0;
+  border-radius: 0;
+}
+.navbar .nav {
+  position: relative;
+  left: 0;
+  display: block;
+  float: left;
+  margin: 0 10px 0 0;
+}
+.navbar .nav.pull-right {
+  float: right;
+}
+.navbar .nav > li {
+  display: block;
+  float: left;
+}
+.navbar .nav > li > a {
+  float: none;
+  padding: 10px 10px 11px;
+  line-height: 19px;
+  color: #999999;
+  text-decoration: none;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+}
+.navbar .nav > li > a:hover {
+  background-color: transparent;
+  color: #ffffff;
+  text-decoration: none;
+}
+.navbar .nav .active > a, .navbar .nav .active > a:hover {
+  color: #ffffff;
+  text-decoration: none;
+  background-color: #222222;
+  background-color: rgba(0, 0, 0, 0.5);
+}
+.navbar .divider-vertical {
+  height: 40px;
+  width: 1px;
+  margin: 0 9px;
+  overflow: hidden;
+  background-color: #222222;
+  border-right: 1px solid #333333;
+}
+.navbar .nav.pull-right {
+  margin-left: 10px;
+  margin-right: 0;
+}
+.navbar .dropdown-menu {
+  margin-top: 1px;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.navbar .dropdown-menu:before {
+  content: '';
+  display: inline-block;
+  border-left: 7px solid transparent;
+  border-right: 7px solid transparent;
+  border-bottom: 7px solid #ccc;
+  border-bottom-color: rgba(0, 0, 0, 0.2);
+  position: absolute;
+  top: -7px;
+  left: 9px;
+}
+.navbar .dropdown-menu:after {
+  content: '';
+  display: inline-block;
+  border-left: 6px solid transparent;
+  border-right: 6px solid transparent;
+  border-bottom: 6px solid #ffffff;
+  position: absolute;
+  top: -6px;
+  left: 10px;
+}
+.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret {
+  border-top-color: #ffffff;
+}
+.navbar .nav .active .caret {
+  opacity: 1;
+  filter: alpha(opacity=100);
+}
+.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle {
+  background-color: transparent;
+}
+.navbar .nav .active > .dropdown-toggle:hover {
+  color: #ffffff;
+}
+.navbar .nav.pull-right .dropdown-menu {
+  left: auto;
+  right: 0;
+}
+.navbar .nav.pull-right .dropdown-menu:before {
+  left: auto;
+  right: 12px;
+}
+.navbar .nav.pull-right .dropdown-menu:after {
+  left: auto;
+  right: 13px;
+}
+.breadcrumb {
+  padding: 7px 14px;
+  margin: 0 0 18px;
+  background-color: #fbfbfb;
+  background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));
+  background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: -o-linear-gradient(top, #ffffff, #f5f5f5);
+  background-image: linear-gradient(top, #ffffff, #f5f5f5);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);
+  border: 1px solid #ddd;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
+  -moz-box-shadow: inset 0 1px 0 #ffffff;
+  box-shadow: inset 0 1px 0 #ffffff;
+}
+.breadcrumb li {
+  display: inline;
+  text-shadow: 0 1px 0 #ffffff;
+}
+.breadcrumb .divider {
+  padding: 0 5px;
+  color: #999999;
+}
+.breadcrumb .active a {
+  color: #333333;
+}
+.pagination {
+  height: 36px;
+  margin: 18px 0;
+}
+.pagination ul {
+  display: inline-block;
+  *display: inline;
+  /* IE7 inline-block hack */
+
+  *zoom: 1;
+  margin-left: 0;
+  margin-bottom: 0;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
+}
+.pagination li {
+  display: inline;
+}
+.pagination a {
+  float: left;
+  padding: 0 14px;
+  line-height: 34px;
+  text-decoration: none;
+  border: 1px solid #ddd;
+  border-left-width: 0;
+}
+.pagination a:hover, .pagination .active a {
+  background-color: #f5f5f5;
+}
+.pagination .active a {
+  color: #999999;
+  cursor: default;
+}
+.pagination .disabled a, .pagination .disabled a:hover {
+  color: #999999;
+  background-color: transparent;
+  cursor: default;
+}
+.pagination li:first-child a {
+  border-left-width: 1px;
+  -webkit-border-radius: 3px 0 0 3px;
+  -moz-border-radius: 3px 0 0 3px;
+  border-radius: 3px 0 0 3px;
+}
+.pagination li:last-child a {
+  -webkit-border-radius: 0 3px 3px 0;
+  -moz-border-radius: 0 3px 3px 0;
+  border-radius: 0 3px 3px 0;
+}
+.pagination-centered {
+  text-align: center;
+}
+.pagination-right {
+  text-align: right;
+}
+.pager {
+  margin-left: 0;
+  margin-bottom: 18px;
+  list-style: none;
+  text-align: center;
+  *zoom: 1;
+}
+.pager:before, .pager:after {
+  display: table;
+  content: "";
+}
+.pager:after {
+  clear: both;
+}
+.pager li {
+  display: inline;
+}
+.pager a {
+  display: inline-block;
+  padding: 5px 14px;
+  background-color: #fff;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 15px;
+  -moz-border-radius: 15px;
+  border-radius: 15px;
+}
+.pager a:hover {
+  text-decoration: none;
+  background-color: #f5f5f5;
+}
+.pager .next a {
+  float: right;
+}
+.pager .previous a {
+  float: left;
+}
+.modal-open .dropdown-menu {
+  z-index: 2050;
+}
+.modal-open .dropdown.open {
+  *z-index: 2050;
+}
+.modal-open .popover {
+  z-index: 2060;
+}
+.modal-open .tooltip {
+  z-index: 2070;
+}
+.modal-backdrop {
+  position: fixed;
+  top: 0;
+  right: 0;
+  bottom: 0;
+  left: 0;
+  z-index: 1040;
+  background-color: #000000;
+}
+.modal-backdrop.fade {
+  opacity: 0;
+}
+.modal-backdrop, .modal-backdrop.fade.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+.modal {
+  position: fixed;
+  top: 50%;
+  left: 50%;
+  z-index: 1050;
+  max-height: 500px;
+  overflow: auto;
+  width: 560px;
+  margin: -250px 0 0 -280px;
+  background-color: #ffffff;
+  border: 1px solid #999;
+  border: 1px solid rgba(0, 0, 0, 0.3);
+  *border: 1px solid #999;
+  /* IE6-7 */
+
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  border-radius: 6px;
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -webkit-background-clip: padding-box;
+  -moz-background-clip: padding-box;
+  background-clip: padding-box;
+}
+.modal.fade {
+  -webkit-transition: opacity .3s linear, top .3s ease-out;
+  -moz-transition: opacity .3s linear, top .3s ease-out;
+  -ms-transition: opacity .3s linear, top .3s ease-out;
+  -o-transition: opacity .3s linear, top .3s ease-out;
+  transition: opacity .3s linear, top .3s ease-out;
+  top: -25%;
+}
+.modal.fade.in {
+  top: 50%;
+}
+.modal-header {
+  padding: 9px 15px;
+  border-bottom: 1px solid #eee;
+}
+.modal-header .close {
+  margin-top: 2px;
+}
+.modal-body {
+  padding: 15px;
+}
+.modal-footer {
+  padding: 14px 15px 15px;
+  margin-bottom: 0;
+  background-color: #f5f5f5;
+  border-top: 1px solid #ddd;
+  -webkit-border-radius: 0 0 6px 6px;
+  -moz-border-radius: 0 0 6px 6px;
+  border-radius: 0 0 6px 6px;
+  -webkit-box-shadow: inset 0 1px 0 #ffffff;
+  -moz-box-shadow: inset 0 1px 0 #ffffff;
+  box-shadow: inset 0 1px 0 #ffffff;
+  *zoom: 1;
+}
+.modal-footer:before, .modal-footer:after {
+  display: table;
+  content: "";
+}
+.modal-footer:after {
+  clear: both;
+}
+.modal-footer .btn {
+  float: right;
+  margin-left: 5px;
+  margin-bottom: 0;
+}
+.tooltip {
+  position: absolute;
+  z-index: 1020;
+  display: block;
+  visibility: visible;
+  padding: 5px;
+  font-size: 11px;
+  opacity: 0;
+  filter: alpha(opacity=0);
+}
+.tooltip.in {
+  opacity: 0.8;
+  filter: alpha(opacity=80);
+}
+.tooltip.top {
+  margin-top: -2px;
+}
+.tooltip.right {
+  margin-left: 2px;
+}
+.tooltip.bottom {
+  margin-top: 2px;
+}
+.tooltip.left {
+  margin-left: -2px;
+}
+.tooltip.top .tooltip-arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  border-top: 5px solid #000000;
+}
+.tooltip.left .tooltip-arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid #000000;
+}
+.tooltip.bottom .tooltip-arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  border-bottom: 5px solid #000000;
+}
+.tooltip.right .tooltip-arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-right: 5px solid #000000;
+}
+.tooltip-inner {
+  max-width: 200px;
+  padding: 3px 8px;
+  color: #ffffff;
+  text-align: center;
+  text-decoration: none;
+  background-color: #000000;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.tooltip-arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+}
+.popover {
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 1010;
+  display: none;
+  padding: 5px;
+}
+.popover.top {
+  margin-top: -5px;
+}
+.popover.right {
+  margin-left: 5px;
+}
+.popover.bottom {
+  margin-top: 5px;
+}
+.popover.left {
+  margin-left: -5px;
+}
+.popover.top .arrow {
+  bottom: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  border-top: 5px solid #000000;
+}
+.popover.right .arrow {
+  top: 50%;
+  left: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-right: 5px solid #000000;
+}
+.popover.bottom .arrow {
+  top: 0;
+  left: 50%;
+  margin-left: -5px;
+  border-left: 5px solid transparent;
+  border-right: 5px solid transparent;
+  border-bottom: 5px solid #000000;
+}
+.popover.left .arrow {
+  top: 50%;
+  right: 0;
+  margin-top: -5px;
+  border-top: 5px solid transparent;
+  border-bottom: 5px solid transparent;
+  border-left: 5px solid #000000;
+}
+.popover .arrow {
+  position: absolute;
+  width: 0;
+  height: 0;
+}
+.popover-inner {
+  padding: 3px;
+  width: 280px;
+  overflow: hidden;
+  background: #000000;
+  background: rgba(0, 0, 0, 0.8);
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  border-radius: 6px;
+  -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+  box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3);
+}
+.popover-title {
+  padding: 9px 15px;
+  line-height: 1;
+  background-color: #f5f5f5;
+  border-bottom: 1px solid #eee;
+  -webkit-border-radius: 3px 3px 0 0;
+  -moz-border-radius: 3px 3px 0 0;
+  border-radius: 3px 3px 0 0;
+}
+.popover-content {
+  padding: 14px;
+  background-color: #ffffff;
+  -webkit-border-radius: 0 0 3px 3px;
+  -moz-border-radius: 0 0 3px 3px;
+  border-radius: 0 0 3px 3px;
+  -webkit-background-clip: padding-box;
+  -moz-background-clip: padding-box;
+  background-clip: padding-box;
+}
+.popover-content p, .popover-content ul, .popover-content ol {
+  margin-bottom: 0;
+}
+.thumbnails {
+  margin-left: -20px;
+  list-style: none;
+  *zoom: 1;
+}
+.thumbnails:before, .thumbnails:after {
+  display: table;
+  content: "";
+}
+.thumbnails:after {
+  clear: both;
+}
+.thumbnails > li {
+  float: left;
+  margin: 0 0 18px 20px;
+}
+.thumbnail {
+  display: block;
+  padding: 4px;
+  line-height: 1;
+  border: 1px solid #ddd;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+  -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075);
+}
+a.thumbnail:hover {
+  border-color: #0088cc;
+  -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+  -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+  box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25);
+}
+.thumbnail > img {
+  display: block;
+  max-width: 100%;
+  margin-left: auto;
+  margin-right: auto;
+}
+.thumbnail .caption {
+  padding: 9px;
+}
+.label {
+  padding: 1px 3px 2px;
+  font-size: 9.75px;
+  font-weight: bold;
+  color: #ffffff;
+  text-transform: uppercase;
+  background-color: #999999;
+  -webkit-border-radius: 3px;
+  -moz-border-radius: 3px;
+  border-radius: 3px;
+}
+.label-important {
+  background-color: #b94a48;
+}
+.label-warning {
+  background-color: #f89406;
+}
+.label-success {
+  background-color: #468847;
+}
+.label-info {
+  background-color: #3a87ad;
+}
+@-webkit-keyframes progress-bar-stripes {
+  from {
+    background-position: 0 0;
+  }
+  to {
+    background-position: 40px 0;
+  }
+}
+@-moz-keyframes progress-bar-stripes {
+  from {
+    background-position: 0 0;
+  }
+  to {
+    background-position: 40px 0;
+  }
+}
+@keyframes progress-bar-stripes {
+  from {
+    background-position: 0 0;
+  }
+  to {
+    background-position: 40px 0;
+  }
+}
+.progress {
+  overflow: hidden;
+  height: 18px;
+  margin-bottom: 18px;
+  background-color: #f7f7f7;
+  background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));
+  background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-image: linear-gradient(top, #f5f5f5, #f9f9f9);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);
+  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.progress .bar {
+  width: 0%;
+  height: 18px;
+  color: #ffffff;
+  font-size: 12px;
+  text-align: center;
+  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
+  background-color: #0e90d2;
+  background-image: -moz-linear-gradient(top, #149bdf, #0480be);
+  background-image: -ms-linear-gradient(top, #149bdf, #0480be);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));
+  background-image: -webkit-linear-gradient(top, #149bdf, #0480be);
+  background-image: -o-linear-gradient(top, #149bdf, #0480be);
+  background-image: linear-gradient(top, #149bdf, #0480be);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);
+  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15);
+  -webkit-box-sizing: border-box;
+  -moz-box-sizing: border-box;
+  box-sizing: border-box;
+  -webkit-transition: width 0.6s ease;
+  -moz-transition: width 0.6s ease;
+  -ms-transition: width 0.6s ease;
+  -o-transition: width 0.6s ease;
+  transition: width 0.6s ease;
+}
+.progress-striped .bar {
+  background-color: #62c462;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  -webkit-background-size: 40px 40px;
+  -moz-background-size: 40px 40px;
+  -o-background-size: 40px 40px;
+  background-size: 40px 40px;
+}
+.progress.active .bar {
+  -webkit-animation: progress-bar-stripes 2s linear infinite;
+  -moz-animation: progress-bar-stripes 2s linear infinite;
+  animation: progress-bar-stripes 2s linear infinite;
+}
+.progress-danger .bar {
+  background-color: #dd514c;
+  background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));
+  background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: -o-linear-gradient(top, #ee5f5b, #c43c35);
+  background-image: linear-gradient(top, #ee5f5b, #c43c35);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);
+}
+.progress-danger.progress-striped .bar {
+  background-color: #ee5f5b;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-success .bar {
+  background-color: #5eb95e;
+  background-image: -moz-linear-gradient(top, #62c462, #57a957);
+  background-image: -ms-linear-gradient(top, #62c462, #57a957);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));
+  background-image: -webkit-linear-gradient(top, #62c462, #57a957);
+  background-image: -o-linear-gradient(top, #62c462, #57a957);
+  background-image: linear-gradient(top, #62c462, #57a957);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);
+}
+.progress-success.progress-striped .bar {
+  background-color: #62c462;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.progress-info .bar {
+  background-color: #4bb1cf;
+  background-image: -moz-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -ms-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));
+  background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: -o-linear-gradient(top, #5bc0de, #339bb9);
+  background-image: linear-gradient(top, #5bc0de, #339bb9);
+  background-repeat: repeat-x;
+  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);
+}
+.progress-info.progress-striped .bar {
+  background-color: #5bc0de;
+  background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));
+  background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+  background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);
+}
+.accordion {
+  margin-bottom: 18px;
+}
+.accordion-group {
+  margin-bottom: 2px;
+  border: 1px solid #e5e5e5;
+  -webkit-border-radius: 4px;
+  -moz-border-radius: 4px;
+  border-radius: 4px;
+}
+.accordion-heading {
+  border-bottom: 0;
+}
+.accordion-heading .accordion-toggle {
+  display: block;
+  padding: 8px 15px;
+}
+.accordion-inner {
+  padding: 9px 15px;
+  border-top: 1px solid #e5e5e5;
+}
+.carousel {
+  position: relative;
+  margin-bottom: 18px;
+  line-height: 1;
+}
+.carousel-inner {
+  overflow: hidden;
+  width: 100%;
+  position: relative;
+}
+.carousel .item {
+  display: none;
+  position: relative;
+  -webkit-transition: 0.6s ease-in-out left;
+  -moz-transition: 0.6s ease-in-out left;
+  -ms-transition: 0.6s ease-in-out left;
+  -o-transition: 0.6s ease-in-out left;
+  transition: 0.6s ease-in-out left;
+}
+.carousel .item > img {
+  display: block;
+  line-height: 1;
+}
+.carousel .active, .carousel .next, .carousel .prev {
+  display: block;
+}
+.carousel .active {
+  left: 0;
+}
+.carousel .next, .carousel .prev {
+  position: absolute;
+  top: 0;
+  width: 100%;
+}
+.carousel .next {
+  left: 100%;
+}
+.carousel .prev {
+  left: -100%;
+}
+.carousel .next.left, .carousel .prev.right {
+  left: 0;
+}
+.carousel .active.left {
+  left: -100%;
+}
+.carousel .active.right {
+  left: 100%;
+}
+.carousel-control {
+  position: absolute;
+  top: 40%;
+  left: 15px;
+  width: 40px;
+  height: 40px;
+  margin-top: -20px;
+  font-size: 60px;
+  font-weight: 100;
+  line-height: 30px;
+  color: #ffffff;
+  text-align: center;
+  background: #222222;
+  border: 3px solid #ffffff;
+  -webkit-border-radius: 23px;
+  -moz-border-radius: 23px;
+  border-radius: 23px;
+  opacity: 0.5;
+  filter: alpha(opacity=50);
+}
+.carousel-control.right {
+  left: auto;
+  right: 15px;
+}
+.carousel-control:hover {
+  color: #ffffff;
+  text-decoration: none;
+  opacity: 0.9;
+  filter: alpha(opacity=90);
+}
+.carousel-caption {
+  position: absolute;
+  left: 0;
+  right: 0;
+  bottom: 0;
+  padding: 10px 15px 5px;
+  background: #333333;
+  background: rgba(0, 0, 0, 0.75);
+}
+.carousel-caption h4, .carousel-caption p {
+  color: #ffffff;
+}
+.hero-unit {
+  padding: 60px;
+  margin-bottom: 30px;
+  background-color: #f5f5f5;
+  -webkit-border-radius: 6px;
+  -moz-border-radius: 6px;
+  border-radius: 6px;
+}
+.hero-unit h1 {
+  margin-bottom: 0;
+  font-size: 60px;
+  line-height: 1;
+  letter-spacing: -1px;
+}
+.hero-unit p {
+  font-size: 18px;
+  font-weight: 200;
+  line-height: 27px;
+}
+.pull-right {
+  float: right;
+}
+.pull-left {
+  float: left;
+}
+.hide {
+  display: none;
+}
+.show {
+  display: block;
+}
+.invisible {
+  visibility: hidden;
+}
diff --git a/doc/5.1.x/resources/bootstrap.js b/doc/5.1.x/resources/bootstrap.js
new file mode 100644
index 0000000..49aceca
--- /dev/null
+++ b/doc/5.1.x/resources/bootstrap.js
@@ -0,0 +1,1734 @@
+/* ===================================================
+ * bootstrap-transition.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#transitions
+ * ===================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function( $ ) {
+
+  $(function () {
+
+    "use strict"
+
+    /* CSS TRANSITION SUPPORT (https://gist.github.com/373874)
+     * ======================================================= */
+
+    $.support.transition = (function () {
+      var thisBody = document.body || document.documentElement
+        , thisStyle = thisBody.style
+        , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined
+
+      return support && {
+        end: (function () {
+          var transitionEnd = "TransitionEnd"
+          if ( $.browser.webkit ) {
+          	transitionEnd = "webkitTransitionEnd"
+          } else if ( $.browser.mozilla ) {
+          	transitionEnd = "transitionend"
+          } else if ( $.browser.opera ) {
+          	transitionEnd = "oTransitionEnd"
+          }
+          return transitionEnd
+        }())
+      }
+    })()
+
+  })
+  
+}( window.jQuery )
+
+/* =========================================================
+ * bootstrap-modal.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#modals
+ * =========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================= */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* MODAL CLASS DEFINITION
+  * ====================== */
+
+  var Modal = function ( content, options ) {
+    this.options = options
+    this.$element = $(content)
+      .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this))
+  }
+
+  Modal.prototype = {
+
+      constructor: Modal
+
+    , toggle: function () {
+        return this[!this.isShown ? 'show' : 'hide']()
+      }
+
+    , show: function () {
+        var that = this
+
+        if (this.isShown) return
+
+        $('body').addClass('modal-open')
+
+        this.isShown = true
+        this.$element.trigger('show')
+
+        escape.call(this)
+        backdrop.call(this, function () {
+          var transition = $.support.transition && that.$element.hasClass('fade')
+
+          !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position
+
+          that.$element
+            .show()
+
+          if (transition) {
+            that.$element[0].offsetWidth // force reflow
+          }
+
+          that.$element.addClass('in')
+
+          transition ?
+            that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) :
+            that.$element.trigger('shown')
+
+        })
+      }
+
+    , hide: function ( e ) {
+        e && e.preventDefault()
+
+        if (!this.isShown) return
+
+        var that = this
+        this.isShown = false
+
+        $('body').removeClass('modal-open')
+
+        escape.call(this)
+
+        this.$element
+          .trigger('hide')
+          .removeClass('in')
+
+        $.support.transition && this.$element.hasClass('fade') ?
+          hideWithTransition.call(this) :
+          hideModal.call(this)
+      }
+
+  }
+
+
+ /* MODAL PRIVATE METHODS
+  * ===================== */
+
+  function hideWithTransition() {
+    var that = this
+      , timeout = setTimeout(function () {
+          that.$element.off($.support.transition.end)
+          hideModal.call(that)
+        }, 500)
+
+    this.$element.one($.support.transition.end, function () {
+      clearTimeout(timeout)
+      hideModal.call(that)
+    })
+  }
+
+  function hideModal( that ) {
+    this.$element
+      .hide()
+      .trigger('hidden')
+
+    backdrop.call(this)
+  }
+
+  function backdrop( callback ) {
+    var that = this
+      , animate = this.$element.hasClass('fade') ? 'fade' : ''
+
+    if (this.isShown && this.options.backdrop) {
+      var doAnimate = $.support.transition && animate
+
+      this.$backdrop = $('<div class="modal-backdrop ' + animate + '" />')
+        .appendTo(document.body)
+
+      if (this.options.backdrop != 'static') {
+        this.$backdrop.click($.proxy(this.hide, this))
+      }
+
+      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
+
+      this.$backdrop.addClass('in')
+
+      doAnimate ?
+        this.$backdrop.one($.support.transition.end, callback) :
+        callback()
+
+    } else if (!this.isShown && this.$backdrop) {
+      this.$backdrop.removeClass('in')
+
+      $.support.transition && this.$element.hasClass('fade')?
+        this.$backdrop.one($.support.transition.end, $.proxy(removeBackdrop, this)) :
+        removeBackdrop.call(this)
+
+    } else if (callback) {
+      callback()
+    }
+  }
+
+  function removeBackdrop() {
+    this.$backdrop.remove()
+    this.$backdrop = null
+  }
+
+  function escape() {
+    var that = this
+    if (this.isShown && this.options.keyboard) {
+      $(document).on('keyup.dismiss.modal', function ( e ) {
+        e.which == 27 && that.hide()
+      })
+    } else if (!this.isShown) {
+      $(document).off('keyup.dismiss.modal')
+    }
+  }
+
+
+ /* MODAL PLUGIN DEFINITION
+  * ======================= */
+
+  $.fn.modal = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('modal')
+        , options = $.extend({}, $.fn.modal.defaults, typeof option == 'object' && option)
+      if (!data) $this.data('modal', (data = new Modal(this, options)))
+      if (typeof option == 'string') data[option]()
+      else if (options.show) data.show()
+    })
+  }
+
+  $.fn.modal.defaults = {
+      backdrop: true
+    , keyboard: true
+    , show: true
+  }
+
+  $.fn.modal.Constructor = Modal
+
+
+ /* MODAL DATA-API
+  * ============== */
+
+  $(function () {
+    $('body').on('click.modal.data-api', '[data-toggle="modal"]', function ( e ) {
+      var $this = $(this), href
+        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+        , option = $target.data('modal') ? 'toggle' : $.extend({}, $target.data(), $this.data())
+
+      e.preventDefault()
+      $target.modal(option)
+    })
+  })
+
+}( window.jQuery )
+
+/* ============================================================
+ * bootstrap-dropdown.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#dropdowns
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* DROPDOWN CLASS DEFINITION
+  * ========================= */
+
+  var toggle = '[data-toggle="dropdown"]'
+    , Dropdown = function ( element ) {
+        var $el = $(element).on('click.dropdown.data-api', this.toggle)
+        $('html').on('click.dropdown.data-api', function () {
+          $el.parent().removeClass('open')
+        })
+      }
+
+  Dropdown.prototype = {
+
+    constructor: Dropdown
+
+  , toggle: function ( e ) {
+      var $this = $(this)
+        , selector = $this.attr('data-target')
+        , $parent
+        , isActive
+
+      if (!selector) {
+        selector = $this.attr('href')
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+      }
+
+      $parent = $(selector)
+      $parent.length || ($parent = $this.parent())
+
+      isActive = $parent.hasClass('open')
+
+      clearMenus()
+      !isActive && $parent.toggleClass('open')
+
+      return false
+    }
+
+  }
+
+  function clearMenus() {
+    $(toggle).parent().removeClass('open')
+  }
+
+
+  /* DROPDOWN PLUGIN DEFINITION
+   * ========================== */
+
+  $.fn.dropdown = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('dropdown')
+      if (!data) $this.data('dropdown', (data = new Dropdown(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  $.fn.dropdown.Constructor = Dropdown
+
+
+  /* APPLY TO STANDARD DROPDOWN ELEMENTS
+   * =================================== */
+
+  $(function () {
+    $('html').on('click.dropdown.data-api', clearMenus)
+    $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle)
+  })
+
+}( window.jQuery )
+
+/* =============================================================
+ * bootstrap-scrollspy.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#scrollspy
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================== */
+
+!function ( $ ) {
+
+  "use strict"
+
+  /* SCROLLSPY CLASS DEFINITION
+   * ========================== */
+
+  function ScrollSpy( element, options) {
+    var process = $.proxy(this.process, this)
+      , $element = $(element).is('body') ? $(window) : $(element)
+      , href
+    this.options = $.extend({}, $.fn.scrollspy.defaults, options)
+    this.$scrollElement = $element.on('scroll.scroll.data-api', process)
+    this.selector = (this.options.target
+      || ((href = $(element).attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+      || '') + ' .nav li > a'
+    this.$body = $('body').on('click.scroll.data-api', this.selector, process)
+    this.refresh()
+    this.process()
+  }
+
+  ScrollSpy.prototype = {
+
+      constructor: ScrollSpy
+
+    , refresh: function () {
+        this.targets = this.$body
+          .find(this.selector)
+          .map(function () {
+            var href = $(this).attr('href')
+            return /^#\w/.test(href) && $(href).length ? href : null
+          })
+
+        this.offsets = $.map(this.targets, function (id) {
+          return $(id).position().top
+        })
+      }
+
+    , process: function () {
+        var scrollTop = this.$scrollElement.scrollTop() + this.options.offset
+          , offsets = this.offsets
+          , targets = this.targets
+          , activeTarget = this.activeTarget
+          , i
+
+        for (i = offsets.length; i--;) {
+          activeTarget != targets[i]
+            && scrollTop >= offsets[i]
+            && (!offsets[i + 1] || scrollTop <= offsets[i + 1])
+            && this.activate( targets[i] )
+        }
+      }
+
+    , activate: function (target) {
+        var active
+
+        this.activeTarget = target
+
+        this.$body
+          .find(this.selector).parent('.active')
+          .removeClass('active')
+
+        active = this.$body
+          .find(this.selector + '[href="' + target + '"]')
+          .parent('li')
+          .addClass('active')
+
+        if ( active.parent('.dropdown-menu') )  {
+          active.closest('li.dropdown').addClass('active')
+        }
+      }
+
+  }
+
+
+ /* SCROLLSPY PLUGIN DEFINITION
+  * =========================== */
+
+  $.fn.scrollspy = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('scrollspy')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('scrollspy', (data = new ScrollSpy(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.scrollspy.Constructor = ScrollSpy
+
+  $.fn.scrollspy.defaults = {
+    offset: 10
+  }
+
+
+ /* SCROLLSPY DATA-API
+  * ================== */
+
+  $(function () {
+    $('[data-spy="scroll"]').each(function () {
+      var $spy = $(this)
+      $spy.scrollspy($spy.data())
+    })
+  })
+
+}( window.jQuery )
+
+/* ========================================================
+ * bootstrap-tab.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#tabs
+ * ========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ======================================================== */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* TAB CLASS DEFINITION
+  * ==================== */
+
+  var Tab = function ( element ) {
+    this.element = $(element)
+  }
+
+  Tab.prototype = {
+
+    constructor: Tab
+
+  , show: function () {
+      var $this = this.element
+        , $ul = $this.closest('ul:not(.dropdown-menu)')
+        , selector = $this.attr('data-target')
+        , previous
+        , $target
+
+      if (!selector) {
+        selector = $this.attr('href')
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+      }
+
+      if ( $this.parent('li').hasClass('active') ) return
+
+      previous = $ul.find('.active a').last()[0]
+
+      $this.trigger({
+        type: 'show'
+      , relatedTarget: previous
+      })
+
+      $target = $(selector)
+
+      this.activate($this.parent('li'), $ul)
+      this.activate($target, $target.parent(), function () {
+        $this.trigger({
+          type: 'shown'
+        , relatedTarget: previous
+        })
+      })
+    }
+
+  , activate: function ( element, container, callback) {
+      var $active = container.find('> .active')
+        , transition = callback
+            && $.support.transition
+            && $active.hasClass('fade')
+
+      function next() {
+        $active
+          .removeClass('active')
+          .find('> .dropdown-menu > .active')
+          .removeClass('active')
+
+        element.addClass('active')
+
+        if (transition) {
+          element[0].offsetWidth // reflow for transition
+          element.addClass('in')
+        } else {
+          element.removeClass('fade')
+        }
+
+        if ( element.parent('.dropdown-menu') ) {
+          element.closest('li.dropdown').addClass('active')
+        }
+
+        callback && callback()
+      }
+
+      transition ?
+        $active.one($.support.transition.end, next) :
+        next()
+
+      $active.removeClass('in')
+    }
+  }
+
+
+ /* TAB PLUGIN DEFINITION
+  * ===================== */
+
+  $.fn.tab = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('tab')
+      if (!data) $this.data('tab', (data = new Tab(this)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.tab.Constructor = Tab
+
+
+ /* TAB DATA-API
+  * ============ */
+
+  $(function () {
+    $('body').on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) {
+      e.preventDefault()
+      $(this).tab('show')
+    })
+  })
+
+}( window.jQuery )
+
+/* ===========================================================
+ * bootstrap-tooltip.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#tooltips
+ * Inspired by the original jQuery.tipsy by Jason Frame
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+!function( $ ) {
+
+  "use strict"
+
+ /* TOOLTIP PUBLIC CLASS DEFINITION
+  * =============================== */
+
+  var Tooltip = function ( element, options ) {
+    this.init('tooltip', element, options)
+  }
+
+  Tooltip.prototype = {
+
+    constructor: Tooltip
+
+  , init: function ( type, element, options ) {
+      var eventIn
+        , eventOut
+
+      this.type = type
+      this.$element = $(element)
+      this.options = this.getOptions(options)
+      this.enabled = true
+
+      if (this.options.trigger != 'manual') {
+        eventIn  = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
+        eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
+        this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
+        this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
+      }
+
+      this.options.selector ?
+        (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
+        this.fixTitle()
+    }
+
+  , getOptions: function ( options ) {
+      options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data())
+
+      if (options.delay && typeof options.delay == 'number') {
+        options.delay = {
+          show: options.delay
+        , hide: options.delay
+        }
+      }
+
+      return options
+    }
+
+  , enter: function ( e ) {
+      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+      if (!self.options.delay || !self.options.delay.show) {
+        self.show()
+      } else {
+        self.hoverState = 'in'
+        setTimeout(function() {
+          if (self.hoverState == 'in') {
+            self.show()
+          }
+        }, self.options.delay.show)
+      }
+    }
+
+  , leave: function ( e ) {
+      var self = $(e.currentTarget)[this.type](this._options).data(this.type)
+
+      if (!self.options.delay || !self.options.delay.hide) {
+        self.hide()
+      } else {
+        self.hoverState = 'out'
+        setTimeout(function() {
+          if (self.hoverState == 'out') {
+            self.hide()
+          }
+        }, self.options.delay.hide)
+      }
+    }
+
+  , show: function () {
+      var $tip
+        , inside
+        , pos
+        , actualWidth
+        , actualHeight
+        , placement
+        , tp
+
+      if (this.hasContent() && this.enabled) {
+        $tip = this.tip()
+        this.setContent()
+
+        if (this.options.animation) {
+          $tip.addClass('fade')
+        }
+
+        placement = typeof this.options.placement == 'function' ?
+          this.options.placement.call(this, $tip[0], this.$element[0]) :
+          this.options.placement
+
+        inside = /in/.test(placement)
+
+        $tip
+          .remove()
+          .css({ top: 0, left: 0, display: 'block' })
+          .appendTo(inside ? this.$element : document.body)
+
+        pos = this.getPosition(inside)
+
+        actualWidth = $tip[0].offsetWidth
+        actualHeight = $tip[0].offsetHeight
+
+        switch (inside ? placement.split(' ')[1] : placement) {
+          case 'bottom':
+            tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
+            break
+          case 'top':
+            tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
+            break
+          case 'left':
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
+            break
+          case 'right':
+            tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
+            break
+        }
+
+        $tip
+          .css(tp)
+          .addClass(placement)
+          .addClass('in')
+      }
+    }
+
+  , setContent: function () {
+      var $tip = this.tip()
+      $tip.find('.tooltip-inner').html(this.getTitle())
+      $tip.removeClass('fade in top bottom left right')
+    }
+
+  , hide: function () {
+      var that = this
+        , $tip = this.tip()
+
+      $tip.removeClass('in')
+
+      function removeWithAnimation() {
+        var timeout = setTimeout(function () {
+          $tip.off($.support.transition.end).remove()
+        }, 500)
+
+        $tip.one($.support.transition.end, function () {
+          clearTimeout(timeout)
+          $tip.remove()
+        })
+      }
+
+      $.support.transition && this.$tip.hasClass('fade') ?
+        removeWithAnimation() :
+        $tip.remove()
+    }
+
+  , fixTitle: function () {
+      var $e = this.$element
+      if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
+        $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title')
+      }
+    }
+
+  , hasContent: function () {
+      return this.getTitle()
+    }
+
+  , getPosition: function (inside) {
+      return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), {
+        width: this.$element[0].offsetWidth
+      , height: this.$element[0].offsetHeight
+      })
+    }
+
+  , getTitle: function () {
+      var title
+        , $e = this.$element
+        , o = this.options
+
+      title = $e.attr('data-original-title')
+        || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)
+
+      title = title.toString().replace(/(^\s*|\s*$)/, "")
+
+      return title
+    }
+
+  , tip: function () {
+      return this.$tip = this.$tip || $(this.options.template)
+    }
+
+  , validate: function () {
+      if (!this.$element[0].parentNode) {
+        this.hide()
+        this.$element = null
+        this.options = null
+      }
+    }
+
+  , enable: function () {
+      this.enabled = true
+    }
+
+  , disable: function () {
+      this.enabled = false
+    }
+
+  , toggleEnabled: function () {
+      this.enabled = !this.enabled
+    }
+
+  , toggle: function () {
+      this[this.tip().hasClass('in') ? 'hide' : 'show']()
+    }
+
+  }
+
+
+ /* TOOLTIP PLUGIN DEFINITION
+  * ========================= */
+
+  $.fn.tooltip = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('tooltip')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.tooltip.Constructor = Tooltip
+
+  $.fn.tooltip.defaults = {
+    animation: true
+  , delay: 0
+  , selector: false
+  , placement: 'top'
+  , trigger: 'hover'
+  , title: ''
+  , template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
+  }
+
+}( window.jQuery )
+
+/* ===========================================================
+ * bootstrap-popover.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#popovers
+ * ===========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * =========================================================== */
+
+
+!function( $ ) {
+
+ "use strict"
+
+  var Popover = function ( element, options ) {
+    this.init('popover', element, options)
+  }
+
+  /* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
+     ========================================== */
+
+  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
+
+    constructor: Popover
+
+  , setContent: function () {
+      var $tip = this.tip()
+        , title = this.getTitle()
+        , content = this.getContent()
+
+      $tip.find('.popover-title')[ $.type(title) == 'object' ? 'append' : 'html' ](title)
+      $tip.find('.popover-content > *')[ $.type(content) == 'object' ? 'append' : 'html' ](content)
+
+      $tip.removeClass('fade top bottom left right in')
+    }
+
+  , hasContent: function () {
+      return this.getTitle() || this.getContent()
+    }
+
+  , getContent: function () {
+      var content
+        , $e = this.$element
+        , o = this.options
+
+      content = $e.attr('data-content')
+        || (typeof o.content == 'function' ? o.content.call($e[0]) :  o.content)
+
+      content = content.toString().replace(/(^\s*|\s*$)/, "")
+
+      return content
+    }
+
+  , tip: function() {
+      if (!this.$tip) {
+        this.$tip = $(this.options.template)
+      }
+      return this.$tip
+    }
+
+  })
+
+
+ /* POPOVER PLUGIN DEFINITION
+  * ======================= */
+
+  $.fn.popover = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('popover')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('popover', (data = new Popover(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.popover.Constructor = Popover
+
+  $.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
+    placement: 'right'
+  , content: ''
+  , template: '<div class="popover"><div class="arrow"></div><div class="popover-inner"><h3 class="popover-title"></h3><div class="popover-content"><p></p></div></div></div>'
+  })
+
+}( window.jQuery )
+
+/* ==========================================================
+ * bootstrap-alert.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#alerts
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* ALERT CLASS DEFINITION
+  * ====================== */
+
+  var dismiss = '[data-dismiss="alert"]'
+    , Alert = function ( el ) {
+        $(el).on('click', dismiss, this.close)
+      }
+
+  Alert.prototype = {
+
+    constructor: Alert
+
+  , close: function ( e ) {
+      var $this = $(this)
+        , selector = $this.attr('data-target')
+        , $parent
+
+      if (!selector) {
+        selector = $this.attr('href')
+        selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7
+      }
+
+      $parent = $(selector)
+      $parent.trigger('close')
+
+      e && e.preventDefault()
+
+      $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent())
+
+      $parent.removeClass('in')
+
+      function removeElement() {
+        $parent.remove()
+        $parent.trigger('closed')
+      }
+
+      $.support.transition && $parent.hasClass('fade') ?
+        $parent.on($.support.transition.end, removeElement) :
+        removeElement()
+    }
+
+  }
+
+
+ /* ALERT PLUGIN DEFINITION
+  * ======================= */
+
+  $.fn.alert = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('alert')
+      if (!data) $this.data('alert', (data = new Alert(this)))
+      if (typeof option == 'string') data[option].call($this)
+    })
+  }
+
+  $.fn.alert.Constructor = Alert
+
+
+ /* ALERT DATA-API
+  * ============== */
+
+  $(function () {
+    $('body').on('click.alert.data-api', dismiss, Alert.prototype.close)
+  })
+
+}( window.jQuery )
+
+/* ============================================================
+ * bootstrap-button.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#buttons
+ * ============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+  "use strict"
+
+ /* BUTTON PUBLIC CLASS DEFINITION
+  * ============================== */
+
+  var Button = function ( element, options ) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.button.defaults, options)
+  }
+
+  Button.prototype = {
+
+      constructor: Button
+
+    , setState: function ( state ) {
+        var d = 'disabled'
+          , $el = this.$element
+          , data = $el.data()
+          , val = $el.is('input') ? 'val' : 'html'
+
+        state = state + 'Text'
+        data.resetText || $el.data('resetText', $el[val]())
+
+        $el[val](data[state] || this.options[state])
+
+        // push to event loop to allow forms to submit
+        setTimeout(function () {
+          state == 'loadingText' ?
+            $el.addClass(d).attr(d, d) :
+            $el.removeClass(d).removeAttr(d)
+        }, 0)
+      }
+
+    , toggle: function () {
+        var $parent = this.$element.parent('[data-toggle="buttons-radio"]')
+
+        $parent && $parent
+          .find('.active')
+          .removeClass('active')
+
+        this.$element.toggleClass('active')
+      }
+
+  }
+
+
+ /* BUTTON PLUGIN DEFINITION
+  * ======================== */
+
+  $.fn.button = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('button')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('button', (data = new Button(this, options)))
+      if (option == 'toggle') data.toggle()
+      else if (option) data.setState(option)
+    })
+  }
+
+  $.fn.button.defaults = {
+    loadingText: 'loading...'
+  }
+
+  $.fn.button.Constructor = Button
+
+
+ /* BUTTON DATA-API
+  * =============== */
+
+  $(function () {
+    $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) {
+      $(e.target).button('toggle')
+    })
+  })
+
+}( window.jQuery )
+
+/* =============================================================
+ * bootstrap-collapse.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#collapse
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+  "use strict"
+
+  var Collapse = function ( element, options ) {
+  	this.$element = $(element)
+    this.options = $.extend({}, $.fn.collapse.defaults, options)
+
+    if (this.options["parent"]) {
+      this.$parent = $(this.options["parent"])
+    }
+
+    this.options.toggle && this.toggle()
+  }
+
+  Collapse.prototype = {
+
+    constructor: Collapse
+
+  , dimension: function () {
+      var hasWidth = this.$element.hasClass('width')
+      return hasWidth ? 'width' : 'height'
+    }
+
+  , show: function () {
+      var dimension = this.dimension()
+        , scroll = $.camelCase(['scroll', dimension].join('-'))
+        , actives = this.$parent && this.$parent.find('.in')
+        , hasData
+
+      if (actives && actives.length) {
+        hasData = actives.data('collapse')
+        actives.collapse('hide')
+        hasData || actives.data('collapse', null)
+      }
+
+      this.$element[dimension](0)
+      this.transition('addClass', 'show', 'shown')
+      this.$element[dimension](this.$element[0][scroll])
+
+    }
+
+  , hide: function () {
+      var dimension = this.dimension()
+      this.reset(this.$element[dimension]())
+      this.transition('removeClass', 'hide', 'hidden')
+      this.$element[dimension](0)
+    }
+
+  , reset: function ( size ) {
+      var dimension = this.dimension()
+
+      this.$element
+        .removeClass('collapse')
+        [dimension](size || 'auto')
+        [0].offsetWidth
+
+      this.$element.addClass('collapse')
+    }
+
+  , transition: function ( method, startEvent, completeEvent ) {
+      var that = this
+        , complete = function () {
+            if (startEvent == 'show') that.reset()
+            that.$element.trigger(completeEvent)
+          }
+
+      this.$element
+        .trigger(startEvent)
+        [method]('in')
+
+      $.support.transition && this.$element.hasClass('collapse') ?
+        this.$element.one($.support.transition.end, complete) :
+        complete()
+  	}
+
+  , toggle: function () {
+      this[this.$element.hasClass('in') ? 'hide' : 'show']()
+  	}
+
+  }
+
+  /* COLLAPSIBLE PLUGIN DEFINITION
+  * ============================== */
+
+  $.fn.collapse = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('collapse')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('collapse', (data = new Collapse(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.collapse.defaults = {
+    toggle: true
+  }
+
+  $.fn.collapse.Constructor = Collapse
+
+
+ /* COLLAPSIBLE DATA-API
+  * ==================== */
+
+  $(function () {
+    $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) {
+      var $this = $(this), href
+        , target = $this.attr('data-target')
+          || e.preventDefault()
+          || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7
+        , option = $(target).data('collapse') ? 'toggle' : $this.data()
+      $(target).collapse(option)
+    })
+  })
+
+}( window.jQuery )
+
+/* ==========================================================
+ * bootstrap-carousel.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#carousel
+ * ==========================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ========================================================== */
+
+
+!function( $ ){
+
+  "use strict"
+
+ /* CAROUSEL CLASS DEFINITION
+  * ========================= */
+
+  var Carousel = function (element, options) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.carousel.defaults, options)
+    this.options.slide && this.slide(this.options.slide)
+  }
+
+  Carousel.prototype = {
+
+    cycle: function () {
+      this.interval = setInterval($.proxy(this.next, this), this.options.interval)
+      return this
+    }
+
+  , to: function (pos) {
+      var $active = this.$element.find('.active')
+        , children = $active.parent().children()
+        , activePos = children.index($active)
+        , that = this
+
+      if (pos > (children.length - 1) || pos < 0) return
+
+      if (this.sliding) {
+        return this.$element.one('slid', function () {
+          that.to(pos)
+        })
+      }
+
+      if (activePos == pos) {
+        return this.pause().cycle()
+      }
+
+      return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos]))
+    }
+
+  , pause: function () {
+      clearInterval(this.interval)
+      return this
+    }
+
+  , next: function () {
+      if (this.sliding) return
+      return this.slide('next')
+    }
+
+  , prev: function () {
+      if (this.sliding) return
+      return this.slide('prev')
+    }
+
+  , slide: function (type, next) {
+      var $active = this.$element.find('.active')
+        , $next = next || $active[type]()
+        , isCycling = this.interval
+        , direction = type == 'next' ? 'left' : 'right'
+        , fallback  = type == 'next' ? 'first' : 'last'
+        , that = this
+
+      this.sliding = true
+
+      isCycling && this.pause()
+
+      $next = $next.length ? $next : this.$element.find('.item')[fallback]()
+
+      if (!$.support.transition && this.$element.hasClass('slide')) {
+        this.$element.trigger('slide')
+        $active.removeClass('active')
+        $next.addClass('active')
+        this.sliding = false
+        this.$element.trigger('slid')
+      } else {
+        $next.addClass(type)
+        $next[0].offsetWidth // force reflow
+        $active.addClass(direction)
+        $next.addClass(direction)
+        this.$element.trigger('slide')
+        this.$element.one($.support.transition.end, function () {
+          $next.removeClass([type, direction].join(' ')).addClass('active')
+          $active.removeClass(['active', direction].join(' '))
+          that.sliding = false
+          setTimeout(function () { that.$element.trigger('slid') }, 0)
+        })
+      }
+
+      isCycling && this.cycle()
+
+      return this
+    }
+
+  }
+
+
+ /* CAROUSEL PLUGIN DEFINITION
+  * ========================== */
+
+  $.fn.carousel = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('carousel')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('carousel', (data = new Carousel(this, options)))
+      if (typeof option == 'number') data.to(option)
+      else if (typeof option == 'string' || (option = options.slide)) data[option]()
+      else data.cycle()
+    })
+  }
+
+  $.fn.carousel.defaults = {
+    interval: 5000
+  }
+
+  $.fn.carousel.Constructor = Carousel
+
+
+ /* CAROUSEL DATA-API
+  * ================= */
+
+  $(function () {
+    $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) {
+      var $this = $(this), href
+        , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7
+        , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data())
+      $target.carousel(options)
+      e.preventDefault()
+    })
+  })
+
+}( window.jQuery )
+
+/* =============================================================
+ * bootstrap-typeahead.js v2.0.0
+ * http://twitter.github.com/bootstrap/javascript.html#typeahead
+ * =============================================================
+ * Copyright 2012 Twitter, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============================================================ */
+
+!function( $ ){
+
+  "use strict"
+
+  var Typeahead = function ( element, options ) {
+    this.$element = $(element)
+    this.options = $.extend({}, $.fn.typeahead.defaults, options)
+    this.matcher = this.options.matcher || this.matcher
+    this.sorter = this.options.sorter || this.sorter
+    this.highlighter = this.options.highlighter || this.highlighter
+    this.$menu = $(this.options.menu).appendTo('body')
+    this.source = this.options.source
+    this.shown = false
+    this.listen()
+  }
+
+  Typeahead.prototype = {
+
+    constructor: Typeahead
+
+  , select: function () {
+      var val = this.$menu.find('.active').attr('data-value')
+      this.$element.val(val)
+      return this.hide()
+    }
+
+  , show: function () {
+      var pos = $.extend({}, this.$element.offset(), {
+        height: this.$element[0].offsetHeight
+      })
+
+      this.$menu.css({
+        top: pos.top + pos.height
+      , left: pos.left
+      })
+
+      this.$menu.show()
+      this.shown = true
+      return this
+    }
+
+  , hide: function () {
+      this.$menu.hide()
+      this.shown = false
+      return this
+    }
+
+  , lookup: function (event) {
+      var that = this
+        , items
+        , q
+
+      this.query = this.$element.val()
+
+      if (!this.query) {
+        return this.shown ? this.hide() : this
+      }
+
+      items = $.grep(this.source, function (item) {
+        if (that.matcher(item)) return item
+      })
+
+      items = this.sorter(items)
+
+      if (!items.length) {
+        return this.shown ? this.hide() : this
+      }
+
+      return this.render(items.slice(0, this.options.items)).show()
+    }
+
+  , matcher: function (item) {
+      return ~item.toLowerCase().indexOf(this.query.toLowerCase())
+    }
+
+  , sorter: function (items) {
+      var beginswith = []
+        , caseSensitive = []
+        , caseInsensitive = []
+        , item
+
+      while (item = items.shift()) {
+        if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)
+        else if (~item.indexOf(this.query)) caseSensitive.push(item)
+        else caseInsensitive.push(item)
+      }
+
+      return beginswith.concat(caseSensitive, caseInsensitive)
+    }
+
+  , highlighter: function (item) {
+      return item.replace(new RegExp('(' + this.query + ')', 'ig'), function ($1, match) {
+        return '<strong>' + match + '</strong>'
+      })
+    }
+
+  , render: function (items) {
+      var that = this
+
+      items = $(items).map(function (i, item) {
+        i = $(that.options.item).attr('data-value', item)
+        i.find('a').html(that.highlighter(item))
+        return i[0]
+      })
+
+      items.first().addClass('active')
+      this.$menu.html(items)
+      return this
+    }
+
+  , next: function (event) {
+      var active = this.$menu.find('.active').removeClass('active')
+        , next = active.next()
+
+      if (!next.length) {
+        next = $(this.$menu.find('li')[0])
+      }
+
+      next.addClass('active')
+    }
+
+  , prev: function (event) {
+      var active = this.$menu.find('.active').removeClass('active')
+        , prev = active.prev()
+
+      if (!prev.length) {
+        prev = this.$menu.find('li').last()
+      }
+
+      prev.addClass('active')
+    }
+
+  , listen: function () {
+      this.$element
+        .on('blur',     $.proxy(this.blur, this))
+        .on('keypress', $.proxy(this.keypress, this))
+        .on('keyup',    $.proxy(this.keyup, this))
+
+      if ($.browser.webkit || $.browser.msie) {
+        this.$element.on('keydown', $.proxy(this.keypress, this))
+      }
+
+      this.$menu
+        .on('click', $.proxy(this.click, this))
+        .on('mouseenter', 'li', $.proxy(this.mouseenter, this))
+    }
+
+  , keyup: function (e) {
+      e.stopPropagation()
+      e.preventDefault()
+
+      switch(e.keyCode) {
+        case 40: // down arrow
+        case 38: // up arrow
+          break
+
+        case 9: // tab
+        case 13: // enter
+          if (!this.shown) return
+          this.select()
+          break
+
+        case 27: // escape
+          this.hide()
+          break
+
+        default:
+          this.lookup()
+      }
+
+  }
+
+  , keypress: function (e) {
+      e.stopPropagation()
+      if (!this.shown) return
+
+      switch(e.keyCode) {
+        case 9: // tab
+        case 13: // enter
+        case 27: // escape
+          e.preventDefault()
+          break
+
+        case 38: // up arrow
+          e.preventDefault()
+          this.prev()
+          break
+
+        case 40: // down arrow
+          e.preventDefault()
+          this.next()
+          break
+      }
+    }
+
+  , blur: function (e) {
+      var that = this
+      e.stopPropagation()
+      e.preventDefault()
+      setTimeout(function () { that.hide() }, 150)
+    }
+
+  , click: function (e) {
+      e.stopPropagation()
+      e.preventDefault()
+      this.select()
+    }
+
+  , mouseenter: function (e) {
+      this.$menu.find('.active').removeClass('active')
+      $(e.currentTarget).addClass('active')
+    }
+
+  }
+
+
+  /* TYPEAHEAD PLUGIN DEFINITION
+   * =========================== */
+
+  $.fn.typeahead = function ( option ) {
+    return this.each(function () {
+      var $this = $(this)
+        , data = $this.data('typeahead')
+        , options = typeof option == 'object' && option
+      if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))
+      if (typeof option == 'string') data[option]()
+    })
+  }
+
+  $.fn.typeahead.defaults = {
+    source: []
+  , items: 8
+  , menu: '<ul class="typeahead dropdown-menu"></ul>'
+  , item: '<li><a href="#"></a></li>'
+  }
+
+  $.fn.typeahead.Constructor = Typeahead
+
+
+ /* TYPEAHEAD DATA-API
+  * ================== */
+
+  $(function () {
+    $('body').on('focus.typeahead.data-api', '[data-provide="typeahead"]', function (e) {
+      var $this = $(this)
+      if ($this.data('typeahead')) return
+      e.preventDefault()
+      $this.typeahead($this.data())
+    })
+  })
+
+}( window.jQuery )
diff --git a/doc/5.1.x/resources/custom.css b/doc/5.1.x/resources/custom.css
new file mode 100644
index 0000000..21ea222
--- /dev/null
+++ b/doc/5.1.x/resources/custom.css
@@ -0,0 +1,175 @@
+/*
+ Sections padding customizations.
+*/
+body {
+	background-color: #fff;
+	width: 1200px;
+	margin: 0 auto;
+	padding-bottom: 30px;
+	color: #383838;
+}
+
+@media (max-width : 1224px) {	
+	body {
+		background-color: #fff;
+	width: 690px;
+	margin: 0 auto;
+	padding-bottom: 30px;
+	color: #383838;
+}
+	
+img {
+	max-width: 70%;
+	}
+}
+
+a:hover {
+	color: #383838;
+}
+
+h1,h2,h3,h4,h5 {
+	padding: 12px 0;
+	color: #000;
+}
+
+p,dl {
+	
+}
+
+ul,ol {
+	
+}
+
+ul ul {
+	padding-left: 15px;
+}
+
+li {
+	line-height: 22px;
+}
+
+
+ol ol {
+	padding-left: 20px;
+}
+
+ol {
+	margin: 0 0 30px 0;
+}
+
+table {
+	margin-left: 50px;
+}
+
+img {
+	box-shadow: 0 2px 6px #999;
+	margin: 1.5em auto 3em auto;
+	display: block;
+}
+
+pre {
+	left: 50px;
+	width: 90%;
+	position: relative;
+}
+
+/*
+ Color customizations.
+*/
+td,th {
+	border: 1px solid #ddd;
+}
+
+.toc {
+	margin: 10px 0;
+	padding: 10px 30px;
+	border: 1px solid #ddd;
+}
+
+ol li {
+	
+}
+
+code,pre {
+	color: #25587E;
+}
+
+/*
+ Welcome page & header customizations.
+*/
+#header {
+	width: inherit;
+	height: 70px;;
+	padding: 20px 0 0 0;
+	margin-bottom: 50px;
+}
+
+.clear {
+	clear: both;
+}
+
+#logo {
+	position: relative;
+	background: url("images/logo.png") no-repeat;
+	display: block;
+	height: 70px;
+	width: 229px;
+}
+
+#logo img {
+	width: 190px;
+	height: auto;
+	box-shadow: none !important;
+	border: none;
+	margin: 0 !important;
+}
+
+.visit a {
+	display: block;
+	width: 180px;
+	height: 35px;
+	text-align: center;
+	color: #fff;
+	background-color: #7269a4;
+	font-size: 14px;
+	margin: 30px 0 0 0;
+	line-height: 35px;
+	font-weight: bold;
+	letter-spacing: 1px;
+}
+
+.visit a:hover {
+	background-color: #be1a78;
+}
+
+.col1,.col2 {
+	display: 0;
+	margin: 20px 0;
+	padding: 0;
+	border: none;
+}
+
+.col1 {
+	width: 40%;
+}
+
+.col2 {
+	width: 60%;
+}
+
+.left {
+	float: left !important;
+}
+
+.right {
+	float: right !important;
+}
+
+code {
+  background-color: #fafafc !important;
+  border: none !important;
+}
+
+.label-danger {
+  background-color: #d9534f;
+}
\ No newline at end of file
diff --git a/doc/5.1.x/resources/images/logo.png b/doc/5.1.x/resources/images/logo.png
new file mode 100644
index 0000000..003ec55
--- /dev/null
+++ b/doc/5.1.x/resources/images/logo.png
Binary files differ
diff --git a/doc/5.1.x/resources/images/screenshot.png b/doc/5.1.x/resources/images/screenshot.png
new file mode 100644
index 0000000..322280b
--- /dev/null
+++ b/doc/5.1.x/resources/images/screenshot.png
Binary files differ
diff --git a/doc/5.1.x/specifier/Sirius Specifier Manual.html b/doc/5.1.x/specifier/Sirius Specifier Manual.html
new file mode 100644
index 0000000..33138e4
--- /dev/null
+++ b/doc/5.1.x/specifier/Sirius Specifier Manual.html
@@ -0,0 +1,82 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Sirius Specifier Manual</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusSpecifierManual">Sirius Specifier Manual</h1>
+		<p>This document describes how to create your own designers using Sirius. To learn how to 
+			<strong>
+				<em>use</em>
+			</strong> existing designers, refer to the 
+			<a href="../user/Sirius%20User%20Manual.html">Sirius User Manual</a> .
+		</p>
+		<p>You will find the following sections:</p>
+		<ul>
+			<li>
+				<a href="general/Specifying_Viewpoints.html">
+					<strong>Viewpoints</strong>
+				</a> gives a general overview of what viewpoints are and how they are specified, tested and deployed.
+			</li>
+			<li>The next sections are specific to a kind of representation supported by Sirius:
+				<ul>
+					<li>
+						<a href="diagrams/Diagrams.html">
+							<strong>Diagrams</strong>
+						</a> describes how to specify general graphical modelers.
+					</li>
+					<li>
+						<a href="sequences/Sequence%20Diagrams.html">
+							<strong>Sequence Diagrams</strong>
+						</a> are a special case of diagram with many peculiarities and specific kinds of tools, which are detailed here.
+					</li>
+					<li>
+						<a href="tables/Tables.html">
+							<strong>Tables</strong>
+						</a> covers how to specify both edition tables and matrix-like cross-tables.
+					</li>
+					<li>
+						<a href="trees/Trees.html">
+							<strong>Trees</strong>
+						</a> shows how to create tree-like modelers for a hierarchical view of data.
+					</li>
+					<li>
+						<a href="properties/Properties_View_Description.html">
+							<strong>Properties View</strong>
+						</a> shows how to define custom properties views for your modelers.
+					</li>
+				</ul>
+			</li>
+			<li>
+				<a href="general/Model_Operations.html">
+					<strong>Model Operations</strong>
+				</a> describes the small language which can be used throughout 
+				<a href="../Glossary.html#VSM">
+					<em>Viewpoint Specification Models</em>
+				</a> to describe behavior (for example for tools).
+			</li>
+			<li>
+				<a href="general/Colors.html">
+					<strong>Colors</strong>
+				</a> explains how colors can be specified for all kinds of representations.
+			</li>
+			<li>
+				<a href="general/Writing_Queries.html">
+					<strong>Queries and Interpreted Expressions</strong>
+				</a> explains the general rules to follow to write the expressions used inside 
+				<a href="../Glossary.html#VSM">
+					<em>Viewpoint Specification Models</em>
+				</a>, and the various languages supported.
+			</li>
+		</ul>
+		<p>For more information on Sirius, please refer to the 
+			<a href="../user/Sirius%20User%20Manual.html">
+				<strong>Sirius User Manual</strong>
+			</a>, which describes how end-users can use the designers you created.
+		</p>
+		<p>In addition to this documentation, see also the <a href="http://www.eclipse.org/sirius" target="_blank">main project site</a>: and the <a href="http://wiki.eclipse.org/Sirius" target="_blank">top-level wiki page</a>.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/cheatsheets/CreatingViewpointSpecification.xml b/doc/5.1.x/specifier/cheatsheets/CreatingViewpointSpecification.xml
new file mode 100644
index 0000000..fa34009
--- /dev/null
+++ b/doc/5.1.x/specifier/cheatsheets/CreatingViewpointSpecification.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<cheatsheet title="Creating a viewpoint specification project">
+  <intro>
+    <description>Learn how to create a minimal working viewpoint specification project that can be enriched later.</description>
+  </intro>
+  <item title="Create the project" dialog="true" skip="false">
+    <description>First, you need to create a Viewpoint Specification Project.</description>
+    
+    <subitem label="Go to the 'Sirius' perspective." />
+    <subitem label="In the 'Model Explorer' view, right-click and select New &gt; Viewpoint Specification Project." />
+    <subitem label="Enter the name of the new project and hit 'Next'. The convention is to use the name of the main domain model&apos;s plug-in, followed by '.design'." />
+    <subitem label="On the next page, enter the name of the Viewpoint Specification Model file, and then 'Finish'." />
+  </item>
+  <item title="Fill the Viewpoint Specification Model" dialog="true" skip="false">
+    <description>
+      The project created is a complete Eclipse plug-in project, and contains an empty Viewpoint Specification Model. Refer to the Sirius Specifier Manual to learn of to specify viewpoints and representations. The basic idea is to:
+    </description>
+    <subitem label="Create one or more Viewpoint element inside the VSM." />
+    <subitem label="Inside each Viewpoint, create one or more representation descriptions, for example a diagram description." />
+    <subitem label="Define the structure of your representation, i.e. what elements should be visible and how should they be organized." />
+    <subitem label="Define the style of your representation, i.e. for each kind of element it will show, what shape, color, etc. should it have." />
+    <subitem label="Finally, define the behavior of your representation by associating tools to each kind of element." />
+  </item>
+  <item title="Test and refine your representations" dialog="true" skip="false">
+    <description>
+      Once you have a basic representation defined, even if it is just a skeleton with no behavior, start to test it and refine the definition. In most cases, it is possible to test your VSMs dynamically, with no need to compile or deploy anything.
+    </description>
+    <subitem label="In the same workspace in which you are defining your VSM, create a Modeling project with a sample domain model." />
+    <subitem label="On the Modeling project, enable the Viewpoint which you are currently specifying." />
+    <subitem label="Create an instance of the representation your are developing." />
+    <subitem label="Keep both the representation and the VSM opened. When you change and save your VSM, the representation will automatically be updated to take the new, improved definition into account." />
+    <subitem label="Continue to develop your representation(s) interactively and interactively until you are satisfied. "/> 
+  </item>
+  <item title="Test your representation in deployed mode" dialog="true" skip="false">
+    <description>
+      When you are satisfied with your viewpoints and representations definitions, you can test them in a non-dynamic setting, closer to how your users will experience it.
+    </description>
+    <subitem label="Create a new 'Eclipse Application' launch configuration using the 'Run > Run Configurations...' menu." />
+    <subitem label="Run the launch configuration, and test your viewpoints." />
+  </item>
+  <item title="Deploy your viewpoints" dialog="true" skip="false">
+    <description>
+      When development is finished, you can build and deploy your Viewpoint Specification Project like any other Eclipse plug-in. Juste make sure the project's dependencies include everything you need, in particular the domain model plug-ins and the Sirius plug-ins which provide support for the query language(s) you used in your VSM.
+    </description>
+  </item>
+</cheatsheet>
diff --git a/doc/5.1.x/specifier/diagrams/Diagrams.html b/doc/5.1.x/specifier/diagrams/Diagrams.html
new file mode 100644
index 0000000..f2786d9
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/Diagrams.html
@@ -0,0 +1,1952 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Diagrams</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SpecifyingDiagramEditors">Specifying Diagram Editors</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SpecifyingDiagramEditors">Specifying Diagram Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#diagram_description">Diagram Description</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#layout">Layout Configuration</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#layers_graphical_elements">Layers and Graphical Elements</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#layers">Layers</a>
+							</li>
+							<li>
+								<a href="#graphical_elements">Graphical Elements and Mappings</a>
+							</li>
+							<li>
+								<a href="#nodes">Nodes</a>
+							</li>
+							<li>
+								<a href="#containers">Containers</a>
+							</li>
+							<li>
+								<a href="#bordered_nodes">Bordered Nodes</a>
+							</li>
+							<li>
+								<a href="#edges">Edges</a>
+							</li>
+							<li>
+								<a href="#decorations">Decorations</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#styling">Styling</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#conditional_styles">Conditional Styles</a>
+							</li>
+							<li>
+								<a href="#label_style">Label Properties</a>
+							</li>
+							<li>
+								<a href="#size">Size Properties</a>
+							</li>
+							<li>
+								<a href="#colors">Colors</a>
+							</li>
+							<li>
+								<a href="#authorizedsides">Authorized Sides</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#tools">Tools</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#tools_organization">Tools Organization</a>
+							</li>
+							<li>
+								<a href="#tools_specification">Tools Specification</a>
+							</li>
+							<li>
+								<a href="#tools_reference">Tools Reference</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#filters">Filters</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#mapping_filter">Mapping Filter</a>
+							</li>
+							<li>
+								<a href="#variable_filter">Variable Filter</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#validation">Validation Rules</a>
+					</li>
+					<li>
+						<a href="#extensibility">Diagram Extensibility Features</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#diagram_extension">Diagram Extensions</a>
+							</li>
+							<li>
+								<a href="#mapping_imports">Mapping Imports</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#customization">Diagram Styles Customization</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#enum_customization">Style Customization of an Enumerator property </a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Sirius supports the definition of sophisticated graphical modelers, with support for many features like filters, layers, drag&#8217;n&#8217;drop, complex styling etc.</p>
+		<p>Diagrams support several kinds of graphical constructs: simple nodes, containers (which can contain other nodes or containers), lists, bordered nodes (nodes which appear on the side of other elements, typically to represent ports), and edges between all of these. Each kind of element supports a rich set of possible styles (shape and color).</p>
+		<p>As the specifier of Sirius diagrams, you have total control on how the elements in your semantic models are 
+			<em>represented</em> using the constructs provided by Sirius, and how they 
+			<em>behave</em>. In particular, this means the structure of the graphical elements shown on a diagram (which element contains which, how they are connected) does not have to match the &#8220;physical&#8221; structure of the semantic model being represented. The two are completely de-correlated, and you can choose to represent your semantic models in ways which make sense from various point of views.
+		</p>
+		<h2 id="diagram_description">Diagram Description</h2>
+		<p>Diagrams are configured by creating a 
+			<em>Diagram Description</em> element (inside a 
+			<em>Viewpoint</em>) and its sub-elements (which describe the layers, graphical elements and tools).
+		</p>
+		<p>Like many elements inside a 
+			<a href="../../Glossary.html#VSM">
+				<em>VSM</em>
+			</a>, 
+			<em>Diagram Description</em> have a mandatory 
+			<em>Id</em>, which should be unique and stable across revisions of the diagram specification, and an optional 
+			<em>Label</em> which is used for presentation purpose (i.e. it is the name visible to end-users). If no 
+			<em>Label</em> is specified, the 
+			<em>Id</em> is used for presentation. Note that changing the 
+			<em>Id</em> will break existing diagrams which were created using the previous version; changing the 
+			<em>Label</em> is safe.
+		</p>
+		<p>The mandatory 
+			<em>Domain Class</em> attribute is the type of semantic element which are represented by the diagram. In the 
+			<em>Model Explorer</em>, end-users will be able to create new instances of this diagram on semantic elements of this type (assuming the corresponding viewpoint is enabled in the 
+			<em>Modeling Project</em>). The syntax for the domain class name can be the basic name, like 
+			<code>Package</code>, a qualified name using name of the EMF EPackage which defines the type, like 
+			<code>uml::Package</code>, or a fully qualified URI like 
+			<code>http://www.eclipse.org/uml2/3.0.0/UML#//Package</code>.
+		</p>
+		<p>By default, new diagrams can be created on 
+			<em>any</em> instance of the 
+			<em>Domain Class</em>. You can use the 
+			<em>Precondition Expression</em> to change this. If such an expression is specified, it will be evaluated in the context of the semantic element the user has selected, and only if the expression returns 
+			<code>true</code> will the user be able to create a new diagram on this element.
+		</p>
+		<p>The default title for newly created diagram can be specified using the 
+			<em>Title expression</em> (
+			<em>Advanced</em> category), which is evaluated in the context of the semantic element on which the diagram is created, and should return a string. If the expression is not specified, the default title is the label of the diagram description (of its 
+			<em>Id</em> if no 
+			<em>Label</em> is set) prefixed with the string 
+			<code>"new "</code> (e.g. 
+			<code>new Package Contents</code>).
+		</p>
+		<p>It is recommended that the 
+			<em>Diagram Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the 
+			<em>Metamodels</em> property section of the 
+			<em>Diagram Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your 
+			<a href="../../Glossary.html#VSM">
+				<em>VSM</em>
+			</a>.
+		</p>
+		<p>The 
+			<em>Initialization</em> and 
+			<em>Show on startup</em> flags control whether diagram instances are created and/or opened automatically without user intervention. If 
+			<em>Initialization</em> is set, then when the viewpoint which contains this diagram description is enabled, instances of this diagram description will be automatically created on all compatible semantic elements. If 
+			<em>Show on startup</em> is set, then when a modeling project is opened which contains instances of this diagram description, they will be opened: if only one such representation exist, it will be opened automatically; if there are more than one, a dialog box will appear to allow the user to select which one(s) to open. 
+			<strong>WARNING</strong>: Then 
+			<em>Initialization</em> flag can have a negative impact on performance: if it is set on a given diagram, then when the user enables the viewpoint which defines this diagram Sirius will attempt to find all possible elements in the semantic model on which it may be possible to create such a diagram. This can take a long time on big semantic models.
+		</p>
+		<p>If 
+			<em>Enable Popup Bars</em> flag is set, then when the end-user leaves the mouse pointer still on a diagram (or diagram element) for a small time, a 
+			<em>popup bar</em> will appear with shortcut buttons to all the tools which can be applied in this context. It can be useful to create elements without going to the palette to select tools, but it can also become visually distracting if too many tools are available in the popup bar.
+		</p>
+		<p>The content of the 
+			<em>Diagram Description</em> is mostly made of 
+			<a href="#graphical_elements">graphical elements mappings</a>, organized in 
+			<a href="#layers">layers</a>, and their associated 
+			<a href="#tools">tools</a>. In addition, it can also contain 
+			<a href="#validation">validation rules</a>, 
+			<a href="#filters">filters</a> and 
+			<a href="#layout">layout configuration</a> information.
+		</p>
+		<p>Note that the 
+			<em>Window Title</em> label and 
+			<em>Message</em> label are 
+			<a href="../general/Specifying_Viewpoints.html#translatable_messages">
+				<em>Translatable Messages</em>
+			</a> and can therefore be localized.
+		</p>
+		<h3 id="layout">Layout Configuration</h3>
+		<p>Sirius provides a default algorithm to perform an automatic layout of all the graphical elements on a diagram (excluding 
+			<a href="../../user/diagrams/Diagrams.html#diagram_element_pinning">pinned elements</a> ). If the default algorithm does not fit your needs, you can configure some parameters or request for alternate algorithms (currently only one) directly inside the VSM.
+		</p>
+		<p>The 
+			<em>Composite Layout</em> enables one to specify the 
+			<code>padding</code> between elements and the 
+			<code>direction</code> for the default algorithm.
+		</p>
+		<p>The 
+			<em>Ordered Tree Layout</em> enables one to lay out nodes as an ordered tree. The manner to retrieve children for each node should be specified.
+		</p>
+		<p>NOTE: these layout algorithms manage only nodes connected by edges, other nodes are layouted from left to right as usual.</p>
+		<p>If you need to go beyond that, you can provide your own layout algorithm programmatically (see the 
+			<a href="../../developer/Sirius%20Developer%20Manual.html">developer documentation</a> for details).
+		</p>
+		<h2 id="layers_graphical_elements">Layers and Graphical Elements</h2>
+		<p>This section describes how to specify the graphical elements which should appear on your diagram, and how to organize them.</p>
+		<h3 id="layers">Layers</h3>
+		<p>All the graphical elements and tools on a Sirius diagram are part of a 
+			<em>Layer</em>. Every diagram 
+			<em>must</em> have a default layer, which is always enabled, and zero or more 
+			<em>additional layers</em> that the end-user can enable or disable following the optional flag value. Note that the default layer is created at diagram creation. When a layer is enabled, all the graphical elements and tools it defines are also enabled.
+		</p>
+		<p>The elements which are defined in different layers can interact and reference themselves. For example, it is possible to define a type of edge (connection) between elements which are defined in different layers; the edges will only be visible if all the concerned layers are enabled: the ones which define the source graphical element, the one for the target graphical element, and the one for the edge itself.</p>
+		<p>Layers are defined directly inside the 
+			<em>Diagram Description</em> element. You must have exactly one 
+			<em>Default Layer</em> (whose name does not matter), and as many 
+			<em>Additional Layers</em> as you need. 
+		</p>
+		<ul>
+			<li>Additional layers have an 
+				<em>Optional</em> flag (unset by default) that specify whether the additional layer can be disabled (if true) or not by the end-user.
+			</li>
+			<li>The 
+				<em>Active by default</em> flag, if it set (unset by default), the layer will be automatically enabled when the user creates a new diagram of this type. This flag has no effect in the case where the optional flag is unset, the layer become mandatory and cannot be disabled by the end-user.
+			</li>
+		</ul>
+		<p>The 
+			<em>Label</em> (or 
+			<em>Id</em> if not label is set) of an optional layer is used in the drop-down menu available to users in the diagram&#8217;s tabbar, from which they can enable or disable them. Mandatory layers are not visible in this menu. The 
+			<em>Layers</em> can 
+			<em>contain</em> graphical elements and tools definitions (as described below), but they can also 
+			<em>reuse</em> tools and mappings (graphical elements definitions) which are defined in other layers using the 
+			<em>Reused Tools</em> and 
+			<em>Reused Mappings</em> in the 
+			<em>Advanced</em> category. If a layer 
+			<em>L1</em> reuses elements defined in another layer 
+			<em>L2</em>, these elements will be enabled whenever 
+			<em>L1</em> is enabled, even if 
+			<em>L2</em> is not. However if both 
+			<em>L1</em> and 
+			<em>L2</em> are enabled, the elements are enabled only once (i.e. graphical elements do not appear once for 
+			<em>L1</em> and once for 
+			<em>L2</em>).
+		</p>
+		<h4 id="Transientlayer">Transient layer</h4>
+		<p>A transient layer is a layer that contains only 
+			<em>Decoration Description</em> and/or tools.
+			<br/>When applying a transient layer, the diagram is 
+			<strong>never</strong> modified. Tools are displayed in the palette and decorations are refreshed in opened editors.
+		</p>
+		<p>Note that the 
+			<em>Active by default</em> flag have a different meaning for transient layer. If 
+			<em>Active by default</em> is set, the transient layer will be automatically enabled when the user 
+			<strong>opens</strong> a diagram (and not specially when he creates a new diagram).
+		</p>
+		<h3 id="graphical_elements">Graphical Elements and Mappings</h3>
+		<p>This section describes the different kinds of graphical elements supported on Sirius diagrams and the general principle of how they are specified inside the VSM, through the notion of 
+			<em>mapping</em>.
+		</p>
+		<p>
+			<strong>Graphical Vocabulary.</strong> Sirius diagrams can contain several different types of graphical elements, which are described inside the 
+			<em>Layer</em> elements. These are:
+		</p>
+		<ul>
+			<li>
+				<em>Nodes</em> for elements which can not contain other elements;
+			</li>
+			<li>
+				<em>Containers</em> for elements which can contain other elements, including other containers;
+			</li>
+			<li>
+				<em>List containers</em> (or just 
+				<em>Lists</em>), which are a special kind of containers. They present their direct sub-elements as a vertical list of text items (with an optional icon). List containers are not recursive.
+			</li>
+			<li>
+				<em>Region Container</em>, which are a special kind of containers. They present their direct sub-container as a vertical or horizontal stack of compartments also called 
+				<em>Regions</em> in Sirius. Region containers are not recursive and can not contain nodes as direct children.
+			</li>
+			<li>
+				<em>Region</em>, which are a special kind of container. They are compartments of a container, organized vertically or horizontally regarding the configuration of their parent Region container. They are 
+				<em>Containers</em> or 
+				<em>List Containers</em> but can not be themselves a Region container.
+			</li>
+			<li>
+				<em>Bordered nodes</em> are like normal nodes, but instead of appearing directly on the diagram or inside a container, they are placed on the border of another element (node, container, list, region container but not region). This is useful to represent things like communication ports.
+			</li>
+			<li>Finally, 
+				<em>Edges</em> are connections between a source and target element. The source and target element can be any of the other kind of graphical element mentioned above. It is also possible for the source or the target of an edge (but not both) to be another edge.
+			</li>
+		</ul>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_Node.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_Container.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_List_Container.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_Bordered_Node.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>Nodes</th>
+				<th>Containers</th>
+				<th>List Containers</th>
+				<th>BorderedNodes</th>
+			</tr>
+		</table>
+		<p id="mappings">
+			<strong>Mappings.</strong> All these graphical elements are described using the concept of a 
+			<em>mapping</em> (for example a 
+			<em>Node</em> mapping to describe a kind of nodes). A mapping is an element defined inside the VSM which identifies a sub-set of the elements in the semantic model and associates a graphical representation to them: it 
+			<em>maps</em> semantic elements onto some graphical notation. At runtime, each active mapping  (i.e. defined in a layer which is enabled) will produce zero or more graphical elements on the diagram, depending on how many semantic elements currently match the mapping&#8217;s definition. In the default functioning mode, whenever the semantic model changes Sirius will automatically re-compute which graphical elements should appear on the diagram according to the active mappings, and create or remove the necessary elements.
+		</p>
+		<p>You can think of the set of mappings defined in a diagram as a description of how to 
+			<em>project</em> the concepts in your semantic model onto the graphical language provided by Sirius (nodes, containers, edges...) according to the 
+			<em>viewpoint</em> you want the diagram to represent.
+		</p>
+		<p>
+			<strong>Mapping Definition.</strong> The mapping descriptions for all the different types of graphical elements share the same common principles:
+		</p>
+		<ul>
+			<li>Some of the elements of the semantic model are selected, using a combination of mapping configuration attributes (see below). These elements are called 
+				<em>targets</em>, and each one has a single graphical diagram element of this type representing it. 
+			</li>
+			<li>Each of these diagram elements is also associated to a set of 
+				<em>semantic elements</em>: model elements which are logically grouped together and include all the semantically relevant information for the node. By default, the only semantic element of a node is its target, but this can be overridden. This is useful if the meta-model is fine-grained and describes a single logical entity with a group of inter-related model elements: the graphical element will be represent a single 
+				<em>target</em> (the main semantic element), but you can also associate to it the other semantically related elements.
+			</li>
+			<li>The graphical aspect of the mapping is defined by a 
+				<em>style</em>. Sirius provides a rich set of possible styles, which are described later in this document.
+			</li>
+			<li>Finally, the behavior of the graphical element (how to create it, how it reacts to edition of its label, to drag and drop operations, etc.) are defined by 
+				<em>tools</em> associated to the mapping.
+			</li>
+		</ul>
+		<p>Each mapping is defined in a 
+			<em>context</em> in the VSM: either directly inside a layer or inside another mapping. At runtime, the corresponding 
+			<em>context element</em> would be (respectively) either the target semantic element of the diagram itself, or the target of an instance of the parent mapping. This context element is used as a starting point to determine which instances of a mapping should be created on the diagram:
+		</p>
+		<ol>
+			<li>First, the 
+				<em>Semantic Candidates Expression</em> of the mapping is evaluated, starting from the context element. It should return a set (possibly empty) of elements in the semantic model.
+			</li>
+			<li>This list of candidates is then filtered using the 
+				<em>Domain Class</em> specified in the mapping: only the candidates which are instance of the specified class are retained.
+			</li>
+			<li>Finally, the optional 
+				<em>Precondition Expression</em> of the mapping (in the 
+				<em>Advanced</em> category) is evaluated, once for each of the remaining candidate. It should return a boolean value. Only the candidates for which the predicate returns a true value are kept and will actually produce a graphical element on the diagram, with that element as its semantic target.
+			</li>
+		</ol>
+		<p>This order of evaluation should be kept in mind when specifying diagrams. In particular, to avoid performance issues you should:</p>
+		<ul>
+			<li>Limit the number of model elements with 
+				<em>Semantic Candidates Expression</em>.
+			</li>
+			<li>Avoid testing instances type in 
+				<em>Semantic Candidates Expression</em> (this will be done anyway when filtering the 
+				<em>Domain Class</em>).
+			</li>
+			<li>Use the most specific type in 
+				<em>Domain Class</em>.
+			</li>
+			<li>Avoid navigation and long computations in 
+				<em>Precondition Expression</em>.
+			</li>
+		</ul>
+		<p>
+			<strong>Associated Semantic Elements.</strong> To associate more semantic elements to a graphical element than just its semantic target, you can specify the 
+			<em>Associated Elements Expression</em> (in the 
+			<em>Advanced</em> category). It will be evaluated for each instance of the mapping in the context of the semantic target, and should return a set of semantic elements. These will be visible to the end-user in the 
+			<em>Properties</em> view when the graphical element is selected, and any change on one of these elements will trigger a refresh of the graphical element. This means that if you use properties of other elements than the target to compute an element&#8217;s label or conditional style (for example), you should make sure that these other elements appear in the 
+			<em>Associated Elements</em>, otherwise the label or style will not be properly refreshed when the elements are modified.
+		</p>
+		<p>
+			<strong>Synchronization.</strong> All mappings have a 
+			<em>Synchronization</em> parameter (in the 
+			<em>Advanced</em> category) which controls when instances of the mapping are created on the diagram. The possible values are:
+		</p>
+		<ul>
+			<li>
+				<em>Synchronized</em>: It means that when Sirius refreshes the diagram (either automatically or due to an explicit 
+				<em>Refresh</em> action from the user), it will ensure that exactly one instance of the mapping exists on the diagram for each compatible semantic target element (as defined by the mapping&#8217;s properties). In this mode, if a new semantic element compatible with the mapping is created (even by an action on another representation or a change in the semantic model&#8217;s file), the corresponding graphical element will automatically appear on the diagram. Symmetrically, if the semantic element of one of the mapping&#8217;s instances is deleted from the model, the graphical element (view) will disappear automatically.
+			</li>
+			<li>
+				<em>Not Synchronized</em>: In this mode, the graphical instances of the mapping are only created and deleted when explicitly requested by a tool (using the 
+				<em>Create View</em> and 
+				<em>Delete View</em> operations). It means that if a new semantic element compatible with the mapping is created, the corresponding view will not appear on the diagram by default. Symmetrically, if the semantic element of one of the mapping&#8217;s instances is deleted from the model, the graphical element (view) will not disappear automatically, but a red cross will appear on it to indicate it represents an element which does not exist anymore. An explicit 
+				<em>Refresh</em> operation removes these obsolete graphical elements, but will not create new ones. This mode is useful if you want the user to decide which parts of a big semantic model he wants to see: set the mapping to 
+				<em>Unsynchronized</em> and create specific tools to allow the user to reveal progressively the parts of the model which interest him.
+			</li>
+			<li>
+				<em>Unsynchronizable</em>: This is the default. This mode is similar to 
+				<em>Synchronized</em> be default, but gives some control to end-users: if they put the whole diagram in 
+				<em>Unsynchronized mode</em> (using the context menu on the diagram), all the diagram&#8217;s mappings which are 
+				<em>Unsynchronizable</em> will behave as if they were 
+				<em>Unsynchronized</em>. They will go back to a 
+				<em>Synchronized</em> behavior if the user disables the 
+				<em>Unsynchronized</em> mode.
+			</li>
+		</ul>
+		<p>
+			<strong>Mapping Imports.</strong> A mapping import is a feature which can be used to 
+			<em>specialize</em> (modify) a mapping defined somewhere else (in an other layer, an other graphical representation or an other viewpoint). It is available for Nodes, Containers and Edges. Although it can be used in normal diagram descriptions, its main use case is when defining 
+			<a href="#diagram_extension">diagram extensions</a>, so mapping imports are describe in 
+			<a href="#mapping_imports">their own section</a>.
+		</p>
+		<h3 id="nodes">Nodes</h3>
+		<p>A 
+			<em>Node</em> mapping is used to represent model elements graphically as atomic elements, i.e. elements which can not contain other elements. 
+			<em>Node</em> mappings can appear directly inside a layer description, in which case the node will appear directly on the diagram, or inside another element (for example a container). A node mapping which is defined inside another element can be either a 
+			<em>sub-node mapping</em>, in which case it will appear inside its parent (which must be a container), or a 
+			<em>bordered node mapping</em>, in which case it will appear on the border of its parent (which may be a container or a node, including another bordered node). Bordered node mappings are useful to represent ports.
+		</p>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_Node.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_Container.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_List_Container.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Graphical_Vocabulary_Bordered_Node.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>Nodes on a diagram</th>
+				<th>Nodes in container</th>
+				<th>Nodes in containers displayed as lists</th>
+				<th>Nodes on borders</th>
+			</tr>
+		</table>
+		<p>The definition of a node mapping follows the general rules described 
+			<a href="#mappings">above</a> to determine the semantic elements for which a node should be created. All the properties available in the 
+			<em>Behavior</em> category of the 
+			<em>Node</em> mapping configuration allow you to see all the various tools, defined elsewhere in the VSM, which apply to this mapping.
+		</p>
+		<p>A node can not contain sub-nodes, but it can have 
+			<em>bordered nodes</em>, which are defined inside the node mapping (
+			<em>New Diagram Element &gt; Bordered Node</em>). You can also 
+			<em>reuse</em> node mappings defined elsewhere in the VSM using the 
+			<em>Reused Bordered Node Mappings</em> property in the 
+			<em>Import</em> category. The effect at runtime is the same as if you had created an equivalent 
+			<em>Bordered Node</em> mapping inside the node mapping.
+		</p>
+		<p><div style="display: none">
+			<br/>
+			<strong>TODO</strong> Bordered Node Import
+			<br/></div>
+		</p>
+		<h4 id="node_styles">Node Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including conditional styles. This section only presents the aspects which are specific to nodes.
+		</p>
+		<p>For nodes you can use the following styles:</p>
+		<ul>
+			<li>
+				<em>Square</em>, 
+				<em>Diamond</em>, 
+				<em>Ellipse</em> to display basic shapes.
+			</li>
+			<li>
+				<em>Basic Shape</em> to represent nodes with predefined shapes provided with the runtime.
+			</li>
+			<li>
+				<em>Note</em> to represent nodes as a square with one folded corner.
+			</li>
+			<li>
+				<em>Gauge</em> to display gauges, for instance progress indicators.
+			</li>
+			<li>
+				<em>Image</em> to represent nodes with an image (from the workspace or from inside a plug-in).
+			</li>
+			<li>
+				<em>Custom Style</em> can be used when none of the predefined styles correspond to your need. Custom style are implemented in Java and use the 
+				<code>org.eclipse.sirius.diagram.ui.styleConfigurationProvider</code> extension point.
+			</li>
+		</ul>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Basic_Square.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Basic_Stroke.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Basic_Triangle.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Basic_Dot.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Basic_Ring.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>Basic Shape Square</th>
+				<th>Basic Shape Stroke</th>
+				<th>Basic Shape Triangle</th>
+				<th>Basic Shape Dot</th>
+				<th>Basic Shape Ring</th>
+			</tr>
+		</table>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Square.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Diamond.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Ellipse.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Note.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Gauge.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Image.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Node_Style_Custom.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>Square</th>
+				<th>Diamond</th>
+				<th>Ellipse</th>
+				<th>Note</th>
+				<th>Gauge</th>
+				<th>Image</th>
+				<th>Custom</th>
+			</tr>
+		</table>
+		<p>Most of the properties used to configure the various styles are self-explanatory. See the 
+			<a href="#styling">styles</a> section below for a general discussion. You can also refer to the tool-tips available directly in the editor on the &#8220;question mark&#8221; icon of each property.
+		</p>
+		<p>
+			<strong>Gauge Style.</strong> The gauge style is more complex than the others and deserves a specific description. It is used to represent nodes as a (set of) gauges, which can be used for example as progress indicators.
+		</p>
+		<p>	
+			<img border="0" src="images/styles/mini_Node_Gauge_Vertical.jpg"/>
+			<br/>	
+			<img border="0" src="images/styles/mini_Node_Gauge_Horizontal.jpg"/>
+			<br/>	
+			<img border="0" src="images/styles/mini_Node_Gauge_Square.jpg"/>
+		</p>
+		<p>In addition to the standard style properties for the label, size and colors, gauges have an 
+			<em>Alignment</em> attribute (in the 
+			<em>Advanced</em> category) which indicates how the individual gauges are layed out:
+		</p>
+		<ul>
+			<li>
+				<code>VERTICAL</code> The gauges are aligned vertically, from top to bottom.
+			</li>
+			<li>
+				<code>HORIZONTAL</code> The gauges are aligned horizontally, from left to right.
+			</li>
+			<li>
+				<code>SQUARE</code> The gauges are aligned in a square, which may not be complete. Gauges are added from left to right in lines, and lines added from top to bottom.
+			</li>
+		</ul>
+		<p>You can specify the gauge composite&#8217;s border color using a color sub-element.</p>
+		<p>Gauge composites need one or more 
+			<strong>Gauge Section</strong>, which represent an individual gauge. Each 
+			<em>Gauge Section</em> has a 
+			<em>Label</em>, a 
+			<em>Min</em> and a 
+			<em>Max Value Expression</em>, and a 
+			<em>Value Expression</em>. The size of the gauge section depends on where the 
+			<em>Value Expression</em> sits between the 
+			<em>Min</em> (the section is invisible) and the 
+			<em>Max</em> (the section occupies all the available space). You can specify each gauge section&#8217;s foreground and background colors using color sub-elements. 
+			<a href="../general/Colors.html#interpolated_colors">Interpolated colors</a> are particularly suited for gauge sections.
+		</p>
+		<h4 id="node_tools">Node Tools</h4>
+		<p>See the 
+			<a href="#tools">tools</a> section for a general presentation of how tools are defined. This section only presents tools which are specific to nodes.
+		</p>
+		<p>
+			<strong>Node Creation.</strong> The only type of tool which is really specific to node mappings is the 
+			<em>Node Creation</em> tool, used to create new nodes. These work like all the other creation tools. You simply specify the 
+			<em>Node Mappings</em> that this tool can create and specify the behavior of the tool inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<p>By default, your node creation tools will be available on all the graphical elements which can contain an instance of the 
+			<em>Node Mappings</em> you specified in the tool, and users will see a &#8220;forbidden&#8221; sign if they try to apply the tool on an incompatible type of element. You can specify a 
+			<em>Precondition</em> to forbid the application of the tool on some of the elements where it would normally be allowed. The precondition is evaluated in the context of the 
+			<em>view element</em> on which the user has put the mouse. If it returns a false value, the tool&#8217;s application will be forbidden. Symmetrically, you can specify 
+			<em>Extra Mappings</em> (
+			<em>Advanced</em> section) on which the tool should be applicable, even though these mapping can not contain nodes of the type you will create. In this case, the node created by the tool will actually appear elsewhere on the diagram, but it can often help usability to allow users to click on related elements.
+		</p>
+		<h3 id="containers">Containers</h3>
+		<p>A 
+			<em>Container</em> mapping is used to represent model elements graphically as containers, which can contain sub-elements (including other containers, recursively). A container can also have 
+			<em>bordered nodes</em>, which are like normal nodes but appear on the border of the container, for example to represent ports. 
+			<em>Container</em>  mappings can appear directly inside a layer description, in which case the container will appear directly on the diagram, or inside another container mapping. 
+		</p>
+		<p>
+			<img border="0" src="images/styles/Containers_on_diagram_or_another_container.png"/>
+		</p>
+		<p>The definition of a container mapping follows the general rules described 
+			<a href="#mappings">above</a> to determine the semantic elements for which a container should be created. All the properties available in the 
+			<em>Behavior</em> category of the 
+			<em>Container</em> mapping configuration allow you to see all the various tools, defined elsewhere in the VSM, which apply to this mapping.
+		</p>
+		<p>A container can contain 
+			<em>sub-containers</em>, 
+			<em>sub-nodes</em>, and 
+			<em>bordered nodes</em>, all of which are defined inside the container mapping (
+			<em>New Diagram Element &gt; Container</em>, 
+			<em>Sub-node</em> and 
+			<em>Bordered Node</em>, respectively). You can also 
+			<em>reuse</em> node and container mappings defined elsewhere in the VSM in any of these three roles using the corresponding 
+			<em>Reused X Mappings</em> properties in the 
+			<em>Import</em> category. The effect at runtime is the same as if you had created an equivalent mappings inside the container mapping.
+		</p>
+		<p><div style="display: none">
+			<br/>
+			<strong>TODO</strong> Bordered Node Import, Sub-node import and container import.
+			<br/></div>
+		</p>
+		<p id="list_containers">
+			<strong>List Containers</strong> You can enable a special &#8220;list mode&#8221; for containers by setting the 
+			<em>Children Presentation</em> attribute to 
+			<em>List</em> in the mapping configuration. List containers are represented in a special way, in which only the labels of their direct sub-elements (nodes only) are taken into account and presented in a vertical list. When represented as a list, only some of the style attributes (label text, tool-tip, colors) of the container are taken into account. For the list items themselves, only the label text is used.
+		</p>
+		<p>
+			<img border="0" src="images/styles/List_container_with_items.png"/>
+		</p>
+		<p id="compartments">
+			<strong>Compartments</strong> You can enable a special &#8220;compartment mode&#8221; for containers by setting the 
+			<em>Children Presentation</em> attribute to 
+			<em>Horizontal Stack</em> or 
+			<em>Vertical Stack</em> in the mapping configuration. Region containers presents their children containers and lists as compartments, vertically or horizontally organized. They are sorted following the mapping order and the semantic candidates expression evaluation result of each mapping. The border style attributes of the Region&#8217;s styles are used to specify the compartments separators. The other style properties of Region container or Region mapping are used as usual.
+		</p>
+		<p>
+			<img border="0" src="images/styles/Containers_with_compartments.png"/>
+		</p>
+		<p>
+			<em>Warning:</em> The compartment feature has been introduced in Sirius 3.0.0. While working reliably, it has some limitations but you can rely on the improved VSM validation to ensure you are using it in supported modes. Known limitations:
+		</p>
+		<ul>
+			<li>Only the gradient and image style are supported for Region container and Region mappings.</li>
+			<li>The Show/Hide, Hide filter features are disabled on regions (hide filter can be created to the compartment content but not the compartment). The Show/Hide label feature is supported.</li>
+			<li>The move and drag and drop of regions are disabled. Reordering regions can be done by reordering their semantic elements.</li>
+			<li>The resize of compartments might evolve in future versions. The current behavior is to redistribute space between adjacent regions and to resize the first/last region when the region container is resized from top/bottom for a vertical stack and left/right for an horizontal one.</li>
+			<li>A compartment is always considered as auto-sized (except after creation time when it contains no region).</li>
+			<li>The capability to define complex or recursive stack of regions mixing both stack directions has been introduced in Sirius 3.1.0 as an 
+				<em>experimental</em> configuration. Some layout-related actions might produce unexpected result. The limitations only concerns the visual aspects, there is no risk of corrupting the underlying models.
+			</li>
+		</ul>
+		<h4 id="container_styles">Container Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including conditional styles. This section only presents the aspects which are specific to containers.
+		</p>
+		<p>For containers you can use the following styles:</p>
+		<ul>
+			<li>
+				<em>Gradient</em> to display containers as rectangles filled with a gradient between two colors (or a flat rectangle if both colors in the gradient are the same).
+			</li>
+			<li>
+				<em>Parallelogram</em> to represent containers as a parallelogram.
+			</li>
+			<li>
+				<em>Image</em> to use a custom image (from the workspace or from inside a plug-in).
+			</li>
+		</ul>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/styles/Container_Style_Gradient.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Container_Style_Parallelogram.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Container_Style_Image.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>Gradient</th>
+				<th>Parallelogram</th>
+				<th>Image</th>
+			</tr>
+		</table>
+		<h5 id="DefaultSize">Default Size</h5>
+		<p>You can specify the default size of 
+			<em>Gradient</em> and 
+			<em>Parallelogram</em> styles at creation time by specifying the width and height computation expressions available in the Advanced tab. This default size will also be used to determine the container minimum size when its bounds are 
+			<em>auto-sized</em>.
+		</p>
+		<p>Most of the properties used to configure the various styles are self-explanatory. See the 
+			<a href="#styling">styles</a> section below for a general discussion. You can also refer to the tool-tips available directly in the editor on the &#8220;question mark&#8221; icon of each property.
+		</p>
+		<h6 id="compartments_layout">Specific compartments layout</h6>
+		<p>Due to layout specificity of compartments, there are specific rules for this kind of containers:</p>
+		<ul>
+			<li>It is recommended to set to &#8220;-1&#8221; the 
+				<code>Width Computation Expression</code> and 
+				<code>Height Computation Expression</code>. The size of the compartment is expected to be computed from their regions.
+			</li>
+			<li>For the same reason, the 
+				<code>Width Computation Expression</code> should be the same for each region of the same vertical compartment (same 
+				<code>Height Computation Expression</code> for horizontal compartment ). If they are not the same the maximum is used.
+			</li>
+			<li>When a 
+				<code>Width Computation Expression</code> and 
+				<code>Height Computation Expression</code> are defined for the compartments, they are used at the creation time. You have the same effect if the end-user creates a compartment by drawing a rectangle for creation (instead of just clicking on the diagram). This dimension is kept for the first region creation. After the first region creation, the compartment is considered as auto-sized. A second region creation resizes the compartment (in the direction of the stack of the compartment).
+			</li>
+		</ul>
+		<p>Examples of some layout results according to VSM configuration:</p>
+		<ul>
+			<li>1st example:
+				<ul>
+					<li>Compartment with horizontal stack and with 
+						<code>Width Computation Expression</code> and 
+						<code>Height Computation Expression</code> equal to 10.
+					</li>
+					<li>Regions with 
+						<code>Width Computation Expression</code> and 
+						<code>Height Computation Expression</code> equal to 5.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/compartmentsLayout-Creation1.png"/>
+			<br/>1- Creation of a compartment: The compartment has a size of 100x100 pixels. The result would be the same if the end-user drawn a rectangle of 100x100 pixels at the creation time.
+			<br/>2- Creation of a first region: The first region uses the free size of the compartment. The compartment keeps its size.
+			<br/>3- Creation of a second region: The second region uses the height of the first region (highest than the 50 pixels defined in the VSM) and has a width of 50 pixels. The compartment is increased in width.
+		</p>
+		<ul>
+			<li>2nd example:
+				<ul>
+					<li>Compartment with horizontal stack and with 
+						<code>Width Computation Expression</code> and 
+						<code>Height Computation Expression</code> equal to 10.
+					</li>
+					<li>Regions with 
+						<code>Width Computation Expression</code> and 
+						<code>Height Computation Expression</code> equal to 15.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/compartmentsLayout-Creation2.png"/>
+			<br/>The first and second steps are the same. But the third is different. The second region has a width of 150 pixels and also a height of 150 pixels (highest than the first one). The compartment is increased in both directions.
+		</p>
+		<ul>
+			<li>3rd example:
+				<ul>
+					<li>Compartment with horizontal stack and with 
+						<code>Width Computation Expression</code> and 
+						<code>Height Computation Expression</code> equal to -1.
+					</li>
+					<li>Regions with 
+						<code>Width Computation Expression</code> and 
+						<code>Height Computation Expression</code> equal to 5.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/compartmentsLayout-Creation3.png"/>
+			<br/>1- Creation of a compartment: The compartment is auto-sized and fits to the title.
+			<br/>2- Creation of a first region: The first region uses the width of the compartment (highest than the 50 pixels defined in the VSM) and has a height of 50 pixels. The compartment is increased in height.
+			<br/>3- Creation of a second region: The second region has a size of 50x50 pixels. The compartment is increased in both directions.
+		</p>
+		<h4 id="container_tools">Container Tools</h4>
+		<p>See the 
+			<a href="#tools">tools</a> section for a general presentation of how tools are defined. This section only presents tools which are specific to containers.
+		</p>
+		<p>
+			<strong>Container Creation.</strong> These tools are used to create new containers. They work like all the other creation tools. You simply specify the 
+			<em>Container Mappings</em> that this tool can create and specify the behavior of the tool inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<p>By default, your container creation tools will be available on all the graphical elements which can contain an instance of the 
+			<em>Container Mappings</em> you specified in the tool, and users will see a &#8220;forbidden&#8221; sign if they try to apply the tool on an incompatible type of element. You can specify a 
+			<em>Precondition</em> to forbid the application of the tool on some of the elements where it would normally be allowed. The precondition is evaluated in the context of the 
+			<em>view element</em> on which the user has put the mouse. If it returns a false value, the tool&#8217;s application will be forbidden. Symmetrically, you can specify 
+			<em>Extra Mappings</em> (
+			<em>Advanced</em> section) on which the tool should be applicable, even though these mapping can not contain containers of the type you will create. In this case, the container created by the tool will actually appear elsewhere on the diagram, but it can often help usability to allow users to click on related elements.
+		</p>
+		<p>
+			<strong>Container Drop</strong> You can associate a 
+			<em>Container Drop</em> description to your container mappings to react to drag&#8217;n&#8217;drop operations into the container. The 
+			<em>Drag Source</em> property indicates if you want to react to graphical elements from a Sirius representation, to semantic model elements dragged from another Eclipse view (for example from the 
+			<em>Model Explorer</em>), or both. The 
+			<em>Containers</em> property indicates for which drop kind of container mappings this tool applies. The 
+			<em>Mappings</em> property indicates what kinds of graphical elements can be dropped into the specified containers, when the 
+			<em>Drag Source</em> is 
+			<em>Representation</em> or 
+			<em>Both</em>. The body of the tool (the 
+			<a href="../general/Model_Operations.html">model operations</a> ) specify how to react when an element is dropped into a container.
+		</p>
+		<p>
+			<i>WARNING</i>: if you choose 
+			<em>Model</em> or 
+			<em>Both</em> as source, your tool must be prepared to accept any type of source element which can be present in the 
+			<em>Model Explorer</em> view, including elements which have no relation to the source mappings you specified for the tool. Use a precondition to check the nature of the element being dragged (available through the 
+			<code>element</code> variable) to disable the tool source elements your tool does not support.
+		</p>
+		<p>When drag and dropping workspace resources (files, folders...) from an Eclipse view, some conversions are performed to ease the operations specifications. Depending of the dropped resource, the 
+			<code>element</code> variable content in the root operation will be different:
+		</p>
+		<ul>
+			<li>Loadable model:  the model will be loaded and added to the semantic resources of the session. The root content of the model will be set as 
+				<code>element</code> variable value.
+			</li>
+			<li>File: a 
+				<code>DFile</code> instance will be created and set as 
+				<code>element</code> variable value.
+			</li>
+			<li>Folder: a 
+				<code>DFolder</code> instance will be created and set as 
+				<code>element</code> variable value. For each resource contained by the folder, a 
+				<code>DResource</code> instance will be created.
+			</li>
+			<li>Project: a 
+				<code>DProject</code> instance will be created and set as 
+				<code>element</code> variable value. For each resource contained by the folder, a 
+				<code>DResource</code> instance will be created.
+			</li>
+		</ul>
+		<p>
+			<code>DFile</code>, 
+			<code>DFolder</code>, 
+			<code>DProject</code> are instances of 
+			<code>DResource</code>. A 
+			<code>DResource</code> instance has a 
+			<strong>name</strong> and a 
+			<strong>path</strong>. The path is the absolute location of the resource.
+			<br/>
+			<code>DFolder</code>, 
+			<code>DProject</code> are instances of 
+			<code>DResourceContainer</code>. A 
+			<code>DResourceContainer</code> instance has 
+			<strong>members</strong>, which are 
+			<code>DResource</code> instances.
+		</p>
+		<h3 id="bordered_nodes">Bordered Nodes</h3>
+		<p>Bordered nodes are specified using normal 
+			<a href="#nodes">node mappings</a>. They can appear inside node mappings (include other node mappings which are bordered nodes) and container mappings. They can have the same styles and tools associated to them as normal node mappings (although they should generally be kept small to avoid weird graphical effects).
+		</p>
+		<h3 id="edges">Edges</h3>
+		<p>Edges are used to define connections between diagram elements. There are two kinds of edges, which are defined using different mappings:</p>
+		<ul>
+			<li>
+				<em>Relation-Based Edges</em> are used to represent a relation between model elements such as containment or reference (including computed references). An example in UML would be the inheritance relationship, which is represented by references between a class and its super-classes. Those would be modeled using a relation-based edge.
+			</li>
+			<li>
+				<em>Element-Based Edges</em> are used when a semantic model element (instead of simply a reference) exists to represent the relation itself. An example in UML would be an association between two classes 
+				<em>A</em> and 
+				<em>B</em>: it is not represented by a reference between 
+				<em>A</em> to 
+				<em>B</em>, but by an explicit 
+				<em>Association</em> model element which itself references 
+				<em>A</em> and 
+				<em>B</em>. Such an association would be modeled using a domain-based edge on the 
+				<em>Association</em> element.
+			</li>
+		</ul>
+		<h4 id="relation_based_edges">Relation-Based Edges</h4>
+		<p>To specify a 
+			<em>Relation-Based Edge</em>, you must fill the 
+			<em>Source Mapping</em> and 
+			<em>Target Mapping</em> properties. They indicate from what kind of graphical element the edges will start and to what kind of element they go. Both properties can contain several mappings, and some mappings can appear as both source and targets. Note that it is possible to have edges whose source 
+			<em>or</em> target is another edge, but not both.
+		</p>
+		<p>You must also specify the 
+			<em>Target Finder Expression</em>. It will be evaluated in the context of the semantic target element of a potential source (as defined by 
+			<em>Source Mappings</em>) and should return the semantic element(s) of the targets elements to connect with the source. The expression can return zero elements to indicate that  no edge starting from this element.
+		</p>
+		<p>An edge (instance of this mapping) will appear between each pair of graphical elements 
+			<em>E1</em> and 
+			<em>E2</em> on the diagram where:
+		</p>
+		<ul>
+			<li>
+				<em>E1</em>'s mapping is in the 
+				<em>Source Mappings</em>.
+			</li>
+			<li>
+				<em>E2</em>'s mapping is in the 
+				<em>Target Mappings</em>.
+			</li>
+			<li>The (optional) 
+				<em>Precondition Expression</em> (
+				<em>Advanced</em> category) returns true for the semantic element of 
+				<em>E1</em>.
+			</li>
+			<li>The semantic element of 
+				<em>E2</em> appears in the result of evaluating the 
+				<em>Target Finder Expression</em> in the context of 
+				<em>E1</em>'s semantic element.
+			</li>
+		</ul>
+		<p>Because a relation-based edge does not represent an actual semantic element but a relation between elements, its own semantic element is the same as its source&#8217;s.</p>
+		<p>
+			<strong>Paths.</strong> Edges only exist between one source and one target element. Sometimes such an edge is just one segment of a more complex 
+			<em>path</em> which traverses many elements. You can highlight such a complex path using the properties in the 
+			<em>Path</em> category. 
+			<em>Path Mappings</em> should be the list of mappings considered by the path, and the 
+			<em>Path Expression</em> should return the list of semantic elements the edge path should go through, in the order the should be traversed.
+		</p>
+		<h4 id="element_based_edges">Element-Based Edges</h4>
+		<p>
+			<em>Element-Based Edges</em> are configured much like nodes and containers. You must specify the 
+			<em>Domain Class</em>, 
+			<em>Semantic Candidate Expression</em> and (optionally) 
+			<em>Precondition Expression</em> to select the semantic elements the edges will represent. In addition, you must specify:
+		</p>
+		<ul>
+			<li>the 
+				<em>Source Mapping</em> and 
+				<em>Target Mapping</em> properties, which indicates from what kind of graphical element the edges will start and to what kind of element they go. Both properties can contain several mappings, and some mappings can appear as both source and targets. Note that it is possible to have edges whose source 
+				<em>or</em> target is another edge, but not both.
+			</li>
+			<li>the 
+				<em>Source Finder Expression</em> and 
+				<em>Target Finder Expression</em>, which will be evaluated in the context of the semantic element of the edge, should return the actual elements that the edge connects.
+			</li>
+		</ul>
+		<p>An edge (instance of this mapping) will appear between each pair of graphical elements 
+			<em>E1</em> and 
+			<em>E2</em> on the diagram where:
+		</p>
+		<ul>
+			<li>
+				<em>E1</em>'s mapping is in the 
+				<em>Source Mappings</em>.
+			</li>
+			<li>
+				<em>E2</em>'s mapping is in the 
+				<em>Target Mappings</em>.
+			</li>
+			<li>There is a semantic element, selected by the 
+				<em>Domain Class</em> and 
+				<em>Semantic Candidate Expression</em>, from which the 
+				<em>Source Finder Expression</em> returns 
+				<em>E1</em> and the 
+				<em>Target Finder Expression</em> returns 
+				<em>E2</em>.
+			</li>
+		</ul>
+		<p>
+			<strong>Paths.</strong> Edges only exist between one source and one target element. Sometimes such an edge is just one segment of a more complex 
+			<em>path</em> which traverses many elements. You can highlight such a complex path using the properties in the 
+			<em>Path</em> category. 
+			<em>Path Mappings</em> should be the list of mappings considered by the path, and the 
+			<em>Path Expression</em> should return the list of semantic elements the edge path should go through, in the order the should be traversed.
+		</p>
+		<h4 id="edges_styles">Edge Style</h4>
+		<p>Both types of edges (relation-based and element-based) share the same style type. It supports conditional style like for other mappings.</p>
+		<p>You can specify the line style (
+			<em>solid</em>, 
+			<em>dash</em>, 
+			<em>dot</em> or 
+			<em>dash-dot</em>), color, width (using the 
+			<em>Size Computation Expression</em> in the 
+			<em>Advanced Category</em>), and optional decorations (like arrowheads) to be put on the end-points of the edge.
+		</p>
+		<p>The 
+			<em>Routing Style</em> can be one of:
+		</p>
+		<ul>
+			<li>
+				<em>Straight</em>: the edge is drawn using straight line segments. When created, only one segment directly connects the source and target elements, except when the source and target are the same elements. End users can create and remove sub-segments, and move the bend-points.
+			</li>
+			<li>
+				<em>Manhattan</em>: the edge is drawn using only vertical and horizontal segments. Otherwise it is similar to 
+				<em>Straight</em>.
+			</li>
+			<li>
+				<em>Tree</em>: this style can be seen as a special case of 
+				<em>Manhattan</em>, with always two vertical segments and an horizontal one between them. If one graphical element serves as the source for several edges using this style, their first vertical segment (the stem of the tree) will be merged, and their horizontal segments will all appear as a single line.
+			</li>
+		</ul>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/styles/Edge_Style_Straight.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Edge_Style_Manhattan.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/styles/Edge_Style_Tree.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>Straight</th>
+				<th>Manhattan</th>
+				<th>Tree</th>
+			</tr>
+		</table>
+		<p>Note that end-users can change the routing style of the edges individually, independently of the default style you set in the VSM.</p>
+		<p>
+			<strong>Edge Labels.</strong> Edges can have from zero to three labels. By default they have a single which will be placed at its center. You can delete it and/or add labels to be shown at the beginning (near the source) or end (near the target) of the edge. In all cases, the configuration is 
+			<a href="#label_style">the same as for all labels</a>. Note that currently only the center label (if present) is editable if a 
+			<em>Direct Edit</em> tool is associated to the edge mapping.
+		</p>
+		<p>
+			<strong>Edge Folding.</strong> It can often be useful, from one end of the edge, to be able to hide the elements at the other end. Think for example when and edge is used to represent some kind of containment relationship between elements and you want to hide the &#8220;contents&#8221; of an element to concentrate on the rest of the diagram. You can allow end-users to do this be setting a 
+			<em>Folding Style</em> on an edge mapping (in the 
+			<em>Advanced</em> category). When the 
+			<em>Folding Style</em> is set to 
+			<em>Source</em> or 
+			<em>Target</em>, the element (node or container) at the source or target of the edge will have a small &#8220; - &#8221; sign in its top-left corner. If the user clicks on it, the edges instance of this mapping for which the element is a source (resp. target) will fold: the edges and the elements they are connected to at the other side will disappear from view. The behavior is recursive: if the elements hidden were connected to other elements using this kind edges, those too will be hidden. When an element has been folded, the &#8220; - &#8221; sign becomes a &#8220; + &#8221; sign which can be used to unfold the edges. This is useful when representing trees of elements: if you enable folding, users will be able with a single click to hide or reveal complete sub-hierarchies of elements.
+		</p>
+		<p>
+			<strong id="edgecentering">Edge Centering.</strong> The edge source and edge target are not systematically oriented toward the center of the node, depending on where the edge has been created or moved by the end user. You can specify that an edge end (the source, target or both) will always be centered. The 
+			<em>Centered Source Mappings</em> and the 
+			<em>Centered Target Mappings</em> (within the edge style description advanced properties tab) lets you select for which mapping the source or the target will be centered. The 
+			<em>Ends Centering</em> section (on the same advanced tab) allows you to generalize this behavior for any edge source/target mapping. Note that this behavior can be customized by the end user via the edge style 
+			<em>centered</em> attribute.
+		</p>
+		<p>
+			<img border="0" src="images/styles/Edge_Style_Centering.png"/> 
+			<br/>The first edge, the highest one, is oriented to the node&#8217;s center
+		</p>
+		<h4 id="bracket_edge_style">Bracket Edge Style</h4>
+		<p>The bracket edge figure is designed to be drawn from the middle of a node side to the middle of another node side. The user can move the main segment and rotate the figure (horizontal-&gt; vertical or vertical-&gt;horizontal).</p>
+		<p>	
+			<img border="0" src="images/styles/Edge_Style_bracketStyle.png"/>
+		</p>
+		<p>The optional decorations (like arrowheads) will be put on the end-points of the main segment.	</p>
+		<p>See the 
+			<a href="#edges_styles">Edge Style</a> section for the other properties.
+		</p>
+		<h4 id="edge_tools">Edge Tools</h4>
+		<p>See the 
+			<a href="#tools">tools</a> section for a general presentation of how tools are defined. This section only presents tools which are specific to edges.
+		</p>
+		<p>
+			<strong>Edge Creation.</strong> This tool is used to create new edges. They work like all the other creation tools. You simply specify the 
+			<em>Edge Mappings</em> that this tool can create and specify the behavior of the tool inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>. The body of the tool will be executed in the context of the semantic element of the source of the new edge.
+		</p>
+		<p>Because edges have two ends, their creation requires users to specify both the source and target elements. By default, the possible sources are all the instances of one of the 
+			<em>Source Mappings</em> specified for this kind of edge (and similarly for the possible targets). You can restrict this using the 
+			<em>Connection Start Precondition</em> (resp. 
+			<em>Connection Complete Precondition</em>) to forbid the use of the tool from (resp. to) some element. 
+		</p>
+		<p>
+			<em>Connection Start Precondition</em> expressions can use the following variables to allow/disallow first click for connection creation:
+		</p>
+		<ul>
+			<li>
+				<code>preSourceView</code>: the graphical element which is pointed on the first click.
+			</li>
+			<li>
+				<code>preSource</code>: the semantic element which is pointed on the first click.
+			</li>
+			<li>
+				<code>diagram</code>: the current Diagram.
+			</li>
+			<li>
+				<code>container</code>: the semantic element of the Diagram.
+			</li>
+		</ul>
+		<p>
+			<em>Connection Complete Precondition</em> expressions can use the following variables to allow/disallow second click for connection creation:
+		</p>
+		<ul>
+			<li>
+				<code>preSourceView</code>: the graphical element which is pointed on the first click.
+			</li>
+			<li>
+				<code>preSource</code>: the semantic element which is pointed on the first click.
+			</li>
+			<li>
+				<code>preTargetView</code>: the graphical element which is pointed on the second click.
+			</li>
+			<li>
+				<code>preTarget</code>: the semantic element which is pointed on the second click.
+			</li>
+			<li>
+				<code>diagram</code>: the current Diagram.
+			</li>
+			<li>
+				<code>container</code>: the semantic element of the Diagram.
+			</li>
+		</ul>
+		<p>On the opposite, you can specify 
+			<em>Extra Source Mappings</em> and 
+			<em>Extra Target Mappings</em> (
+			<em>Advanced</em> category)  which the user will be able to select as &#8220;virtual&#8221; source and targets, even though the real edge created by the tool will not be between these elements.
+		</p>
+		<p>
+			<strong>Reconnect Edge.</strong> The 
+			<em>Reconnect Edge</em> tool is used to allow end-users to change the source and/or target of an edge by moving the corresponding end onto another graphical element. If a tool is specified to handle the user&#8217;s reconnection attempt, it will be invoked with all the appropriate information so that it can execute the corresponding semantic change. In addition to the 
+			<em>Mappings</em> property, which indicate the types of edges supported by the tool, you must specify one 
+			<em>Reconnection Kind</em>: a tool can be written to only support reconnection of the source end, the target end, or of both. Tools that handle both cases are complex to write, so it is recommended if possible to write two separate tools: one which handle the source re-connections, and one for the target re-connections.
+		</p>
+		<p>The body of the tool is evaluated on the target semantic element of the edge that the user wants to reconnect, with the following variables available to describe the reconnection:</p>
+		<ul>
+			<li>
+				<code>source</code>: the semantic element which is pointed before the reconnect.
+			</li>
+			<li>
+				<code>target</code>: the semantic element which is pointed after the reconnect.
+			</li>
+			<li>
+				<code>sourceView</code> : the graphical element which is pointed before the reconnect.
+			</li>
+			<li>
+				<code>targetView</code> : the graphical element which is pointed after the reconnect.
+			</li>
+			<li>
+				<code>otherEnd</code> : the edge end (graphical element) that has not changed during the reconnection
+			</li>
+			<li>
+				<code>edgeView</code> : the Edge after the graphical reconnection
+			</li>
+			<li>
+				<code>diagram</code> : the current Diagram.
+			</li>
+			<li>
+				<code>element</code>: the semantic element of the current edge.
+			</li>
+		</ul>
+		<p>Here are illustration to show the values of this variables in a concrete case. Before the reconnection:</p>
+		<p>	
+			<img border="0" src="./images/references/reconnect/ReconnectTool_Before.png"/>
+		</p>
+		<p>After the reconnection:</p>
+		<p>	
+			<img border="0" src="./images/references/reconnect/ReconnectTool_After.png"/>
+		</p>
+		<ul>
+			<li>The 
+				<code>sourceView</code> is the graphical node &#8216;A&#8217;.
+			</li>
+			<li>The 
+				<code>targetView</code> is the graphical node &#8216;B&#8217;.
+			</li>
+			<li>The 
+				<code>otherEnd</code> is the graphical node &#8216;C&#8217;, that has not changed during the reconnection.
+			</li>
+			<li>
+				<code>edgeView.sourceNode</code> is the graphical node &#8216;C&#8217;.
+			</li>
+			<li>
+				<code>edgeView.targetNode</code> is the graphical node &#8216;B&#8217;.
+			</li>
+		</ul>
+		<p>For the semantic, we will consider that we represent &#8220;Box&#8221; and the link means &#8220;is contained in&#8221;:</p>
+		<ul>
+			<li>the 
+				<code>source</code> is the box &#8216;A&#8217;.
+			</li>
+			<li>the 
+				<code>target</code> is the box &#8216;B&#8217;.
+			</li>
+			<li>
+				<code>element</code> is the link &#8220;is contained&#8221; between &#8216;C&#8217; and &#8216;A&#8217;.
+			</li>
+		</ul>
+		<h3 id="decorations">Decorations</h3>
+		<p>Decorations can be used to add small graphical annotations to the elements of a diagram. They are defined directly inside a layer, and they can be either 
+			<em>Mapping Based Decorations</em>, 
+			<em>Semantic Based Decorations</em> or 
+			<em>Generic Decorations</em>.
+		</p>
+		<p>
+			<strong>Mapping Based Decorations</strong> have a list of 
+			<em>Mappings</em> to which they may apply.
+			<br/> 
+			<img border="0" src="./images/mappingBasedDecoration.png"/>
+		</p>
+		<p>
+			<strong>Semantic Based Decoration</strong> have a 
+			<em>Domain Class</em> and will apply to all graphical elements which have an instance of this class as their semantic element, whatever are the mapping(s) used to represent them.
+			<br/> 
+			<img border="0" src="./images/semanticBasedDecoration.png"/>
+		</p>
+		<p>
+			<strong>Generic Decoration</strong> is only based on the 
+			<em>Precondition Expression</em> to know if it applies on the current graphical Element.
+		</p>
+		<p>The 
+			<em>Precondition Expression</em> is evaluated in the context of a candidate semantic element which is the semantic element of the current graphical element (that is 
+			<em>DSemanticDecorator.target</em>). If the expression returns true, the decorator will be shown.
+		</p>
+		<h4 id="Decorationdisplay">Decoration display</h4>
+		<p>The 
+			<em>Decoration Description</em> has a 
+			<em>Position</em> which indicates where the decorator should be placed. The position can be chosen among the four corners (NORTH_WEST, NORTH_EAST, SOUTH_WEST and SOUTH_EAST), the middle of each bounding box sides (NORTH, SOUTH, WEST and EAST) and the CENTER positions. 
+		</p>
+		<img align="center" border="0" src="./images/decoration_positions.png"/>
+		<p>Many decorations can be specified at the same 
+			<em>Position</em>. To manage that, the decorations are displayed from their defined position along the border of the bounding box according to the 
+			<em>Distribution Direction</em>.
+		</p>
+		<ul>
+			<li>For corner decorations, it is possible to choose between vertical or horizontal direction.</li>
+			<li>For NORTH, SOUTH and CENTER positions, the direction is only horizontal from the left to right.</li>
+			<li>For WEST and EAST positions, the direction is only vertical from top to bottom.</li>
+		</ul>
+		<p>Decorations example: 
+			<img align="center" border="0" src="./images/decoration_example.png"/>
+		</p>
+		<p>By default the margin between the decoration and the border of the figure is 2 pixels.
+			<br/>When a node contains border nodes, the node decorations are shifted from the border to avoid overlap with border node
+			<br/>Decorations example with border nodes: 
+			<img align="center" border="0" src="./images/decoration_borderNode.png"/>
+		</p>
+		<p>The decoration icon is defined with 
+			<em>Image Expression</em> which is an InterpretedExpression. 
+			<em>Image Expression</em> may be:
+		</p>
+		<ul>
+			<li>a path to an image which can be absolute or relative to the workspace. A workspace path example: 
+				<em>/org.eclipse.sirius.tests.sample.component.design/images/square16x16.png</em>
+			</li>
+			<li>an expression that gives a path to an image</li>
+			<li>an expression that provides an instance of 
+				<code>org.eclipse.swt.graphics.Image</code>. Provider will have to define a cache of image to optimize memory consumption and performance. For now, there is no mechanism to release the cache.
+			</li>
+			<li>an expression that provides an instance of 
+				<code>org.eclipse.draw2d.IFigure</code>. The figure life cycle is managed by Sirius.
+			</li>
+		</ul>
+		<p>The 
+			<em>Decoration Description</em> has a 
+			<em>TooltipExpression</em> which may be:
+		</p>
+		<ul>
+			<li>a fixed tooltip string</li>
+			<li>an expression that provides a tooltip String</li>
+			<li>an expression that provides an instance of 
+				<code>org.eclipse.draw2d.IFigure</code>. The figure life cycle is managed by Sirius.
+			</li>
+		</ul>
+		<p>Decoration tooltip example: 
+			<img align="center" border="0" src="./images/decoration_tooltip_example.png"/>
+		</p>
+		<p>Sometimes, according to the graphical element size, the decorations are represented with a 
+			<em>list decoration</em> which is a 16x16 pixels frame containing three dots. The tooltip of a 
+			<em>list decoration</em> displays as lines, the contained decorations with its tooltip. 
+			<br/>Sometimes, the graphical element size can be too small to display all decorations without overlapping. In this condition, decorations will be gathered into one decoration called 
+			<em>list decoration</em>. This 
+			<em>list decoration</em> is represented with a 16x16 pixels frame containing three dots. The tooltip of a 
+			<em>list decoration</em> displays, as lines, the contained decorations with its tooltip.
+		</p>
+		<p>List decoration example: 
+			<img align="center" border="0" src="./images/decoration_group_example.png"/>
+		</p>
+		<p>Tooltip example on list decoration: 
+			<img align="center" border="0" src="./images/decoration_group_tooltip_example.png"/>
+		</p>
+		<h4 id="Decorationdisplayupdate">Decoration display update</h4>
+		<p>The decorations can be manually and automatically refreshed.</p>
+		<ul>
+			<li>Manually, when the user clicks on the refresh button in the diagram tool bar.</li>
+			<li>Automatically, according to semantic changes when:
+				<ul>
+					<li>the 
+						<em>target semantic element</em> of the 
+						<code>DDiagramElement</code> (
+						<code>DSemanticDecorator_Target</code> feature) is changed,
+					</li>
+					<li>the 
+						<em>semantic elements</em> of the 
+						<code>DDiagramElement</code> (
+						<code>DRepresentationElement_SemanticElements</code> feature) are changed. They are defined with 
+						<em>Associated Elements Expression</em> on the mapping. It means that a specifier that defined decorations can not add new &#8220;semantic element&#8221;, dedicated to decorations, that would be listened to for the automatic refresh.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h2 id="styling">Styling</h2>
+		<p>Styles define the graphical appearance of diagram elements. Sirius supports a rich set of possible styles, including conditional styles which can dynamically change depending on the current state of the underlying model elements. Each mapping must define at least one style do be visible on the diagram.</p>
+		<h3 id="conditional_styles">Conditional Styles</h3>
+		<p>Conditional styles make it possible to support different graphical aspects for a single mapping. The actual style used to render an element is determined dynamically depending on the current state of the models elements.</p>
+		<p>To use conditional style, you must first create a non-conditional style, which will be the default. You can then add one or several conditional styles as siblings to the default style. Each conditional style is associated to a condition specified as a predicate. If there are conditional styles on a mapping, their conditions are tested in their order of appearance in the mapping description. The first one for which the condition is 
+			<strong>true</strong> is selected. If none of the conditional styles condition is true, the default style is used instead.
+		</p>
+		<ul>
+			<li>NOTE : There is an exception to the rule of Conditional Styles:</li>
+		</ul>
+		<p>if a user customized a Node with a WorkspaceImage style (through the &#8220;Set style to workspace image&#8221; action), then if a new style is computed through the VSM (e.g. through a Conditional Style appliance), this new style will not override the WorkspaceImage style to preserve this last customization (See 
+			<a href="../../user/diagrams/Diagrams.html#styleCustomizations">
+				<em>Style Customizations</em>
+			</a> ).
+		</p>
+		<h3 id="label_style">Label Properties</h3>
+		<p>One of the responsibility of styles is to describe labels which will be displayed and how they will be formated. The following properties are available :</p>
+		<ul>
+			<li>
+				<em>Label Expression</em> is used to compute the text of the label describing the element. It is evaluated in the context of the semantic target element.
+			</li>
+			<li>
+				<em>Label Position</em> is used to set the position of the label relative to nodes (this property is not available for containers and edges). The label can be put on the 
+				<em>border</em> of the node (outside), where it can be freely moved around the node&#8217;s border, or in the 
+				<em>node</em> itself.
+			</li>
+			<li>
+				<em>Label Size</em> indicates the font size to use in points.
+			</li>
+			<li>
+				<em>Label Format</em> is used to specify the font style attributes (
+				<em>Bold</em> and/or 
+				<em>Italic</em> and/or 
+				<em>Underline</em> and/or 
+				<em>Strike through</em>).
+			</li>
+			<li>
+				<em>Label Alignment</em> is used for labels positioned inside node to specify their alignment (note that not all alignment values are supported for all styles). For nodes, this attribute only applies when 
+				<strong>Label position</strong> is set to 
+				<strong>node</strong> (otherwise, the label is freely movable by the user). For containers, it only applies to the container&#8217;s label itself, not its content. This attribute does not apply to edges (again, their label is freely movable by users) and list items.
+			</li>
+			<li>
+				<em>Label border style</em> (only available for a 
+				<em>Gradient container style</em>): the specifier can choose a label border style among a list. As a result a border will be drawn or not around the label, this might impact the children content pane configuration.
+			</li>
+			<li>
+				<em>Show icon</em> indicates whether or not the element&#8217;s icon should be made visible. If set, the icon used is the one associated with the type of the target element, and is rendered on the left of the label. Note that end-user will always be able to hide such icons by using the 
+				<em>Label icons</em>  preferences (
+				<em>Window</em>/ 
+				<em>Preferences</em>/ 
+				<em>Sirius</em>/ 
+				<em>Sirius Diagram</em>/ 
+				<em>Appearance</em>).
+			</li>
+			<li>
+				<em>Hide label by default</em> (not available for edges) is used to configure the label visibility when an element is created.
+			</li>
+		</ul>
+		<p>While not strictly part of the label properties, a 
+			<em>Tooltip Expression</em> can be set for most style, and is used to compute the text of the optional tool-tip shown when the user leaves the mouse on an element. It can be seen as an alternate 
+			<em>Label Expression</em> which is not visible by default, and can be used to show additional details on an element only when the user requests them, to avoid visual clutter on the diagram.
+		</p>
+		<h3 id="size">Size Properties</h3>
+		<p>Most styles give you some control on the size of the graphical elements. The properties described below are not available for all styles, but when they are they have the same meaning (unless specified for special cases):</p>
+		<ul>
+			<li>
+				<em>Allow resizing</em>: You can decide if end-users are allowed to resize graphical elements 
+				<em>Horizontally</em> and/or 
+				<em>Vertically</em>. Most styles allow resizing on both directions by default.
+			</li>
+			<li>Initial 
+				<em>Width</em> and 
+				<em>Height</em> can be specified explicitly. A value of 0 indicates no explicit width or height. The initial value will be taken from the style&#8217;s default or from the 
+				<em>Size Computation Expression</em> if specified.
+			</li>
+			<li>
+				<em>Size Computation Expression</em>: An expression used to dynamically compute the size of a graphical element. It is evaluated in the context of the target element, and should return an integer.
+			</li>
+			<li>
+				<em>Border Size Computation Expression</em>: An expression which is used to dynamically compute the size of the border of graphical element. It is evaluated in the context of the target element, and should return the border size 
+				<em>in pixels</em>.
+			</li>
+		</ul>
+		<h3 id="colors">Colors</h3>
+		<p>Whenever you have to specify colors for a style, you can use either one of the pre-defined system colors or one which you have defined yourself in a 
+			<em>Users Color Palette</em>. The palette is created directly inside the 
+			<em>Viewpoint</em> element, and its colors can be used by any representation, not just diagram. See 
+			<a href="../general/Colors.html">the general section on colors</a> for more details.
+		</p>
+		<h3 id="authorizedsides">Authorized Sides</h3>
+		<p>By default, border node can be located on any side of its parent. It is possible to restrict a border node authorized sides. Thus the end user will not have the possibility to create or to move a border node on a forbidden side. Authorized sides can be specified in the advanced tab of the border node style:
+			<br/>
+			<img border="0" src="images/styles/authorizedSides.png"/>
+		</p>
+		<h2 id="tools">Tools</h2>
+		<p>Tools are used to define the behavior of your modeler. Some tools will appear in the diagram&#8217;s palette (e.g. a tool to create a new node), while others are automatically invoked when the user performs certain operations (e.g. a delete tool which is triggered when the user deletes an element from the diagram).</p>
+		<h3 id="tools_organization">Tools Organization</h3>
+		<p>Tools are defined in 
+			<em>Tool Sections</em>, which appear directly inside layers. If a tool is defined inside an additional layer, it will be enabled only when the corresponding layer is enabled.
+		</p>
+		<p>The top-level 
+			<em>Tool Sections</em> inside a layer are simply used to separate tools definition from mapping definitions and have no impact on how the tools are presented. However, if you create sub-sections inside those top-level section (
+			<em>New Tool... &gt; Section</em>), and if those sections contain tools which appear in the palette, then the sub-sections will be used to group the corresponding tools in expansible sections in the palette. You can also create 
+			<em>Groups</em> (
+			<em>New Tools... &gt; Group</em>), which behave like combo-boxes in the palette: only one of the tools defined inside the group is active (and visible) at a time.
+		</p>
+		<p>Tool sections can have 
+			<em>Reused Tools</em>, which are defined elsewhere (including in another layer, even from a different representation). They will appear and behave as if they were defined inside the section which reuses them.
+		</p>
+		<p>The 
+			<em>Group Extension</em> elements (defined inside a tool section) allow you to add tools in a existing 
+			<em>Group</em> defined elsewhere. It can be used for example to merge tools defined in an additional layer into a group of tools defined in the default layer. You must select the existing 
+			<em>Group</em> to extend, and any tool declared in a group extension will be added in the targeted group by the &#8216;group&#8217; attribute.
+		</p>
+		<p>Note that the Tool Section label and Tool label are 
+			<a href="../general/Specifying_Viewpoints.html#translatable_messages">
+				<em>Translatable Messages</em>
+			</a> and can therefore be localized.
+		</p>
+		<p>
+			<i>WARNING</i> : It was possible to define a ToolSection directly under a DiagramDescription, outside a layer. Defining tool section outside a layer is discouraged, that&#8217;s why this action has been deleted. The tool sections created before are still present but you should move it into the default layer since it is likely to be deleted in the future.
+		</p>
+		<h3 id="tools_specification">Tools Specification</h3>
+		<p>
+			<a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+		</p>
+		<p><div style="display: none">
+			<br/>
+			<strong>TODO</strong> Study the exact semantic of this and complete the description.
+			<br/></div>
+		</p>
+		<h3 id="tools_reference">Tools Reference</h3>
+		<p>In this section we describe each kind of tool available on a diagram.</p>
+		<h4 id="node_creation">Node Creation</h4>
+		<p>See the description in the 
+			<a href="#node_tools">node-specific tools section</a>.
+		</p>
+		<h4 id="container_creation">Container Creation</h4>
+		<p>See the description in the 
+			<a href="#container_tools">container-specific tools section</a>.
+		</p>
+		<h4 id="edge_creation">Edge Creation</h4>
+		<p>See the description in the 
+			<a href="#edge_tools">edge-specific tools section</a>.
+		</p>
+		<h4 id="container_drop">Container Drop</h4>
+		<p>See the description in the 
+			<a href="#container_tools">container-specific tools section</a>.
+		</p>
+		<h4 id="reconnect_edge">Reconnect Edge</h4>
+		<p>See the description in the 
+			<a href="#edge_tools">edge-specific tools section</a>.
+		</p>
+		<h4 id="paste_description">Paste</h4>
+		<p>The paste tool aims to define operations to paste the given copied semantic element, accessible through the 
+			<em>copiedElement</em> variable, into the semantic paste receiver, accessible through the 
+			<em>container</em> variable. The 
+			<em>copiedView</em> and 
+			<em>containerView</em> variables reference the corresponding graphical element. The 
+			<em>Containers</em> property indicates the mappings to which this tool apply.
+		</p>
+		<p>Its semantic target is the copied semantic element. If the copied element was a non domain based element (e.g. relation edge), the semantic element is the original except if it is targeted by a domain based element also selected. When the semantic target is not copied, the tool receive a null copied element.</p>
+		<p>
+			<strong>Warning</strong>: The generic behavior is used only when there is no tool defined on the paste receiver. Otherwise the first tool with a precondition evaluated as true will be chosen and if all defined tools have a false precondition, paste action will be disabled.
+		</p>
+		<p><div style="display: none">
+			<br/>
+			<strong>TODO</strong> Description not clear at all.
+			<br/></div>
+		</p>
+		<h4 id="delete_tool">Delete Element</h4>
+		<p>If you do not associate a 
+			<em>Delete</em> tool to a mapping, the default delete behavior when the user deletes a graphical element is to remove the target semantic element and all the associated semantic elements from the semantic model. If you want a different behavior or if you want to forbid the deletion of some elements, you must set an explicit 
+			<em>Delete</em> tool. Delete tools are invoked when the user select the 
+			<em>Delete from model</em> action (from the context menu, from the tab-bar or using the 
+			<em>Delete</em> key). The 
+			<em>element</em> variable will be set to the main semantic target element being deleted (excluding any associated semantic elements) while the 
+			<em>elementView</em> and 
+			<em>containerView</em> tell you which graphical view is being deleted and in which context it is.
+		</p>
+		<p>If you want to completely disable deletion for some elements, you can either create a 
+			<em>Delete</em> tool which does nothing for these elements or, if possible, setup the tool&#8217;s 
+			<em>Precondition</em> to return 
+			<em>false</em> for these elements. Setting a precondition is usually preferred as it will mark the 
+			<em>Delete</em> action as disabled in the UI (tab-bar and context menu) while a tool which simply does nothing can still be invoked by users, but with no effect. Note however that the 
+			<em>Precondition</em> will be evaluated each time the user selects and element to decide whether or not the delete action should be enabled in the UI. A precondition which is complex to evaluate can have a negative impact on the perceived performance of the modeler.
+		</p>
+		<h4 id="direct_edit">Direct Edit Label</h4>
+		<p>The 
+			<em>Direct Edit Label</em> tool is used to allow users to directly edit the label of a representation element. It specifies how to interpret the new label value, and which changes to apply to the model element. Users can invoke it using the 
+			<em>F2</em> shortcut, through a slow double-click, or directly by starting to type some text when a label is selected.
+		</p>
+		<p>If you want to display a different label during the edition, you can use the 
+			<code>input label expression</code>. This expression is evaluated during the invocation of the direct edit and displayed to the end-user instead of the standard label (defined in the style of the mapping).
+			<br/>For example, you can display a class with a stereotype, 
+			<code>&lt;&lt;utility&gt;&gt; Math</code>, and display only the class name, 
+			<code>Math</code>, during the edition.
+		</p>
+		<p>Inside a 
+			<em>Direct Edit Label</em> tool, you 
+			<em>must</em> specify an 
+			<em>Edit Mask Variable</em> element. The mask is used to parse the new label&#8217;s value as entered by the user, and to select part of this label as input variables to the editing action&#8217;s body. The mask can contain substrings of the form <code>{N}</code> where 
+			<code>N</code> is a number. The parts of the new label&#8217;s value which corresponds to these substring will be available as variables name 
+			<code>argN</code> (strings) in the body of the direct edit action. The default mask is <code>{0}</code>, which means the whole text entered by the user will be available through the variable 
+			<code>arg0</code>.
+		</p>
+		<p>
+			<em>Note:</em> Edges can have up to three different labels (one in the center and one at each extremity), but currently if a 
+			<em>Direct Edit</em> tool is associated to an 
+			<em>Edge</em> mapping, only the center label (if it exists) can be edited. This restriction will probably be lifted in future versions.
+		</p>
+		<h4 id="selection_wizard">Selection Wizard</h4>
+		<p>This tool can be used to open a wizard dialog asking the user to select one or several model elements. The body of the tool is then executed in the context of the element selected by the user.</p>
+		<p>When the tool is selected, the user must first select a diagram element as the tool&#8217;s target. Then a dialog box opens with a list of candidate elements to select. The list is computed from the target using expressions you specify in the tool&#8217;s description.</p>
+		<p>The 
+			<em>Window Title</em>, 
+			<em>Icon Path</em>, 
+			<em>Windows Image Path</em> and 
+			<em>Message</em> can be used to customize the look of the selection window.
+		</p>
+		<p>The 
+			<em>Candidates Expression</em> should return a list of elements from which the user can select the variable&#8217;s value. By default these candidates are presented as a list. You can also enable the 
+			<em>Tree</em> mode to display elements as a tree. In that case, you must specify a 
+			<em>Root Expression</em> that will provide elements to be displayed as first level of the tree item in the dialog and a 
+			<em>Children Expression</em>, which will be evaluated recursively on each candidate, from the root elements, to build a tree of possible values. Note that 
+			<em>Root Expression</em> and 
+			<em>Children Expression</em> provides elements that must be included in 
+			<em>Candidates Expression</em> elements.
+			<br/>Finally, you can set the 
+			<em>Multiple</em> flag to allow users to select several of the candidates instead of a single one.
+		</p>
+		<p><div style="display: none">
+			<br/>
+			<strong>TODO</strong> What is the context where the tool&#8217;s body is executed if several elements are selected?
+			<br/></div>
+		</p>
+		<p>
+			<img border="0" src="images/styles/Selection_Tool.png"/>
+		</p>
+		<p>Note that the 
+			<em>Window Title</em> label and 
+			<em>Message</em> label are 
+			<a href="../general/Specifying_Viewpoints.html#translatable_messages">
+				<em>Translatable Messages</em>
+			</a> and can therefore be localized.
+		</p>
+		<h4 id="pane_based_selection_wizard">Pane-Based Selection Wizard</h4>
+		<p>The 
+			<em>Pane-Based Selection Wizard</em> is very similar to the 
+			<a href="#selection_wizard">Selection Wizard</a>. It differs only in the presentation of the selection window. The pane-based wizard offers two panels: on the left are all the candidates, which corresponds to the contents of the basic 
+			<em>Selection Wizard</em>. On the right is the current selection. The user has buttons to add or remove candidates from the left panel into the right one. The 
+			<em>Pre Selected Candidates Expression</em> can be used to define the initial content of the right-side panel.
+		</p>
+		<p><div style="display: none">
+			<br/>
+			<strong>TODO</strong> What is the context where the tool&#8217;s body is executed if several elements are selected?
+			<br/></div>
+		</p>
+		<p>
+			<img border="0" src="images/styles/Pane-Based_Selection_Tool.png"/>
+		</p>
+		<p>Note that the 
+			<em>Window Title</em> label, 
+			<em>Message</em> label, 
+			<em>Choice of Values Message</em> label and 
+			<em>Selected Values Message</em> labels are 
+			<a href="../general/Specifying_Viewpoints.html#translatable_messages">
+				<em>Translatable Messages</em>
+			</a> and can therefore be localized.
+		</p>
+		<h4 id="representation_creation">Representation Creation</h4>
+		<p>Each dialect supported by Sirius defines a tool which can be used to create a new representation using this dialect. They are (using the default supported dialects): 
+			<em>Diagram Creation</em> description, 
+			<em>Table Creation</em> description and 
+			<em>Tree Creation</em> description.
+		</p>
+		<p>These tools (one for each kind of representation supported by Sirius) can be used to create (and open) a new representation from an existing diagram element. They will be available to end-users in the 
+			<em>Navigate</em> context menu on compatible diagram elements. To configure the tool, simply select in the 
+			<em>Mappings</em> property which kinds of elements the tool should appear on (you can be more precise using the 
+			<em>Precondition</em> expression if necessary), and select the representation which should be created using the 
+			<em>Representation Description</em> property (in practice, one of 
+			<em>Diagram Description</em>, 
+			<em>Table Description</em> or 
+			<em>Tree Description</em> depending on the tool). Normally, the new representation will be created on the semantic element represented by the diagram element on which the user invoked the tool. Sometimes you want the tool to appear on one element, but create a representation on another one. In this case, use the 
+			<em>Browse expression</em> (in the 
+			<em>Advanced</em> category) to navigate from the element selected to the one one which the new representation should actually be created. The 
+			<em>Title Expression</em> (
+			<em>Advanced</em> category) can be used to set the title of the newly created representation. Finally, any operation you specify in the body of the tool will be executed when the tool is invoked; you can use it to initialize the content of the model represented. 
+		</p>
+		<h4 id="representation_navigation">Representation Navigation</h4>
+		<p>Each dialect supported by Sirius defines a tool which can be used to navigate to existing representation of this dialect. They are (using the default supported dialects): 
+			<em>Diagram Navigation</em> description, 
+			<em>Table Navigation</em> description and 
+			<em>Tree Navigation</em> description.
+		</p>
+		<p>These tools are very similar to the 
+			<a href="#representation_creation">representation creation tools</a>. The only differences is that they allow users to navigate to existing representation instead of creating new ones. If such a tool exists, the 
+			<em>Navigate</em> context menu on an element will contains an entry for each corresponding representation which already exists on the element selected (or reachable from the selected element using the 
+			<em>Browse expression</em>). You can specify a 
+			<em>Navigation name expression</em> (
+			<em>Advanced</em> category) to be used in the menu entry instead of using the title of the existing representation. This can be useful to make it more explicit what the relationship is between the current element and the target tree.
+		</p>
+		<h4 id="double_click_tool">Double-Click</h4>
+		<p>This tool is used to trigger operations when the user double-clicks on an element. The 
+			<em>Mappings</em> property indicate for what kinds of element this tool is applicable.  
+		</p>
+		<p>Inside the body of the tool, the 
+			<em>elementView</em> variable refers to the graphical element the user double-clicked on, while the 
+			<em>element</em> variable represents its semantic target element.
+		</p>
+		<h4 id="generic_tool">Generic Tool</h4>
+		<p>This generic tool is used to provide a palette entry which can execute any code describe in the internal tool language, including for example invoking external Java actions.</p>
+		<p>Inside the body of the tool, the 
+			<em>elementView</em> variable refers to the graphical element the user invoked the tool on, while the 
+			<em>element</em> variable represents its semantic target element.
+		</p>
+		<h4 id="popup_menu">Popup Menu</h4>
+		<p>This tool can be used to define an entry in the context menu which can contain 
+			<a href="#operation_action">
+				<em>Operation Actions</em>
+			</a> and 
+			<a href="#external_java_action">
+				<em>External Java Action</em>
+			</a> tools. Which ones are visible when the menu is opened depend on the preconditions of these actions, which can thus be activated or not depending on the currently selected element.
+		</p>
+		<h4 id="operation_action">Operation Action</h4>
+		<p>This tool can be used to define an operation which will appear as an entry in the context menu (or in a sub-menu if defined inside a 
+			<em>Popup Menu</em> element). When invoked, the body of the action is executed with the 
+			<em>views</em> variable referencing all the representation elements which were selected on the diagram.
+		</p>
+		<h4 id="external_java_action">External Java Action</h4>
+		<p>The 
+			<em>External Java Action</em> tool simply creates a menu entry in the context menu which directly invokes any 
+			<a href="../general/Model_Operations.html#external_java_action">External Java Action</a> you can define.
+		</p>
+		<h4 id="request_description">Request</h4>
+		<p>This tool is for advanced uses only. It requires understanding and extending GMF, the graphical framework used by Sirius to display diagrams. A 
+			<em>Request</em> description tool will contribute an item in the palette, and when invoked on a graphical element it will send a GMF request to the corresponding edit part. The type of the request to send is specified as a fixed string in the 
+			<em>Type</em> property. The target edit part should have an edit policy capable of understanding and reacting to the request.
+		</p>
+		<p><div style="display: none">
+			<br/>h4(#behavior_tool). Behavior Tool
+			<br/>
+			<strong>TODO</strong> Understand what this does exactly, and decide whether we want to keep it or not. Document it if we keep it.
+			<br/></div>
+		</p>
+		<h2 id="filters">Filters</h2>
+		<p>A diagram can define any number of filters, which can be enabled or disabled dynamically by the user to show or hide some elements of a diagram. Filters differ from layers on three main points:</p>
+		<ul>
+			<li>they are more fine-grained, they can selectively hide or show elements depending on their individual characteristics, whereas layers activate or deactivate whole mapping types.</li>
+			<li>they are purely graphical: even if some representation elements are hidden from the user&#8217;s view, they still exist;</li>
+			<li>they have no links with tools, they can not show or hide tools. </li>
+		</ul>
+		<p>To add a filter to a diagram, create a 
+			<em>Composite Filter</em> inside the 
+			<em>Diagram Description</em> element, specify its 
+			<em>Name</em> (a fixed string), and add one or several 
+			<em>Mapping Filter</em> or 
+			<em>Variable Filter</em> elements inside of it.
+		</p>
+		<h3 id="mapping_filter">Mapping Filter</h3>
+		<p>A mapping filter applies to all the elements instance of some mappings, and can filter some of them according to configurable conditions.</p>
+		<p>The 
+			<em>Filter Kind</em> attribute of a 
+			<em>Mapping Filter</em> can be 
+			<code>HIDE</code>, which will completely remove the element from view, or 
+			<code>COLLAPSE</code> which will minimize its size to a small transparent square of 4-by-4 pixels. The collapse mode is useful because the edges which use the filtered element as a source or target are still visible when the element is collapsed, while they disappear when the element is hidden.
+		</p>
+		<p>The 
+			<em>Mappings</em>  property indicates the list of mappings to which the filter will apply.
+		</p>
+		<p>The 
+			<em>Semantic Condition Expression</em> will be evaluated in the context of the target semantic elements of each instances of the specified mapping. It should return 
+			<strong>true</strong> if the element should be kept visible, and 
+			<strong>false</strong> if it should be hidden/collapsed.
+		</p>
+		<p>The 
+			<em>View Condition Expression</em> is similar to the 
+			<em>Semantic Condition Expression</em>, but is evaluated on the context of the 
+			<em>view element</em> of each instance of the specified mapping. The view element is the model element used by Sirius to represent the graphical element. Using these expressions require some knowledge of the structure of the view model used by Sirius.
+		</p>
+		<p>Both expressions are optional. If none is specified, the filter will have no effect. If both are specified, only the elements for which both expressions return 
+			<strong>false</strong> will be hidden/collapsed.
+		</p>
+		<p>The expressions of all active filters are evaluated whenever the diagram is refreshed (in the default 
+			<em>Auto-refresh</em> mode, whenever a change occurs in the semantic model), not just when the user enables the filter. This means that the active filters can have a big impact on performance if they perform complex tests, so keep this in mind when writing the condition expressions.
+		</p>
+		<h3 id="variable_filter">Variable Filter</h3>
+		<p>A 
+			<em>Variable Filter</em> is similar to a 
+			<em>Mapping Filter</em>, except that instead of using a list of mappings to select the candidate elements to filter, all represented elements are candidates but can be filtered with a Semantic Condition Expression.
+			<br/>In that expression, the specifier can use variables that are defined in the variable filter.
+		</p>
+		<ul>
+			<li>Select Model Element Variable : it opens a dialog box from which the user can select a collection of EObjects. The configuration of the dialog box uses the same properties and semantic as the 
+				<a href="#selection_wizard">Selection Wizard</a> tool. Refer to its documentation for the details. 
+			</li>
+			<li>Typed Variable : see 
+				<a href="#filter_with_typed_variable">Filter with Typed Variable</a> 
+			</li>
+		</ul>
+		<h4 id="filter_with_typed_variable">Filter with Typed Variable</h4>
+		<p>A Typed Variable is a variable which value type is a 
+			<em>EDataType</em> as chosen by the specifier and which value is filled by the user when applying the variable filter.
+			<br/>An interpreted expression allows defining the default value.
+		</p>
+		<p>
+			<img border="0" src="images/typedVariable_PropertyView.png"/>
+		</p>
+		<p>When the user applies a variable filter with typed variables, a dialog box is displayed to allow user entering the values. 
+			<br/>This dialog box is prompted after all 
+			<em>Select Model Element</em> wizard have been prompted.
+			<br/>It contains as many line as number of typed variables under the variable filter.
+			<br/>The user documentation is displayed as tooltip on question mark.
+			<br/>The default value is the result of the interpreted expression defined on VSM.
+		</p>
+		<p>
+			<img border="0" src="images/dialog_TypedVariableValue.png"/>
+		</p>
+		<p>
+			<strong>EDataType class instantiation</strong>
+		</p>
+		<p>Note that whatever the type of variable is, the field is a text field.</p>
+		<p>In order that the EDataType class is instantiable, the value given by the user should follow rules which depend on how it is triggered by EMF mechanism.
+			<br/>If the EFactory of the EDataType is not overloaded, the class corresponding to the EDataType must have a constructor with a String parameter. At instantiation, the string argument will be the string input by the user. This string argument is translated into the right data in the class constructor for example.
+			<br/>What is done in the constructor described above can also be done overloading the EDataType class EFactory.
+		</p>
+		<p>Example:
+			<br/>If your class represents a point coordinates with two fields x and y of type int, the string input by the user could be 
+			<em lang="integer">,[integer]</em>. This kind of information could be given to the user through the 
+			<em>User documentation</em>
+		</p>
+		<h2 id="validation">Validation Rules</h2>
+		<p>A diagram description can define custom validation rules which will only be applied when launching a validation on an instance of this diagram (using the 
+			<em>Validate</em> operation in the context menu). To define validation rules you must first create a 
+			<em>Validation</em> element inside the diagram, and then add one or more 
+			<em>Semantic Validation Rule</em> or 
+			<em>View Validation Rule</em>. Both kinds of rules are similar, but semantic rules check the structure of the underlying semantic model which view validation rules can check the structure of the representation itself. When a rule is violated, a marker will appear on the diagram on the problematic elements and in the 
+			<em>Problems</em> view.
+		</p>
+		<p>Each rule has a 
+			<em>Level</em>, which represents its severity when it is violated. It can be 
+			<em>Information</em>, 
+			<em>Warning</em> or 
+			<em>Error</em>. It also has a computed 
+			<em>Message</em> expression (evaluated in the context of the checked element) to provide the user an explanation of the problem detected. Semantic validation rules must specify 
+			<em>Target Class</em>, and will be checked on all the instances of that class in the semantic model. View validation rules have instead of a list of 
+			<em>Targets</em> which are the mappings it applies to.
+		</p>
+		<p>Inside a rule you must define one or more 
+			<em>Audit</em>, which perform the actual checks using an 
+			<em>Audit Expression</em>. The expression will be evaluated on each (semantic or graphical) element to check, and must return 
+			<em>false</em> if the rule is violated. If a rule contains several audits, it is triggered if at least one of them detects an issue.
+		</p>
+		<p>You may also define one or more 
+			<em>Fixes</em> inside a rule. When a rule is violated, if it defines fixes they will be available to the end-users in the context menu of the corresponding marker. Each fix has a name and a body. The body is defined in the same way as the body of a tool, using any of the available 
+			<a href="../general/Model_Operations.html">model operations</a>. It should perform any required change in the model to fix the issue detected by the validation rule, if possible.
+		</p>
+		<h2 id="extensibility">Diagram Extensibility Features</h2>
+		<p>Sirius has specific support for extending and refining diagram descriptions and mappings without modifying the original. The extensions are applied transparently when the viewpoint they are defined in are enabled, and removed when the viewpoint is disabled.</p>
+		<p>For example, if a base viewpoint 
+			<em>V1</em> defines a diagram description 
+			<em>D</em>, you can define a separate viewpoint 
+			<em>V2</em> (maybe even from inside a different plug-in, you do not need access to the source of 
+			<em>V1</em>) and in 
+			<em>V2</em> define an extension 
+			<em>DE</em> to 
+			<em>D</em>. When users enable only 
+			<em>V1</em>, they see 
+			<em>D</em> as defined in 
+			<em>V1</em>. When they enable both 
+			<em>V1</em> and 
+			<em>V2</em>, 
+			<em>D</em> is automatically extended by 
+			<em>DE</em>.
+		</p>
+		<p>Note that a given diagram type can be extended by multiple extensions at the same time. However if several extensions try to redefine elements defined in the base diagram (instead of just adding new elements), the result is not specified.</p>
+		<h3 id="diagram_extension">Diagram Extensions</h3>
+		<p>A 
+			<em>Diagram Extension</em> is defined directly inside a 
+			<em>Viewpoint</em> element, and it must specify precisely which diagram description it extends using the 
+			<em>Viewpoint URI</em> and 
+			<em>Representation Name</em> properties (the 
+			<em>Name</em> property is the name of the extension itself).
+		</p>
+		<p>The 
+			<em>Viewpoint URI</em> indicates in which viewpoint the extended diagram is defined. It has the following syntax: 
+			<code>viewpoint:/pluginId/ViewpointName</code>, where 
+			<code>pluginId</code> is the identifier of the Eclipse plug-in in which the viewpoint is defined, and 
+			<code>ViewpointName</code> is the name of the viewpoint. Note that the name must be unique among all the viewpoints defined in all the VSMs contributed by that plug-in.
+		</p>
+		<p>The 
+			<em>Representation Name</em> is simply the identifier (
+			<em>Id</em> field) of the diagram to extend, which is defined inside the specified viewpoint.
+		</p>
+		<p>A 
+			<em>Diagram Extension</em> can specify the 
+			<em>Metamodels</em> of the semantic elements it represents if it supports types of elements which were not represented in the extended diagram. Inside a 
+			<em>Diagram Extension</em>, you can define 
+			<a href="#validation">validation rules</a>, 
+			<a href="#filters">filters</a> and additional 
+			<a href="#layers">layers</a>. When the extension is enabled (i.e. when both the viewpoint it is defined in and the one it extends are enabled), the elements defined in the extension will be merged (added) into the base diagram&#8217;s definition as if they had been defined directly in the base diagram.
+		</p>
+		<p>The simplest use case of a diagram extension is to simply 
+			<em>augment</em> the base diagram with new graphical elements, tools, filters and validation rules. However you can also use the notion of 
+			<em>Mapping Import</em> to 
+			<em>modify</em> the definition of some of the base diagram&#8217;s mappings. 
+			<em>Mapping Imports</em> are actually independent of diagram extensions, and can be used inside a normal diagram description as their semantic is defined in terms of layers activation, but their main use case is when using diagram extensions.
+		</p>
+		<p>You can use regular expression in 
+			<em>Viewpoint URI</em> and 
+			<em>Representation Name</em> fields. This allows to extend several diagrams with one single 
+			<em>Diagram Extension</em>. You should use regular expressions only to define a 
+			<em>Diagram Extension</em> that contains only 
+			<a href="#customization">style customization</a>.
+			<br/>These fields are considered as regular expressions if they contain at least one of these characters : &#8220;*&#8221;, &#8220;[&#8221;, &#8220;]&#8221;, &#8220;(&#8221;, &#8220;)&#8221; or &#8220;?&#8221;.
+		</p>
+		<h3 id="mapping_imports">Mapping Imports</h3>
+		<p>A mapping import is used to 
+			<em>specialize</em> (modify) a mapping defined somewhere else (in an other layer, an other graphical representation or an other viewpoint). This feature is only available for diagram kind representations.
+		</p>
+		<p>For example, if a layer 
+			<em>L1</em> defines a mapping 
+			<em>M1</em> and an other layer 
+			<em>L2</em> defines a mapping import 
+			<em>M2</em> which imports 
+			<em>M1</em>, then 
+			<em>M2</em> may override/overload some of the features of 
+			<em>M1</em> like a more specific &#8220;Semantic Candidate Expression&#8221; or a conditional style taking into account other specific aspects. When only 
+			<em>L1</em> is activated the normal definition of 
+			<em>M1</em> is applied. If 
+			<em>L2</em> is also activated, 
+			<em>M2</em> is applied instead of 
+			<em>M1</em>, the overloaded features in 
+			<em>M2</em> replace the ones of 
+			<em>M1</em> and  the new defined features or sub-elements are added.
+		</p>
+		<p>You can define 
+			<em>Node Mapping Imports</em>, 
+			<em>Container Mapping Imports</em> or 
+			<em>Edge Mapping Imports</em>. They all behave in the same way. For each one you must specify the 
+			<em>Imported Mapping</em> (typically from another layer defined in a diagram you are extending or in the same diagram). Mapping imports have all the properties of normal mappings, but when you set an explicit value for a property in a mapping import:
+		</p>
+		<ul>
+			<li>if it is an attribute (for example the 
+				<em>Semantic Candidates Expression</em>), the value defined in the mapping import will override the one defined in the imported mapping.
+			</li>
+			<li>if it is a reference (for example the 
+				<em>Reused Bordered Node Mappings</em> on a 
+				<em>Node Mapping Import</em>), the values defined in the mapping import will be 
+				<em>added</em> to the ones defined in the imported mapping.
+			</li>
+		</ul>
+		<p>Two parameters which are specific to import mappings can change this last behavior:</p>
+		<ul>
+			<li>If the 
+				<em>Inherits Ancestor Filters</em> flag is set, the 
+				<a href="#mapping_filter">mapping filters</a> which apply to the imported mapping will also apply to the import itself. However if you do 
+				<strong>not</strong> want to inherit these filters, you can un-check the 
+				<em>Inherits Ancestor Filters</em> flag. In that case only the mapping filters which explicitly target the import mapping will apply to it.
+			</li>
+			<li>If the 
+				<em>Hide Sub-Mappings</em> flag is set, then when the import mapping is active, only the sub-mappings it defines explicitly (including bordered node mappings) are taken into account. This is different from the standard behavior in which both the sub-mappings defined in the imported mapping and in the import mapping are used. For example, this means that if the imported mapping defines a bordered node mapping, a mapping import can 
+				<em>hide</em> these bordered nodes by using this flag and simply not define any bordered node mapping of its own.
+			</li>
+		</ul>
+		<h2 id="customization">Diagram Styles Customization</h2>
+		<p>Diagram elements support conditional styles, which can be used to completely change the appearance of an element depending on some arbitrary condition. However, defining a complete conditional style can be cumbersome when you just want to customize a specific aspect of the element&#8217;s style (for example a single color). A more fine grained customization of styles is possible using 
+			<em>Style Customization</em> elements.
+		</p>
+		<p>To use this feature, you must first create a 
+			<em>Style Customizations</em> element inside a layer (from the 
+			<em>New Customization...</em> context sub-menu). Only one such element can exist in a layer, and it serves as a container for all style customizations the layer defines. Inside a 
+			<em>Style Customizations</em> you can define any number of individual 
+			<em>Style Customization</em> elements, each of which re-groups a set of actual customizations which can be either an 
+			<em>Property Customization (by expression)</em> or a 
+			<em>Property Customization (by selection)</em>. Both kinds work on the same principle, and you must define:
+		</p>
+		<ul>
+			<li>The style elements to customize, using the 
+				<em>Applied On</em> attribute. You can specify multiple styles if the customization should apply to different style elements or to different styles for a given element (e.g. the default and some or all of the conditional styles).
+			</li>
+			<li>The feature to customize, using the 
+				<em>Property Name</em> field (you can use completion with 
+				<em>Ctrl+Space</em> to see the list of possible values depending on which element(s) you selected in 
+				<em>Applied On</em>).
+			</li>
+			<li>And finally the value to set for that feature. For references (
+				<em>Property Customization (by selection)</em>), you must select the actual value from the available choices in the combo box. For attributes (
+				<em>Property Customization (by expression)</em>), the value is computed using an interpreted expression evaluated in the context of the semantic element whose style is being customized.
+			</li>
+			<li>The 
+				<strong>Apply on all</strong> option offers the possibility to customize the feature for all styles available in the diagram. That option avoids you to make an exhaustive list of all styles to customize. You can also make your customizations available for several representations by using a regular expression in Viewpoint URI and Representation Name fields (see 
+				<a href="#diagram_extension">Diagram Extension Description</a> for more details).
+			</li>
+		</ul>
+		<p>A 
+			<em>Style Customization</em> can define a predicate expression to control whether or not it should apply. If defined, the expression is evaluated in the context of a semantic element to determine whether or not the customizations should be applied. If no expression is defined, the customizations will apply. If a 
+			<em>Style Customization</em> applies to a given element, the 
+			<em>base style</em> that the element would normally have will be modified by applying all the 
+			<em>Property Customization</em> (by expression and by reference) defined in the 
+			<em>Style Customization</em> , if they are compatible with that base style.
+		</p>
+		<p>A 
+			<em>Style Customizations</em> group can also contain 
+			<em>Style Customization Reuse</em> elements. These can be used to reuse customizations defined elsewhere in a different context (specified using the 
+			<em>Reuse</em> property), and apply them to other elements (specified using the 
+			<em>Applied On</em> property). They will behave as if they had been defined locally inside a 
+			<em>Style Customization</em> with no precondition.
+		</p>
+		<h3 id="enum_customization">Style Customization of an Enumerator property </h3>
+		<p>To customize a property of type Enumerator, the value expression must return an instance of Enumerator. Here is some examples of value expression:</p>
+		<ul>
+			<li>Examples for sourceArrow property (of kind 
+				<code>EdgeArrows</code>):
+				<ul>
+					<li>
+						<code>aql:diagram::EdgeArrows::FillDiamond</code>
+					</li>
+					<li>
+						<code>aql:'FillDiamond'</code> or 
+						<code>FillDiamond</code> also works but it is not recommended to use the literal value of an instance of Enumerator.
+					</li>
+				</ul>
+			</li>
+			<li>Examples for labelFormat property (of kind 
+				<code>EList&lt;FontFormat&gt;</code>):
+				<ul>
+					<li>
+						<code>aql:viewpoint::FontFormat::bold</code> to set a label in bold
+					</li>
+					<li>
+						<code>aql:OrderedSet{viewpoint::FontFormat::bold, viewpoint::FontFormat::italic}</code> to set a label in bold and italic
+					</li>
+					<li>
+						<code>service:fontFormatBold()</code> with a service like
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<pre>public FontFormat fontFormatBold(EObject any) {
+        return FontFormat.BOLD_LITERAL;
+    }
+</pre>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation1.png b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation1.png
new file mode 100644
index 0000000..97a9a90
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation2.png b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation2.png
new file mode 100644
index 0000000..261014a
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation3.png b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation3.png
new file mode 100644
index 0000000..4cf6f91
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/compartmentsLayout-Creation3.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_borderNode.png b/doc/5.1.x/specifier/diagrams/images/decoration_borderNode.png
new file mode 100644
index 0000000..94e7aa9
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_borderNode.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_example.png
new file mode 100644
index 0000000..860c703
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_group_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_group_example.png
new file mode 100644
index 0000000..6b95ad1
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_group_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_group_tooltip_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_group_tooltip_example.png
new file mode 100644
index 0000000..2c3d82b
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_group_tooltip_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_positions.png b/doc/5.1.x/specifier/diagrams/images/decoration_positions.png
new file mode 100644
index 0000000..c933b69
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_positions.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/decoration_tooltip_example.png b/doc/5.1.x/specifier/diagrams/images/decoration_tooltip_example.png
new file mode 100644
index 0000000..868b351
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/decoration_tooltip_example.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/dialog_TypedVariableValue.png b/doc/5.1.x/specifier/diagrams/images/dialog_TypedVariableValue.png
new file mode 100644
index 0000000..9c22f7e
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/dialog_TypedVariableValue.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/mappingBasedDecoration.png b/doc/5.1.x/specifier/diagrams/images/mappingBasedDecoration.png
new file mode 100644
index 0000000..58935f4
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/mappingBasedDecoration.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_After.png b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_After.png
new file mode 100644
index 0000000..8e3b1d1
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_After.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_Before.png b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_Before.png
new file mode 100644
index 0000000..f497672
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/references/reconnect/ReconnectTool_Before.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/semanticBasedDecoration.png b/doc/5.1.x/specifier/diagrams/images/semanticBasedDecoration.png
new file mode 100644
index 0000000..46c845b
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/semanticBasedDecoration.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Gradient.png b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Gradient.png
new file mode 100644
index 0000000..d08c3da
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Gradient.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Image.png b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Image.png
new file mode 100644
index 0000000..7f399bf
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Image.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Parallelogram.png b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Parallelogram.png
new file mode 100644
index 0000000..36af4e5
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Container_Style_Parallelogram.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Containers_on_diagram_or_another_container.png b/doc/5.1.x/specifier/diagrams/images/styles/Containers_on_diagram_or_another_container.png
new file mode 100644
index 0000000..596e867
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Containers_on_diagram_or_another_container.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Containers_with_compartments.png b/doc/5.1.x/specifier/diagrams/images/styles/Containers_with_compartments.png
new file mode 100644
index 0000000..e831e29
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Containers_with_compartments.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Centering.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Centering.png
new file mode 100644
index 0000000..47ea6ed
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Centering.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Manhattan.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Manhattan.png
new file mode 100644
index 0000000..a079f4f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Manhattan.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Straight.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Straight.png
new file mode 100644
index 0000000..7a7f657
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Straight.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Tree.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Tree.png
new file mode 100644
index 0000000..3cdfdc5
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_Tree.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_bracketStyle.png b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_bracketStyle.png
new file mode 100644
index 0000000..584ef20
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Edge_Style_bracketStyle.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Bordered_Node.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Bordered_Node.png
new file mode 100644
index 0000000..9defb26
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Bordered_Node.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Container.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Container.png
new file mode 100644
index 0000000..a22fdca
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Container.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_List_Container.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_List_Container.png
new file mode 100644
index 0000000..890dd2b
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_List_Container.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Node.png b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Node.png
new file mode 100644
index 0000000..f83d839
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Graphical_Vocabulary_Node.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/List_container_with_items.png b/doc/5.1.x/specifier/diagrams/images/styles/List_container_with_items.png
new file mode 100644
index 0000000..bd2918a
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/List_container_with_items.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Dot.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Dot.png
new file mode 100644
index 0000000..9b4b8e2
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Dot.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Ring.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Ring.png
new file mode 100644
index 0000000..59a61d1
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Ring.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Square.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Square.png
new file mode 100644
index 0000000..154a111
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Square.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Stroke.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Stroke.png
new file mode 100644
index 0000000..a2bd611
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Stroke.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Triangle.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Triangle.png
new file mode 100644
index 0000000..0d916ed
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Basic_Triangle.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Custom.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Custom.png
new file mode 100644
index 0000000..67147a4
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Custom.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Diamond.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Diamond.png
new file mode 100644
index 0000000..f05cfd5
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Diamond.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Ellipse.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Ellipse.png
new file mode 100644
index 0000000..317acca
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Ellipse.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Gauge.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Gauge.png
new file mode 100644
index 0000000..a83278d
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Gauge.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Image.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Image.png
new file mode 100644
index 0000000..108574f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Image.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Note.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Note.png
new file mode 100644
index 0000000..ed55ba0
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Note.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Square.png b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Square.png
new file mode 100644
index 0000000..c18323f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Node_Style_Square.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Pane-Based_Selection_Tool.png b/doc/5.1.x/specifier/diagrams/images/styles/Pane-Based_Selection_Tool.png
new file mode 100644
index 0000000..40da8b4
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Pane-Based_Selection_Tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/Selection_Tool.png b/doc/5.1.x/specifier/diagrams/images/styles/Selection_Tool.png
new file mode 100644
index 0000000..3a329fe
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/Selection_Tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/authorizedSides.png b/doc/5.1.x/specifier/diagrams/images/styles/authorizedSides.png
new file mode 100644
index 0000000..03d963f
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/authorizedSides.png
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Horizontal.jpg b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Horizontal.jpg
new file mode 100644
index 0000000..8d247b2
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Horizontal.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Square.jpg b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Square.jpg
new file mode 100644
index 0000000..fb29daa
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Square.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Vertical.jpg b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Vertical.jpg
new file mode 100644
index 0000000..fd1882a
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/styles/mini_Node_Gauge_Vertical.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/diagrams/images/typedVariable_PropertyView.png b/doc/5.1.x/specifier/diagrams/images/typedVariable_PropertyView.png
new file mode 100644
index 0000000..d5ccc16
--- /dev/null
+++ b/doc/5.1.x/specifier/diagrams/images/typedVariable_PropertyView.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/Colors.html b/doc/5.1.x/specifier/general/Colors.html
new file mode 100644
index 0000000..e35cc0a
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Colors.html
@@ -0,0 +1,95 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Colors</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="DefiningColorPalettes">Defining Color Palettes</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#DefiningColorPalettes">Defining Color Palettes</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#system_colors">System Colors</a>
+					</li>
+					<li>
+						<a href="#fixed_colors">User Fixed Colors</a>
+					</li>
+					<li>
+						<a href="#computed_colors">Computed Colors</a>
+					</li>
+					<li>
+						<a href="#interpolated_colors">Interpolated Colors</a>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Whenever you have to specify colors for a style, in any kind of representation supported by Sirius, you can use either one of the pre-defined system colors or one which you have defined yourself in a 
+			<em>Users Color Palette</em>. The palette is created directly inside the 
+			<em>Viewpoint</em> element, and its colors can be used by any representation.
+		</p>
+		<p>You can define three different kind of colors inside a palette:</p>
+		<ul>
+			<li>
+				<em>User Fixed Colors</em>
+			</li>
+			<li>
+				<em>Computed Colors</em>
+			</li>
+			<li>
+				<em>Interpolated Colors</em>
+			</li>
+		</ul>
+		<p>All have a name, which should be unique. It is useful to give semantic names to the colors (i.e. &#8220;Software System&#8221; instead of &#8220;Navy Blue&#8221;) so that they can be easily used consistently across all your representations. This way if you decide to change to color used for some kind of element you can be sure the new color will be applied everywhere.</p>
+		<h2 id="system_colors">System Colors</h2>
+		<p>System colors are not defined in your palette, but are always available.</p>
+		<p>	
+			<img border="0" src="images/standard_colors.png"/>
+		</p>
+		<h2 id="fixed_colors">User Fixed Colors</h2>
+		<p>User Fixed Colors are the simplest: they are simply defined by fixed integer values for their 
+			<em>Red</em>, 
+			<em>Green</em> and 
+			<em>Blue</em> components. All components values must be between 0 and 255. You can either specify them numerically or using a color wheel.
+		</p>
+		<h2 id="computed_colors">Computed Colors</h2>
+		<p>Computed color have RGB components values which are dynamically computed. You must specify one expression for each of the 
+			<em>Red</em>, 
+			<em>Green</em> and 
+			<em>Blue</em> components. They will be evaluated in the context of the semantic target element of the graphical element where the color is used. The expressions should return a number between 0 and 255.
+		</p>
+		<h2 id="interpolated_colors">Interpolated Colors</h2>
+		<p>This element is used to specify a custom color which create dynamically a color between two or more 
+			<em>Color Steps</em>. Those 
+			<em>Color Steps</em> are defined as children of the 
+			<em>Interpolated Color</em>.
+		</p>
+		<p>Each 
+			<em>Color Step</em> associates a color (from the palette) with a numerical 
+			<em>Associated Value</em> (which can be computed). The successive color steps in an interpolated color should have increasing associated values.
+		</p>
+		<p>The 
+			<em>Interpolated Color</em> itself has a 
+			<em>Color Value Computation Expression</em>, which should return a numeric value.
+		</p>
+		<ul>
+			<li>If the value is below or equal the value associated with the first color step, the final color is the one of the first color step.</li>
+			<li>If the value is above or equal the value associated with the last color step, the final color is the one of the last color step.</li>
+			<li>If the value is between the associated values of two successive color steps 
+				<em>S1</em> and 
+				<em>S2</em>, the final color is interpolated between the colors of 
+				<em>S1</em> and 
+				<em>S2</em>. Each of the RGB components is linearly interpolated between the ones of 
+				<em>S1</em> and 
+				<em>S2</em> according to the distance between the associated values.
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/Model_Operations.html b/doc/5.1.x/specifier/general/Model_Operations.html
new file mode 100644
index 0000000..598893f
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Model_Operations.html
@@ -0,0 +1,437 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Model_Operations</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SpecifyingModelOperations">Specifying Model Operations</h1>
+		<h2 id="introduction">Introduction</h2>
+		<p>Most modelers created with Sirius are not just used to view models, but also to edit them. The edition behavior is specified through different kinds of tools (e.g. 
+			<em>Direct Edit</em>, 
+			<em>Creation Tool</em>, etc.) which depend on the dialect. The behavior of each tool of each dialect is specified inside the VSM using a small 
+			<em>Domain Specific Language</em> of model operations. This document describes all the model operations supported by this language. Unless otherwise specified, model operations can be used/composed for any tool of any dialect.
+		</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SpecifyingModelOperations">Specifying Model Operations</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#flow">Flow Control Operations</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#begin">Begin</a>
+							</li>
+							<li>
+								<a href="#goto">Change Context</a>
+							</li>
+							<li>
+								<a href="#if">If</a>
+							</li>
+							<li>
+								<a href="#switch">Switch/Case</a>
+							</li>
+							<li>
+								<a href="#for">For</a>
+							</li>
+							<li>
+								<a href="#let">Let</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#model_change">Model Change Operations</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#create_instance">Create Instance</a>
+							</li>
+							<li>
+								<a href="#set">Set</a>
+							</li>
+							<li>
+								<a href="#unset">Unset</a>
+							</li>
+							<li>
+								<a href="#remove">Remove</a>
+							</li>
+							<li>
+								<a href="#move">Move</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#representations">Representations Operations</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#create_view">Create View</a>
+							</li>
+							<li>
+								<a href="#created_edge_view">Create Edge View</a>
+							</li>
+							<li>
+								<a href="#delete_view">Delete View</a>
+							</li>
+							<li>
+								<a href="#navigation">Navigation</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#dialogandwizard">Dialog &amp; Wizard</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#dialog">Open Dialog</a>
+							</li>
+							<li>
+								<a href="#wizard">Open Wizard</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#extensions">Java Extensions</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#external_java_action">External Java Action</a>
+							</li>
+							<li>
+								<a href="#external_java_action_call">External Java Action Call</a>
+							</li>
+							<li>
+								<a href="#standard_java_actions">Standard Java Actions</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="flow">Flow Control Operations</h2>
+		<h3 id="begin">Begin</h3>
+		<p>This element has no property. It only serves as an entry point to the specification of a tool&#8217;s behavior. Note that a 
+			<em>Begin</em> element can only contain a single operation. It is recommended to begin a tool&#8217;s specification by creating a no-op 
+			<a href="#goto">
+				<em>Change Context</em>
+			</a> operation directly inside the 
+			<em>Begin</em>, as a 
+			<em>Change Context</em> can contain multiple operations.
+		</p>
+		<h3 id="goto">Change Context</h3>
+		<p>Every model operation is executed in the context of a specific model element (the equivalent of 
+			<code>this</code> or 
+			<code>self</code> in a programming language). Usually, at the beginning of a tool, the context is the semantic element to which the tool is applied (the actual details can vary from tool to tool, refer to their documentation). The 
+			<em>Change Context</em> operation changes the context to a new element and then executes any sub-operations it contains in sequence (in the order of definition).
+		</p>
+		<p>The new context element to go to is specified by the 
+			<em>Browse Expression</em> property of the 
+			<em>Change Context</em> operation. It is executed in the context element of the 
+			<em>Change Context</em> operation itself, and should return another model element (which will become the context for the sub-operations). If the expression does not return any element, it is not an error, but the sub-operations are not executed. If the expression returns several elements, only the first one is retained and used as the context for the sub-operations.
+		</p>
+		<p>
+			<em>Tip:</em> Using a no-op 
+			<em>Change Context</em> (with a browse expression like 
+			<code>aql:self</code>  which does not actually change the context) can be useful to group multiple operations into a single &#8220;block&#8221;, especially in contexts where only one model operation is supported (e.g. inside a 
+			<em>Begin</em> element).
+		</p>
+		<h3 id="if">If</h3>
+		<p>The 
+			<em>If</em> operation is used for condition execution. It first evaluates its 
+			<em>Condition Expression</em> in the current context, and if the result of this expression (interpreted as a boolean) is true then it executes any sub-operations it contains in sequence (in the order of definition). If the expression returns a false value, 
+			<em>If</em> does nothing.
+		</p>
+		<p>
+			<em>Note:</em> &#8220;else&#8221; and &#8220;else if&#8221; constructs are not supported directly, but the same effect can be achieved using the 
+			<a href="#switch">
+				<em>Switch</em>
+			</a> operation with the appropriate 
+			<em>Cases</em>.
+		</p>
+		<h3 id="switch">Switch/Case</h3>
+		<p>A 
+			<em>Switch</em> operation is used for branching. It is a generalization of the 
+			<em>If</em> constructs which supports multiple conditions. The 
+			<em>Switch</em> operation itself has not property; it serves only as a container for one or more 
+			<em>Case</em> elements, and an optional 
+			<em>Default</em> element. Each 
+			<em>Case</em> element has a 
+			<em>Condition Expression</em>, and may contain sub-operations. The 
+			<em>Default</em> element has no property but may contain sub-operations.
+		</p>
+		<p>When a 
+			<em>Switch</em> is executed, the 
+			<em>Condition Expressions</em> or each of its 
+			<em>Case</em> elements is evaluated (in the current context) until one returns a true value. If one is found, the sub-operations of the 
+			<em>Case</em> element are executed in sequence, and the rest of the 
+			<em>Switch</em> is ignored (the remaining conditions, if any, are not tested). If none of the 
+			<em>Cases</em> has an expression which returns true, then the sub-operations of the 
+			<em>Default</em> element, if any, are executed in sequence.
+		</p>
+		<p>A combination of 
+			<em>Switch/Case/Default</em> is equivalent to 
+			<code>if (...) { ... } elsif (...) { ... } else { ... }</code> in a programming language.
+		</p>
+		<h3 id="for">For</h3>
+		<p>The 
+			<em>For</em> element is used to loop over collections of model elements and execute some operations on all of them. The 
+			<em>Expression</em> of the 
+			<em>For</em> element is executed in the current context, and should return a collection of model elements. The 
+			<em>Iterator name</em> property is a fixed string (
+			<code>i</code> by default) which give the name of the variable used for the iteration.
+		</p>
+		<p>After evaluating the 
+			<em>Expression</em>, each of the element in the returned collection will be bound in turn to a variable named as specified in 
+			<em>Iterator name</em> before the sub-operations of the 
+			<em>For</em> element are executed in sequence (once for each of the returned element). Inside the sub-operations, you can access the current element of the iteration using the variable named in 
+			<em>Iterator name</em>. The actual syntax will vary depending on the query language you use.
+		</p>
+		<h3 id="let">Let</h3>
+		<p>The 
+			<em>Let</em> operation is used in order to create a new variable which can be used by child model operations. The 
+			<em>Variable name</em> is a fixed string used to access the variable in child model operation. The 
+			<em>Value expression</em> is executed in order to set the value of the variable. The 
+			<em>Let</em> operation is similar to a 
+			<em>For</em> operation with an expression returning only one element for the iteration. If the 
+			<em>Variable name</em> is &#8220;self&#8221;, the behavior of the 
+			<em>Let</em> will be the same as the behavior of a 
+			<em>Change Context</em>. It is not recommended to use a 
+			<em>Let</em> with the 
+			<em>Variable name</em> &#8220;self&#8221;, prefer the 
+			<em>Change Context</em> for a better readability of your odesign.
+		</p>
+		<h2 id="model_change">Model Change Operations</h2>
+		<h3 id="create_instance">Create Instance</h3>
+		<p>The 
+			<em>Create Instance</em> operation is used to create new semantic elements to be added into the user&#8217;s model. You must specify : 
+		</p>
+		<ol>
+			<li>the 
+				<em>Type Name</em> (using the same syntax as for 
+				<em>Domain Class</em> properties) of the new object to create
+			</li>
+			<li>the 
+				<em>Reference Name</em> through which the created element will be attached to the current context. 
+			</li>
+		</ol>
+		<p>When the 
+			<em>Create Instance</em> operation is executed, say in the context of semantic element 
+			<em>S</em>, a new instance of the specified type name is created and then added to 
+			<em>S</em>'s reference named in 
+			<em>Reference Name</em>. The reference name must correspond to a valid containment reference for the context element of the operation, otherwise the newly created object will not be properly integrated into the semantic model.
+		</p>
+		<p>The 
+			<em>Variable Name</em> property can be set to any valid variable name (
+			<code>instance</code> by default). The named variable is assigned with the newly created object, so that it can be accessed from the remaining operations in the tool. 
+		</p>
+		<p>Inside the 
+			<em>Create Instance</em> element you can add sub-operations, which will be executed in sequence in the context of the newly created element. This is useful to correctly initialize the new object&#8217;s properties.
+		</p>
+		<h3 id="set">Set</h3>
+		<p>The 
+			<em>Set</em> operation is used to set the value of a feature (attribute or reference) of the current element. When executed, it evaluates the 
+			<em>Value Expression</em> in the current context element. The expression&#8217;s result is then 
+			<em>set</em> as the new value of the feature named in 
+			<em>Feature Name</em> of the current context element. The value returned by the expression must be type-compatible with the named feature.
+		</p>
+		<p>Inside the 
+			<em>Set</em> element you can add sub-operations, which will be executed in sequence in the same context.
+		</p>
+		<h3 id="unset">Unset</h3>
+		<p>The 
+			<em>Unset</em> operation is used to remove elements from a feature (attribute or reference) of the current element. When executed, it evaluates the 
+			<em>Element Expression</em> in the current context element, which may return one or more elements. Each of the returned elements are then removed from the feature named in 
+			<em>Feature Name</em> of the current context element. It is not an error if some of the returned elements are not actually part of the specified feature, they are simply ignored.
+		</p>
+		<p>Inside the 
+			<em>Unset</em> element you can add sub-operations, which will be executed in sequence in the same context.
+		</p>
+		<h3 id="remove">Remove</h3>
+		<p>The 
+			<em>Remove</em> operation is used to remove the current element from its parent element. It takes no parameter. When executed, it simply removes the element from its containing feature. 
+		</p>
+		<h3 id="move">Move</h3>
+		<p>The 
+			<em>Move</em> operation is used to move the current element from its current parent into a new one. The 
+			<em>New Container Expression</em> is evaluated in the current context and should return the (single) element in which to move. The 
+			<em>Feature Name</em> indicates the containment feature of the new parent in which to add the current element.
+		</p>
+		<h2 id="representations">Representations Operations</h2>
+		<h3 id="create_view">Create View</h3>
+		<p>This operation is specific to diagrams. It can be used to explicitly create a view (graphical representation) of the current element, which is mostly useful when using unsynchronized diagrams and/or mappings.</p>
+		<p>The 
+			<em>Container View Expression</em> is evaluated in the context of the current semantic element, and should return the view (
+			<code>DDiagram</code>, 
+			<code>DNode</code> or 
+			<code>DNodeContainer</code>) in which the new view should appear. The 
+			<em>Mapping</em> indicates the kind of view to create. If the container view expression returns an element which can contain a view for the current semantic element and specified mapping (and does not already contain one), the view will be created, even if the diagram and/or mapping is not synchronized.
+		</p>
+		<p>Note that because the 
+			<em>Container View Expression</em> is evaluated in the context of a semantic element and must return a view, you must use the cross-referencer to navigate from the semantic model to the view model. Using the Acceleo 3 language you can use  the 
+			<code>eInverse()</code> service to find which elements point to the current one and then select only those which do it  through a reference named 
+			<code>target</code> (the views in Sirius diagrams reference their target semantic element through this reference).
+		</p>
+		<p>The 
+			<em>Variable Name</em> property can be set to any valid variable name (
+			<code>createdView</code> by default). The named variable is assigned with the newly created view, so that it can be accessed from the remaining operations in the tool.
+		</p>
+		<h3 id="created_edge_view">Create Edge View</h3>
+		<p>This operation is specific to diagrams. It can be used to explicitly create an edge view (graphical representation) of the current element, which is mostly useful when using unsynchronized diagrams and/or mappings.</p>
+		<p>It works similarly to the 
+			<a href="#create_view">
+				<em>Create View</em>
+			</a> operation, except that in addition to the 
+			<em>Container View Expression</em>, you must also provide a 
+			<em>Source Expression</em> and a 
+			<em>Target Expression</em>, which should return the semantic elements between which the edge should be created, if source and target views are found regarding the selected edge mapping properties. 
+		</p>
+		<h3 id="delete_view">Delete View</h3>
+		<p>This operation is specific to diagrams. It can be used to explicitly remove a view (graphical representation) from the diagram, without deleting the corresponding semantic element. It is mostly useful when using unsynchronized diagrams and/or mappings.</p>
+		<p>It has no parameter and works similarly to the 
+			<em>Remove</em> operation; you must already be in the context of the view element you want to delete.
+		</p>
+		<h3 id="navigation">Navigation</h3>
+		<p>This operation is specific to diagrams. It can be used to navigate to another diagram representing the current element. The 
+			<em>Diagram Description</em> indicates the type of diagram to open, and the 
+			<em>Create if not existent</em> flag indicates whether a new diagram of the specified type should be created on the current element if none exists.
+		</p>
+		<p>The operation does nothing if the current element is not compatible with the specified diagram type or if there is no existing diagram and the 
+			<em>Create if not existent</em> flag is not set.
+		</p>
+		<h2 id="dialogandwizard">Dialog &amp; Wizard</h2>
+		<p>
+			<strong>Warning:</strong> The model operations below are provided by the Sirius properties view plugins. To make sure those operations will be available to the end user, you should add the following plugins in your modeler dependencies:
+		</p>
+		<ul>
+			<li>org.eclipse.sirius.properties</li>
+			<li>org.eclipse.sirius.ui.properties</li>
+		</ul>
+		<p>If those plugins are missing at runtime, Open Dialog and Open Wizard operations will not be executable.</p>
+		<h3 id="dialog">Open Dialog</h3>
+		<p>The 
+			<em>Open Dialog</em> model operation is used in order to open a new dialog where the end user will be able to see and manipulate some pieces of information. You can change the title of the dialog with the 
+			<em>Title expression</em>. This expression must return a string. You can specify one 
+			<em>Page</em> with various 
+			<em>Groups</em> to specify the content of the dialog. You can leverage existing 
+			<em>Pages</em> and 
+			<em>Groups</em> from existing definition of your 
+			<em>Properties View</em>.
+		</p>
+		<p>A dialog can contain multiple buttons. If you do not specify any button, two will be created by default. The first one, with the label &#8220;Cancel&#8221;, will close the dialog and rollback any changes made during the execution of the model operation chain. The second one, with the label &#8220;OK&#8221;, will close the dialog and execute the child model operations of the dialog.   </p>
+		<p>You can create 
+			<em>Dialog Buttons</em> in a dialog in order to specify the behavior of the buttons. If at least one 
+			<em>Dialog Button</em> is specified, the default behavior previously described will not be used anymore. For each 
+			<em>Dialog Button</em> description, a button will be added in the user interface of the dialog. The label of the button can be specified with the 
+			<em>Label expression</em> which must return a string. The 
+			<em>Is Enabled expression</em> is used to determine if the button must be activated or not. This can be used to prevent the end user from finishing an action. This expression must return a boolean. An 
+			<em>Initial Operation</em> is available on a 
+			<em>Dialog Button</em> in order to specify the behavior to execute when the user will click on the button.
+		</p>
+		<p>The specifier can indicate that a 
+			<em>Dialog Button</em> should be considered by default with the 
+			<em>default</em> boolean. When a 
+			<em>Dialog Button</em> should be used by 
+			<em>default</em>, it is focused by default when the dialog is opened. A 
+			<em>Dialog Button</em> can also close the dialog by using the property 
+			<em>Close Dialog On Click</em>. By specifying 
+			<em>false</em> as the value for 
+			<em>Close Dialog On Click</em> and by using an 
+			<em>Initial Operation</em> on the button, a specifier can easily create a button to restore a default value. Finally, a boolean is available in order to 
+			<em>Rollback Changes On Close</em>. By setting this value to true, when the button will be pressed, it will have the same behavior as a regular cancel button by rollbacking the whole model operation chain.
+		</p>
+		<h3 id="wizard">Open Wizard</h3>
+		<p>The 
+			<em>Open Wizard</em> model operation is used in order to open a new wizard to let the end user specify some information using multiple 
+			<em>Pages</em>. You can configure the title of the window by returning a string with the 
+			<em>Window Title</em> expression. You can also configure the title and description of the wizard with the 
+			<em>Title</em> and 
+			<em>Description</em> expressions. Both expressions should also return a string. You can prevent the end user from finishing early the wizard and from switching to another page by returning false for the 
+			<em>Is Page Complete</em> expression. A wizard can be closed only if all 
+			<em>Pages</em> are completed.
+		</p>
+		<p>The wizard can also contain various 
+			<em>Pages</em> and 
+			<em>Groups</em> using the 
+			<em>Properties View</em> domain specific langage available in Sirius. You can leverage existing 
+			<em>Pages</em> and 
+			<em>Groups</em> from existing definition of your 
+			<em>Properties View</em>. A wizard can also contain an 
+			<em>Initial Operation</em> used to define the child model operations to execute when the user will finish the wizard. 
+		</p>
+		<h2 id="extensions">Java Extensions</h2>
+		<p>Beyond the operations which are described above, you can also execute arbitrary Java code in the context of a tool by providing an 
+			<em>External Java Action</em> and invoking it with the corresponding operation.
+		</p>
+		<h3 id="external_java_action">External Java Action</h3>
+		<p>When used as a model operation (instead of as a full-blown tool), you only have to specify the 
+			<em>Java Action Id</em>. It should correspond to an extension of the 
+			<code>org.eclipse.sirius.externalJavaAction</code> extension point which registers a class implementing 
+			<code>org.eclipse.sirius.tools.api.ui.IExternalJavaAction</code> to be executed. You may also create 
+			<em>External Java Action Parameter</em> elements inside the 
+			<em>External Java Action</em> element. Each one has a fixed 
+			<em>Key</em> and a computed 
+			<em>Value</em>, which will be evaluated before the operation is executed and made available to the Java class through the 
+			<code>parameters</code> argument of the 
+			<code>execute()</code> method.
+		</p>
+		<p>As the External Java Action uses the Eclipse extension point mechanism, it means you cannot use it in development mode (when the 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Model</em>
+			</a> you are working on is in the workspace).
+		</p>
+		<h3 id="external_java_action_call">External Java Action Call</h3>
+		<p>
+			<em>External Java Action Call</em> is simply a convenience operation to invoke an 
+			<em>External Java Action</em> defined elsewhere in the VSM, with potentially different parameters.
+		</p>
+		<h3 id="standard_java_actions">Standard Java Actions</h3>
+		<p>The following External Java Actions are available in standard and can be used in 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Models</em>
+			</a>. Note that if you want to create your own actions, you can implement 
+			<code>org.eclipse.sirius.tools.api.ui.IExternalJavaAction</code> directly or inherit from 
+			<code>org.eclipse.sirius.business.api.action.AbstractExternalJavaAction</code> which provides some helper methods.
+		</p>
+		<h4 id="org.eclipse.sirius.business.api.action.moveElement">org.eclipse.sirius.business.api.action.moveElement</h4>
+		<p>This external Java action can be used to move an element to a different position inside a many-valued EReference.</p>
+		<p>Action parameters:</p>
+		<ul>
+			<li>
+				<code>referenceOwner</code> (an EObject): the owner of the EReference to edit.
+			</li>
+			<li>
+				<code>referenceName</code> (a string): the name of the EReference of the owner object to edit. This must be a many-valued, changeable reference.
+			</li>
+			<li>
+				<code>element</code> (an EObject): the element to move inside the list. It is an error if the specified element is not in the list.
+			</li>
+			<li>
+				<code>predecessor</code>: the element of the list right before which element must be moved, i.e. after the operation, predecessor will be the direct predecessor of element in the list. May be null to indicate that element should be moved at the front of the list. If not null, it is an error if predecessor is not in the list.
+			</li>
+		</ul>
+		<h4 id="org.eclipse.sirius.business.api.action.printVariables">org.eclipse.sirius.business.api.action.printVariables</h4>
+		<p>This external Java action is designed to help debugging 
+			<em>Viewpoint Specification Models</em> by printing (in standard output)
+			<br/>all the variables accessible to model operations at the invocation point.
+		</p>
+		<p>Action parameters:</p>
+		<ul>
+			<li>
+				<code>title</code>: an optional string header to print before the list of variables, for example to distinguish different uses of this action in the same VSM.
+			</li>
+			<li>
+				<code>enabled</code>: an optional boolean (defaults to true) to indicate if the action should be executed or not. This is useful to quickly enable/disable an action with minimal editing of the VSM.
+			</li>
+		</ul>
+		<h4 id="org.eclipse.sirius.ui.business.api.action.openHelpSection">org.eclipse.sirius.ui.business.api.action.openHelpSection</h4>
+		<p>This external Java action can be used to open the Eclipse Help system (or actually any web page) on a specific section from inside a tool (typically a popup menu).</p>
+		<p>Action parameters:</p>
+		<ul>
+			<li>
+				<code>href</code>: the URL of the help resource. To open an Eclipse Help section, use an URI of the form 
+				<code>/com.example.pluginName/path/to/document.html#sectionId</code>
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/Specifying_Viewpoints.html b/doc/5.1.x/specifier/general/Specifying_Viewpoints.html
new file mode 100644
index 0000000..2e9806c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Specifying_Viewpoints.html
@@ -0,0 +1,516 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Specifying_Viewpoints</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SpecifyingViewpoints">Specifying Viewpoints</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SpecifyingViewpoints">Specifying Viewpoints</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#concepts">Philosophy and Concepts</a>
+					</li>
+					<li>
+						<a href="#vsp">Viewpoint Specification Projects</a>
+					</li>
+					<li>
+						<a href="#vsm">Viewpoint Specification Models</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#vsm_organization">Organization</a>
+							</li>
+							<li>
+								<a href="#common_attributes">Common attributes</a>
+							</li>
+							<li>
+								<a href="#type_names">Type Names</a>
+							</li>
+							<li>
+								<a href="#interpreted_expressions">Interpreted Expressions</a>
+							</li>
+							<li>
+								<a href="#feature_name">Feature Name</a>
+							</li>
+							<li>
+								<a href="#translatable_messages">Translatable Messages</a>
+							</li>
+							<li>
+								<a href="#model_operations">Model Operations</a>
+							</li>
+							<li>
+								<a href="#quick_outline">Quick Outline</a>
+							</li>
+							<li>
+								<a href="#validation">VSM Validation</a>
+							</li>
+							<li>
+								<a href="#dynamic">Dynamic Development</a>
+							</li>
+							<li>
+								<a href="#migration">Migration from Previous Versions</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<p><div style="display: none">
+			<br/>  TODO Add a few screenshots to make the document less dry.
+			<br/></div>
+		</p>
+		<p>This document gives a general overview of how viewpoints are specified, tested and deployed.</p>
+		<h2 id="introduction">Introduction</h2>
+		<p>
+			<em>Sirius</em> is a modeling tool which has been originally created in the context of complex systems modeling. The complexity of those systems makes necessary the collaboration of people with different concerns. For the same domain and on the same data, there are different levels of analysis, different roles and different concerns possible. Each of these correspond to a different 
+			<em>viewpoint</em> on the same 
+			<em>domain  model</em>, and Sirius (the system) gives you all the tools to specify the viewpoints which are relevant to your business domain, whatever it is.
+		</p>
+		<p>More pragmatically, Sirius assumes that you 
+			<em>domain model</em> is defined using 
+			<em>EMF</em> (Eclipse Modeling Framework), which is an industry standard with a rich eco-system. Many existing standards like UML (for software systems) or TOGAF (for Enterprise Architecture) have an implementation based on EMF. You can also easily define your own 
+			<em>Domain-Specific Model</em> (sometimes called 
+			<em>Domain-Specific Language</em>) to more precisely suit your specific needs and avoid unnecessary complexities. While this part (the domain specification) is not strictly in the scope of Sirius, the system provides a graphical modeler to ease the creation of your own 
+			<em>DSM</em> (Domain-Specific Model).
+		</p>
+		<p>Given such a domain model, which defines concepts and their relations in the abstract, Sirius will allow you to easily specify 
+			<em>concrete representations</em> of these models. Representations can be diagrams, tables, matrices (cross-tables) or hierarchies (trees). You can define as many of them as you need, some more detailed than others, some customized for certain tasks or roles (e.g. initial design, review, certification, etc.). These representations are not just static: provided you specify the appropriate tools (see below), they can be complete modeling environments where users can create, modify and validate their designs. Representations can be logically organized in 
+			<em>viewpoints</em>, and end-users can enable or disable viewpoints at will to work on the same model through different, but logically consistent, points of view.
+		</p>
+		<p>The main strengths of the Sirius platform can be summarized as is:</p>
+		<ul>
+			<li>it is based on an open and widely used 
+				<em>industry standard</em> (the Eclipse Modeling Framework);
+			</li>
+			<li>it can 
+				<em>adapt itself</em> to any EMF-compatible DSM: it can use standards like UML if they suit your needs, but it does not force you to do so, and you can easily create your own DSM which can thus be simpler and better suited to your specific needs;
+			</li>
+			<li>it provides a 
+				<em>strong separation</em> between the semantic models it manipulates, where your business value resides, and the representation models (which deal with, for example, the size and location of graphical shapes on a diagram). This means your domain models have no adherence to Sirius itself, and can be manipulate with any of the other tools in the EMF eco-system (e.g. Acceleo to generate source code or other textual artifacts);
+			</li>
+			<li>it allows you to define many 
+				<em>different representations</em> on your domain models: diagrams, tables, trees, showing different levels of details and offering different edition capabilities depending on their usage;
+			</li>
+			<li>it is 
+				<em>easy to use</em> and supports 
+				<em>very fast</em> development. Once you become familiar with the tool, you will be able to get a simple diagram in a matter of minutes, a prototype suited for a client demonstration in a few hours, and a fully-functional and customized modeler in a few days of work;
+			</li>
+			<li>it is 
+				<em>extensible</em>: by integrating in the Eclipse platform and offering open APIs, you can extend and integrate your Sirius modelers with other tools to provide a fully-customized modeling workbench to your users.
+			</li>
+		</ul>
+		<h2 id="concepts">Philosophy and Concepts</h2>
+		<p>As explained in introduction, 
+			<em>Sirius</em> allows you to specify dedicated representations and associated tooling. As a 
+			<em>specifier</em>, your role will be to configure the generic Sirius platform to provide these representations to your users. This is done by creating and configuring a 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Model</em>
+			</a> which describes the structure, appearance and behavior of your modelers. This document does not deal with the definition of your domain model; you can use a standard one like UML, SysML, BPMN or TOGAF, or create a custom one. The only assumptions Sirius makes is that your model is based on EMF.
+		</p>
+		<p>The main concepts you will work with as a specifier are:</p>
+		<ul>
+			<li>
+				<strong>Viewpoint</strong> A viewpoint is one of the core elements that a specifier defines: it is a logical set of 
+				<strong>representation specifications</strong> and 
+				<strong>representation extension specifications</strong>.
+			</li>
+			<li>
+				<strong>Representation</strong> A 
+				<em>representation</em> is a group of 
+				<strong>graphical construction which represent domain data</strong>. A representation describes the structure, appearance and behavior of your modelers. By default, Sirius supports four kinds of representations (called 
+				<em>dialects</em>): diagrams, tables, matrices (aka cross-tables), and trees. All follow the same basic principles in their definitions.
+			</li>
+			<li>
+				<strong>Mapping</strong> A 
+				<em>mapping</em> identifies a sub-set of the semantic model&#8217;s element that should appear in a representation and indicates how they should be represented. Each dialect offers different kinds of mappings. For example, diagrams provide 
+				<em>container mappings</em>, which can be used to represent semantic elements with graphical containers, where other elements (specified by other mappings) can appear. A mapping exists inside the 
+				<em>Viewpoint Specification Model</em>, but on a concrete representation it will produce 
+				<em>instances</em>. If you specify a container mapping to represent, say, divisions in an enterprise, and the model of your enterprise contains four divisions, a concrete diagram will show four containers, each an instance of the same mapping, but associated to a different semantic element.
+			</li>
+			<li>
+				<strong>Style</strong> Each mapping can have one or several 
+				<em>styles</em> associated to it, which are used to configure the visual appearance of the elements they represent. For example, for diagram elements this would include their shape and colors.
+			</li>
+			<li>
+				<strong>Tool</strong> Without tools, your representations would be only visualizations, with no edition capabilities. While this can be sometimes useful, most representations will allow users to create, edit and delete elements. Tools are associated to mappings to describe their behaviors. Each kind of user interaction supported by 
+				<em>Sirius</em> (e.g. creation or deletion, label editing, edge reconnection...) is specified by a different kind of tool, but they all follow the same principles in their definition. 
+			</li>
+		</ul>
+		<h2 id="vsp">Viewpoint Specification Projects</h2>
+		<p>Note: When working as a Sirius specifier, it is recommended to use the 
+			<em>Sirius</em> perspective, which provides some additional shortcuts and views. The 
+			<em>Modeling</em> perspective is simpler and oriented towards end-users.
+		</p>
+		<p>Viewpoints are specified as models (see below) inside 
+			<em>Viewpoint Specification Projects</em>. These 
+			<a href="../../Glossary.html#VSP">
+				<em>VSPs</em>
+			</a> are normal Eclipse plug-in project, which happen to contain one or several 
+			<code>*.odesign</code> files (the extension used for 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Models</em>
+			</a> ). You can create such a project using the supplied wizard: 
+			<em>New &gt; Viewpoint Specification Project</em>.
+		</p>
+		<p>By convention, the VSM (or VSMs) defined in your project are stored inside a 
+			<code>description</code> folder. If you want to place them in a different location, make sure to add this location into the plug-in&#8217;s 
+			<code>build.properties</code> so that it is included in the deployed version.
+		</p>
+		<p>The VSM name is given according to the project name defined when using the previous wizard. If the project name is suffixed with &#8220;design&#8221;, the VSM name is provided by the last word before this suffix. Otherwise, the VSM name is given by the last word of the project name.</p>
+		<p>Other than that, the project is a normal Java plug-in project. You can add 
+			<a href="Writing_Queries.html#service_methods">service classes</a> into it if the query language you use support it, and any other Java code, including Eclipse views, actions, etc. 
+		</p>
+		<p>Note that it is recommended to add your domain meta-model(s) plug-ins as dependencies of the project. Java services and some features of query language (like the use of type literals in AQL filter() operations) might require them. </p>
+		<p>
+			<strong>Important:</strong> Any VSM you place in the Eclipse workspace will be immediately available for use and testing, with no deployment. This is to facilitate dynamic and iterative development of viewpoints. However, when you 
+			<strong>deploy</strong> your VSMs, they 
+			<strong>must</strong> be part of a 
+			<em>VSP</em>, and they 
+			<strong>must</strong> be registered in the plug-in&#8217;s activator class. The activator generated by the 
+			<em>VSP</em> wizard is properly configured, but if you rename your 
+			<em>VSM</em> or add new ones, be sure to edit the activator class so that all your 
+			<em>VSMs</em> are correctly registered inside the Sirius platform when deployed.
+		</p>
+		<h2 id="vsm">Viewpoint Specification Models</h2>
+		<p>The core part of a 
+			<em>VSP</em> is the 
+			<em>Viewpoint Specification Model</em> (or models) it contains. These are stored in 
+			<code>*.odesign</code> files, usually in the 
+			<code>description</code> folder of the project. A 
+			<em>VSM</em> specifies a set of 
+			<em>Viewpoints</em> and their representations (diagrams, trees...).
+		</p>
+		<p>To edit a 
+			<em>VSM</em>, simply double-click on it, and a tree editor will open. The editor follows the conventions of standard EMF editors: selecting an element will show its properties in the 
+			<em>Properties</em> view, where you can edit them. To create new elements, simply right-click on its parent and choose from one one the 
+			<em>New XXX</em> menus. To delete an element and all its sub-elements, simply select it and hit the 
+			<em>Delete</em> key or right-click and choose 
+			<em>Delete</em>.
+		</p>
+		<h3 id="vsm_organization">Organization</h3>
+		<p>The top-level element of a 
+			<em>VSM</em> is a 
+			<em>Group</em> element. It has no specific semantics and serves only as a container for the other elements. Note however that once you define its 
+			<em>Name</em>, you should never change it as it becomes part of the identification of all the elements inside the 
+			<em>VSM</em>. If you change it, any concrete representations created using that 
+			<em>VSM</em> will be broken.
+		</p>
+		<p>Inside a 
+			<em>Group</em>, you can create an optional 
+			<em>User Colors Palette</em>, with shared 
+			<a href="Colors.html">color definitions</a>; this is useful to define a uniform color palette for all your viewpoints and representations. You can also, and more importantly, define 
+			<em>Viewpoint</em> elements.
+		</p>
+		<p>Besides its 
+			<em>Id</em> and 
+			<em>Label</em> (see below), a 
+			<em>Viewpoint</em> can be associated to one or more 
+			<em>Model File Extensions</em>, separated by space. This can be used to restrict the availability of the viewpoint only to modeling projects which contain semantic models of the specified types. For example, to make your viewpoint available to UML and SysML models, you can specify 
+			<code>uml sysml</code> (note that the syntax specifies only the file extension, 
+			<code>uml</code>, not a pattern like 
+			<code>*.uml</code>). You can use a star, 
+			<code>*</code>, to make your viewpoint available for 
+			<strong>all</strong> models, but it is normally prefered be as specific as possible so as not to interfere with unrelated models and projects.
+		</p>
+		<p>Inside a 
+			<em>Viewpoint</em> element, you can create:
+		</p>
+		<ul>
+			<li>
+				<em>Representation Descriptions</em>, for 
+				<a href="../diagrams/Diagrams.html">diagrams</a>, 
+				<a href="../sequences/Sequence%20Diagrams.html">sequence diagrams</a>, 
+				<a href="../tables/Tables.html">tables and cross-tables</a>, and 
+				<a href="../trees/Trees.html">trees</a>.
+			</li>
+			<li>
+				<em>Representation Extensions</em>, currently supported only for 
+				<a href="../diagrams/Diagrams.html#diagram_extension">diagrams</a>.
+			</li>
+			<li>
+				<a href="../diagrams/Diagrams.html#validation">
+					<em>Validation Rules</em>
+				</a>, which will apply to all representations defined inside this viewpoint.
+			</li>
+			<li>And finally 
+				<em>Java Extensions</em>. These refer (through its fully qualified name), to a Java class defined in the 
+				<em>Viewpoint Specification Project</em> which defines 
+				<a href="Writing_Queries.html#service_methods">service methods</a> and make these services available inside all the representations defined in the viewpoint. If you 
+				<a href="Writing_Queries.html#acceleo">use Acceleo 3 to write your expressions</a>, you can also use these elements to declare Acceleo modules in the project that define MTL queries you want to use in your expressions.
+			</li>
+		</ul>
+		<p>To discover all elements in the 
+			<em>VSM</em>, it is possible to use the button <img src="images/specifier-guide/expandall.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>, at the top right corner of the editor to expand the 
+			<em>VSM</em> tree. Obviously, it is possible to collapse this tree by using the button <img src="images/specifier-guide/collapseall.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>, at the top right corner of the editor.
+		</p>
+		<h3 id="common_attributes">Common attributes</h3>
+		<p>Many of the elements used to specify viewpoint share some common configuration attributes. They are described in general terms in this section, and referenced from the specific element&#8217;s sections which used them (sometimes with additional details only relevant for this element).</p>
+		<p><img src="images/common_attributes.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/></p>
+		<ul>
+			<li>
+				<em>Id</em>: The mandatory identifier of the element. This identifier is mostly visible to the specifier in the description editor. It must be unique in the context of the viewpoint it is part of. The 
+				<em>Id</em> is used internally to identify the element, and must be kept stable across different versions of the VSM (or it will make representations created with the old 
+				<em>Id</em> unusable).
+			</li>
+			<li>
+				<em>Label</em>: The label of the element. It&#8217;s used to display this element to the end-user. By default, if this label is blank, the 
+				<em>Id</em> is used to display this element to the end user. It can be changed with no impact on existing representation files.
+			</li>
+		</ul>
+		<p><img src="images/documentation_attributes.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/></p>
+		<ul>
+			<li>
+				<em>Documentation</em>: All the elements in a description file contain a 
+				<strong>Documentation</strong> attribute available in the 
+				<strong>Documentation</strong> category. This attribute can be used by the specifier to add comments and documentation to these elements. The content of this attribute is not visible to the end users of the viewpoints.
+			</li>
+			<li>
+				<em>End-user documentation</em>: This attribute describes this element for the end-user. It&#8217;s available in the 
+				<strong>Documentation</strong> category. This attribute can be used by the specifier to add comments and documentation to these elements bounds for the end-user.
+			</li>
+		</ul>
+		<p><img src="images/tricks.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> 
+			<em>use the <img src="images/questionMarque.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> icon to access the available fields tooltips.</em>
+		</p>
+		<h3 id="type_names">Type Names</h3>
+		<p>Some 
+			<em>VSM</em> elements will need you to specify one or more 
+			<em>Type Names</em> to configure them, usually types from the semantic domain model being represented (for example the 
+			<em>Domain Class</em> for mapping definitions). You can easily identify 
+			<em>Type Name</em> fields by their green background in the 
+			<em>Properties</em> sheet of an element.
+		</p>
+		<p>
+			<img border="0" src="images/domain_class.png"/>
+			<br/>The syntax for type names are the following:
+		</p>
+		<ul>
+			<li>
+				<strong>minimal syntax:</strong> it is the basic name, like 
+				<code>Class</code>,
+			</li>
+			<li>
+				<strong>AQL/OCL syntax:</strong> a qualified name using name of the EMF EPackage which defines the type with the separator 
+				<code>::</code> like  
+				<code>uml::Class</code>. It is the default and 
+				<strong>recommended</strong> syntax, consistent with how qualified type names are written in AQL
+			</li>
+			<li>
+				<strong>legacy qualified name like syntax:</strong> it is a qualified name using name of the EMF EPackage which defines the type, like 
+				<code>uml.Class</code>.
+			</li>
+			<li>
+				<strong>fully qualified URI</strong>: like 
+				<code>http://www.eclipse.org/uml2/3.0.0/UML#//Class</code>.
+			</li>
+		</ul>
+		<p>Auto-completion is available in these fields using the 
+			<em>Ctrl+Space</em> shortcut. It is recommended to explicitly associate a meta-model (or more) to your representations definitions to allow for smarter completion. Otherwise by default it will include all types from any EMF meta-model available.
+		</p>
+		<h3 id="interpreted_expressions">Interpreted Expressions</h3>
+		<p>Many 
+			<em>VSM</em> elements require you to specify 
+			<em>Interpreted Expressions</em> to configure them. These can be queries to select elements (as in mappings for example), or more general expressions to compute value (like the text to use for the elements' labels).
+		</p>
+		<p>You can easily identify 
+			<em>Interpreted Expressions</em> by their yellow background in the 
+			<em>Properties</em> sheet of an element. For all such field, you can use any of the supported languages to write the expression. Refer to the 
+			<a href="Writing_Queries.html">queries documentation</a> for more details.
+		</p>
+		<p>
+			<img border="0" src="images/interpreted_expressions.png"/>
+		</p>
+		<p>Also, by clicking on the button next to the text field, you can open a dialog with a bigger text area (providing auto-completion too) to type your expression more comfortably. Note that you can add line feeds or tabulations if you want, since they are removed when clicking on the &#8220;OK&#8221; button.</p>
+		<p>
+			<img border="0" src="images/textAreaDialog.png"/>
+		</p>
+		<h3 id="feature_name">Feature Name</h3>
+		<p>Some 
+			<em>VSM</em> elements will need you to specify a 
+			<em>Feature Name</em> (or 
+			<em>Reference Name</em> on 
+			<em>Create Instance</em>) to configure them (Create Instance, Set, Unset, etc.). You can easily identify 
+			<em>Feature Name</em> fields by their light green background in the 
+			<em>Properties</em> sheet of an element.
+		</p>
+		<p>
+			<img border="0" src="images/featureName.png"/>
+		</p>
+		<p>Auto-completion is available in these fields using the 
+			<em>Ctrl+Space</em> shortcut except if the current element type cannot be inferred, usually in the case of a generic tool where the target element will be known only at runtime.
+			<br/>Note that for 
+			<em>Create Instance</em>  
+			<em>Reference Name</em> field, the completion will display only features that have a type consistent with the one specified in the 
+			<em>Type Name</em> field. If no type is specified, all available features will be displayed. In the same way, if a valid 
+			<em>Reference Name</em> is set, the completion for the 
+			<em>Type Name</em> field will display only types consistent with the feature type.
+		</p>
+		<h3 id="translatable_messages">Translatable Messages</h3>
+		<p>Many 
+			<em>VSM</em> elements provide text fields that will be displayed when end-users reference the 
+			<em>VSM</em> in a modeling project (Viewpoint name, tools...). Starting from Sirius 4.0, the value shown to the end users can be localized according to the user&#8217;s language.  Fields which support this feature are called 
+			<em>Translatable</em> 
+			<em>Messages</em> and can be easily identified by their blue background in the 
+			<em>Properties</em> sheet of an element. 
+		</p>
+		<p>
+			<img border="0" src="images/common_attributes.png"/>
+		</p>
+		<p>Note that on the previous screenshot, the text in the label field is grayish because no label have been set and the ID is used instead.</p>
+		<p>This feature is available for almost every 
+			<em>VSM</em> elements defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized, but not to interpreted expressions. Note also that this feature is only available to modelers which are deployed as proper Eclipse plug-ins; it will not work for plain VSMs defined directly in the runtime workspace.
+		</p>
+		<p>To make use of this feature in your modeler, simply replace the names with a 
+			<em>translation key</em> reference of the form 
+			<code>%myUniqueKey</code>  in the VSM, and define the value in the 
+			<em>Viewpoint Specification Project</em>'s 
+			<code>plugin.properties</code> (for the default value), or 
+			<code>plugin_XX.properties</code> for locale 
+			<code>XX</code>. Note that the key chosen must be globally unique in the context of a whole 
+			<em>Viewpoint Specification Project</em>.
+		</p>
+		<p>
+			<img border="0" src="images/translatable_message1.png"/>
+		</p>
+		<p>The key must be added to the 
+			<code>plugin.properties</code> file for each language with the translated message. The default properties file is named 
+			<code>plugin.properties</code> and the localized version are identified with a postfixed with the corresponding language code (e.g. for US english 
+			<code>plugin_en_US.properties</code>, for french 
+			<code>plugin_fr.properties</code>).  The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. For the message values to be found at runtime, do not forget to:
+		</p>
+		<ul>
+			<li>include all the 
+				<code>plugin*.properties</code> files in the binary build (i.e. check them in the plug-in&#8217;s 
+				<code>build.properties</code> file);
+			</li>
+			<li>set the 
+				<code>Bundle-Localization: plugin</code> header in your project&#8217;s 
+				<code>MANIFEST.MF</code>.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/translatable_message2.png"/>
+		</p>
+		<p>An Eclipse with localization in english will get the localized messages from 
+			<code>plugin_en.properties</code>, while an Eclipse with localization in french will get the localized messages from 
+			<code>plugin_fr.properties</code>.
+		</p>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/translatable_message4.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/translatable_message3.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>English locale</th>
+				<th>French locale (with corresponding translation in 
+					<code>plugin_fr.properties</code>
+				</th>
+			</tr>
+		</table>
+		<p>Note that an Eclipse with localization in a language that has no dedicated properties file, will get the localized message from the default 
+			<code>plugin.properties</code>.
+		</p>
+		<p>If the ID is not found in the localized properties file or if there is no properties file, the ID will be directly displayed.</p>
+		<p>
+			<img border="0" src="images/translatable_message5.png"/>
+		</p>
+		<p>As the internationalization is optional, if a 
+			<em>Translatable</em> 
+			<em>Message</em> does not start with a 
+			<em>%</em> it will be directly displayed without consideration of the localization.
+		</p>
+		<p>
+			<img border="0" src="images/translatable_message6.png"/>
+		</p>
+		<p>It is still possible to display a non localized label starting with a 
+			<em>%</em> however the character needs to be doubled.
+		</p>
+		<p>
+			<img border="0" src="images/translatable_message8.png"/>
+			<br/>
+			<img border="0" src="images/translatable_message9.png"/>
+		</p>
+		<p>
+			<em>Warning</em>: 
+			<em>Translatable</em> 
+			<em>Messages</em> concern only labels set in the 
+			<em>VSM</em> that are displayed to the end-users. Sirius is prepared for internationalization but is only available in English. Therefore, the 
+			<em>VSM</em> labels can be available in another language but the labels coming from Sirius will stay in English. Moreover, some labels come from some other frameworks (such as EMF or GMF) and if the localization feature (if existing) is not installed, then the labels will stay in English.  
+		</p>
+		<h3 id="model_operations">Model Operations</h3>
+		<p>Whenever a 
+			<em>VSM</em> requires you to specify a behavior, for example inside any 
+			<em>Tool</em> definition, you can use any of the available 
+			<em>Model Operations</em> to do so. Refer to the 
+			<a href="Model_Operations.html">Model Operations documentation</a> for more details.
+		</p>
+		<h3 id="quick_outline">Quick Outline</h3>
+		<p>When defining your 
+			<em>VSM</em>, a quick outline is available with the shortcut 
+			<code>Ctrl</code> + 
+			<code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your 
+			<em>VSM</em> elements.
+		</p>
+		<p>The star, 
+			<code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add 
+			<code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with 
+			<code>↑</code> and 
+			<code>↓</code>, and go to the selected element in your 
+			<em>VSM</em> with 
+			<code>Enter</code>.
+		</p>
+		<p>
+			<img border="0" src="images/quick_outline.png"/>
+		</p>
+		<h3 id="validation">VSM Validation</h3>
+		<p>It is possible to validate your 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Model</em>
+			</a> , to check that your Representations, Mappings and Tools are correctly specified. It will help you to find missing element or erroneous one (e.g. missing required expression).
+		</p>
+		<p>To validate your VSM, open your 
+			<code>odesign</code> file, right-click on the top-level 
+			<em>Group</em> element and select 
+			<em>Viewpoint specification Editor &gt; Validate</em>. A dialog Box will appear and indicate if the validation succeeded. If not, it will give you details about the detected problems (click on the &#8216;details&#8217; button of the dialog box). If problems are detected, they will also be added to the Eclipse 
+			<em>Problems</em> view. Double-clicking on one of these problems will select the concerned element in the 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Model</em>
+			</a> editor.
+		</p>
+		<p>You can also validate one specific element by right-clicking on it in the 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Models</em>
+			</a> and launching the validation process. All the children of the selected element will be validated too. This fine-grained validation is useful to localize issues in the Specification Model, especially when it contains a lot of elements.
+		</p>
+		<p>It is also possible to use the button <img src="images/specifier-guide/complete_task.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>, at the top right corner of the editor to launch the validation. This icon changes (<img src="images/specifier-guide/validate_model.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/>) when we change the VSM to encourage the user to validate the VSM before saving.</p>
+		<h3 id="dynamic">Dynamic Development</h3>
+		<p>Sirius supports dynamic development of your 
+			<em>VSM</em> with no need for deployment of your project to test it. If the domain model definition (the EMF meta-model plug-in) is installed in your development environment, and as long as your VSM does not use advanced features which require a deployment (like the definition of new 
+			<em>External Java Actions</em> for example), you can test your representations while you are developing them. It is the recommended way to work, especially in the initial development phases, to easily experiment different approaches and see the results immediately.
+		</p>
+		<p>To do this, simply create a modeling project in your development environment, alongside the Viewpoint Specification Project, and add a sample domain model to it. When you open the 
+			<em>Viewpoints Selection</em> dialog on the sample project, you will see that all the viewpoints which are being developed in the same workspace are also made available, in addition to the ones installed as plug-ins. Select the ones you want and create sample representations.
+		</p>
+		<p>Keep both your representations and the VSM that define them open at the same time. Whenever you change some definition or add new elements into your VSM, simply save it. Sirius will automatically detect the change, reload the new definition and apply it to your existing representations. This way you can develop your representations iteratively, for example starting from an empty diagram and adding more elements, styles and tools while and testing them immediately.</p>
+		<p><div style="display: none">
+			<br/>  TODO Add a screenshot with both a VSM (on the left) and the corresponding diagram (on the right) opened at the same time. Make sure the &#8220;Model Explorer&#8221; is also visible to show both the VSP and the Modeling project they correspond to.
+			<br/></div>
+		</p>
+		<p>Note that Sirius does its best to take into account any change in the VSM, even for existing and opened representations. Sometimes, if the changes are too complex or in some corner cases not yet supported, you may need to close and reopen your representation, or in extreme case delete it and create a new one, in order to take the VSM changes into account properly.</p>
+		<h3 id="migration">Migration from Previous Versions</h3>
+		<p>The 
+			<em>Viewpoint Specification Model</em> can evolve between two versions of Sirius. The migration process is done automatically. That means all VSM are migrated at loading time without any action from the user. While a VSM is not saved, the automatic migration will be replayed at the next opening.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/ToolsSpecification.html b/doc/5.1.x/specifier/general/ToolsSpecification.html
new file mode 100644
index 0000000..bc453af
--- /dev/null
+++ b/doc/5.1.x/specifier/general/ToolsSpecification.html
@@ -0,0 +1,123 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>ToolsSpecification</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h3 id="ToolsSpecification">Tools Specification</h3>
+		<p>All tools are specified in roughly the same way. Like most elements inside the VSM, they have an 
+			<em>Id</em> and a 
+			<em>Label</em>. For elements which will appear to the end-user (in the palette or in menus), make sure the 
+			<em>Label</em> is meaningful to them.
+		</p>
+		<p>
+			<strong>Tools Applicability</strong>. Most tools apply to a set of 
+			<em>Mappings</em>, sometimes only on certain kinds of mappings (e.g. 
+			<em>Container Drop</em> description only makes sense for container mappings). For tools which create new elements, the 
+			<em>Mappings</em> correspond to the kinds of elements the tool will create. For other tools, it corresponds to the kinds of element the tool can be applied to.
+		</p>
+		<p>Many tools also support the notion of 
+			<em>Extra Mappings</em>. If these are specified, they indicate other kinds of elements than the primary ones on which the tool can be applied.
+		</p>
+		<p>The 
+			<em>Precondition</em> of a tool definition can be used to restrict its applicability to only some instances of the 
+			<em>Mappings</em> (and 
+			<em>Extra Mappings</em>) associated with the tool. When the user tries to invoke the tool on an element, the expression will be evaluated in the context of that element' semantic target, and the tool will be applicable only if the expression returns true. Otherwise the user will have a feedback (typically a change in the mouse cursor&#8217;s shape) to indicate the tool can not be applied on this element.
+		</p>
+		<p>
+			<strong>Force Refresh.</strong> Tools have a 
+			<em>Force Refresh</em> flag. As most tools only perform a local change in the underlying model, by default Sirius will try to optimize its refresh operation (which synchronizes the graphical view with the state of the underlying semantic model) by only refreshing elements of the mappings explicitly associated with the tool. If you know your tool will have side-effects which can change other parts of the diagram, set the 
+			<em>Force Refresh</em> flag to force Sirius to perform a complete refresh of the whole diagram after the tool is executed. This ensures a perfect synchronization of the graphical representation with the state of the underlying model, possibly at the cost of performance and reactivity on big diagrams. The refresh will be effective only on the current diagram and not on all opened diagrams.
+		</p>
+		<p>
+			<strong>Selection after tool execution.</strong> The 
+			<em>Elements to select</em> and 
+			<em>Inverse Selection Order</em> flags can be used to defined what is selected in the active editor after tool execution. 
+			<br/>By default, only the top level created elements are selected.
+		</p>
+		<ul>
+			<li>
+				<code>Elements to select</code>: Expression to list the elements to select after tool execution. There are four possibilities for the list of elements returned by this expression. In any case, if the default list of elements is not empty, the list of elements returned is filtered with the default selected elements. In case of creation tool, the default list contains newly created elements so, the returned list can contain at most that elements.
+				<ul>
+					<li>Empty expression: The default behavior is applied: if graphical elements has been created, these elements will be selected(excluding the sub elements), else, the selection is unchanged.</li>
+					<li>List of 
+						<code>DRepresentationElement</code>: All this graphical elements will be selected after the execution of the tool.
+					</li>
+					<li>List of semantic elements: All 
+						<code>EObject</code> that are not a 
+						<code>DRepresentationElement</code> are considered as semantic elements. All graphical elements corresponding to these semantic elements will be selected after the execution of the tool.
+					</li>
+					<li>Empty list: Nothing is selected after the execution of the tool.</li>
+					<li>List with only the 
+						<code>DRepresentation</code>: It will be considered as empty list.
+					</li>
+					<li>List with a mix of 
+						<code>DRepresentationElement</code> and non 
+						<code>DRepresentationElement</code> is forbidden. A such list will be considered as empty list.
+					</li>
+				</ul>
+			</li>
+			<li>
+				<code>Inverse Selection Order</code> : By default, false, the elements are selected in the order of the list or the default list if existing. It is possible to inverse this order by setting this property to true. To be more precise, the meaning of this property depends on the value of elementsToSelectExpression:
+				<ul>
+					<li>List of 
+						<code>DRepresentationElement</code>: The elements are selected in order of the list (first element is selected in first, second element is selected in second, and so on). The last graphical element of the list will be the primary selection. If 
+						<code>inverseSelectionOrder</code> is true, the order is reverted.
+					</li>
+					<li>List of semantic elements: The elements are selected in order of the list (the graphical element corresponding to the first semantic element is selected in first, the graphical element corresponding to second semantic element is selected in second, and so on). And if several graphical elements correspond to the same semantic element, they are selected on their default order. The last element is the primary selection. If 
+						<code>inverseSelectionOrder</code> is true, the order is reverted (the order of the list AND the order of several graphical elements corresponding to the same semantic element).
+					</li>
+					<li>Empty list or list with only the 
+						<code>DRepresentation</code>: The 
+						<code>inverseSelectionOrder</code> is ignored in this context.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<strong>Tools' Body and Variables.</strong> The actual effect of a tool is defined inside its 
+			<em>body</em>, which is usually represented by a 
+			<em>Begin</em> element (the starting point of the tool&#8217;s execution). You can use any of the available 
+			<a href="../general/Model_Operations.html">model operations</a> to specify the behavior of your tools, including, if necessary, operations which invoke complex algorithms written in Java. Inside the tools&#8217;body, you have access to 
+			<em>variables</em>, which are specific to each kind of tools and give you all the necessary information on how the tool was invoked, on which elements, etc. How you access these variables from the expressions inside the tool&#8217;s body depend on the query language you use for the expressions.
+		</p>
+		<p>
+			<strong>Static Variables.</strong> The static variables defined by each tool are visible directly inside the tool&#8217;s element in the VSM. The exact set of variables available will depend on each tool, but typically you will have access to both 
+			<em>semantic variables</em> which reference semantic elements and 
+			<em>view variables</em> which reference graphical elements. As an example, in a 
+			<em>Node Creation Tool</em>, you have both a 
+			<em>container</em> and a 
+			<em>containerView</em> variable. 
+			<em>containerView</em> will point to the graphical element on which the user invoked the node creation tool (for example a container view) while 
+			<em>container</em> will point to that view&#8217;s target semantic element. Usually the tools use only the semantic variables, but you may want to use the view variables if the same semantic elements can be represented in different ways on your diagram and you want your tool to behave differently depending on which of these representations the user targeted.
+		</p>
+		<p>
+			<strong>User-Defined Variables.</strong> In addition to the static variables which are pre-defined by Sirius for each kind of tool, you can define your own, which will also be available inside the tool&#8217;s body. These user variables are defined as sub-elements of the static variables using the 
+			<em>New Variable...</em> context menu. There are two kinds:
+		</p>
+		<ul>
+			<li>
+				<em>Expression Variables</em> have a name and a 
+				<em>Computation Expression</em>. When the tool is invoked, the computation expression will be evaluated in the context or the parent variable&#8217;s value (i.e. the static variable inside which the 
+				<em>Expression Variable</em> is defined).
+			</li>
+			<li>
+				<em>Select Model Element Variables</em> will open a dialog box when the tool is invoked, from which the user can manually select model elements from a list you can configure. The element or elements selected by the user will become the value of the variable. To configure the dialog box, you must set a 
+				<em>Message</em> and a 
+				<em>Candidates Expression</em> (evaluated in the context of the parent variable&#8217;s value). The candidates expression should return a list of elements from which the user can select the variable&#8217;s value. By default these candidates are presented as a list. You can also enable the 
+				<em>Tree</em> mode, and specify a 
+				<em>Children Expression</em>, which will be evaluated recursively on each candidate to build a tree of possible values. Finally, you can set the 
+				<em>Multiple</em> flag to allow users to select several of the candidates instead of a single one.
+			</li>
+		</ul>
+		<p>
+			<strong>Tool Filters.</strong> Tool filters can be specified inside a tool to hide a tool in the diagram palette depending on dynamic conditions. The 
+			<em>Elements To Listen</em> is evaluated in the context of the diagram&#8217;s semantic element, and should return a set of semantic elements. The 
+			<em>Precondition</em> is re-evaluated in the context of the diagram whenever a change occurs on 
+			<em>Elements To Listen</em>.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/Writing_Queries.html b/doc/5.1.x/specifier/general/Writing_Queries.html
new file mode 100644
index 0000000..d2fd0d3
--- /dev/null
+++ b/doc/5.1.x/specifier/general/Writing_Queries.html
@@ -0,0 +1,544 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Writing_Queries</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="WritingQueriesandInterpretedExpressions">Writing Queries and Interpreted Expressions</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#WritingQueriesandInterpretedExpressions">Writing Queries and Interpreted Expressions</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#general">General Rules</a>
+					</li>
+					<li>
+						<a href="#specialized">Using the Specialized interpreters</a>
+					</li>
+					<li>
+						<a href="#aql">Using AQL</a>
+					</li>
+					<li>
+						<a href="#acceleo">Using Acceleo</a>
+					</li>
+					<li>
+						<a href="#ocl">Using Raw OCL</a>
+					</li>
+					<li>
+						<a href="#custom">Providing a Custom Language</a>
+					</li>
+					<li>
+						<a href="#service_methods">Writing Java Services</a>
+					</li>
+					<li>
+						<a href="#standard_services">Standard Services</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#editing_domain_services">Editing Domain Services and EMF Edit Integration</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Many parts of a 
+			<em>VSM</em> require you to provide 
+			<em>interpreted expressions</em>, which will be evaluated at runtime to provide a behavior specific to your domain and representations. Some of these expressions return model elements (in which case we call them 
+			<em>queries</em>), while others simply produce text (for example the expressions used for labels), but the principles stay the same.
+		</p>
+		<p>Sirius does not force the use of a specific language to write these queries. Currently, three different languages are provided by default, and if you have specific needs, you can extend the system and  
+			<a href="#custom">provide your own</a>. You can use several different languages inside the same VSM (but only one in each expression).
+		</p>
+		<p>Whatever the language(s) you use, because they are all optional from Sirius&#8217;s point of view, make sure the Viewpoint Specification Project which contains your VSMs explicitly depends on the Sirius plug-in which provides supports for these languages. Otherwise when you modelers are deployed to end-users you can not be sure the proper support will be available. The 
+			<em>Viewpoint Specification Projects</em> which are created using the standard wizard are pre-configured to use AQL (
+			<em>Acceleo Query Language</em>), which is the recommended language as of Sirius 3.1. See the sections below for each of the standard languages for the name of the Sirius support plug-ins to depend on if you use the language.
+		</p>
+		<h2 id="general">General Rules</h2>
+		<p>Some general rules are independent of the language details.</p>
+		<p>
+			<strong>Auto-completion.</strong> First, in the 
+			<em>VSM</em> editor, any field in the property view which has a yellow background is an interpreted expression.  In these fields, auto-completion can be triggered by hitting 
+			<em>Ctrl+Space</em>. 
+		</p>
+		<p>
+			<img border="0" src="images/emptyFieldAutoCompletion.jpg"/>
+		</p>
+		<p>The completion will correspond to the empty expression for the installed query language (e.g. 
+			<b>aql:</b> for AQL). It will also place the cursor at the expected place where it is ready to start typing the expression.
+		</p>
+		<p>
+			<img border="0" src="images/emptyExpressionCursor.jpg"/>
+		</p>
+		<p>When hitting auto-completion on an empty expression, the first completion proposal will correspond to the variables which are available in the expression&#8217;s context, and the rest correspond to all the features, services, etc. which are available on the current element.</p>
+		<p>
+			<img border="0" src="images/emptyExpressionAutoCompletion.jpg"/>
+		</p>
+		<p>Sometimes Sirius is not able to statically determine the precise type of the model elements on which an expression will be evaluated. In that case, it assumes a plain 
+			<em>EObject</em>. This means you will not get completion proposals specific to your custom types, and that if you use features or services which are not available on 
+			<em>EObject</em>, the VSM&#8217;s validation will fail. To prevent this, if you know the precise type of the elements and the language supports it, add a cast operation to tell Sirius the actual type (e.g. <code>aql:filter(packageName::ExpectedType).theRestOfTheExpression</code> if using AQL for example.
+		</p>
+		<p>
+			<strong>The Interpreter view.</strong> The 
+			<em>Interpreter</em> view can be used to develop complex expressions interactively. The view can work in either the native 
+			<em>Acceleo</em> mode (corresponding to Acceleo 3/MTL) or in the 
+			<em>Sirius</em> mode. In the 
+			<em>Sirius</em> mode, you can use any of the languages supported by Sirius, but you lose the benefits of syntax coloring.
+		</p>
+		<p>To use the 
+			<em>Interpreter</em> view, simply open a Sirius representation, select and element in it (for example a shape on a diagram), and type some expression in the view&#8217;s upper text field. The result of the expression (a set of model elements or a string) will appear in the lower part of the view. If you select a different element, the result will automatically be re-evaluated in the context of the new element.
+		</p>
+		<p>
+			<img border="0" src="images/viewpoint_interpreter.png"/>
+		</p>
+		<p>
+			<em>Warning:</em> When using the 
+			<em>Interpreter</em> view from an element selected in a Sirius representation, the context of the expression is 
+			<strong>not</strong> the 
+			<em>semantic</em> element, but the 
+			<em>view</em> model element used internally by Sirius. To access the semantic element you must use the view&#8217;s 
+			<code>target</code> reference. More concretely, imagine you have a Sirius diagram representing UML classes with nodes. If you select a class and enter <code>aql:self</code> in the interpreter view, the result will not be a UML 
+			<code>Class</code> element, but a 
+			<code>DNode</code> (the type used internally by Sirius to represent graphical nodes). To get the UML class, you must enter <code>aql:self.target</code> (or the equivalent in other languages). Keep this in mind when using the 
+			<em>Interpreter</em> view to develop expressions you want to use inside a VSM: most expressions defined in the VSM will be evaluated in the context of a semantic element, so you will need to add/remove 
+			<code>target</code> references when switching between the two.
+		</p>
+		<p>
+			<strong>Determinism.</strong> In general, you should try to ensure that your queries are deterministic, i.e. from the same input model they should always return the same result, and in the same order (if returning collections of elements). Otherwise, each time a representation is refreshed it might become dirty (as Sirius will see the order difference as a change) or even visually unstable (i.e. elements shown in a different order). There are several things to be aware of in order to ensure determinism in your queries:
+		</p>
+		<ul>
+			<li>At the meta-model level, if you control it, make sure any derived feature always return its values in the same order. If you do not control the meta-model and it has unordered references which can cause problems (UML is an example), you can impose your own ordering by sorting the elements whenever they are used in a Sirius query.</li>
+			<li>At the Sirius query level, make sure you call only operations which are deterministic in the query language(s) you use. Unfortunately, this information is not often documented in the query languages semantics, so some trial and error experimentation is required for now. </li>
+			<li>At the service level, if you create your own 
+				<a href="#service_methods">Java services</a>, make sure to use data structures which ensure a fixed iteration order, like 
+				<code>LinkedHashSet</code> instead of 
+				<code>HashSet</code> for example.
+			</li>
+		</ul>
+		<h2 id="specialized">Using the Specialized interpreters</h2>
+		<p>Sirius provides several specialized interpreters to handle more efficiently some forms of simple expressions which can occur very often in a typical VSM. Each interpreter focuses on a very limited case, and none supports complex expressions. This allows them to be very fast, but it requires that you use them explicitly when possible. All these interpreters are available by default in Sirius, you do not need to declare additional dependencies in your VSM project to be able to use them.</p>
+		<ul>
+			<li>
+				<strong>
+					<code>var:</code>
+				</strong> This interpreter can only do direct access to the value of a named variable. For example, instead of <code>aql:containerView</code> (using AQL), the equivalent using the specialized interpreter would be 
+				<code>var:containerView</code>. As a special case, the pseudo-variable 
+				<code>self</code> is available to access the current element (the evaluation context): 
+				<code>var:self</code> is equivalent to <code>aql:self</code> in AQL.
+			</li>
+			<li>
+				<strong>
+					<code>feature:</code>
+				</strong> This interpreter can only do direct access to a named feature of the current element. For example, instead of <code>aql:self.name</code>, the equivalent using this interpreter would be 
+				<code>feature:name</code>. Note that if your metamodel generated code was generated with feature delegation set to Reflective, the feature interpreter will return the raw value of the attribute (as seen by 
+				<code>eGet</code>), bypassing any custom getter implementation you provided. This interpreter also supports the following pseudo-features:
+				<ul>
+					<li>
+						<code>feature:eContainer</code> returns the container of the current element (or 
+						<code>null</code> if there is none). This is equivalent to <code>aql:self.eContainer()</code>.
+					</li>
+					<li>
+						<code>feature:eContents</code> returns the direct contents of the current element (or an empty collection if there is none). This is equivalent to <code>aql:self.eContents()</code>.
+					</li>
+					<li>
+						<code>feature:eAllContents</code> returns all the elements directly and indirectly contained inside the current element (or an empty collection if there is none). This is equivalent to <code>aql:self.eAllContents()</code>.
+					</li>
+					<li>
+						<code>feature:eCrossReferences</code> returns all the model elements which are directly referenced by the current element (or an empty collection if there is none). This is equivalent to <code>[self.eCrossReferences()/] using Acceleo 3/MTL</code>.
+					</li>
+				</ul>
+			</li>
+			<li>
+				<strong>
+					<code>service:</code>
+				</strong> This interpreter can be used to directly invoke a service method (i.e. a Java method that follows conventions for 
+				<a href="#service_methods">service methods</a> ) on the current element. For example, assuming the service class 
+				<a href="#ecore_services">
+					<code>EcoreServices</code>
+				</a> has been correctly registered in the VSM, the expression 
+				<code>service:getEClasses</code> (note the absence of parenthesis) will invoke the 
+				<code>getEClasses</code> on the current element if it is an instance of 
+				<code>EPackage</code>.
+				<ul>
+					<li>The service interpreter supports parameters, but only variables can be used as parameter (no literals or complex expressions), for example: 
+						<code>service:serviceName(view, diagram)</code>.
+					</li>
+					<li>You can use the service interpreter not only on the current context by using a variable name before calling the service, for example: 
+						<code>service:myVariableName.serviceName</code>.
+					</li>
+					<li>For efficiency reasons, if multiple services match the expression, the first one found is used. There is no real polymorphism management.</li>
+				</ul>
+			</li>
+		</ul>
+		<h2 id="aql">Using AQL</h2>
+		<p>Starting from Sirius 3.1, 
+			<em>AQL</em> (Acceleo Query Language, first introduced in Sirius 3.0) is the recommended language to write queries/interpreted expressions. AQL is similar to Acceleo 3/MTL, but simpler and provides much better performance in the Sirius context. AQL expressions start with the 
+			<code>aql:</code> prefix and have a syntax similar to Acceleo (without the enclosing 
+			<code>[../]</code> brackets). The main differences between the two languages are:
+		</p>
+		<ul>
+			<li>Feature access must 
+				<strong>always</strong> explicitly specify the target object, even if the target is 
+				<code>self</code>. This means an Acceleo expression like <code>[name/]</code> which accesses the 
+				<code>name</code> attribute of the current element translates in AQL as 
+				<code>aql:self.name</code>. The expression 
+				<code>aql:name</code> with no explicit receiver will always be interpreted as an access to the 
+				<code>name</code> variable, and may result in an error if the variable in question is not defined. 
+			</li>
+			<li>&#8220;Lambda&#8221; expressions must always declare their parameters and use them explicitly. Again, there is no implicit 
+				<code>self</code> in such a context. For example: <code>[self.eContents()&#45;&gt;select(name.startsWith(&apos;A&apos;))/]</code> becomes <code>aql:self.eContents()&#45;&gt;select(i | i.name.startsWith(&apos;A&apos;))</code> with an explicit declaration and usage of 
+				<code>i</code> in AQL.
+			</li>
+			<li>AQL is more persmissive in terms of missing/empty intermediate results in complex expressions: 
+				<code>aql:self.anEmptyReference.somethingElse</code> will not result in an error as the equivalent Acceleo (or OCL) expression would, but simply return an empty result.
+			</li>
+			<li>AQL provides different services/methods by default compared to Acceleo. In general the set of default services in AQL is better suited to the typically use cases encountered in Sirius.</li>
+		</ul>
+		<p>See <a href="https://www.eclipse.org/acceleo/documentation/aql.html" target="_blank">the AQL documentation</a> for more details about the language itself, the full list of standard services, and the differences with Acceleo/MTL.</p>
+		<p>
+			<em>Note:</em> Viewpoint Specification Projects created with the default wizard will be already setup to use it. Otherwise you need to add a dependency to the 
+			<code>org.eclipse.sirius.common.acceleo.aql</code> plug-in to ensure AQL support will be available wherever your modelers are used. When 
+			<strong>developing</strong> new VSMs which use AQL, it is recommended to have the  
+			<code>org.eclipse.sirius.common.acceleo.aql.ide</code> plug-in installed as it provides specification-time features like expression completion. However, 
+			<code>org.eclipse.sirius.common.acceleo.aql.ide</code> is not needed at runtime for the resulting modelers to function.
+		</p>
+		<p>
+			<em>Note:</em> Several services like olcIsKindOf() or filter() use type literals and will require to explicitly reference the known meta-models as dependencies to work. It is recommended to add the corresponding meta-models plug-ins to the dependencies of the Viewpoint Specific Project.
+		</p>
+		<h2 id="acceleo">Using Acceleo</h2>
+		<p>Acceleo 3 implements the MTL standard, and provides a query language similar to OCL (with some extensions). It provides relatively good static validation and auto-completion when editing your expressions, but AQL is even better, and faster. For new modelers, prefer AQL over Acceleo/MTL. If you have existing modelers which use Acceleo/MTL, converting them to use AQL is relatively straightforward, see <a href="https://www.eclipse.org/acceleo/documentation/aql.html#MigratingfromMTLqueries" target="_blank">the AQL documentation</a> for details.</p>
+		<p>Acceleo expressions are enclosed in brackets: <code>[theExpression/]</code>. Inside the brackets you can write any valid Acceleo expression, including using 
+			<code>if</code> and 
+			<code>let</code> statements, for example. See <a href="https://wiki.eclipse.org/Acceleo" target="_blank">the Acceleo documentation</a> for the exact syntax and semantics of the language.
+		</p>
+		<p>Note that  Acceleo expressions used inside VSMs 
+			<strong>must</strong> be enclosed inside a single bracket. It is not currently possible to mix Acceleo expressions and fixed text (like 
+			<code>"prefix[someExpression/]suffix"</code>). Instead, you can use Acceleo&#8217;s string manipulation operations to obtain the same result: <code>[&apos;prefix&apos; + someExpression + &apos;suffix&apos;/]</code>). Related to this, auto-completion only works if you are inside a well-formed bracket (i.e. <code>[&lt;cursor&gt;/]</code>); if you have simply opened the bracket but not closed it (i.e. <code>[&lt;cursor&gt;</code>), completion will not be available.
+		</p>
+		<p>Acceleo expressions can transparently invoke methods from Java classes which follow the 
+			<a href="#service_methods">service methods</a> conventions and have been properly declared in the VSM. Note that currently this only works if the Java service class is in the same project as the 
+			<em>VSM</em>. You can also invoke Acceleo 
+			<em>queries</em> defined in 
+			<code>.mtl</code> files in your Viewpoint Specification Project. For this to work, your Viewpoint Specification Project should be an Acceleo Generator project, you can convert the project with the 
+			<em>Configure &gt; Toggle Acceleo Nature</em> contextual menu. If you want to use queries from 
+			<code>.mtl</code> files in you Sirius project, the parent 
+			<em>Viewpoint</em> element must have a 
+			<em>Java Extension</em> element which references the MTL file, using the 
+			<code>com::example::domain::design::module</code> syntax (note that the qualified name does not contain the 
+			<code>.mtl</code> or 
+			<code>.emtl</code> file extension). Also make sure to read <a href="http://www.obeonetwork.com/page/building-an-acceleo-generator"  target="_blank">http://www.obeonetwork.com/page/building-an-acceleo-generator</a> to ensure the project is built correctly, or the queries defined in the 
+			<code>.mtl</code> files may not be available when the project is deployed as a plug-in.
+		</p>
+		<p>
+			<em>Note:</em> due to an incompatible change in serialization format in EMF 2.9, if you use external 
+			<code>.mtl</code> files in your modeler definitions and build your modeler plug-ins using EMF 2.9 or later, the resulting modeler will not work with previous versions of EMF (as the resulting 
+			<code>.emtl</code> files will not load correctly with EMF 2.8 and earlier). For reference, EMF 2.9 corresponds to Eclipse 4.3 (Kepler). 
+		</p>
+		<p>Acceleo is very precise (and  very demanding) about the types of elements your queries are executed on. This generally means you get good auto-completion and useful validation and diagnostics. However sometimes Sirius is not able to statically determine the precise type of the model elements on which an expression will be evaluated. In that case, it assumes a plain 
+			<em>EObject</em>. If you know the actual type which will be used, prefix your expression with 
+			<code>filter(ExpectedType)</code> to help Sirius. Note that if the actual type at runtime is not compatible with 
+			<code>ExpectedType</code>, the rest of your expression will silently be ignored.
+		</p>
+		<p>In the context of Sirius, you have access to a special feature which can be used to follow &#8220;back-links&#8221; or &#8220;cross-references&#8221;. From a given model element, this allows you to easily (and efficiently) find all the elements which refer to it in the scope of the models and representations in the same modeling project. This feature is available through the 
+			<code>eInverse()</code> method, which can be used on any model element inside an Acceleo expression.
+		</p>
+		<p>Note that in most cases, expressions in Sirius are evaluated in a context where 
+			<em>variables</em> are defined. For example, most expressions inside tool definitions have access to variables telling them which elements the tool has been applied on. In some cases, the names of these variable can conflict with names of features in your meta-model. The evaluation rules of Acceleo (OCL actually) give precedence to variables, so it is recommended to always prefix accesses to your meta-model features with 
+			<code>self</code> (or another expression) to avoid ambiguity. As a concrete example, say you have an expression 
+			<code>"[target/]"</code> that you expect to access the 
+			<code>target</code> feature of one of your object. If evaluated in a context where a 
+			<code>target</code> variable exist, the value of the expression will be the value of the variable, 
+			<em>not</em> the value of the object&#8217;s property. To avoid ambiguity, always use expressions of the form 
+			<code>"[self.target/]"</code> in such cases.
+		</p>
+		<p>
+			<em>Note:</em> Due to internal changes in the Eclipse Equinox runtime, starting with Eclipse Luna (4.4) it is impossible to evaluate Java services from an Acceleo 3 expression if the Java service is defined directly in the workspace. This only affect specifiers (not end-users). When developing modelers which use Acceleo expressions and rely on Java services, you must launch an Eclipse runtime from your development environement to test the resulting modeler in a context where the service is available as part of a deployed plug-in. Starting with Sirius 3.0 you can also use the AQL language instead, which has a syntax very similar to Acceleo 3/MTL, but does not have this limitation regarding services in the workspace.
+		</p>
+		<h2 id="ocl">Using Raw OCL</h2>
+		<p>Sirius also supports raw OCL expressions, but this support is deprecated and will be removed in future versions. OCL expressions must be prefixed with 
+			<code>ocl:</code>. If you use it your Sirius project must declare a dependency to the 
+			<code>org.eclipse.sirius.common.ocl</code> plug-in to ensure OCL support will be available wherever your modelers are used.
+		</p>
+		<p>It is highly recommended that you use Acceleo, which implemented the MTL standard and is a super-set of the OCL language, instead of raw OCL.</p>
+		<h2 id="custom">Providing a Custom Language</h2>
+		<p>Sirius allows you to provide your own language implementations, if you have very specific needs or want to reuse an existing custom language. Note that Sirius must be able to syntactically and unambiguously determine from an expression which language it is written in (to send it to the appropriate interpreter). The simplest way to achieve this is to define a prefix (like 
+			<code>ocl:</code> for OCL) so that expressions written in your language can be distinguished from expressions written in any of the others.
+		</p>
+		<p>To provide your custom language, you must 
+			<em>at least</em> implement the 
+			<code>org.eclipse.sirius.common.expressionInterpreter</code> extension point, and provide an implementation of the 
+			<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreter</code> interface. The example below shows how the Acceleo interpreter is registered. The 
+			<code>AcceleoMTLInterpreterProvider</code> is the one which implements the 
+			<code>IInterpreter</code> interface.
+		</p>
+		<pre><code>   &lt;extension point="org.eclipse.sirius.common.expressionInterpreter"
+              id="org.eclipse.sirius.common.acceleo.mtl.AcceleoMTLInterpreter"&gt;
+      &lt;expressionInterpreterProvider
+            interpreterProviderClass="org.eclipse.sirius.common.acceleo.mtl.business.internal.interpreter.AcceleoMTLInterpreterProvider" /&gt;
+   &lt;/extension&gt;
+</code></pre>
+		<p>You can also optionally provide support for auto-completion for your language by implementing the 
+			<code>org.eclipse.sirius.common.proposalProvider</code> extension point and providing an implementation of 
+			<code>org.eclipse.sirius.common.tools.api.contentassist.IProposalProvider</code> interface. For example, here is how the completion support for Acceleo is registered (
+			<code>AcceleoProposalProvider</code> is the class which implements the 
+			<code>IProposalProvider</code> interface):
+		</p>
+		<pre><code>   &lt;extension point="org.eclipse.sirius.common.proposalProvider"&gt;
+      &lt;proposalProvider
+            class="org.eclipse.sirius.common.acceleo.mtl.ide.AcceleoProposalProvider"
+            interpreter="org.eclipse.sirius.common.acceleo.mtl.AcceleoMTLInterpreter" /&gt;
+   &lt;/extension&gt;
+</code></pre>
+		<h2 id="service_methods">Writing Java Services</h2>
+		<p>Query languages may support the notion of 
+			<em>Java services</em>, which are methods written in Java that can be transparently invoked from interpreted expressions in Sirius. Acceleo 3 includes this support. All you need to do is to create a Java class whose methods follow some conventions (described below) in your Viewpoint Specification Project, and declare the class (using its fully qualified Java name) in the VSM. You can then use the services defined in that class in any of you interpreted expressions written in either Acceleo or another language which supports services (refer to the query language&#8217;s documentation for details).
+		</p>
+		<p>A service is simply a public Java methods which follows some conventions:</p>
+		<ul>
+			<li>The class containing the method must be public and have a default constructor which takes no argument.</li>
+			<li>The class can contain many public methods (static or not), each of which will be visible as a service if they follow the right conventions.</li>
+			<li>A service method must take at least one parameter, which should be an EMF type (i.e. 
+				<code>EObject</code> or a sub-type of 
+				<code>EObject</code>).
+			</li>
+			<li>A service method may take more parameters, which can be:
+				<ul>
+					<li>strings</li>
+					<li>numbers</li>
+					<li>EMF types (i.e. 
+						<code>EObject</code> or a sub-type)
+					</li>
+					<li>Java collections of EMF types (note that array types are 
+						<strong>not</strong> supported).
+					</li>
+				</ul>
+			</li>
+			<li>A service method may return a value, which can have the same kinds of types as parameters.</li>
+		</ul>
+		<p>
+			<strong>WARNING:</strong> AQL only supports Sequences and Set as collection types. As a result, to get the full benefit from the AQL validation, it is recommended to write services that return a List or a Set as collection type.
+		</p>
+		<p>Here is an example of a Java service:</p>
+		<pre><code id="ecore_services">public class EObjectServices {
+    public List&lt;EClass&gt; getEClasses(EPackage ePackage) {
+        List&lt;EClass&gt; eClasses = new ArrayList&lt;EClass&gt;();
+        // The service code. 
+        return eClasses;
+    }
+}
+</code></pre>
+		<p>Once a service has been defined and its class is registered in your VSM, you can invoke it in the expressions of languages which support it  like this: <code>[aFamily.getFamiliesContainingParents()/]</code>. (using Acceleo syntax) The invocation looks as if the service was a normal feature of the 
+			<code>Family</code> type. When the service is invoked, the model element on which it is invoked is used as the first argument to the Java method. If arguments are passed in the expression, they are mapped to the second, third, etc. parameters of the Java method, assuming the types are compatible. The result of evaluating a service invocation is the result of the Java method.
+		</p>
+		<p>
+			<em>Warning:</em> Java service methods should be stateless. There is no guarantee that two successive invocations of the same service method on two model elements (or even on the same one) will use the same instance of the service class.
+		</p>
+		<p>
+			<em>Warning:</em> There are currently some limitations on the use of Java services from Acceleo:
+		</p>
+		<ul>
+			<li>primitive types can not be used as arguments or return types for service methods invoked from Acceleo 3 expressions. The workaround is to use the corresponding wrapper type (e.g. 
+				<code>Integer</code> instead of 
+				<code>int</code>).
+			</li>
+			<li>service methods invoked from Acceleo 3 expressions can not return 
+				<code>void</code>. You can return any value instead, for example target argument (the service method&#8217;s first parameter). 
+			</li>
+		</ul>
+		<h2 id="standard_services">Standard Services</h2>
+		<p>Sirius provides some standard services that can be used from any VSM simply by adding the appropriate reference (as a 
+			<em>Java Extension</em>) to the implementation class&#8217;s fully qualified name. When using such a service class, make sure your 
+			<em>Viewpoint Specification Project</em> has a dependency towards the Sirius plug-in which provides said class.
+		</p>
+		<h3 id="editing_domain_services">Editing Domain Services and EMF Edit Integration</h3>
+		<p>Starting from Sirius 4.0, the 
+			<code>org.eclipse.sirius.ext.emf.edit</code> plug-in provides the 
+			<code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> service class which can be referenced from any VSM (once properly declared). This class provides a large set of methods which give access to many useful features of the 
+			<em>EMF Edit</em> framework, in particular all kinds of 
+			<em>Item Providers</em>, in a way that is directly accessible as service invocations from interpreted expressions.
+		</p>
+		<h4 id="GeneralEditingDomainrelatedServices">General EditingDomain-related Services</h4>
+		<p>The following general services are made available:</p>
+		<ul>
+			<li>
+				<code>getEditingDomain(EObject)</code>
+			</li>
+			<li>
+				<code>isStale(EObject)</code>
+			</li>
+			<li>
+				<code>isControlled(EObject)</code>
+			</li>
+			<li>
+				<code>getAdapterFactory(EObject)</code>
+			</li>
+			<li>
+				<code>getAdapter(EObject, Class)</code>
+			</li>
+		</ul>
+		<h4 id="ItemProvidersServices">Item Providers Services</h4>
+		<p>Most public methods of the following interfaces are available as services on any 
+			<code>EObject</code> (typically from a Sirius session):
+		</p>
+		<ul>
+			<li>
+				<code>org.eclipse.emf.edit.provider.IItemLabelProvider</code>
+			</li>
+			<li>
+				<code>org.eclipse.emf.edit.provider.IItemColorProvider</code>
+			</li>
+			<li>
+				<code>org.eclipse.emf.edit.provider.IItemFontProvider</code>
+			</li>
+			<li>
+				<code>org.eclipse.emf.edit.provider.IStructuredItemContentProvider</code>
+			</li>
+			<li>
+				<code>org.eclipse.emf.edit.provider.ITreeItemContentProvider</code>
+			</li>
+			<li>
+				<code>org.eclipse.emf.edit.provider.ITableItemLabelProvider</code>
+			</li>
+			<li>
+				<code>org.eclipse.emf.edit.provider.ITableItemColorProvider</code>
+			</li>
+			<li>
+				<code>org.eclipse.emf.edit.provider.ITableItemFontProvider</code>
+			</li>
+		</ul>
+		<p>In all cases, a 
+			<code>getXXXProvider()</code> service method is also made available (for example 
+			<code>getLabelProvider(EObject)</code>, which returns the item provider itself (or 
+			<code>null</code>). The item provider is located using the 
+			<code>ItemProviderAdapter</code> returned by the 
+			<code>AdapterFactory</code> associated to the element&#8217;s editing domain. This assumes said domain is an 
+			<code>AdapterFactoryEditingDomain</code> (which is true in practice in Sirius, which uses a 
+			<code>TransactionalEditingDomain</code> that inherits from this).
+		</p>
+		<p>All service methods return an explicit 
+			<code>null</code> value (or 
+			<code>false</code> for services that return a boolean) if the corresponding item provider could not be found. Note that this is indistinguishable from an item provider method which actually returns 
+			<code>null</code> or 
+			<code>false</code>.
+		</p>
+		<h4 id="ItemPropertyRelatedServices">Item Property-Related Services</h4>
+		<p>The 
+			<code>IItemPropertySource</code> associated with an element and its 
+			<code>IItemPropertyDescriptors</code> can be obtained using the following services:
+		</p>
+		<ul>
+			<li>
+				<code>getItemPropertySource(EObject)</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptors(EObject)</code> to obtain 
+				<strong>all</strong> the 
+				<code>IItemPropertyDescriptor</code> of the element.
+			</li>
+			<li>
+				<code>getPropertyDescriptorForFeature(EObject, String)</code> to obtain the 
+				<code>IItemPropertyDescriptor</code> of an element&#8217;s specific feature
+			</li>
+		</ul>
+		<p>The following services, which all take a feature name as a second argument (the first explicit one when invoked as a service) give access to the corresponding methods in the 
+			<code>IItemPropertyDescriptor</code> associated to the corresponding element&#8217;s feature:
+		</p>
+		<ul>
+			<li>
+				<code>getPropertyDescriptorPropertyValue()</code>
+			</li>
+			<li>
+				<code>isPropertyDescriptorPropertySet()</code>
+			</li>
+			<li>
+				<code>canSetPropertyDescriptorProperty()</code>
+			</li>
+			<li>
+				<code>resetPropertyDescriptorPropertyValue()</code>
+			</li>
+			<li>
+				<code>setPropertyDescriptorPropertyValue()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorCategory()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorDescription()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorDisplayName()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorFilterFlags()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorHelpContextIds()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorId()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorLabelProvider()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorFeature()</code>
+			</li>
+			<li>
+				<code>isPropertyDescriptorMany()</code>
+			</li>
+			<li>
+				<code>getPropertyDescriptorChoiceOfValues()</code>
+			</li>
+			<li>
+				<code>isPropertyDescriptorMultiLine()</code>
+			</li>
+			<li>
+				<code>isPropertyDescriptorSortChoices()</code>
+			</li>
+		</ul>
+		<h4 id="CommandrelatedServices">Command-related Services</h4>
+		<p>A series of service methods can be used to invoke the standard EMF Commands available from 
+			<code>ItemProviderAdapter</code> 's various 
+			<code>createXXXCommand()</code> methods. Note that contrary to the 
+			<code>createXXXCommand()</code> methods which simply returns a 
+			<code>Command</code> instance, the service methods exposed in this class will directly 
+			<strong>execute</strong> the command on the editing domains 
+			<code>CommandStack</code>.
+			<br/>Their names follow the 
+			<code>perfomXXXCommand()</code> pattern to reflect this. They all return the 
+			<code>self</code> element (the 
+			<code>EObject</code> on which the service was invoked.
+		</p>
+		<p>The command-related services available are:</p>
+		<ul>
+			<li>
+				<code>performSetCommand()</code>
+			</li>
+			<li>
+				<code>performUnsetCommand()</code>
+			</li>
+			<li>
+				<code>performAddCommand()</code>
+			</li>
+			<li>
+				<code>performRemoveCommand()</code>
+			</li>
+			<li>
+				<code>performReplaceCommand()</code>
+			</li>
+			<li>
+				<code>performMoveCommand()</code>
+			</li>
+		</ul>
+		<p>The implementation of these services delegate to the 
+			<code>ItemProviderAdapter.createCommand()</code> method, so any customization made in the 
+			<code>ItemProviderAdapter</code> 's implementation will be taken into account.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/general/images/common_attributes.png b/doc/5.1.x/specifier/general/images/common_attributes.png
new file mode 100644
index 0000000..8b3de5d
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/common_attributes.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/documentation_attributes.png b/doc/5.1.x/specifier/general/images/documentation_attributes.png
new file mode 100644
index 0000000..8683403
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/documentation_attributes.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/domain_class.png b/doc/5.1.x/specifier/general/images/domain_class.png
new file mode 100644
index 0000000..b6897f6
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/domain_class.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/emptyExpressionAutoCompletion.jpg b/doc/5.1.x/specifier/general/images/emptyExpressionAutoCompletion.jpg
new file mode 100644
index 0000000..e7b2fa6
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/emptyExpressionAutoCompletion.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/emptyExpressionCursor.jpg b/doc/5.1.x/specifier/general/images/emptyExpressionCursor.jpg
new file mode 100644
index 0000000..e1a8abd
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/emptyExpressionCursor.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/emptyFieldAutoCompletion.jpg b/doc/5.1.x/specifier/general/images/emptyFieldAutoCompletion.jpg
new file mode 100644
index 0000000..243f581
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/emptyFieldAutoCompletion.jpg
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/featureName.png b/doc/5.1.x/specifier/general/images/featureName.png
new file mode 100644
index 0000000..7ae02b0
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/featureName.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/interpreted_expressions.png b/doc/5.1.x/specifier/general/images/interpreted_expressions.png
new file mode 100644
index 0000000..de3a151
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/interpreted_expressions.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/nn47/.directory b/doc/5.1.x/specifier/general/images/nn47/.directory
new file mode 100644
index 0000000..d3e4e62
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/nn47/.directory
@@ -0,0 +1,6 @@
+[Dolphin]
+ShowPreview=true
+Timestamp=2010,7,27,14,47,37
+
+[Settings]
+ShowDotFiles=true
diff --git a/doc/5.1.x/specifier/general/images/questionMarque.png b/doc/5.1.x/specifier/general/images/questionMarque.png
new file mode 100644
index 0000000..09dda8c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/questionMarque.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/quick_outline.png b/doc/5.1.x/specifier/general/images/quick_outline.png
new file mode 100644
index 0000000..8df0a0d
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/quick_outline.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/collapseall.png b/doc/5.1.x/specifier/general/images/specifier-guide/collapseall.png
new file mode 100644
index 0000000..fa9b646
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/collapseall.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/complete_task.png b/doc/5.1.x/specifier/general/images/specifier-guide/complete_task.png
new file mode 100644
index 0000000..42e09ca
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/complete_task.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/expandall.png b/doc/5.1.x/specifier/general/images/specifier-guide/expandall.png
new file mode 100644
index 0000000..6687a95
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/expandall.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/specifier-guide/validate_model.png b/doc/5.1.x/specifier/general/images/specifier-guide/validate_model.png
new file mode 100644
index 0000000..49c1feb
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/specifier-guide/validate_model.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/standard_colors.png b/doc/5.1.x/specifier/general/images/standard_colors.png
new file mode 100644
index 0000000..9bbbde9
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/standard_colors.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/textAreaDialog.png b/doc/5.1.x/specifier/general/images/textAreaDialog.png
new file mode 100644
index 0000000..44b49d5
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/textAreaDialog.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message1.png b/doc/5.1.x/specifier/general/images/translatable_message1.png
new file mode 100644
index 0000000..a78e88e
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message2.png b/doc/5.1.x/specifier/general/images/translatable_message2.png
new file mode 100644
index 0000000..754c7a3
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message3.png b/doc/5.1.x/specifier/general/images/translatable_message3.png
new file mode 100644
index 0000000..8ac721f
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message3.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message4.png b/doc/5.1.x/specifier/general/images/translatable_message4.png
new file mode 100644
index 0000000..60dc239
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message4.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message5.png b/doc/5.1.x/specifier/general/images/translatable_message5.png
new file mode 100644
index 0000000..c5fb69c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message5.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message6.png b/doc/5.1.x/specifier/general/images/translatable_message6.png
new file mode 100644
index 0000000..adde570
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message6.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message8.png b/doc/5.1.x/specifier/general/images/translatable_message8.png
new file mode 100644
index 0000000..9608a3d
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message8.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/translatable_message9.png b/doc/5.1.x/specifier/general/images/translatable_message9.png
new file mode 100644
index 0000000..eb4b84c
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/translatable_message9.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/tricks.png b/doc/5.1.x/specifier/general/images/tricks.png
new file mode 100644
index 0000000..a0679f0
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/tricks.png
Binary files differ
diff --git a/doc/5.1.x/specifier/general/images/viewpoint_interpreter.png b/doc/5.1.x/specifier/general/images/viewpoint_interpreter.png
new file mode 100644
index 0000000..acd9167
--- /dev/null
+++ b/doc/5.1.x/specifier/general/images/viewpoint_interpreter.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/Properties_View_Description.html b/doc/5.1.x/specifier/properties/Properties_View_Description.html
new file mode 100644
index 0000000..55f1ac0
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/Properties_View_Description.html
@@ -0,0 +1,1734 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Properties_View_Description</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SpecifyingPropertiesViews">Specifying Properties Views</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SpecifyingPropertiesViews">Specifying Properties Views</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#properties_view_description">Properties View Description</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#common_attributes">Common Attributes</a>
+							</li>
+							<li>
+								<a href="#additional_services">Additional Services</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#categories">Categories</a>
+					</li>
+					<li>
+						<a href="#pages">Pages</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#page-toolbar-action">Toolbar Actions</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#groups">Groups</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#group-toolbar-action">Toolbar Actions</a>
+							</li>
+							<li>
+								<a href="#widgets-from-domain-class">Widgets From Domain Class</a>
+							</li>
+							<li>
+								<a href="#group_styles">Group Styles</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#widgets">Widgets</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#text">Text / Text area</a>
+							</li>
+							<li>
+								<a href="#button">Button</a>
+							</li>
+							<li>
+								<a href="#label">Label</a>
+							</li>
+							<li>
+								<a href="#checkbox">Checkbox</a>
+							</li>
+							<li>
+								<a href="#select">Select</a>
+							</li>
+							<li>
+								<a href="#radio_group">Radio Group</a>
+							</li>
+							<li>
+								<a href="#hyperlink">Hyperlink</a>
+							</li>
+							<li>
+								<a href="#reference">Reference</a>
+							</li>
+							<li>
+								<a href="#list">List</a>
+							</li>
+							<li>
+								<a href="#basic_custom_widgets">Basic Custom Widgets</a>
+							</li>
+							<li>
+								<a href="#advanced_custom_widgets">Advanced Custom Widgets</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#dynamic_mappings">Dynamic Mappings</a>
+					</li>
+					<li>
+						<a href="#containers_and_layout">Containers and Layout</a>
+					</li>
+					<li>
+						<a href="#styling">Styling</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#widgets_styles">Widgets styles</a>
+							</li>
+							<li>
+								<a href="#colors">Colors</a>
+							</li>
+							<li>
+								<a href="#conditional_styles">Conditional Styles</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#validation_rules">Validation rules</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#page_semantic_validation_rule">Page semantic validation rule</a>
+							</li>
+							<li>
+								<a href="#group_semantic_validation_rule">Group semantic validation rule</a>
+							</li>
+							<li>
+								<a href="#group_property_validation_rule">Group property validation rule</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#extensibility_features">Extensibility Features</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#extends">Extends</a>
+							</li>
+							<li>
+								<a href="#overrides">Overrides</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#extension_points">Extension Points</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#advanced_custom_widgets_extension_points">Extension Points for Advanced Custom Widgets</a>
+							</li>
+							<li>
+								<a href="#tab_filtering">Tab Filtering</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Starting from version 4.0, Sirius supports the definition of properties views with many features like complex styling, validation, context etc.</p>
+		<p>Properties views are defined inside the VSM in a way that is similar to other Sirius representations. The configuration elements in the VSM identify a sub-set of the elements in the semantic model to which they apply, and associate to them widgets, which will be visible in the Eclipse 
+			<em>Properties View</em> to view and edit the elements&#8217;s properties.
+		</p>
+		<p>The configuration 
+			<em>maps</em> semantic elements onto some properties view elements. At runtime, each active properties element (pages, groups, widgets) will produce zero or more elements in the properties view, depending on how many semantic elements currently match the properties element&#8217;s definition. Whenever the current selection changes Sirius will automatically re-compute which elements should appear in the properties view according to the active widgets, and create or remove the necessary elements in the properties view.
+		</p>
+		<p>Sirius properties view are enabled whenever the selected element is part of an opened session, i.e. any element selected inside a Sirius editor or from the 
+			<em>Model Explorer</em> view on an opened session.
+		</p>
+		<p>Note that if you have the (optional) support for Sirius-defined properties views correctly installed but do not specify anything inside your VSMs, Sirius will apply default generic rules to provide a canonical properties view for your model elements. As soon as you specify your own configuration, as described in this document, the default rules will be ignored in favor of yours. See 
+			<a href="#default_rules">below</a> for how both approaches can be combined.
+		</p>
+		<p>You can create a 
+			<em>Properties View</em> description under the root element of an odesign thanks to three specific menu items.
+		</p>
+		<p>
+			<img border="0" src="images/new-properties.png"/>
+		</p>
+		<ul>
+			<li>The first menu is used to create a blank 
+				<em>Properties View</em> description. With this menu, you will start your 
+				<em>Property View</em> definition from scratch.
+			</li>
+			<li>The second menu can copy the default rules directly inside of the odesign. While powerful, those default rules can be quite complex for new users.</li>
+			<li>The third menu can create a new 
+				<em>Properties View</em> which will extends the default rules. Using this mechanism, you can leverage all the default rules and you have the ability to easily add new rules.
+			</li>
+		</ul>
+		<h2 id="properties_view_description">Properties View Description</h2>
+		<p>Properties view are configured by creating a 
+			<em>Properties View Description</em> element (directly under the top-level 
+			<a href="../general/Specifying_Viewpoints.html#vsm_organization">
+				<em>Group</em>
+			</a> element of the VSM) and its sub-elements (which describe the widgets, the actions, the layout, etc.).
+		</p>
+		<p>Like many elements inside a 
+			<a href="../../Glossary.html#VSM">
+				<em>VSM</em>
+			</a>, 
+			<em>View Extension Description</em> have an optional 
+			<em>Identifier</em>, which should be unique.
+		</p>
+		<p>Inside a 
+			<em>Properties View Description</em> element, you can create:
+		</p>
+		<ul>
+			<li>
+				<a href="#categories">
+					<em>Categories</em>
+				</a>, which exist only for the specifier convenience to order his specification;
+			</li>
+		</ul>
+		<p>Inside a 
+			<em>Category</em> element, you can create:
+		</p>
+		<ul>
+			<li>
+				<a href="#pages">
+					<em>Pages</em>
+				</a>, which correspond to &#8220;tabs&#8221;;
+			</li>
+			<li>
+				<a href="#groups">
+					<em>Groups</em>
+				</a>, which represent named sections inside a page/tab which contain the actual widgets;
+			</li>
+			<li>
+				<a href="#overrides">
+					<em>Overrides</em>
+				</a>, which allows to override part of an existing properties view description. 
+			</li>
+		</ul>
+		<p>It is recommended that the 
+			<em>Properties View Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the 
+			<em>Metamodels</em> property section of the 
+			<em>Properties View Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your 
+			<a href="../../Glossary.html#VSM">
+				<em>VSM</em>
+			</a>.
+		</p>
+		<p>The descriptions for all the different types of properties view elements share the same common principles:</p>
+		<ul>
+			<li>Some of the elements of the semantic model are selected, using a combination of configuration attributes (see below). These elements are called 
+				<em>targets</em>, and each one has a single widget of this type representing it.
+			</li>
+			<li>The graphical aspect of the properties view is defined by a 
+				<em>style</em>. Sirius provides a rich set of possible styles, which are described later in this document.
+			</li>
+			<li>Optionally, a behavior for the properties view element depending on the widget kind can be defined (edition for text field, on click action for hyperlink or buttons...).</li>
+		</ul>
+		<p id="context">
+			<strong>Context.</strong> Each properties view element is defined in a 
+			<em>context</em> in the VSM. At runtime, the corresponding 
+			<em>context element</em> would be the semantic element associated to the properties view element description. This context element is used as a starting point to determine which instances of a properties view element description should be created on the properties view:
+		</p>
+		<ol>
+			<li>First, the 
+				<em>Semantic Candidates Expression</em> of the description is evaluated, starting from the context element. It should return a set (possibly empty) of elements in the semantic model.
+			</li>
+			<li>This list of candidates is then filtered using the 
+				<em>Domain Class</em> specified in the description: only the candidates which are instance of the specified class are retained.
+			</li>
+			<li>Finally, the optional 
+				<em>Precondition Expression</em> of the element is evaluated, once for each of the remaining candidates. It should return a boolean value. Only the candidates for which the predicate returns a true value are kept and will actually produce an element on the properties view.
+			</li>
+		</ol>
+		<p>This order of evaluation should be kept in mind when specifying properties view. In particular, to avoid performance issues you should:</p>
+		<ul>
+			<li>Limit the number of model elements with 
+				<em>Semantic Candidate Expression</em>.
+			</li>
+			<li>Avoid testing instances type in 
+				<em>Semantic Candidate Expression</em> (this will be done anyway when filtering the 
+				<em>Domain Class</em>).
+			</li>
+			<li>Use the most specific type in 
+				<em>Domain Class</em>.
+			</li>
+			<li>Avoid navigation and long computations in 
+				<em>Precondition Expression</em>.
+			</li>
+		</ul>
+		<p>
+			<strong>Properties View Elements Definition.</strong> Properties views support several different types of elements, which are described in the following sections. They are:
+		</p>
+		<ul>
+			<li>
+				<a href="#pages">pages</a>, which represent properties view 
+				<strong>Tab</strong> that can contain sections.
+			</li>
+			<li>
+				<a href="#groups">groups</a>, which represent properties view 
+				<strong>Section</strong> that can contain widgets.
+			</li>
+			<li>
+				<a href="#widgets">widgets</a> describe the different kind of widgets supported, like texts, buttons, labels, checkboxes, radio groups...
+			</li>
+			<li>
+				<a href="#dynamic_mappings">dynamic mappings</a> are used for advanced scenarios where the set of widgets to display can not be known statically, but instead must be computed at runtime.
+			</li>
+			<li>
+				<a href="#containers_and_layout">containers and layout</a> are used to organize and layout multiple related widgets.
+			</li>
+			<li>
+				<a href="#overrides">overrides</a> are used to override the properties view of an existing properties view description.
+			</li>
+		</ul>
+		<p id="default_rules">
+			<strong>Default Properties View Rules.</strong> When no properties view definition is found for an element selected by the user, Sirius will apply default rules which attempt to give a usable (if generic) result for most user models. As soon as you define 
+			<em>some</em> custom rules for your modelers, 
+			<em>only</em> these custom rules will apply, and the default ones will be ignored. If you want to mix the default rules for some of your elements and custom ones only for some specific types, you can:
+		</p>
+		<ul>
+			<li>Extend the default rules model inside your VSM: from the top-level element of the VSM model, select 
+				<em>New Properties&gt; Extend Default Properties View</em>. This will allow you to redefine the behavior of the default rules thanks to the &#8220;extension mechanism&#8221;#extensibility_features.
+			</li>
+			<li>Import a copy of the default rules model inside your VSM: from the top-level element of the VSM model, select 
+				<em>New Properties &gt; Import Default Properties View</em>.
+			</li>
+			<li>Add your custom rules (pages and groups) and optionally update the default ones to not apply for the elements for which you provide more specific views (typically by modifying the 
+				<em>Precondition Expression</em> of the default 
+				<em>Page</em>), to do so from the top-level element of the VSM model, select 
+				<em>New Properties &gt; New Default Properties View</em>.
+			</li>
+		</ul>
+		<p>
+			<strong>Legacy Sirius Tabs.</strong> By default, the legacy 
+			<em>Semantic</em> and 
+			<em>Default</em> tabs which show the raw properties of the selected element in a plain property grid are still visible even when you have defined custom properties views (the 
+			<em>Semantic</em> tab is visible when the selection is from a Sirius representation; the 
+			<em>Default</em> tab is shown when selecting from the 
+			<em>Model Explorer</em>). If you want to hide these legacy tabs and only show your custom tabs, you can do so by changing the preferences in the 
+			<em>Sirius &gt; Sirius Properties View</em> category.
+		</p>
+		<h3 id="common_attributes">Common Attributes</h3>
+		<p>The following attributes are mostly shared by all the properties view element description (page, group, container, widget).</p>
+		<p id="identifier">
+			<strong>Identifier.</strong> Each properties view element description defines an optional attribute 
+			<em>Identifier</em>. It can be used to distinguish elements of the same type in the VSM editor, and in advanced customization scenarios where the VSM model is programmatically accessed/modified.
+		</p>
+		<p id="domain_class">
+			<strong>Domain Class.</strong> The optional 
+			<em>Domain Class</em> attribute is the type of semantic elements which are represented by the properties view element definition. The syntax for the domain class name can be the basic name, like 
+			<code>Package</code>, a qualified name using name of the EMF EPackage which defines the type, like 
+			<code>uml.Package</code>, or a fully qualified URI like 
+			<code>http://www.eclipse.org/uml2/3.0.0/UML#//Package</code>.
+			<br/>An empty 
+			<em>Domain Class</em> means that the element being defined will be applicable to any model element of any type. By default, new properties view elements can be created on 
+			<em>any</em> instance of the 
+			<em>Domain Class</em>.
+		</p>
+		<p id="precondition_expression">
+			<strong>Precondition Expression.</strong> You can use the 
+			<em>Precondition Expression</em> to change this. If such an expression is specified, it will be evaluated in the 
+			<a href="#context">context</a> of the semantic element the user has selected, and only if the expression returns 
+			<code>true</code> will the properties view element be applied to that semantic element.
+		</p>
+		<p id="label_expression">
+			<strong>Label Expression.</strong> This expression is used to compute the text of the label describing the element (which will typically appear on the left of a widget). The 
+			<em>Label expression</em> is evaluated in the context of the semantic element and should return a string. If the expression is not specified, the default label is empty.
+		</p>
+		<p id="help_expression">
+			<strong>Help Expression.</strong> The help text of a properties view element is specified using the 
+			<em>Help expression</em>, which is evaluated in the context of the semantic element and should return a string. It will appear as a tooltip on the question-mark icon associated to a widget.
+		</p>
+		<p id="is_enabled_expression">
+			<strong>Is Enabled Expression.</strong> Each widget can be enabled or disabled (making it visible but read-only) . The 
+			<em>Is Enabled Expression</em> is evaluated in the context of the semantic element and should return a boolean. It the expression is not specified it defaults to 
+			<em>true</em> (meaning the widget is enabled).
+		</p>
+		<p id="semantic_candidate_expression">
+			<strong>Semantic Candidate Expression.</strong> The 
+			<em>Semantic Candidate Expression</em> defines the model element represented by the properties view element.
+		</p>
+		<p id="styles">
+			<strong>Styles.</strong> Each kind of properties view element supports a rich set of possible 
+			<a href="#styling">styles</a>.
+		</p>
+		<p>To find some documentation for each properties, you can also refer to the tool-tips available directly in the editor on the &#8220;question mark&#8221; icon of each property.</p>
+		<p>Here is an example of a widget configuration (a single-line 
+			<a href="#text">text</a> in this case) which illustrates some of the common attributes:
+		</p>
+		<p>
+			<img border="0" src="images/basic-properties-example-vsm.png"/>
+		</p>
+		<p>The 
+			<em>Text Element Name (non-editable)</em> element has the exact same configuration except that its 
+			<em>Label Expression</em> is 
+			<code>Name (read-only):</code> and its 
+			<em>Is Enabled Expression</em> is set to 
+			<code>aql:false</code>.
+		</p>
+		<p>Here is the resulting properties view rendered for a diagram element:</p>
+		<p>
+			<img border="0" src="images/basic-properties-example-diagram.png"/> 
+		</p>
+		<p>We see both label expressions on the left of each widget, help icons which show the computed 
+			<em>Help Expression</em> when the user leaves the mouse pointer on them, and the actual widgets. The second text widget is disabled (visible thanks to the light blue background) because of its  
+			<em>Is Enabled Expression</em>.
+		</p>
+		<h3 id="additional_services">Additional Services</h3>
+		<p>Beside 
+			<code>self</code>, which represents the current context element on which an expression is evaluated, every expression defined inside a 
+			<em>Property View Description</em> has access to an additional special variable named 
+			<code>input</code>, which offers some additional services. For a given user selection, the value of 
+			<code>input</code> is the same everywhere inside a 
+			<em>Property View Description</em>; it corresponds to a descriptor of what the user select and can be used to obtain contextual information.
+		</p>
+		<p>
+			<strong>Services on 
+				<code>input</code>.
+			</strong>
+		</p>
+		<ul>
+			<li>
+				<code>input.getOriginalSelection()</code>: returns the original, raw element selected by the user before any unwrapping or interpretation. This may not be a model element; for Sirius diagrams for example this will be an 
+				<code>EditPart</code>.
+			</li>
+			<li>
+				<code>input.getSemanticElement()</code>: returns the main semantic element associated with the selection. This will correspond to the 
+				<code>self</code> variable inside a 
+				<em>Page</em>, but inside a group 
+				<code>self</code> may have a different value is 
+				<em>Semantic Candidate Expressions</em> were used, so this service can be used to obtain the &#8220;original self&#8221; from anywhere.
+			</li>
+			<li>
+				<code>input.getAllSemanticElements()</code>: returns 
+				<em>all</em> the semantic model elements associated with the selection, not just the main one. This will include additional 
+				<code>DRepresentationElement#semanticElements</code> if there are any.
+			</li>
+			<li>
+				<code>input.emfEditServices(EObject)</code>: provides a handle to invoke &#8220;EMF Edit&#8221;-related services on the model element specified in argument. See below for the list of services that can be called on the result.
+			</li>
+			<li>
+				<code>input.context()</code>: provides a handle to invoke additional services to obtain more information about the overall context of the selection. See below fot the list of services that can be called on the result.
+			</li>
+		</ul>
+		<p>
+			<strong>Services on 
+				<code>input.emfEditServices(EObject)</code>.
+			</strong> In the descriptions below, 
+			<code>obj</code> designates the 
+			<code>EObject</code> instance which was passed to 
+			<code>emfEditServices()</code>.
+		</p>
+		<ul>
+			<li>
+				<code>getChoiceOfValues(EStructuralFeature)</code>: returns all the possible values for the specified feature of 
+				<code>obj</code>, as defined by its 
+				<code>IItemPropertyDescriptor</code>. 
+			</li>
+			<li>
+				<code>getDescription(EStructuralFeature)</code>: returns the (textual) description of the specified feature of 
+				<code>obj</code>, as defined by its 
+				<code>IItemPropertyDescriptor</code>.
+			</li>
+			<li>
+				<code>getEStructuralFeatures()</code>: returns all the features of 
+				<code>obj</code> that would be shown in the properties view by default. This ignores transient, derived and containment features.
+			</li>
+			<li>
+				<code>getImage()</code>: returns the image (icon) to use for 
+				<code>obj</code>, as defined by its 
+				<code>IItemLabelProvider</code>.
+			</li>
+			<li>
+				<code>getText()</code>: returns the textual representation to use for 
+				<code>obj</code>, as defined by its 
+				<code>IItemLabelProvider</code>.
+			</li>
+			<li>
+				<code>getText(EStructuralFeature)</code>: returns the &#8220;display name&#8221; of the specified feature of 
+				<code>obj</code>, as defined by its 
+				<code>IItemPropertyDescriptor</code>, or the textual representation of the feature itself (as defined by its own 
+				<code>IItemLabelProvider</code>) if no display name is defined.
+			</li>
+			<li>
+				<code>isMultiline(EStructuralFeature)</code>: checks whether the specified feature of 
+				<code>obj</code> (which is assumed to be textual) should be represented on muliple lines, as defined by its 
+				<code>IItemPropertyDescriptor.isMultiLine()</code> method.
+			</li>
+			<li>
+				<code>needsCheckboxWidget(EStructuralFeature)</code>: checks whether the specified feature of 
+				<code>obj</code> can be represented by a checkbox widget (i.e. it is a single-valued 
+				<code>boolean</code> or 
+				<code>java.lang.Boolean</code>).
+			</li>
+			<li>
+				<code>needsTextWidget(EStructuralFeature)</code>: checks whether the specified feature of 
+				<code>obj</code> can be represented by a text (or text area) widget (i.e. it is a single-valued string, number or date). 
+			</li>
+			<li>
+				<code>setValue(EStructuralFeature, Object)</code>: sets the value of the specified feature of 
+				<code>obj</code> to the given value. This is a thin wrapper around 
+				<code>EObject.eSet()</code> and should only be used inside widget actions as it modifies the model. It only handles basic cases; explicit model operations or custom services should be prefered if possible.
+			</li>
+		</ul>
+		<p>
+			<strong>Services on 
+				<code>input.context()</code>.
+			</strong>
+		</p>
+		<ul>
+			<li>
+				<code>mainSemanticElement()</code>: returns the main semantic element associated with the selection. This is equivalent to 
+				<code>input.getSemanticElement()</code>.
+			</li>
+			<li>
+				<code>allSemanticElements()</code>: returns 
+				<em>all</em> the semantic model elements associated with the selection, not just the main one. This is equivalent to  
+				<code>input.getAllSemanticElements()</code>.
+			</li>
+			<li>
+				<code>representation()</code>: returns the 
+				<code>DRepresentation</code> instance in which the current input was selected, or 
+				<em>null</em> if the element was selected from the 
+				<em>Model Explorer</em>.
+			</li>
+			<li>
+				<code>semanticDecorator()</code>: returns the 
+				<code>DSemanticDecorator</code> instance which was selected.
+			</li>
+			<li>
+				<code>session()</code>: return the 
+				<code>Session</code> in the context of which the selection was done. This is a Java object which can only be used by additional (custom) Java services.
+			</li>
+		</ul>
+		<h2 id="categories">Categories</h2>
+		<p>A 
+			<em>Category</em> is used to sort the 
+			<a href="#pages">pages</a> and the 
+			<a href="#groups">groups</a>. The category does not represent anything in the final user properties view, the category exists only for the specifier convenience to order the specification. For example a 
+			<em>Reused</em> category can be created to store all the groups that would be used by different 
+			<a href="#pages">pages</a> and 
+			<a href="../general/Model_Operations.html#dialogandwizard">dialogs</a>.
+			<br/>Categories can be created 
+		</p>
+		<h2 id="pages">Pages</h2>
+		<p>A 
+			<em>Page</em> is used to represent a 
+			<strong>Tab</strong> in the properties view.
+		</p>
+		<p>
+			<img alt="Properties can be organized in separate tabs, defined by Page Description elements" title="Properties can be organized in separate tabs, defined by Page Description elements" border="0" src="images/pages.png"/> 
+		</p>
+		<p>Pages are configured by creating a 
+			<em>Page</em> element inside a 
+			<em>Properties View Description</em>. In the illustration above, the two pages 
+			<em>General</em> and 
+			<em>Hierarchy</em> have been defined from the VSM. They appear above the standard tabs provided by Sirius (
+			<em>Semantic</em>, 
+			<em>Advanced</em>, etc.).
+		</p>
+		<p>Much like the other properties view elements, you must specify the 
+			<a href="#identifier">
+				<em>Identifier</em>
+			</a>, 
+			<a href="#domain_class">
+				<em>Domain Class</em>
+			</a>, 
+			<a href="#precondition_expression">
+				<em>Precondition Expression</em>
+			</a>, 
+			<a href="#label_expression">
+				<em>Label Expression</em>
+			</a>, 
+			<a href="#semantic_candidate_expression">
+				<em>Semantic Candidate Expression</em>
+			</a>.
+		</p>
+		<p>The definition of a page follows the general rules described 
+			<a href="#properties_view_description">above</a> to determine the semantic elements for which a page should be created.
+		</p>
+		<p>A page&#8217;s content is defined by the 
+			<a href="#groups">
+				<em>Groups</em>
+			</a> it references, which are defined directly under the 
+			<em>Properties View Description</em>. The groups are ordered in the page accordingly to their order in the groups reference list in the VSM.
+		</p>
+		<h3 id="page-toolbar-action">Toolbar Actions</h3>
+		<p>A page can also define toolbar actions which will be used to create buttons in the toolbar of the page to let the end user execute some operations easily. A 
+			<em>Toolbar Action</em> can have a tooltip by returning a string for the 
+			<em>Tooltip expression</em>. They also contain an 
+			<em>Initial Operation</em> used to define the model operations to execute when the user will click on the button. Finally a 
+			<em>Toolbar Action</em> can have an image thanks to an 
+			<em>Image expression</em>. The 
+			<em>Image expression</em> must return a string with the following structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif. If an image is not provided or not found, a default image will be used.
+		</p>
+		<h2 id="groups">Groups</h2>
+		<p>A 
+			<em>Group</em> is used to represent a 
+			<strong>Section</strong> in a properties view tab.
+		</p>
+		<p>
+			<img alt="Inside a tab, properties can be grouped in foldable sections" title="Inside a tab, properties can be grouped in foldable sections" border="0" src="images/groups.png"/>
+		</p>
+		<p>Groups are configured by creating a 
+			<em>Group</em> element inside a 
+			<em>Properties View Description</em>. Groups will only be visible inside a tab if they are referenced by the corresponding 
+			<em>Page</em>. By default, a newly created 
+			<em>Group</em> element is not part of any page, so you 
+			<em>must</em> add it explicitly to the 
+			<em>Pages</em> where it should appear. A single 
+			<em>Group</em> definition can be referenced in as many 
+			<em>Page</em> definition as needed; this allows sharing common sections between different pages.
+		</p>
+		<p>Much like the other properties view elements, you must specify the 
+			<a href="#identifier">
+				<em>Identifier</em>
+			</a>, 
+			<a href="#domain_class">
+				<em>Domain Class</em>
+			</a>, 
+			<a href="#precondition_expression">
+				<em>Precondition Expression</em>
+			</a>, 
+			<a href="#label_expression">
+				<em>Label Expression</em>
+			</a>, 
+			<a href="#semantic_candidate_expression">
+				<em>Semantic Candidate Expression</em>
+			</a>, 
+			<a href="#styles">
+				<em>Styles</em>
+			</a>, 
+			<a href="#conditional_styles">
+				<em>Conditional Styles</em>
+			</a>.
+		</p>
+		<p>The definition of a group follows the general rules described 
+			<a href="#properties_view_description">above</a> to determine the semantic elements for which a group should be created.
+		</p>
+		<p>A group can contain 
+			<a href="#widgets">
+				<em>widgets</em>
+			</a>, 
+			<a href="#containers_and_layout">
+				<em>containers</em>
+			</a> to organize them, and 
+			<a href="#validation_rules">
+				<em>validation rules</em>
+			</a>, all of which are defined inside the group description (
+			<em>New Widget &gt; Container|Text...</em> and 
+			<em>New &gt; Group Validations</em>, respectively).
+		</p>
+		<h3 id="group-toolbar-action">Toolbar Actions</h3>
+		<p>A group can also define toolbar actions which will be used to create buttons in the toolbar of the group to let the end user execute some operations easily. A 
+			<em>Toolbar Action</em> can have a tooltip by returning a string for the 
+			<em>Tooltip expression</em>. They also contain an 
+			<em>Initial Operation</em> used to define the model operations to execute when the user will click on the button. Finally a 
+			<em>Toolbar Action</em> can have an image thanks to an 
+			<em>Image expression</em>. The 
+			<em>Image expression</em> must return a string with the following structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif. If an image is not provided or not found, a default image will be used.
+		</p>
+		<h3 id="widgets-from-domain-class">Widgets From Domain Class</h3>
+		<p>
+			<img alt="Create easily a widget for each structural feature of your EClass" title="Create easily a widget for each structural feature of your EClass" border="0" src="images/widget-from-domain-class.png"/>
+		</p>
+		<p>By specifying the 
+			<em>Domain Class</em> of a group and by specifying the metamodels on the relevant container of the group (like the Properties View object), you will have access to a new contextual action used to create a default version of a widget for each of the structural features of your 
+			<em>Domain Class</em>. You can create all the widgets at once or only the desired ones. The configuration generated in your odesign is heavily inspired by the default rules available, as such all the EString properties will be handled by a text widget, all the EBoolean properties by a checkbox, etc.
+		</p>
+		<h3 id="group_styles">Group Styles</h3>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a>. This section only presents the aspects which are specific to groups.
+		</p>
+		<p>For groups you can define the following style attributes:</p>
+		<ul>
+			<li>
+				<em>Background Color</em>: You can specify the background color using 
+				<a href="#colors">colors</a> from the standard or user-defined palette.
+			</li>
+			<li>
+				<em>Bar Style</em>: Is used to define the section style. There are 3 different styles: 
+				<code>TITLE BAR</code>, 
+				<code>SHORT TITLE BAR</code>, 
+				<code>NO TITLE</code> (see the first table below for illusrations of these styles).
+			</li>
+			<li>
+				<em>Expanded by Default</em>: This flag is used to define if the section should be initialy expanded or collapsed.
+			</li>
+			<li>
+				<em>Font Name Expression</em>: Is used to computes the name of the font to use.
+			</li>
+			<li>
+				<em>Font size Expression</em>: Indicates the font size to use in points.
+			</li>
+			<li>
+				<em>Foreground Color</em>: You can specify the foreground color using 
+				<a href="#colors">color</a> from the standard or user-defined palette.
+			</li>
+			<li>
+				<em>Toggle style</em>: Is used to define the style of the toggle. There are 3 different toggles: 
+				<code>TWISTIE</code>, 
+				<code>TREE NODE</code>, 
+				<code>NONE</code> (see the second table below for illusrations of these styles).
+			</li>
+		</ul>
+		<p>The following tables illustrate the different 
+			<em>Bar Style</em> and 
+			<em>Toggle Style</em> available on groups:
+		</p>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/group-style-titlebar.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/group-style-short-titlebar.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/group-style-no-title.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>
+					<code>TITLE BAR</code>
+				</th>
+				<th>
+					<code>SHORT TITLE BAR</code>
+				</th>
+				<th>
+					<code>NO TITLE</code>
+				</th>
+			</tr>
+		</table>
+		<table class="table table-striped table-condensed">
+			<tr>
+				<td>
+					<img border="0" src="images/group-style-toggle-twistie.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/group-style-toggle-treenode.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/group-style-toggle-none.png"/>
+				</td>
+			</tr>
+			<tr>
+				<th>
+					<code>TWISTIE</code>
+				</th>
+				<th>
+					<code>TREE NODE</code>
+				</th>
+				<th>
+					<code>NONE</code>
+				</th>
+			</tr>
+		</table>
+		<h2 id="widgets">Widgets</h2>
+		<p>A widget is used to represent model elements in the properties view and, for most of them, to allow users to edit said elements. Widgets can appear directly inside a group, a 
+			<a href="#dynamic_mappings">dynamic mapping</a> or inside a 
+			<a href="#containers_and_layout">container</a>, in which case you can specify a specific 
+			<a href="#containers_and_layout">layout</a> which will be used to graphically organize all the widgets inside the container.
+		</p>
+		<p>The definition of a widget follows the general rules described 
+			<a href="#properties_view_description">above</a> to determine the semantic elements for which a widget should be created.
+		</p>
+		<p>Much like the other properties view elements, you can specify the widget&#8217;s 
+			<a href="#label_expression">
+				<em>Label Expression</em>
+			</a>, 
+			<a href="#help_expression">
+				<em>Help Expression</em>
+			</a>,  
+			<a href="#is_enabled_expression">
+				<em>Is Enabled Expression</em>
+			</a>, 
+			<a href="#styles">
+				<em>Styles</em>
+			</a>, 
+			<a href="#conditional_styles">
+				<em>Conditional Styles</em>
+			</a>.
+		</p>
+		<h3 id="text">Text / Text area</h3>
+		<p>A 
+			<em>Text</em> widget is used to represent a 
+			<strong>single line text</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>
+			<img border="0" src="images/widget-text.png"/>
+		</p>
+		<p>A 
+			<em>Text Area</em> is used to represent a 
+			<strong>multiple lines text</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>
+			<img border="0" src="images/widget-textarea.png"/>
+		</p>
+		<p>The definition of a text/text area follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a text should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For texts and text areas, you must define the 
+			<em>Value Expression</em> which is used to compute the text displayed in the text field and should return a string. If the expression is not specified, the default value is an empty string. The expression is evaluated in the context of the semantic target element.
+		</p>
+		<p>For text areas, you must define the 
+			<em>Line Count</em> which represents the height of the text area in number of lines.
+		</p>
+		<h4 id="edit_text">Text Edition</h4>
+		<p>To define the behavior of the text when a change occurs, you simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element directly contained inside the widget, using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<p>The operations defined under the 
+			<em>Begin</em> can use the 
+			<code>newValue</code> variable which represents the value entered by the user (as a string). The root operation is executed in the context of the semantic target element.
+		</p>
+		<p>Sirius automatically invokes the edit operation when the focus leaves the widget. For single-line 
+			<em>Text</em> widgets, the edit operation is also triggered when the user hits 
+			<em>Enter</em>. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is cancelled, and an error is logged.
+		</p>
+		<h4 id="text_styles">Text/Text Area Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to texts.
+		</p>
+		<p>One of the responsibility of texts styles is to describe how text fields will be formated. The following properties are available :</p>
+		<ul>
+			<li>
+				<em>Font Name Expression</em>: Is used to compute the name of the font to use for the text field.
+			</li>
+			<li>
+				<em>Font Size Expression</em> : Indicates the font size to use in points.
+			</li>
+			<li>
+				<em>Background Color</em>: You can specify the background color of the text field using 
+				<a href="#colors">color</a> sub-elements.
+			</li>
+			<li>
+				<em>Foreground Color</em>: You can specify the foreground color of the text field using 
+				<a href="#colors">color</a> sub-elements.
+			</li>
+			<li>
+				<em>Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Underline and/or Strike through).
+			</li>
+		</ul>
+		<p>Here are examples of text and text area widgets with some of their style attributes customized:</p>
+		<p>
+			<img alt="Text and TextArea widgets with customized style" title="Text and TextArea widgets with customized style" border="0" src="images/widget-text-styling.png"/>
+		</p>
+		<h3 id="button">Button</h3>
+		<p>A 
+			<em>Button</em> is used to represent a 
+			<strong>button</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>, that can be used to trigger an arbitrary (configurable) operation on the model.
+		</p>
+		<p>
+			<img alt="Example of a button widget" title="Example of a button widget" border="0" src="images/widget-button.png"/>
+		</p>
+		<p>The definition of a button follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a button should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For buttons, you must define the 
+			<em>Button Label Expression</em> which is used to compute the label displayed on the button and should return a string. If the expression is not specified, the default value is the empty string. You can also specify an image with the 
+			<em>Image expression</em>. An image can be used instead of a button label or along with it. The 
+			<em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+		</p>
+		<h4 id="pushed_button">Behavior executed on click</h4>
+		<p>To define the behavior of the button when it is clicked, simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>. The root operation is executed in the context of the semantic target element.
+		</p>
+		<h4 id="button_styles">Button Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+		</p>
+		<h3 id="label">Label</h3>
+		<p>A 
+			<em>Label</em> is used to represent a 
+			<strong>non editable text</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>Here is an example which shows two label widgets:</p>
+		<p>
+			<img alt="Examples of label widgets" title="Examples of label widgets" border="0" src="images/widget-label.png"/>
+		</p>
+		<p>The definition of a label follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a label should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For labels, you must define the 
+			<em>Value Expression</em> which is used to compute the text displayed in the description. The 
+			<em>Value Expression</em> can return any kind of object but the result displayed will be the result of a call to 
+			<code>Object.toString()</code>. If you want to customize how the result will be displayed, you can return a string in the value expression or use the 
+			<em>Display Expression</em>. The 
+			<em>Display Expression</em> will have access to the result of the 
+			<em>Value Expression</em> using the variable 
+			<code>value</code> and it should return a string. If the expression is not specified, the default value is the empty string.
+		</p>
+		<h4 id="label_actions">Widget Actions</h4>
+		<p>A 
+			<em>Label</em> can optionally define one or more 
+			<em>Widget Actions</em>, which are created as children element of the 
+			<em>Label</em> element (
+			<em>New &gt; Widget Action</em>). Each action has a 
+			<em>Label Expression</em> and a behavior defined by 
+			<a href="../general/Model_Operations.html">model operations</a> contained inside. If present, actions will be rendered as buttons on the right of the label itself. The button&#8217;s text is defined by the 
+			<em>Label Expression</em>, and its behavior when pushed by the model operations. You can also specify an image with the 
+			<em>Image expression</em>. An image can be used instead of a label or along with it. The 
+			<em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+		</p>
+		<h4 id="label_styles">Label Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to texts.
+		</p>
+		<p>One of the responsibility of labels styles is to describe how descriptions will be formated. The following properties are available :</p>
+		<ul>
+			<li>
+				<em>Font Name Expression</em>: Is used to compute the name of the font to use for the description.
+			</li>
+			<li>
+				<em>Font Size Expression</em> : Indicates the font size to use in points.
+			</li>
+			<li>
+				<em>Background Color</em>: You can specify the background color of the description using 
+				<a href="#colors">color</a> sub-elements.
+			</li>
+			<li>
+				<em>Foreground Color</em>: You can specify the foreground color of the description using 
+				<a href="#colors">color</a> sub-elements.
+			</li>
+			<li>
+				<em>Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Underline and/or Strike through).
+			</li>
+		</ul>
+		<p>
+			<img alt="Example of labels with customized style" title="Example of labels with customized style" border="0" src="images/widget-label-styling.png"/>
+		</p>
+		<h3 id="checkbox">Checkbox</h3>
+		<p>A 
+			<em>Checkbox</em> is used to represent a 
+			<strong>checkbox</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>
+			<img alt="Examples of checkbox widgets" title="Examples of checkbox widgets" border="0" src="images/widget-checkbox.png"/>
+		</p>
+		<p>The definition of a checkbox follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a checkbox should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For checkboxes, you must define the 
+			<em>Value Expression</em> which is used to compute the checked/unchecked state of the checkbox and so should return a boolean (return 
+			<em>true</em> to display the checkbox checked).
+		</p>
+		<h4 id="checkbox_change_value">Change value</h4>
+		<p>To define the behavior of the checkbox when the user clicks on it, you simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<p>The operations defined under the 
+			<em>Begin</em> can use the 
+			<code>newValue</code> variable which represents the value set by the user as a boolean; it will be 
+			<em>true</em> if the checkbox was unchecked before, and the user clicked on it to check it, 
+			<em>false</em> otherwise. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is canelled, and an error is logged.
+		</p>
+		<h4 id="checkbox_styles">Checkbox Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+		</p>
+		<h3 id="select">Select</h3>
+		<p>A 
+			<em>Select</em> is used to represent a 
+			<strong>combo box</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>
+			<img alt="Example of a select widget" title="Example of a select widget" border="0" src="images/widget-select.png"/>
+		</p>
+		<p>The definition of a select follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a select should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For selects, you must define :</p>
+		<ul>
+			<li>the 
+				<em>Candidates Expression</em> which is used to compute the candidates available in the combo and should return a list of elements from which the user can select the select&#8217;s value.
+			</li>
+			<li>the 
+				<em>Candidate Display Expression</em> which is used to compute the label displayed for each possible candidate in the combo and so should return a string. The 
+				<em>Candidate Display Expression</em> can use the 
+				<code>candidate</code> variable which represents the element currently evaluated.
+			</li>
+			<li>the 
+				<em>Value Expression</em> which is used to compute the element selected in the combo and should return an object, which should be an element of the collection returned by 
+				<em>Candidates Expression</em>.
+			</li>
+		</ul>
+		<h4 id="select_change_value">Change value</h4>
+		<p>To define the behavior of the 
+			<em>Select</em> when the user selects a different element, you simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<p>The expressions defined under the 
+			<em>Begin</em> can use the 
+			<code>newValue</code> variable which represents the value selected by the user. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is cancelled, and an error is logged.
+		</p>
+		<h4 id="select_styles">Select Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+		</p>
+		<h3 id="radio_group">Radio Group</h3>
+		<p>A 
+			<em>Radio</em> is used to represent a 
+			<strong>radio group</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>
+			<img alt="Example of a radio group widget" title="Example of a radio group widget" border="0" src="images/widget-radio.png"/>
+		</p>
+		<p>The definition of a radio group follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a radio group should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For radio groups, you must define :</p>
+		<ul>
+			<li>the 
+				<em>Candidates Expression</em> which is used to compute the candidates available in the radio group and should return a list of elements from which the user can select the radio group’s value.
+			</li>
+			<li>the 
+				<em>Candidate Display Expression</em> which is used to compute the label displayed for each possible candidate in the radio group and so should return a string. The 
+				<em>Candidate Display Expression</em> can use the 
+				<code>candidate</code> variable which represents the element currently evaluated.
+			</li>
+			<li>the 
+				<em>Value Expression</em> which is used to compute the element selected in the radio group and should return an object, which should be an element of the collection returned by 
+				<em>Candidates Expression</em>.
+			</li>
+		</ul>
+		<h4 id="radio_change_value">Change value</h4>
+		<p>To define the behavior of the radio group when the selection changes, you simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<p>The expressions defined under the 
+			<em>Begin</em> can use the 
+			<code>newValue</code> variable which represents the value selected by the user. Note that if an error occurs while executing the edit operation, the whole effect of the operation on the underlying model is cancelled, and an error is logged.
+		</p>
+		<h4 id="radio_styles">Radio Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+		</p>
+		<h3 id="hyperlink">Hyperlink</h3>
+		<p>A 
+			<em>Hyperlink</em> is used to represent an 
+			<strong>hyperlink</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>
+			<img alt="Example of an hyperlink widget" title="Example of an hyperlink widget" border="0" src="images/widget-hyperlink.png"/>
+		</p>
+		<p>The definition of an hyperlink follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which an hyperlink should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For hyperlinks, you must define the 
+			<em>Value Expression</em> which is used to compute the hyperlink displayed. The 
+			<em>Value Expression</em> can return any kind of object but the result displayed will be the result of a call to 
+			<em>java.lang.Object#toString()</em>. If you want to customize how the result will be displayed, you can return a String in the value expression or use the 
+			<em>Display Expression</em>. The 
+			<em>Display Expression</em> will have access to the result of the 
+			<em>Value Expression</em> using the variable named 
+			<code>value</code> and it should return a String.
+		</p>
+		<h4 id="hyperlink_click_on_value">Behavior executed on click</h4>
+		<p>To define the behavior of the hyperlink when it is clicked, you simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<h4 id="hyperlink_actions">Widget Actions</h4>
+		<p>A 
+			<em>Hyperlink</em> can optionally define one or more 
+			<em>Widget Actions</em>, which are created as children element of the 
+			<em>Hyperlink</em> element (
+			<em>New &gt; Widget Action</em>). Each action has a 
+			<em>Label Expression</em> and a behavior defined by 
+			<a href="../general/Model_Operations.html">model operations</a> contained inside. If present, actions will be rendered as buttons on the right of the label itself. The button&#8217;s text is defined by the 
+			<em>Label Expression</em>, and its behavior when pushed by the model operations. You can also specify an image with the 
+			<em>Image expression</em>. An image can be used instead of a button label or along with it. The 
+			<em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+		</p>
+		<h4 id="hyperlink_styles">Hyperlink Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to hyperlinks.
+		</p>
+		<p>One of the responsibility of hyperlinks styles is to describe how hyperlinks will be formated. The following properties are available :</p>
+		<ul>
+			<li>
+				<em>Font Name Expression</em>: Is used to compute the name of the font to use for the text field.
+			</li>
+			<li>
+				<em>Font Size Expression</em> : Indicates the font size to use in points.
+			</li>
+			<li>
+				<em>Background Color</em>: You can specify the background color of the text field using 
+				<a href="#colors">color</a> sub-elements.
+			</li>
+			<li>
+				<em>Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Strike through).
+			</li>
+		</ul>
+		<h3 id="reference">Reference</h3>
+		<p>A 
+			<em>Reference</em> is used to represent the value of a reference in the model.
+		</p>
+		<p>The configuration of the 
+			<em>Reference</em> widget is minimal. Beside the standard properties available on all widgets like 
+			<em>Label Expression</em>, 
+			<em>Help Expression</em> and 
+			<em>Is Enabled Expression</em>, you only need to specify:
+		</p>
+		<ul>
+			<li>
+				<em>Reference Owner Expression</em>: optional, defaults to 
+				<code>var:self</code>. If specified, the reference to display will be looked on the element returned by the expression instead of the current one.
+			</li>
+			<li>
+				<em>Reference Name Expression</em>: this should return a string which designates the name of the 
+				<em>EReference</em> to display. It can be a fixed string or a computed expression.
+			</li>
+		</ul>
+		<p>The 
+			<em>Reference</em> widget&#8217;s appearance will depend whether the reference to display is single-valued or multi-valued:
+		</p>
+		<p>
+			<img alt="A Reference widget displaying a single-valued reference" title="A Reference widget displaying a single-valued reference" border="0" src="images/reference-single-value.png"/>
+		</p>
+		<p>
+			<img alt="A Reference widget displaying a multi--valued reference" title="A Reference widget displaying a multi--valued reference" border="0" src="images/reference-multiple-value.png"/>
+		</p>
+		<p>As mentioned above, the configurability of the 
+			<em>Reference</em> widget is minimal, it determines all of its behavior using the standard EMF features:
+		</p>
+		<ul>
+			<li>the value of the reference is obtained reflectively using 
+				<code>eGet</code>.
+			</li>
+			<li>the textual representation and icon of the value(s) of the reference are determined automatically using the corresponding 
+				<code>IItemLabelProvider</code>.
+			</li>
+			<li>the behavior of the action buttons is hard-coded to perform the standard operation when selecting a diffrente value (from an existing element in the model), creating a new instance to set as the value, removing an element, or moving up/down the elements in a multi-valued reference.</li>
+		</ul>
+		<p>If you need more specific behavior, you need to use either an 
+			<em>Hyperlink</em> (for single values) or a 
+			<em>List</em> widget (for multiple values) with custom actions implementing the required behavior.
+		</p>
+		<p>In a similar fashion as the hyperlink and the list widgets, it is possible to define an 
+			<em>Initial Operation</em> on the reference widget in order to execute some model operations when the user will click on the widget. If an 
+			<em>Initial Operation</em> is configured, the single-valued version of the widget will use a hyperlink instead of a regular label.
+		</p>
+		<h4 id="reference_styles">Reference Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+		</p>
+		<h3 id="list">List</h3>
+		<p>A 
+			<em>List</em> is used to represent a 
+			<strong>list with buttons</strong> in a 
+			<a href="#groups">group</a> or in a 
+			<a href="#containers_and_layout">container</a>.
+		</p>
+		<p>Depending on the parameters configuration the list widget will be represented thanks to a list and multiple buttons when 
+			<a href="#list_actions">
+				<em>Widget Actions</em>
+			</a> are defined.
+		</p>
+		<p>The definition of a list follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a list should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For lists, you must define:</p>
+		<ul>
+			<li>the 
+				<em>Value Expression</em> which is used to compute the element to display and should return an object.
+			</li>
+			<li>the 
+				<em>Display Expression</em> which is used to compute the text displayed in the text field and should return a string. It is evaluated in the context of the semantic target element and has access to the variable 
+				<code>value</code> which corresponds to the element to display.
+			</li>
+			<li>the 
+				<a href="#list_actions">
+					<em>Widget Actions</em>
+				</a> are used to associate some buttons to the text field.
+			</li>
+		</ul>
+		<h4 id="list_on_click_operation">Behavior executed on click</h4>
+		<p>To define the behavior, you simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>. A variable named 
+			<code>onClickEventKind</code> is available to determine if the operation has been triggered by a single click or double click. In case of a single click, the variable has the value &#8220;SINGLE_CLICK&#8221; and &#8220;DOUBLE_CLICK&#8221; in case of a double click.
+		</p>
+		<p>The expressions defined under the 
+			<em>Begin</em> can use the 
+			<code>selection</code> variable which represents the values selected by the user. This variable will contain the list of the values selected.
+		</p>
+		<h4 id="list_actions">Widget actions</h4>
+		<p>A list can contain 
+			<em>actions</em> which represent 
+			<strong>buttons</strong> associated to the list field.
+		</p>
+		<p>For actions, you must define the 
+			<em>Label Expression</em> which is used to compute the label displayed on the button and should return a string. If the expression is not specified, the default value is equal to 
+			<code>...</code>. You can also specify an image with the 
+			<em>Image expression</em>. An image can be used instead of a button label or along with it. The 
+			<em>Image expression</em> should return a string with the structure PROJECT_NAME/IMAGE_PATH. For example: org.eclipse.sirius.sample.basicfamily.design/icons/Delete_16x16.gif
+		</p>
+		<h4 id="list_action_pushed_button">Action Pushed Button</h4>
+		<p>To define the behavior of the button when is pushed, you simply specify the behavior associated to the edition inside the 
+			<em>Begin</em> element using all the standard 
+			<a href="../general/Model_Operations.html">model operations</a>.
+		</p>
+		<p>The expressions defined under the 
+			<em>Begin</em> can use the 
+			<code>selection</code> variable which represents the values selected by the user in the list field. Note that 
+			<code>selection</code> is always a collection, even if only a single element is currently selected.
+		</p>
+		<h4 id="list_styles">List Styles</h4>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets.
+		</p>
+		<h3 id="basic_custom_widgets">Basic Custom Widgets</h3>
+		<p>A 
+			<em>Custom Description</em> is used when none of the predefined styles correspond to your need. Custom widgets are implemented in Java and use the 
+			<code>org.eclipse.eef.ide.ui.eefLifecycleManagerProvider</code> extension point.
+		</p>
+		<p>The definition of a custom widget follows the general rules described 
+			<a href="#widgets">above</a> to determine the semantic elements for which a custom widget should be created. It is evaluated in the context of the semantic target element.
+		</p>
+		<p>For custom widgets, the 
+			<em>Identifier</em> is mandatory. It is used to find the widget contributed with the extension point.
+		</p>
+		<p>See 
+			<a href="../../developer/extensions-properties_provide_custom_widget_basic.html">the reference documentation</a> for how to actually implement your own basic custom widgets.
+		</p>
+		<h5 id="basic_custom_widgets_expression">Custom Expression/Operation</h5>
+		<p>When you define a custom widget, it is possible to define some custom expression or operation which will be used by the custom widget implementation. 
+			<br/>In this case, the 
+			<em>Identifier</em> is mandatory. It would be used in the Java code to find the expression/operation contributed with the VSM.
+		</p>
+		<h5 id="basic_custom_widgets_styles">Custom Styles</h5>
+		<p>See the 
+			<a href="#styling">styles</a> section for a general presentation of how styles are defined, including 
+			<a href="#conditional_styles">conditional styles</a> and 
+			<a href="#widgets_styles">widgets styles</a> section to find details on what is specific to widgets. This section only presents the aspects which are specific to texts.
+		</p>
+		<h3 id="advanced_custom_widgets">Advanced Custom Widgets</h3>
+		<p>Basic custom widgets need to be configured using very generic 
+			<em>Custom Expression/Operation</em>, which makes them different and harder to use than the standard ones. Any configuration property which would be directly accessible in the VSM editor&#8217;s property sheet on a standard widget will need a specific 
+			<em>Custom Expression</em> with the exact expected identifier.
+		</p>
+		<p>It is possible to improve custom widgets to be better integrated with the VSM editor, to the point that their configuration looks and feels like for any of the standard ones. For the specifier point of view, the configuration of these widgets follows the same principles as for the default ones.</p>
+		<p>See 
+			<a href="../../developer/extensions-properties_provide_custom_widget_advanced.html">the reference documentation</a> for how to actually implement your own advanced custom widgets.
+		</p>
+		<h2 id="dynamic_mappings">Dynamic Mappings</h2>
+		<p>Dynamic mappings are used for advanced scenarios where the set of widgets to display can not be known statically, but instead must be computed at runtime. A dynamic mapping contains conditional widgets definition, each of which may be instantiated zero or multiple times at runtime.</p>
+		<p>A 
+			<em>Dynamic Mapping For</em> can appear directly inside a group description, or inside a 
+			<a href="#containers_and_layout">container</a>, in which case you can specify a specific 
+			<a href="#containers_and_layout">layout</a>. You must specify an 
+			<em>Iterable Expression</em> which computes a list of elements to iterate over. The 
+			<em>Iterator</em> property must also be defined and corresponds to the name of the iteration variable that will be accessible inside the 
+			<em>For</em>. Inside the 
+			<em>Dynamic Mapping For</em> you can create any number of 
+			<em>Dynamic Mapping If</em>, which defines a 
+			<em>Predicate Expression</em> and can contain 
+			<strong>one widget</strong>.
+		</p>
+		<p>At runtime, for a given input element selected by the user, Sirius will evaluate the 
+			<em>iterable expression</em>, and then for each of the elements returned will instanciate the widgets defined inside 
+			<em>Dynamic Mapping If</em> whose predicate holds true.
+		</p>
+		<p>The dynamic mapping mechanism is the one used by Sirius to provide by default properties view even if you do not specify any 
+			<em>Properties View Description</em> in your VSM.
+			<br/>If we take one of the default rules implemented by Sirius we have:
+		</p>
+		<ul>
+			<li>a 
+				<em>Dynamic Mapping For</em> defining as 
+				<em>Iterable Expression</em> : 
+				<code>aql:self.eClass().eAllStructuralFeatures</code> which means get all the structural features available for the current eClass.
+			</li>
+			<li>an 
+				<em>Iterator</em> set to 
+				<code>eStructuralFeature</code>.
+				<ul>
+					<li>a 
+						<em>Dynamic Mapping If</em> with the 
+						<em>Predicate Expression</em> equals to 
+						<code>aql:eStructuralFeature.eType.instanceTypeName = 'java.lang.String'</code> which means that we just keep the structural features serialized as a String. Notice that in the predicate expression we use the variable 
+						<code>eStructuralFeature</code> which was defined as the 
+						<em>Iterator</em>.
+						<ul>
+							<li>in this case we will represent the structural feature with a 
+								<em>Text widget</em> for which we set:
+								<ul>
+									<li>
+										<em>Label expression</em>: 
+										<code>aql:eStructuralFeature.name.toUpperFirst() + ':'</code> which means get the name of the structural feature, capitalize the first letter and add 
+										<code>:</code> at the end.
+									</li>
+									<li>
+										<em>Value Expression</em>: 
+										<code>aql:self.eGet(eStructuralFeature.name)</code> which means get the value associated to the given structural feature.
+									</li>
+								</ul>
+							</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Thanks to this mechanism we defined that all the 
+			<code>String</code> elements in our metamodel will be represented with a text field.
+		</p>
+		<p>Some 
+			<em>Iterable Expression</em> may return a result which can change depending on the structure of the model, contrary to the example above where the 
+			<em>Iterable Expression</em> 
+			<code>aql:self.eClass().eAllStructuralFeatures</code> will only use the structure of the metamodel. If an 
+			<em>Iterable Expression</em> leverages the state of the model, it may be required to refresh the user interface when the 
+			<em>Iterable Expression</em> is executed, as a result for such situation, you can set the boolean 
+			<em>Force Refresh</em> to true on the 
+			<em>Dynamic Mapping For</em> to indicate that the presence of dynamic mapping should trigger a full refresh. 
+		</p>
+		<h2 id="containers_and_layout">Containers and Layout</h2>
+		<p>Sirius provides a default algorithm to perform an automatic layout of all the controls in a properties view. If the default algorithm does not fit your needs, you can specify some parameters for alternate layouts directly inside the VSM. To do this you must first create a 
+			<em>Container</em> which will contains all the widgets to which the layout will apply, and then create and configure the layout to be used by the container to organize its children widgets:
+		</p>
+		<p id="fill_layout">
+			<em>Fill layout</em> can organize elements inside the container either horizontally or vertically (configurable on the 
+			<em>Fill layout</em> element).
+		</p>
+		<p id="grid_layout">
+			<em>Grid layout</em> can organize elements using a fixed number of column (configurable on the 
+			<em>Grid layout</em> element), which can optionally be made to all have the same width.
+		</p>
+		<h2 id="styling">Styling</h2>
+		<p>Styles define the graphical appearance of properties view elements. Sirius supports a rich set of possible styles, including 
+			<a href="#conditional_styles">conditional styles</a> which can dynamically change depending on the current state of the underlying model elements. If no style is defined a default style is applied by Sirius.
+			<br/>It is possible to re-define the default style by creating a style under the properties view element description. 
+		</p>
+		<h3 id="widgets_styles">Widgets styles</h3>
+		<p>One of the responsibility of widgets styles is to describe how labels will be formated. The following properties are available :</p>
+		<ul>
+			<li>
+				<em>Label Font Name Expression</em>: Is used to compute the name of the font to use for the label.
+			</li>
+			<li>
+				<em>Label Font Size Expression</em> : Indicates the font size to use in points.
+			</li>
+			<li>
+				<em>Label Background Color</em>: You can specify the background color of the label using 
+				<a href="#colors">color</a> sub-elements.
+			</li>
+			<li>
+				<em>Label Foreground Color</em>: You can specify the foreground color of the label using 
+				<a href="#colors">color</a> sub-elements.
+			</li>
+			<li>
+				<em>Label Font Format</em>: Is used to specify the font style attributes (Bold and/or Italic and/or Underline and/or Strike through).
+			</li>
+		</ul>
+		<p>
+			<img alt="Examples of the style customizations possible on labels" title="Examples of the style customizations possible on labels" border="0" src="images/label-styles.png"/>
+		</p>
+		<h3 id="colors">Colors</h3>
+		<p>Whenever you have to specify colors for a style, you can use either one of the pre-defined system colors or one which you have defined yourself in a 
+			<em>Users Color Palette</em>. See 
+			<a href="../general/Colors.html">the general section on colors</a> for more details.
+		</p>
+		<h3 id="conditional_styles">Conditional Styles</h3>
+		<p>Conditional styles make it possible to support different graphical aspects for a single properties view element. The actual style used to render an element is determined dynamically depending on the current state of the models elements.</p>
+		<p>To use conditional styling, you must add one or several conditional styles. Each conditional style is associated to a condition specified as a predicate. If there are conditional styles on a properties view element, their conditions are tested in their order of appearance in the description. The first one for which the condition is true is selected. If none of the conditional styles condition is true, the default style is used instead.</p>
+		<h2 id="validation_rules">Validation rules</h2>
+		<p>There are three kind of validation rules that can be specified. The main difference between the various kind of validation rules available is the location of the validation messages (on a page, a group or a widget). All the validation rules can contains audits used to determine if the validation rule has been broken thanks to an 
+			<code>auditExpression</code> which should return a boolean indicating if the validation of the rule is a success. The validation rules can also contain fixes in order to fix the issue found. Those validation fixes have a name and a fix expression which will be executed once the end user selects a quick fix. The fix expression does not have to return anything. All of those expressions have access to the variables 
+			<code>self</code>, the result of the semantic candidate expression of the page or group and 
+			<code>input</code> the input of the view.
+		</p>
+		<h3 id="page_semantic_validation_rule">Page semantic validation rule</h3>
+		<p>The page semantic validation rule is used to define a validation rule linked to a page.</p>
+		<h3 id="group_semantic_validation_rule">Group semantic validation rule</h3>
+		<p>The group semantic validation rule is used to define a validation rule linked to a group.</p>
+		<h3 id="group_property_validation_rule">Group property validation rule</h3>
+		<p>The group property validation rule is used to define a validation rule linked to a specific widget.</p>
+		<h2 id="extensibility_features">Extensibility Features</h2>
+		<p>Sirius has specific support for extending and overriding properties view descriptions without modifying the original one. The purpose is to be able to reuse or modify a part of a properties view. Its exits two different concepts to customize a properties view description: the 
+			<a href="#extends">extension</a> and the 
+			<a href="#overrides">overriding</a>. 
+		</p>
+		<p>Note that both mechanisms can be used to customize properties view descriptions which are defined in other projects. To allow references from you VSM to elements defined in other modelers, you must first 
+			<em>load</em> them in your VSM editor, or you will not see the elements you need as targets for extension/overriding. To load an external VSM, right-click anywhere inside the VSM editor, and select 
+			<em>Load Resource...</em>. A dialog will appear asking for the URI of the model to load (the 
+			<code>.odesign</code> file you want to refer to). Several forms of URIs are possible:
+		</p>
+		<ul>
+			<li>If you don&#8217;t have the customized plug-in in your workspace, you must currently enter the URI manually, using the syntax 
+				<code>platform:/plugin/&lt;projectName&gt;/&lt;path&gt;/&lt;to&gt;/&lt;example&gt;.odesign</code>, for example 
+				<code>platform:/plugin/org.eclipse.emf.ecoretools.design/description/ecore.odesign</code>.
+			</li>
+			<li>If the VSM you want to extend is already present in your development workspace, you can use the 
+				<em>Browse Workspace...</em> button to select it.
+			</li>
+		</ul>
+		<p>Note that in the later case (VSM selected from the workspace), if you want to test your modeler directly from your development environment, in your test session make sure to select the extended VSM 
+			<strong>from the workspace</strong>, as this is the one your own VSM refers to, and not the one which may also be avaible from your plug-ins. In the viewpoint selection dialog, the version from the workspace will have a small folder decorator in addition to the normal viewpoint icon. Once everything is deployed as plug-ins, which is the nominal case for end-users, this distinction disappears and everything should work fine.
+		</p>
+		<p>Note also that if you define in your project 
+			<em>A</em> customizations for properties views defintions defined in another project 
+			<em>B</em>, you should make sure to declare the dependency in project 
+			<em>A</em>'s 
+			<code>MANIFEST.MF</code>, otherwise it will be possible for users to install 
+			<em>A</em> without having 
+			<em>B</em> available, which will prevent 
+			<em>A</em> from working correctly.  
+		</p>
+		<h3 id="extends">Extends</h3>
+		<p>A 
+			<a href="#pages">page</a> can extend another page defined somewhere else (in another 
+			<a href="#categories">category</a> or in another properties view description). This mechanism is used to 
+			<em>specialize</em> (modify or re-use) an existing page. This feature is available for the 
+			<a href="#pages">pages</a>, the 
+			<a href="#groups">groups</a>, the 
+			<a href="#containers_and_layout">containers</a>, the 
+			<a href="#dynamic_mappings">dynamic mappings</a> and the 
+			<a href="#widgets">widgets</a>.
+		</p>
+		<p>The 
+			<code>Extend</code> tab is used to specify:
+		</p>
+		<p id="extends">
+			<strong>Extends.</strong> Is used to specify the inherited element thanks to a combo box it is possible to select an existing element. In the tree editor, the inheritance is visible as the element is named as following : 
+			<em>Page A</em> 
+			<strong>extends</strong> 
+			<em>Page B</em>. Pay attention, the current specification editor allows to select the currently defined element, this will lead to an infinite loop at runtime. 
+			<br/>By default, the values of the 
+			<code>General</code> tab fields are set with the values coming from the extended element if these fields are not set in the extending element. If one of these attributes is edited in the extending element, then it 
+			<strong>overrides</strong> the inherited value. The same behavior is applied for mono valued containment elements. For example, if a 
+			<em>Group A</em> defines a 
+			<em>Style A</em> and extends a 
+			<em>Group B</em> with a 
+			<em>Style B</em>, the style used to render the 
+			<em>Group A</em> is the one defined under the 
+			<em>Group A</em>, i.e 
+			<em>Style A</em> and not the one of the 
+			<em>Group B</em>.
+			<br/>If the specifier defines in the extending page 
+			<code>General</code> tab:
+		</p>
+		<ul>
+			<li>
+				<code>Label Expression</code>, 
+				<code>Domain Class</code>, 
+				<code>Semantic Candidate Expression</code> or 
+				<code>Precondition Expression</code>, these values will 
+				<strong>override</strong> the values defined in the extended description. It is worth noting that the expressions are evaluated in the context of the currently extending element, exactly as if you have defined the expressions from the 
+				<code>General</code> tab. 
+			</li>
+			<li>
+				<code>Groups</code> will 
+				<strong>be aggregated</strong> to the groups defined by the referenced 
+				<code>Page</code>. 
+			</li>
+			<li>
+				<code>Page Validations</code>  will 
+				<strong>be aggregated</strong> to the validations defined by the referenced 
+				<code>Page Description</code>.
+			</li>
+			<li>In the case of a containment, such as a 
+				<code>Text</code> contained by a 
+				<code>Group</code>, the contained elements are inherited by the extending description.
+			</li>
+		</ul>
+		<p id="filters">
+			<strong>Filter Expressions.</strong> Different filters exist depending on the element kind. These filters are used to 
+			<strong>filter</strong> which inherited elements are visible. The 
+			<em>Filter expression</em> is evaluated in the context of the semantic element and should return a boolean: true, the inherited element is visible, false it is filtered.
+			<br/>If the expression is not specified, all the inherited elements will be visible.
+			<br/>For each 
+			<em>Filter expression</em>, a variable is available which represents the element which could be filtered. It is possible to filter all the inherited elements by just returning 
+			<code>false</code> all the time. In this case, the elements defined under the current description 
+			<strong>overrides</strong> the elements defined in the extended description.
+			<br/>For example if a 
+			<em>Page A</em> extends another 
+			<em>Page B</em>, the 
+			<code>Extends</code> tab allows to define:
+		</p>
+		<ul>
+			<li>The 
+				<code>Filter Groups Expression</code> is used to 
+				<strong>filter</strong> which inherited groups are visible under the page. The 
+				<code>groupDescription</code> variable can be used to check if a group must be filtered or not. 
+			</li>
+			<li>The 
+				<code>Filter Validation Rules Expression</code> is used to 
+				<strong>filter</strong> which inherited validation rules are used under the page. The 
+				<code>validationRuleDescription</code> variable can be used to check if a rule must be filtered or not.
+			</li>
+		</ul>
+		<p>Following some examples of the extension mechanism usage are detailed:</p>
+		<ul>
+			<li>
+				<strong>Reuse widgets</strong>: In this example we want to specify the properties view of a Class and an interface both are defining a name attribute. A 
+				<em>Class Name</em> text widget is defined to represent the 
+				<em>Name</em> attribute of a 
+				<em>Class</em> in the properties view. This widget defines in the 
+				<em>General</em> tab:
+				<ul>
+					<li>The 
+						<em>Label Expression</em> equals to 
+						<code>Name:</code>,
+					</li>
+					<li>The 
+						<em>Help Expression</em> equals to 
+						<code>The name of the element</code>,
+					</li>
+					<li>The 
+						<em>Value Expression</em> equals to 
+						<code>aql:self.name</code>,
+					</li>
+					<li>The change value operation sets the 
+						<code>name</code> feature with the new entered value.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img alt="Example of the inherited text widget definition" title="Example of the inherited text widget definition" border="0" src="images/reuse-widget-general-tab.png"/> 
+		</p>
+		<p>An interface has also a 
+			<em>Name</em> attribute which must be shown in its properties view, then to define the properties of the interface, we just create a new text widget which extends the 
+			<code>Class Name Widget</code>.
+			<br/>No other fields and no change value operation need to be set for the 
+			<code>Interface Name Widget</code>, all the values will be inherited from the 
+			<code>Class Name Widget</code>.
+		</p>
+		<p>
+			<img alt="Example of the extension definition" title="Example of the extension definition" border="0" src="images/reuse-widget-extends-tab.png"/> 
+		</p>
+		<p>
+			<img alt="Example of the reuse of a widget definition" title="Example of the reuse of a widget definition" border="0" src="images/reuse-widget-general2-tab.png"/> 
+		</p>
+		<ul>
+			<li>
+				<strong>Reuse pages</strong>: Another usage of the extension mechanism is with combination of 
+				<a href="../general/Model_Operations.html#dialogandwizard">the dialogs and the wizards</a>. The purpose is to provide the edition of the properties element from a dialog, the same properties should be available in the dialog and in the properties view. A a property view is defined for all the elements of a metamodel. Then a new tool is defined which opens a dialog when a node mapping is double-clicked from a diagram. This dialog shows the same properties than the ones represented when the element is selected from the diagram. To do this, the dialog defines a page which extends the one defined in the properties view definition.
+			</li>
+		</ul>
+		<p>
+			<img alt="Example of the reuse of a page definition in a dialog" title="Example of the reuse of a page definition in a dialog" border="0" src="images/reuse-page.png"/>
+		</p>
+		<ul>
+			<li>
+				<strong>Customize default rules</strong>: A final example of the extension mechanism is to customize the 
+				<a href="#default_rules">default rules</a> provided by Sirius. For this use case, the purpose is to override the content of the default rules in order to rename the tab label from 
+				<em>Main</em> to 
+				<em>General</em>. It is possible to extends the default rules thanks to the 
+				<em>New Properties&gt; Extend Default Properties View</em> menu available from the top-level element of the VSM model. Automatically, this creates a new page which extends the default rules. It is then possible to override the 
+				<em>Label Expression</em> of the default rules page to set the expected label 
+				<em>General</em> instead of the default one which is 
+				<em>Main</em>
+			</li>
+		</ul>
+		<p>
+			<img alt="Example of the extension of default rules" title="Example of the extension of default rules" border="0" src="images/customize-default-rules-extends.png"/>
+		</p>
+		<p>
+			<img alt="Example of the customization of default rules" title="Example of the customization of default rules" border="0" src="images/customize-default-rules-general.png"/> 
+		</p>
+		<h3 id="overrides">Overrides</h3>
+		<p>The main difference between the 
+			<a href="#extends">extend</a> mechanism and the 
+			<a href="#overrides">overrides</a> mechanism is that the extend mechanism allows to reuse some parts of a properties view specification on another hand the 
+			<a href="#overrides">override</a> mechanism allows to replace some parts of a properties view specification.
+			<br/>This means that when you define an override description it will completely replace the referenced description, this must be used when it is not possible for the specifier to modify the original description.
+		</p>
+		<p>It is possible to create an override element under a 
+			<a href="#categories">category</a> from the 
+			<em>New Override</em> menu.
+		</p>
+		<p>A page override can extend another page defined somewhere else (in another 
+			<a href="#categories">category</a> or in another properties view description). This mechanism is used to 
+			<em>replace</em> an existing page. It is possible to define :
+		</p>
+		<ul>
+			<li>page override: a 
+				<em>Page Override</em> is a page and so defines the same features as a 
+				<a href="#pages">page</a>, 
+			</li>
+			<li>group override: a 
+				<em>Group Override</em> is a group and so defines the same features as a 
+				<a href="#groups">group</a>, 
+			</li>
+			<li>container override: a 
+				<em>Container Override</em> is a container and so defines the same features as a 
+				<a href="#containers_and_layout">container</a>, 
+			</li>
+			<li>dynamic mapping override: a 
+				<em>Dynamic Mapping Override</em> is a dynamic mapping and so defines the same features as a 
+				<a href="#dynamic_mappings">dynamic mapping</a>,
+			</li>
+			<li>widget override: a 
+				<em>Widget Override</em> is a widget and so defines the same features as a 
+				<a href="#widgets">widget</a>.
+			</li>
+		</ul>
+		<p>The 
+			<code>Override</code> tab is used to specify:
+		</p>
+		<p id="override">
+			<strong>Override.</strong> Is used to specify the overridden element thanks to a combo box it is possible to select an existing element. In the tree editor, the inheritance is visible as the element is named as following : 
+			<em>Page A</em> 
+			<strong>extends</strong> 
+			<em>Page B</em>. Pay attention, the current specification editor allows to select the currently defined element, this will lead to an infinite loop at runtime. 
+			<br/>By default, the values of the 
+			<code>General</code> tab fields are set with the values coming from the overridden element if these fields are not set in the extending element. If one of these attributes is edited in the extending element, then it 
+			<strong>overrides</strong> the inherited value. The same behavior is applied for mono valued containment elements. For example, if a 
+			<em>Group A</em> defines a 
+			<em>Style A</em> and extends a 
+			<em>Group B</em> with a 
+			<em>Style B</em>, the style used to render the 
+			<em>Group A</em> is the one defined under the 
+			<em>Group A</em>, i.e 
+			<em>Style A</em> and not the one of the 
+			<em>Group B</em>.
+			<br/>If the specifier defines in the extending page 
+			<code>General</code> tab:
+		</p>
+		<ul>
+			<li>
+				<code>Label Expression</code>, 
+				<code>Domain Class</code>, 
+				<code>Semantic Candidate Expression</code> or 
+				<code>Precondition Expression</code>, these values will 
+				<strong>override</strong> the values defined in the extended description. It is worth noting that the expressions are evaluated in the context of the currently extending element, exactly as if you have defined the expressions from the 
+				<code>General</code> tab. 
+			</li>
+			<li>
+				<code>Groups</code> will 
+				<strong>be aggregated</strong> to the groups defined by the referenced 
+				<code>Page</code>. 
+			</li>
+			<li>
+				<code>Page Validations</code>  will 
+				<strong>be aggregated</strong> to the validations defined by the referenced 
+				<code>Page Description</code>.
+			</li>
+			<li>In the case of a containment, such as a 
+				<code>Text</code> contained by a 
+				<code>Group</code>, the contained elements are inherited by the extending description.
+			</li>
+		</ul>
+		<p id="filters">
+			<strong>Filter Expressions.</strong> Different filters exist depending on the element kind. These filters are used to 
+			<strong>filter</strong> which inherited elements are visible. The 
+			<em>Filter expression</em> is evaluated in the context of the semantic element and should return a boolean: true, the inherited element is visible, false it is filtered.
+			<br/>If the expression is not specified, all the inherited elements will be visible.
+			<br/>For each 
+			<em>Filter expression</em>, a variable is available which represents the element which could be filtered. It is possible to filter all the inherited elements by just returning 
+			<code>false</code> all the time. In this case, the elements defined under the current description 
+			<strong>overrides</strong> the elements defined in the extended description.
+			<br/>For example if a 
+			<em>Page A</em> extends another 
+			<em>Page B</em>, the 
+			<code>Extends</code> tab allows to define:
+		</p>
+		<ul>
+			<li>The 
+				<code>Filter Groups Expression</code> is used to 
+				<strong>filter</strong> which inherited groups are visible under the page. The 
+				<code>groupDescription</code> variable can be used to check if a group must be filtered or not. 
+			</li>
+			<li>The 
+				<code>Filter Validation Rules Expression</code> is used to 
+				<strong>filter</strong> which inherited validation rules are used under the page. The 
+				<code>validationRuleDescription</code> variable can be used to check if a rule must be filtered or not.
+			</li>
+		</ul>
+		<p>If an element is overridden by many override definitions, the first encountered in the specification is applied.</p>
+		<h2 id="extension_points">Extension Points</h2>
+		<h3 id="advanced_custom_widgets_extension_points">Extension Points for Advanced Custom Widgets</h3>
+		<p>Integrating and advanced custom widget implementation requires extending several extension points:</p>
+		<ul>
+			<li>
+				<code>org.eclipse.emf.edit.childCreationExtenders</code>: When generating the metamodel for the custom configuration DSL of your widget, make sure EMF&#8217;s 
+				<code>childCreationExtenders</code> mechanism is properly configured so that the Sirus VSM editor will see your custom widget type and allow them to be created in the 
+				<em>New</em> context menu.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.descriptionConverter</code>: This extension point allows you to particpate in the conversion of the Sirius-side VSM model into the EEF DSL. With this mechanism, you can translate for the EEF runtime new elements that you have contributed in the Sirius Properties DSL.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.descriptionLinkResolver</code>: This extension point may be needed in complement to the 
+				<code>descriptionConverter</code> if some post-transformation step is needed on your transformed model to perform global link resolution.
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.properties.descriptionPreprocessor</code>: This extension point allows you to participate in the preprocessing of the Sirius-side VSM model with 
+				<a href="#extensibility_features">extensibility featires</a> into a 
+				<em>flatten</em> Sirius-side VSM model. 
+			</li>
+		</ul>
+		<p>Please refer to the documentation for each of these for more details. And 
+			<a href="../../developer/extensions-properties_provide_custom_widget_advanced.html">the reference documentation</a> for the full details on how to actually implement your own advanced custom widgets.
+		</p>
+		<h3 id="tab_filtering">Tab Filtering</h3>
+		<p>The EEF runtime used internally by Sirius to render the properties views has programmatic support for filtering property tabs that you may want to hide in your context. For example you may want to filter out some legacy tabs defined statically if you provide alternative versions defined dynamically in Sirius.</p>
+		<p>This feature is not currently exposed via the Sirius VSMs, but you can still use it by implementing the 
+			<code>org.eclipse.eef.properties.ui.api.IEEFTabDescriptorFilter</code> interface, and registering your implementation in the 
+			<code>org.eclipse.eef.properties.ui.eefTabDescriptorFilter</code> extension point defined in EEF.
+		</p>
+		<p>The interface defines a single method 
+			<code>boolean filter(IEEFTabDescriptor tabDescriptor)</code> which will be called for each candidate tab to display. If at least one of the 
+			<code>IEEFTabDescriptorFilter</code> registered indicates that the tab should be filtered, it will not be displayed.
+		</p>
+		<p>Please refer to the EEF extension point documentation for more details.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/properties/images/basic-properties-example-diagram.png b/doc/5.1.x/specifier/properties/images/basic-properties-example-diagram.png
new file mode 100644
index 0000000..142bdbd
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/basic-properties-example-diagram.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/basic-properties-example-vsm.png b/doc/5.1.x/specifier/properties/images/basic-properties-example-vsm.png
new file mode 100644
index 0000000..9aaa50c
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/basic-properties-example-vsm.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/customize-default-rules-extends.png b/doc/5.1.x/specifier/properties/images/customize-default-rules-extends.png
new file mode 100644
index 0000000..8a71c03
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/customize-default-rules-extends.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/customize-default-rules-general.png b/doc/5.1.x/specifier/properties/images/customize-default-rules-general.png
new file mode 100644
index 0000000..1b58cca
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/customize-default-rules-general.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-no-title.png b/doc/5.1.x/specifier/properties/images/group-style-no-title.png
new file mode 100644
index 0000000..63bb065
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-no-title.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-short-titlebar.png b/doc/5.1.x/specifier/properties/images/group-style-short-titlebar.png
new file mode 100644
index 0000000..8641f42
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-short-titlebar.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-titlebar.png b/doc/5.1.x/specifier/properties/images/group-style-titlebar.png
new file mode 100644
index 0000000..d6389e2
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-titlebar.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-toggle-none.png b/doc/5.1.x/specifier/properties/images/group-style-toggle-none.png
new file mode 100644
index 0000000..2416227
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-toggle-none.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-toggle-treenode.png b/doc/5.1.x/specifier/properties/images/group-style-toggle-treenode.png
new file mode 100644
index 0000000..4752eb9
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-toggle-treenode.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/group-style-toggle-twistie.png b/doc/5.1.x/specifier/properties/images/group-style-toggle-twistie.png
new file mode 100644
index 0000000..d6389e2
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/group-style-toggle-twistie.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/groups.png b/doc/5.1.x/specifier/properties/images/groups.png
new file mode 100644
index 0000000..e68f438
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/groups.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/label-styles.png b/doc/5.1.x/specifier/properties/images/label-styles.png
new file mode 100644
index 0000000..b1dcf16
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/label-styles.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/new-properties.png b/doc/5.1.x/specifier/properties/images/new-properties.png
new file mode 100644
index 0000000..8fae193
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/new-properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/pages.png b/doc/5.1.x/specifier/properties/images/pages.png
new file mode 100644
index 0000000..128f0a7
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/pages.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reference-multiple-value.png b/doc/5.1.x/specifier/properties/images/reference-multiple-value.png
new file mode 100644
index 0000000..5098953
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reference-multiple-value.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reference-single-value.png b/doc/5.1.x/specifier/properties/images/reference-single-value.png
new file mode 100644
index 0000000..7e99827
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reference-single-value.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-page.png b/doc/5.1.x/specifier/properties/images/reuse-page.png
new file mode 100644
index 0000000..d769a21
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-page.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-widget-extends-tab.png b/doc/5.1.x/specifier/properties/images/reuse-widget-extends-tab.png
new file mode 100644
index 0000000..e4bbb22
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-widget-extends-tab.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-widget-general-tab.png b/doc/5.1.x/specifier/properties/images/reuse-widget-general-tab.png
new file mode 100644
index 0000000..059ab62
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-widget-general-tab.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/reuse-widget-general2-tab.png b/doc/5.1.x/specifier/properties/images/reuse-widget-general2-tab.png
new file mode 100644
index 0000000..33271f6
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/reuse-widget-general2-tab.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-button.png b/doc/5.1.x/specifier/properties/images/widget-button.png
new file mode 100644
index 0000000..0c25e12
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-button.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-checkbox.png b/doc/5.1.x/specifier/properties/images/widget-checkbox.png
new file mode 100644
index 0000000..b1b1086
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-checkbox.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-from-domain-class.png b/doc/5.1.x/specifier/properties/images/widget-from-domain-class.png
new file mode 100644
index 0000000..1ea0842
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-from-domain-class.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-hyperlink.png b/doc/5.1.x/specifier/properties/images/widget-hyperlink.png
new file mode 100644
index 0000000..40f997a
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-hyperlink.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-label-styling.png b/doc/5.1.x/specifier/properties/images/widget-label-styling.png
new file mode 100644
index 0000000..7b9d550
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-label-styling.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-label.png b/doc/5.1.x/specifier/properties/images/widget-label.png
new file mode 100644
index 0000000..9049b31
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-label.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-radio.png b/doc/5.1.x/specifier/properties/images/widget-radio.png
new file mode 100644
index 0000000..8061219
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-radio.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-references.png b/doc/5.1.x/specifier/properties/images/widget-references.png
new file mode 100644
index 0000000..48298d7
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-references.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-select.png b/doc/5.1.x/specifier/properties/images/widget-select.png
new file mode 100644
index 0000000..6e3b77a
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-select.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-text-styling.png b/doc/5.1.x/specifier/properties/images/widget-text-styling.png
new file mode 100644
index 0000000..b3541b3
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-text-styling.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-text.png b/doc/5.1.x/specifier/properties/images/widget-text.png
new file mode 100644
index 0000000..76caa83
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-text.png
Binary files differ
diff --git a/doc/5.1.x/specifier/properties/images/widget-textarea.png b/doc/5.1.x/specifier/properties/images/widget-textarea.png
new file mode 100644
index 0000000..ee43403
--- /dev/null
+++ b/doc/5.1.x/specifier/properties/images/widget-textarea.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/Sequence Diagrams.html b/doc/5.1.x/specifier/sequences/Sequence Diagrams.html
new file mode 100644
index 0000000..03e0443
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/Sequence Diagrams.html
@@ -0,0 +1,654 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Sequence Diagrams</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SpecifyingSequenceDiagramEditors">Specifying Sequence Diagram Editors</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SpecifyingSequenceDiagramEditors">Specifying Sequence Diagram Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#semantics">Sequence Diagrams Semantics</a>
+					</li>
+					<li>
+						<a href="#restrictions">Restrictions and Limitations</a>
+					</li>
+					<li>
+						<a href="#prerequisites">Prerequisites</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#Interaction">Interaction</a>
+							</li>
+							<li>
+								<a href="#LifelineandInstancerole">Lifeline and Instance role</a>
+							</li>
+							<li>
+								<a href="#Execution">Execution</a>
+							</li>
+							<li>
+								<a href="#Message">Message</a>
+							</li>
+							<li>
+								<a href="#SingleEventEndandCompoundEventEnd">SingleEventEnd and CompoundEventEnd</a>
+							</li>
+							<li>
+								<a href="#Ordering">Ordering</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sd_description">Sequence Diagram Description</a>
+					</li>
+					<li>
+						<a href="#DefaultLayer">Default Layer</a>
+					</li>
+					<li>
+						<a href="#mappings">Mappings</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#InstanceRole">Instance Role</a>
+							</li>
+							<li>
+								<a href="#Executions">Executions</a>
+							</li>
+							<li>
+								<a href="#BasicMessages">Basic Messages</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#tools">Tools</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#JavaServices">Java Services</a>
+							</li>
+							<li>
+								<a href="#CreationTools">Creation Tools</a>
+							</li>
+							<li>
+								<a href="#eventReorderTool">Event Reorder Tool</a>
+							</li>
+							<li>
+								<a href="#instanceRoleReorderTool">Instance Role Reorder Tool</a>
+							</li>
+							<li>
+								<a href="#OtherTools">Other Tools</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>This document describes how to specify sequence diagram modelers with Sirius. It has been written for software architects who want to specify sequence diagrams on their own meta-models.</p>
+		<p>This tutorial is based on an example, i.e. the specification of a UML sequence diagram editor. The resulting diagram is  available in the 
+			<em>Obeo UML Behavioral</em> viewpoint (available for free at <a href="https://github.com/ObeoNetwork/UML-Modeling" target="_blank">https://github.com/ObeoNetwork/UML-Modeling</a> ) which is based on the Eclipse Foundation&#8217;s <a href="http://wiki.eclipse.org/MDT-UML2" target="_blank">UML2 meta-model</a>.
+		</p>
+		<h2 id="semantics">Sequence Diagrams Semantics</h2>
+		<p>As their name says, sequence diagrams are meant to represent ordered sequences of elements. Typically, they represent 
+			<em>events</em> sent and received between some entities over 
+			<em>time</em>. The canonical case is a UML Sequence Diagram (where the notation comes from), which represents the messages exchanged between objects in a software system.
+		</p>
+		<p>The most important consequence of this is that contrary to what happens on a classical diagram, 
+			<em>the relative graphical positions of elements on a sequence diagram have strong meaning</em>. This is true for the vertical placement and for the left-to-right order of lifelines. However placing a message above or below another one has a strong implication on the ordering of the events they represent, and thus on the structure of the underlying semantic model which is represented. Sirius works hard to ensure that what you see on you sequence diagram (in terms of vertical ordering of elements and horizontal ordering of lifelines) always correspond to the semantic ordering of the represented events.
+		</p>
+		<p>This works both ways:</p>
+		<ul>
+			<li>Assuming a diagram is synchronized (i.e. you are in 
+				<em>Automatic Refresh</em> mode or your manually refreshed it since the last semantic changes), Sirius will always organize the elements on the diagram in a way which is compatible with the semantic ordering of the events: if you see an execution 
+				<em>E1</em> placed above another execution 
+				<em>E2</em>, you can be sure the events corresponding to 
+				<em>E1</em> happen before the events of 
+				<em>E2</em> in the semantic model.
+			</li>
+			<li>Symmetrically, and perhaps more importantly, 
+				<em>moving</em> elements on a sequence diagram may trigger changes in the underlying semantic model to reflect the new event order implied by the positions you changed. This is very different from what happens in other diagrams, where most graphical repositioning of elements are only cosmetic. Keeping the example above, moving execution 
+				<em>E2</em> graphically above 
+				<em>E1</em> will trigger changes in the semantic model to move the corresponding event of 
+				<em>E2</em> before the events of 
+				<em>E1</em>.
+			</li>
+		</ul>
+		<p>Most of the specific features and restrictions of sequence diagrams compared to other diagrams derive from this strong guarantee that at all time, the graphical (vertical) order of the elements you see on the diagram match exactly the semantic order of the events which exist in the underlying model and the horizontal order of the instance roles you see on the diagram match exactly the semantic order of the corresponding elements which exist in the underlying model.</p>
+		<p>From the specifier point of view, this means that sequence diagrams can only be defined on meta-models in which you can provide a total ordering of the events represented, and that you can reorder these elements in a predictable way (see the description of the 
+			<a href="#eventReorderTool">Event Reorder Tool</a> and 
+			<a href="#instanceRoleReorderTool">Instance Role Reorder Tool</a> for details).
+		</p>
+		<h2 id="restrictions">Restrictions and Limitations</h2>
+		<p>In order to guarantee the strong guarantee described above, some of the features present on normal diagrams are not supported, or even completely disabled on sequence diagrams. Basically, anything which would make it possible on a normal diagram to have meaningful semantic elements not visible on the diagram is forbidden. This would make it impossible for Sirius to keep consistent tracking of the &#8220;position&#8221; of these invisible elements relative to the ones which are visible.</p>
+		<ul>
+			<li>
+				<em>Layers</em>: sequence diagrams may define optional layers, as long as they do not make graphical elements appear or disappear on the diagram when they are selected or de-selected. Layers which contribute new tools in the palette for example are fine.
+			</li>
+			<li>
+				<em>Filters</em>: filters which may hide elements from a sequence diagram when enabled are not supported.
+			</li>
+			<li>
+				<em>Hide/Reveal</em>: hiding elements explicitly is not supported. The actions are disabled in the UI.
+			</li>
+			<li>
+				<em>Pin/Unpin</em>: pinning graphical elements has no effect on the automatic layout of sequence diagrams. Even if an element has been marked as pinned, Sirius must be able to move it graphically as needed in order to maintain the graphical order of element in sync with the semantic order. The actions are disabled in the UI.
+			</li>
+		</ul>
+		<h2 id="prerequisites">Prerequisites</h2>
+		<p>As with any Sirius diagram, the semantic model used for a sequence diagram defines some elements and relationships that must be mapped to graphical elements in order to be represented on the sequence diagrams. For the UML2 modeler, the semantic model is defined in 
+			<code>.uml</code> files and the mapping in the 
+			<code>uml2.odesign</code> Viewpoint Specification file.
+		</p>
+		<p>The job of the architect is to map the UML2 interactions, life-lines, executions and messages. Even if the support for sequence diagrams in Sirius is not dedicated to UML2, these four kinds of elements (or similar ones) must be provided by the sequence meta-model in order to be represented as sequence diagrams in Sirius.</p>
+		<h3 id="Interaction">Interaction</h3>
+		<p>The interaction is the semantic container for all the sequence diagram elements.</p> 
+		<img border="0" src="images/interaction.png"/>
+		<p>In UML2, the interaction is represented by an element of type 
+			<code>Interaction</code>.
+		</p>
+		<h3 id="LifelineandInstancerole">Lifeline and Instance role</h3>
+		<p>The instance role and the lifeline represents one participant in the interaction.</p> 
+		<img border="0" src="images/lifeline.png"/>
+		<p>In UML2, the instance role and the lifeline are represented by one element of type 
+			<code>Lifeline</code>.
+		</p>
+		<h3 id="Execution">Execution</h3>
+		<p>The execution typically represents a period in the participant&#8217;s lifetime when it is active. An execution is composed of three elements:</p>
+		<ul>
+			<li>
+				<em>Execution start</em>: the start occurrence of the execution;
+			</li>
+			<li>
+				<em>Execution</em>: the execution by itself (the duration of the execution);
+			</li>
+			<li>
+				<em>Execution finish</em>: the finish occurrence of the execution.
+			</li>
+		</ul> 
+		<img border="0" src="images/execution.png"/>
+		<p>In UML2, the execution is represented by an element of type 
+			<code>Execution Specification</code>, the execution start and finish are defined by an abstract type 
+			<code>Occurrence Specification</code>.
+		</p>
+		<h3 id="Message">Message</h3>
+		<p>The message represents a kind of communication between lifelines of an interaction. A message is composed by three elements:</p>
+		<ul>
+			<li>
+				<em>Message send</em> (or 
+				<em>source</em>): the send occurrence of the message;
+			</li>
+			<li>
+				<em>Message</em>: the message by itself (the kind of communication, e.g. synchronous/asynchronous call);
+			</li>
+			<li>
+				<em>Message receive</em> (or 
+				<em>target</em>): the receive occurrence of the message
+			</li>
+		</ul> 
+		<img border="0" src="images/message.png"/>
+		<p>In UML2, the message is represented by an element of type 
+			<code>Message Specification</code>, the message send and receive are defined by one abstract type 
+			<code>Occurrence Specification</code>.
+		</p>
+		<h3 id="SingleEventEndandCompoundEventEnd">SingleEventEnd and CompoundEventEnd</h3>
+		<p>Sirius internally manages a list of start/finish execution occurrences and sender/receiver message occurrences defined for each interaction. All these occurrences are event ends contained in the 
+			<code>EventEnds</code> list.
+		</p>
+		<p>An 
+			<code>eventEnd</code> contains two properties:
+		</p>
+		<ul>
+			<li>
+				<code>semanticEvent</code>: points to the semantic event which could be a message or an execution,
+			</li>
+			<li>
+				<code>semanticEnd</code>: points to one connection end of the semantic event, i.e. the semantic element which could be a message sender, a message receiver, an execution start or an execution finish.
+			</li>
+		</ul>
+		<p>There are two kinds of 
+			<code>EventEnds</code>:
+		</p>
+		<ul>
+			<li>
+				<code>SingleEventEnd</code>: Is an element which is used only as start/send or finish/receive by one execution/message. In UML2, an execution could be started or finished by an 
+				<code>Execution Occurrence Specification</code> and a message could be sent or received by a 
+				<code>Message occurrence Specification</code>.
+			</li>
+			<li>
+				<code>CompoundEventEnd</code>: Is an element that represents the combination of a message and an execution. This kind of 
+				<code>EventEnd</code> exists in order to associate graphically a message to an execution. As the 
+				<code>CompoundEventEnd</code> is an 
+				<code>EventEnd</code>, it contains the two properties:
+				<ul>
+					<li>
+						<code>semanticEvent</code> which points to a message or an execution.
+					</li>
+					<li>
+						<code>semanticEnd</code> which points to a 
+						<code>MixEnd</code> element.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Depending on how the meta-model is defined, the 
+			<code>MixEnd</code> could be represented by:
+		</p>
+		<ul>
+			<li>one 
+				<code>SingleEventEnd</code>: This is the case in UML2, the 
+				<code>Execution Specification</code> could be defined with a start/finish element of type 
+				<code>Execution Occurrence Specification</code> or 
+				<code>Message Occurrence Specification</code>
+			</li>
+			<li>two 
+				<code>SingleEventEnds</code>: one 
+				<code>SingleEventElement</code> which points to the message and one 
+				<code>SingleEventElement</code> which points to the execution.
+			</li>
+		</ul> 
+		<img border="0" src="images/event_ends.png"/>
+		<p>The 
+			<code>Operation_0</code> message ends on the left border of the 
+			<code>Operation_0()</code> execution because 
+			<code>Operation_0_receiver</code> is associated to the start of the execution. Otherwise, the message would be associated to the lifeline. For example, the 
+			<code>Message_3</code> is a simple message not linked to an execution. Consequently, the 
+			<code>Message_3_receiver</code> is a 
+			<code>SingleEventEnd</code> and is attached to the lifeline.
+		</p>
+		<p>Hence, for an asynchronous call, we get:</p>
+		<ul>
+			<li>one 
+				<code>SingleEventEnd</code> for the message sending: 
+				<code>Operation_0_sender</code>
+				<ul>
+					<li>
+						<code>semanticEvent</code> = 
+						<code>Operation_0</code> message
+					</li>
+					<li>
+						<code>semanticEnd</code> = 
+						<code>Operation_0_sender</code> message occurrence specification
+					</li>
+				</ul>
+			</li>
+			<li>one 
+				<code>CompoundEventEnd</code> for the 
+				<code>Operation_0</code> message receiving and 
+				<code>Operation_0</code> execution 
+				<code>startingEnd</code> composed by one 
+				<code>SingleEventEnd</code> = 
+				<code>Operation_receiver</code>
+				<ul>
+					<li>
+						<code>semanticEvent</code> = 
+						<code>Operation_0</code> message
+					</li>
+					<li>
+						<code>semanticEnd</code> = 
+						<code>Operation_0_receiver</code> message occurrence specification
+					</li>
+				</ul>
+			</li>
+			<li>one 
+				<code>SingleEventEnd</code> for the execution finish: 
+				<code>Operation_0_finish</code>
+				<ul>
+					<li>
+						<code>semanticEvent</code> = 
+						<code>Operation_0</code> execution
+					</li>
+					<li>
+						<code>semanticEnd</code> = 
+						<code>Operation_0_finish</code> execution occurrence specification
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h3 id="Ordering">Ordering</h3>
+		<p>In a Sirius sequence diagram, the elements are totally ordered.</p>
+		<p>Internally, Sirius maintains three ordered sets:</p>
+		<ul>
+			<li>two for the vertical ordering : a graphical set which orders the graphical elements, a semantic set which orders the semantic elements.</li>
+			<li>one for the horizontal ordering, a semantic set which orders the semantic instance roles (the graphical ordering of instance roles is available without heavy computation).</li>
+		</ul> 
+		<img border="0" src="images/orderings.png"/>
+		<p>To provide a functional diagram, each semantic/graphical orderings couple must always be coherent. Creation tools and reordering tool must manage the semantic orderings. More explanations are given in the next section.</p>
+		<h2 id="sd_description">Sequence Diagram Description</h2>
+		<p>First, in an odesign file, from an existing viewpoint, you have to create a new kind of representation : Sequence Diagram Description.</p> 
+		<img border="0" src="images/new_description.png"/> 
+		<img border="0" src="images/description_properties.png"/>
+		<p>As for other representations, you define mandatory properties:</p>
+		<ul>
+			<li>
+				<em>Id</em>: unique identifier for the diagram type in Sirius
+			</li>
+			<li>
+				<em>Label</em>: used to display information to end-user
+			</li>
+			<li>
+				<em>Domain class</em>: type of the semantic element representing the sequence diagram container
+			</li>
+		</ul>
+		<p>For a complete description of each property, have a look at the 
+			<em>Help &gt; Sirius  Specifier Guide &gt; Reference Guide &gt; Representation &gt; Sequence Diagram</em>.
+		</p>
+		<p>The most important properties to understand are the 
+			<em>Ends Ordering</em> and 
+			<em>Instance Roles Ordering</em>.
+		</p> 
+		<img border="0" src="images/ends_ordering.png"/>
+		<p>In a sequence diagram, graphical elements are ordered chronologically and this order is essential. Maintaining and updating the elements global order will be the main purpose of all tools that you will create later. Your tools must keep all the time the order of semantic elements and according to this, Sirius manages the graphical representation order.</p>
+		<p>The ordered elements in a sequence diagram are defined with the 
+			<em>Ends Ordering</em> and 
+			<em>Instance Roles Ordering</em> fields. These properties will be used by Sirius to automatically order the graphical elements when you open a sequence diagram for an interaction. 
+		</p>
+		<p>The 
+			<em>Ends Ordering</em> handles the vertical order of events. It specifies with an expression how semantic elements must be ordered. These elements should be execution1 start/finish and message send/receive occurrences. 
+		</p>
+		<p>A specific variable exists for this expression: 
+			<code>eventEnds</code> . The variable 
+			<code>eventEnds</code> contains the list of all 
+			<code>EventEnds</code> existing for the current interaction.
+		</p>
+		<p>Pay attention: the evaluation of the 
+			<em>Ends Ordering</em> expression should returned only elements contained in the 
+			<code>eventEnds</code> list.
+		</p>
+		<p>The 
+			<em>Instance Roles Ordering</em> handles the horizontal order of instance roles / lifelines. It specifies with an expression how semantic elements must be ordered. These elements should be the semantic elements which will be represented as instance role. 
+		</p>
+		<p>If we have a look at the UML2 meta-model, the fragment reference defined in an 
+			<code>Interaction</code> contains all the execution occurrences and the message occurrences. Execution occurrences and messages occurrences are 
+			<code>EventEnd</code> elements. But the fragment reference contains also some other types of elements as execution specifications. In order that the 
+			<em>Ends Ordering</em> property only references 
+			<code>EventEnd</code> elements we need to do an intersection of fragments elements and eventEnds (using either Acceleo or delegating to a Java service using 
+			<code>service:</code>).. 
+		</p>
+		<p>Furthermore, the lifeline reference defined in an 
+			<code>Interaction</code> contains all the 
+			<code>Lifeline</code> representing both lifeline and instance role.
+		</p> 
+		<img border="0" src="images/ends_ordering_visual.png"/>
+		<p>For the UML Modeler, the 
+			<em>Ends Ordering</em> expression will return for the diagram below, the ordered list: 
+			<code>[Operation_0_sender, Operation_0_receiver, Operation_0_finish, test_sender, test_receiver, test_reply_sender, test_reply_receiver, Message_3_sender, Message_3 _receiver]</code>. 
+			<br/>And the 
+			<em>Instance Roles Ordering</em> expression will return for the diagram below, the ordered list: 
+			<code>[producers, consumers]</code>.
+		</p>
+		<h2 id="DefaultLayer">Default Layer</h2>
+		<p>When the sequence diagram description is complete, you can add a Default layer.</p> 
+		<img border="0" src="images/default_layer.png"/>
+		<p>Next step is to define the mappings and all the tools to manage the interaction elements.</p>
+		<h2 id="mappings">Mappings</h2>
+		<p>We want to represent on a sequence diagram four different elements and then associate a mapping to each element:</p>
+		<ul>
+			<li>
+				<em>Instance</em>: instance role mapping
+			</li>
+			<li>
+				<em>Lifetime</em>: execution mapping
+			</li>
+			<li>
+				<em>Execution</em>: execution mapping
+			</li>
+			<li>
+				<em>Message</em>: basic message mapping
+			</li>
+		</ul> 
+		<img border="0" src="images/mappings.png"/>
+		<h3 id="InstanceRole">Instance Role</h3>
+		<p>Firstly, create the instance role mapping. It graphically corresponds to the box at the top of the lifeline.</p> 
+		<img border="0" src="images/new_instance_role_mapping.png"/>
+		<p>Set the mandatory properties 
+			<em>Id</em>, 
+			<em>Label</em> and 
+			<em>Domain class</em>:
+		</p> 
+		<img border="0" src="images/instance_role_mapping_properties.png"/>
+		<p>The Semantic Candidates Expression is an Acceleo expression returning the semantic elements for which the mapping will be evaluated and then a graphical element will represent the semantic element on the diagram.</p>
+		<p>Don&#8217;t forget to create a new Style for the instance role mapping.</p>
+		<img border="0" src="images/instance_role_mapping_style.png"/>
+		<h3 id="Executions">Executions</h3>
+		<p>Execution mappings are used when you have an element which is composed by a start, a duration and a finish element. </p>
+		<p>We will define the execution mappings:</p> 
+		<img border="0" src="images/new_execution_mapping.png"/>
+		<p>First, create the execution mapping for the lifeline execution. This represents the dashed line of lifeline.</p> 
+		<img border="0" src="images/execution_mapping_properties1.png"/>
+		<p>And create the execution mapping for the execution. This represents the execution square on lifeline or other execution.</p> 
+		<img border="0" src="images/execution_mapping_properties2.png"/>
+		<p>Set the mandatory properties:</p>
+		<ul>
+			<li>
+				<em>Id</em>, 
+				<em>Label</em>, 
+				<em>Domain class</em>
+			</li>
+			<li>
+				<em>Semantic Candidates Expression</em>:  expression that returns the first level executions associated to the current execution. 
+			</li>
+		</ul> 
+		<img border="0" src="images/execution_mappings_visual.png"/>
+		<p>Here, a java service1 executionSemanticCandidates() is called.</p>
+		<ul>
+			<li>
+				<em>Starting End Finder Expression</em>: semantic element defining the execution start
+			</li>
+			<li>
+				<em>Finishing End Finder Expression</em>: semantic element defining the execution finish
+			</li>
+		</ul>
+		<p>The end finder expressions are used by Sirius to graphically link the execution to its start and finish elements and to find during creation and reorder operations where to reattach the dragged element.</p>
+		<p>As an execution could recursively contain other executions, don&#8217;t forget to import the mapping on itself by setting the property Reused bordered node mappings :</p> 
+		<img border="0" src="images/execution_mapping_reused.png"/>
+		<p>For both execution mappings, don&#8217;t forget to create a New Style:</p> 
+		<img border="0" src="images/execution_mapping_style.png"/>
+		<h3 id="BasicMessages">Basic Messages</h3>
+		<p>Now, we will define the basic message mapping:</p> 
+		<img border="0" src="images/new_message_mapping.png"/>
+		<p>Create the basic message mapping:</p> 
+		<img border="0" src="images/new_basic_message_mapping.png"/> 
+		<img border="0" src="images/basic_message_mapping_properties.png"/>
+		<p>Set the mandatory properties:</p>
+		<ul>
+			<li>
+				<em>Id</em>, 
+				<em>Label</em>, 
+				<em>Domain class</em>
+			</li>
+			<li>
+				<em>Semantic Candidates Expression</em>: expression to get all the messages defined in an interaction
+			</li>
+			<li>
+				<em>Semantic Elements</em>:  Associates a group of logical semantic elements to the graphical element. For example, here we associate to the graphical message the semantic element of type 
+				<code>Message</code>, the message send event of type 
+				<code>Message Occurrence Specification</code> and the message receive event of type 
+				<code>Message Occurrence Specification</code>. Sirius will use this information to:
+				<ul>
+					<li>show associated semantic elements in properties view,</li>
+					<li>listen for associated elements changes to refresh if necessary,</li>
+					<li>delete associated elements if there is no specific delete tool.</li>
+				</ul>
+			</li>
+			<li>
+				<em>Source/Target mapping</em>: a list of graphical mappings that could be source/target of the message. Several mappings could be defined as source or target mapping for a message. In UML2, Lifeline mapping and Execution mapping can be source/target of message. On the illustration below, the consumers lifeline and the 
+				<code>compute()</code> execution can be selected as source for the get message. The producers lifeline and the get execution can be selected as target for the get message.
+			</li>
+		</ul> 
+		<img border="0" src="images/basic_message_mapping_visual1.png"/>
+		<ul>
+			<li>
+				<em>Source/Target finder expression</em>: the expression which must return the source/target semantic element, i.e. the source/target context of the message. In UML2, the expression return is the lifeline or the execution for example. On the illustration below, the compute execution is the semantic source element for the message get and the get execution is the semantic target element.
+			</li>
+		</ul> 
+		<img border="0" src="images/basic_message_mapping_visual2.png"/>
+		<ul>
+			<li>
+				<em>Sending/Receiving End Finder Expression</em>: expression which must return the semantic element which represents the message sender/receiver.
+			</li>
+		</ul> 
+		<img border="0" src="images/basic_message_mapping_visual3.png"/>
+		<h4 id="LostandFoundMessages">Lost and Found Messages</h4>
+		<p>Standard node mappings, direct children of a layer of the current sequence diagram description, can be used to represent the unknown message end. Lost and found messages should be created using a generic tool.</p>
+		<h2 id="tools">Tools</h2>
+		<h3 id="JavaServices">Java Services</h3>
+		<p>To use a java service in an Acceleo expression, service must be define like this in odesign:</p> 
+		<img border="0" src="images/java_service.png"/>
+		<h3 id="CreationTools">Creation Tools</h3>
+		<p>Define a new Section to add creation tools:</p> 
+		<img border="0" src="images/new_creation_tool_section.png"/>
+		<h4 id="CreateLifeline">Create Lifeline</h4>
+		<p>Lifelines should be created using an Instance Role Creation Tool associated to the instance role mapping.</p> 
+		<img border="0" src="images/lifeline_creation_tool.png"/>
+		<p>The 
+			<code>predecessor</code> variable represents in the global instance role ordering, the element preceding the new instance role.  
+		</p>
+		<h4 id="CreateExecution">Create Execution</h4>
+		<p>An Execution can be created using 
+			<em>Execution Creation Tool</em>.
+		</p> 
+		<img border="0" src="images/new_execution_creation_tool.png"/>
+		<p>The following variables can be used from inside the tool definition:</p>
+		<ul>
+			<li>
+				<code>container</code>: the element (lifeline or execution) that will contain graphically the new execution, in the example below the container would be the get() execution.
+			</li>
+			<li>
+				<code>startingEndPredecessor</code> and 
+				<code>finishingEndPredecessor</code>: represent in the global event ends list, the element preceding the new execution start and the element preceding the new execution finish. To get the corresponding semantic end element associated to event end: 
+				<code>startingEndPredecessor.semanticEnd</code> or 
+				<code>finishingEndPredecessor.semanticEnd</code>.
+			</li>
+		</ul> 
+		<img border="0" src="images/execution_creation_tool_visual.png"/>
+		<p>In the example above, we want to create a new 
+			<code>BehaviorExecution_2</code> on the existing get execution. Thus, the 
+			<code>startingEndPredecessor</code> and 
+			<code>finishingEndPredecessor</code> will point to the 
+			<code>get_receiver</code> message occurrence. This variables represent the semantic elements (
+			<code>get_receiver</code>) associated to the graphical element preceding the 
+			<code>startingEnd</code> (
+			<code>BehaviorExecution_2_start</code>) and 
+			<code>finishingEnd</code> (
+			<code>BehaviorExecution_2_finish</code>) of the new element.
+		</p>
+		<h4 id="MessageCreationTool">Message Creation Tool</h4>
+		<p>A Message can be created using Message Creation Tool.</p> 
+		<img border="0" src="images/new_message_creation_tool.png"/>
+		<p>The following variables can be used from inside the tool definition:</p>
+		<ul>
+			<li>
+				<code>source</code>: Semantic element associated to message send;
+			</li>
+			<li>
+				<code>target</code>: Semantic element associated to message receive;
+			</li>
+			<li>
+				<code>startingEndPredecessor</code> and 
+				<code>finishingEndPredecessor</code>: represent in the global event ends list, the element preceding the new message send and the element preceding the new message receive.
+			</li>
+		</ul> 
+		<img border="0" src="images/message_creation_tool_visual.png"/>
+		<p>In this example, we want to create a new 
+			<code>Message_1</code> from the existing compute execution to the producers lifeline. Thus, the 
+			<code>startingEndPredecessor</code> and 
+			<code>finishingEndPredecessor</code> will point to the 
+			<code>get_finish</code> execution occurrence. These variables represent the semantic elements (
+			<code>get_finish</code>) associated to the graphical element preceding the 
+			<code>startingEnd</code> (
+			<code>Message_1_sender</code>) and 
+			<code>finishingEnd</code> (
+			<code>Message_1_receiver</code>) of the new element.
+		</p>
+		<p>
+			<strong>Precondition.</strong> As for many other tools, it is possible to define a precondition for message creation tools. Depending on the precondition expression, the tool allows the element creation only under certain conditions. The precondition is defined as an interpreted expression.
+		</p> 
+		<img border="0" src="images/message_creation_precondition.png"/>
+		<p>A variable is available for the Acceleo expression : $preTarget. This variable is the semantic element associated to graphical element that is currently hovered by the mouse.</p>
+		<h3 id="eventReorderTool">Event Reorder Tool</h3>
+		<p>This tool is called when the user moves or changes the size of graphical elements on the diagram.</p>
+		<p>A single unique event reorder tool can and must be specified for message and execution mappings. The purpose of the tool is to re-synchronize the graphical ordering with the semantic ordering. When the user reorders a graphical element, the global order of graphical elements changes and the tool must then reorder the semantic elements according to these changes.</p> 
+		<img border="0" src="images/new_reorder_tool.png"/>
+		<p>This tool has access to the following two variables usable in expressions:</p>
+		<ul>
+			<li>
+				<code>startingEndPredecessorAfter</code>: represents in the global event end list the element preceding the moved element start/send. It is the event which, 
+				<strong>after</strong> the move, will be directly 
+				<strong>preceding</strong> the 
+				<strong>starting end</strong> (top) of the moved element;
+			</li>
+			<li>
+				<code>finishingEndPredecessorAfter</code>: represents in the global event end list the element preceding the moved element finish/receive. It is the event which, 
+				<strong>after</strong> the move, will be directly 
+				<strong>preceding</strong> the 
+				<strong>finishing end</strong> (bottom) of the moved element.
+			</li>
+		</ul> 
+		<img border="0" src="images/reorder_tool_visual1.png"/>
+		<p>In this example, we want to move the get execution after the 
+			<code>Message_0</code>. Thus, the 
+			<code>startingEndPredecessorAfter</code> variable will point to the 
+			<code>compute_finish</code> execution occurrence. This variable represents the semantic elements (
+			<code>compute_finish</code>) associated to the graphical element preceding the 
+			<code>startingEnd</code> (
+			<code>get_start</code>) after the move of get execution. The 
+			<code>finishingEndPredecessorAfter</code> variable will point to the 
+			<code>get_start</code> execution occurrence. This variable represents the semantic elements (
+			<code>get_start</code>) associated to the graphical element preceding the 
+			<code>finishingEnd</code> (
+			<code>get_finish</code>) after the move of get execution.
+		</p>
+		<p>Now, we will have a look to a more complex reorder operation.</p> 
+		<img border="0" src="images/reorder_tool_visual2.png"/>
+		<p>In this example, we want to move the get execution after the 
+			<code>Message_1</code>. The get execution is linked to the get synchronous message, thus the get execution 
+			<code>startingEnd</code> is a 
+			<code>compoundEvent</code> representing the 
+			<code>get_receiver</code> message occurrence. When we move the execution, the associated message must be also moved. In this case, the 
+			<code>startingEndPredecessorAfter</code> variable will point to the 
+			<code>compute_finish</code> execution occurrence. This variable represents the semantic elements (
+			<code>compute_finish</code>) associated to the graphical element preceding the 
+			<code>startingEnd</code> (
+			<code>get_send</code>) after the move of get execution. The 
+			<code>finishingEndPredecessorAfter</code> variable will point to the 
+			<code>get_receiver</code> message occurrence. This variable represents the semantic elements (
+			<code>get_receiver</code>) associated to the graphical element preceding the 
+			<code>finishingEnd</code> (
+			<code>get_finish</code>) after the move of get execution.
+		</p>
+		<h3 id="instanceRoleReorderTool">Instance Role Reorder Tool</h3>
+		<p>This tool is called when the user horizontally moves an instance role on the diagram.</p>
+		<p>A single unique event reorder tool can and must be specified for instance role mappings. The purpose of the tool is to re-synchronize the graphical ordering with the semantic ordering. When the user reorders a graphical instance role, the global order of graphical instance roles changes and the tool must then reorder the semantic instance roles according to these changes.</p> 
+		<img border="0" src="images/new_instance_role_reorder_tool.png"/>
+		<p>This tool has access to the following two variables usable in expressions:</p>
+		<ul>
+			<li>
+				<code>predecessorBefore</code>: represents in the global instance role ordering the element previously preceding the moved instance role. It is the element which, 
+				<strong>before</strong> the move, was directly 
+				<strong>preceding</strong> the moved element;
+			</li>
+			<li>
+				<code>predecessorAfter</code>: represents in the global instance role ordering the element preceding the moved instance role. It is the event which, 
+				<strong>after</strong> the move, will be directly 
+				<strong>preceding</strong> the moved element;
+			</li>
+		</ul> 
+		<img border="0" src="images/instance_role_reorder_tool_visual1.png"/>
+		<p>In this example, we want to move the 
+			<code>consumers</code> instance role after the 
+			<code>producers</code> instance role. Thus, the 
+			<code>predecessorAfter</code> variable will point to the 
+			<code>producers</code> execution occurrence. This variable represents the semantic elements (
+			<code>producers</code>) associated to the graphical element preceding the 
+			<code>consumers</code> instance role after its move. The 
+			<code>predecessorBefore</code> variable will be null, because 
+			<code>consumers</code> was the first element of the ordering.
+		</p>
+		<h3 id="OtherTools">Other Tools</h3>
+		<p>Nothing specific for deletion tool, edit label tool, diagram creation and diagram navigation tool, have a look at the Sirius Specifier Guide.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_properties.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_properties.png
new file mode 100644
index 0000000..b36b2d0
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual1.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual1.png
new file mode 100644
index 0000000..c4fbd19
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual2.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual2.png
new file mode 100644
index 0000000..a941e5e
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual3.png b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual3.png
new file mode 100644
index 0000000..d93c4fb
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/basic_message_mapping_visual3.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/default_layer.png b/doc/5.1.x/specifier/sequences/images/default_layer.png
new file mode 100644
index 0000000..2de5da4
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/default_layer.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/description_properties.png b/doc/5.1.x/specifier/sequences/images/description_properties.png
new file mode 100644
index 0000000..8b71604
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/description_properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/ends_ordering.png b/doc/5.1.x/specifier/sequences/images/ends_ordering.png
new file mode 100644
index 0000000..2a87b0d
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/ends_ordering.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/ends_ordering_visual.png b/doc/5.1.x/specifier/sequences/images/ends_ordering_visual.png
new file mode 100644
index 0000000..139d05f
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/ends_ordering_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/event_ends.png b/doc/5.1.x/specifier/sequences/images/event_ends.png
new file mode 100644
index 0000000..c901490
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/event_ends.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution.png b/doc/5.1.x/specifier/sequences/images/execution.png
new file mode 100644
index 0000000..6cdaeab
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_creation_tool_visual.png b/doc/5.1.x/specifier/sequences/images/execution_creation_tool_visual.png
new file mode 100644
index 0000000..87fe8cf
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_creation_tool_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_properties1.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties1.png
new file mode 100644
index 0000000..0ed7f2d
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_properties2.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties2.png
new file mode 100644
index 0000000..1dd889f
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_properties2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_reused.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_reused.png
new file mode 100644
index 0000000..6b0ae69
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_reused.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mapping_style.png b/doc/5.1.x/specifier/sequences/images/execution_mapping_style.png
new file mode 100644
index 0000000..abfcea5
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mapping_style.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/execution_mappings_visual.png b/doc/5.1.x/specifier/sequences/images/execution_mappings_visual.png
new file mode 100644
index 0000000..c1a93e9
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/execution_mappings_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/instance_role_mapping_properties.png b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_properties.png
new file mode 100644
index 0000000..ab4abfb
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_properties.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/instance_role_mapping_style.png b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_style.png
new file mode 100644
index 0000000..078a5d4
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/instance_role_mapping_style.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/instance_role_reorder_tool_visual1.png b/doc/5.1.x/specifier/sequences/images/instance_role_reorder_tool_visual1.png
new file mode 100644
index 0000000..a251dbd
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/instance_role_reorder_tool_visual1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/interaction.png b/doc/5.1.x/specifier/sequences/images/interaction.png
new file mode 100644
index 0000000..fcab8c2
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/interaction.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/java_service.png b/doc/5.1.x/specifier/sequences/images/java_service.png
new file mode 100644
index 0000000..0331735
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/java_service.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/lifeline.png b/doc/5.1.x/specifier/sequences/images/lifeline.png
new file mode 100644
index 0000000..69a5c8b
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/lifeline.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/lifeline_creation_tool.png b/doc/5.1.x/specifier/sequences/images/lifeline_creation_tool.png
new file mode 100644
index 0000000..50cd3bb
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/lifeline_creation_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/mappings.png b/doc/5.1.x/specifier/sequences/images/mappings.png
new file mode 100644
index 0000000..0a752f5
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/mappings.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/message.png b/doc/5.1.x/specifier/sequences/images/message.png
new file mode 100644
index 0000000..8a031cd
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/message.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/message_creation_precondition.png b/doc/5.1.x/specifier/sequences/images/message_creation_precondition.png
new file mode 100644
index 0000000..3f12f93
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/message_creation_precondition.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/message_creation_tool_visual.png b/doc/5.1.x/specifier/sequences/images/message_creation_tool_visual.png
new file mode 100644
index 0000000..0dce6ea
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/message_creation_tool_visual.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_basic_message_mapping.png b/doc/5.1.x/specifier/sequences/images/new_basic_message_mapping.png
new file mode 100644
index 0000000..871fc90
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_basic_message_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_creation_tool_section.png b/doc/5.1.x/specifier/sequences/images/new_creation_tool_section.png
new file mode 100644
index 0000000..5acb4fa
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_creation_tool_section.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_description.png b/doc/5.1.x/specifier/sequences/images/new_description.png
new file mode 100644
index 0000000..809e690
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_description.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_execution_creation_tool.png b/doc/5.1.x/specifier/sequences/images/new_execution_creation_tool.png
new file mode 100644
index 0000000..8e69843
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_execution_creation_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_execution_mapping.png b/doc/5.1.x/specifier/sequences/images/new_execution_mapping.png
new file mode 100644
index 0000000..19b1c62
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_execution_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_instance_role_mapping.png b/doc/5.1.x/specifier/sequences/images/new_instance_role_mapping.png
new file mode 100644
index 0000000..590ee42
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_instance_role_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_instance_role_reorder_tool.png b/doc/5.1.x/specifier/sequences/images/new_instance_role_reorder_tool.png
new file mode 100644
index 0000000..d69b8bf
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_instance_role_reorder_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_message_creation_tool.png b/doc/5.1.x/specifier/sequences/images/new_message_creation_tool.png
new file mode 100644
index 0000000..7e2c16a
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_message_creation_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_message_mapping.png b/doc/5.1.x/specifier/sequences/images/new_message_mapping.png
new file mode 100644
index 0000000..871fc90
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_message_mapping.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/new_reorder_tool.png b/doc/5.1.x/specifier/sequences/images/new_reorder_tool.png
new file mode 100644
index 0000000..ced06ec
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/new_reorder_tool.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/orderings.png b/doc/5.1.x/specifier/sequences/images/orderings.png
new file mode 100644
index 0000000..7d8be85
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/orderings.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/reorder_tool_visual1.png b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual1.png
new file mode 100644
index 0000000..0f86cc5
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual1.png
Binary files differ
diff --git a/doc/5.1.x/specifier/sequences/images/reorder_tool_visual2.png b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual2.png
new file mode 100644
index 0000000..01cd27b
--- /dev/null
+++ b/doc/5.1.x/specifier/sequences/images/reorder_tool_visual2.png
Binary files differ
diff --git a/doc/5.1.x/specifier/tables/Tables.html b/doc/5.1.x/specifier/tables/Tables.html
new file mode 100644
index 0000000..a7c428e
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/Tables.html
@@ -0,0 +1,375 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Tables</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SpecifyingTableEditors">Specifying Table Editors</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SpecifyingTableEditors">Specifying Table Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#edition_tables">Edition Tables</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#table_tools">Table Tools</a>
+							</li>
+							<li>
+								<a href="#line_mappings">Line Mappings</a>
+							</li>
+							<li>
+								<a href="#feature_column_mapping">Feature Column Mappings</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#cross_tables">Cross Tables</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#cross_table_tools">Table Tools</a>
+							</li>
+							<li>
+								<a href="#element_column_mapping">Element Column Mappings</a>
+							</li>
+							<li>
+								<a href="#intersection_mapping">Intersection Mappings</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Sirius supports the definition of two kinds of tabular modelers:</p>
+		<ul>
+			<li>
+				<em>Edition Tables</em> are classical tables, where each line represents an element and each column (from a fixed set) represents some (potentially computed) property of the element. Lines can contain sub-lines (recursively) to represent sub-elements, and the end-user can expand/collapse these at will. Provided that you specify the corresponding tools, users can create new lines and delete existing ones.
+			</li>
+			<li>
+				<em>Cross Tables</em> are slightly different, optimized to represent relationship between elements in a matrix-like way. Both lines and columns represent elements, and each call at an intersection if a certain relationship exists between them. Cross tables also support sub-lines, but not sub-columns. However provided the right tools are specified, users can create and/or delete columns in addition to lines.
+			</li>
+		</ul>
+		<p>Both kinds of table share a lot of elements. This document will focus on 
+			<a href="#edition_tables">edition tables</a>, which are the most commonly used. The 
+			<a href="#cross_tables">section on cross-tables</a> describes them by their differences with edition tables.
+		</p> 
+		<img border="0" src="./images/table_description_editor.png"/>
+<em>
+<ul>
+<img src="images/tricks.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> 
+		<em>use the <img src="images/questionMarque.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> icon to access the available fields tooltips:</em>
+<ul>
+			<li> 
+		<b>Id</b> field: The identifier of this element. Must be unique. Changing this identifier will break existing user models which reference the old identifier.</li>
+			<li> 
+		<b>Label</b> field: The label used to display this to the end-user.</li>
+			<li> 
+		<b>Domain Class</b> field: Type of the element represented by the Node.</li>
+			<li> 
+		<b>Semantic Candidates Expression</b> field: Restrict the list of elements to consider before creating the graphical elements. If it is not set, then all semantic models in session will be browsed and any element of the given type validating the precondition expression will cause the creation of a graphical element. If you set this attribute then only the elements returned by the expression evaluation will be considered.</li>
+</ul>
+</ul>
+</em>
+		<p>
+			<strong>Note</strong>: Advanced features like layers, filters and mapping imports which exist for diagrams are not currently available for tables.
+		</p>
+		<h2 id="edition_tables">Edition Tables</h2>
+		<p>Edition tables are configured by creating an 
+			<em>Edition Table Description</em> element (inside a 
+			<em>Viewpoint</em>) and its sub-elements (which describe the lines, columns and tools). 
+			<em>Edition Table Descriptions</em> are similar to other representation description elements.
+		</p>
+		<p>The mandatory 
+			<em>Domain Class</em> attribute is the type of semantic element which are represented by the table. In the 
+			<em>Model Explorer</em>, end-users will be able to create new instances of this table on semantic elements of this type (assuming the corresponding viewpoint is enabled in the 
+			<em>Modeling Project</em>). The syntax for the domain class name can be the basic name, like 
+			<code>Class</code>, a qualified name using name of the EMF EPackage which defines the type, like 
+			<code>uml.Class</code>, or a fully qualified URI like 
+			<code>http://www.eclipse.org/uml2/3.0.0/UML#//Class</code>.
+		</p>
+		<p>By default, new tables can be created on 
+			<em>any</em> instance of the 
+			<em>Domain Class</em>. You can use the 
+			<em>Precondition Expression</em> (available in the 
+			<em>Advanced</em> category) to change this. If such an expression is specified, it will be evaluated in the context of the semantic element the user has selected, and only if the expression returns 
+			<code>true</code> will the user be able to create a new table on this element.
+		</p>
+		<p>The default title for newly created table can be specified using the 
+			<em>Title expression</em> (
+			<em>Advanced</em> category), which is evaluated in the context of the semantic element on which the table is created, and should return a string. If the expression is not specified, the default title is the label of the table description (of its 
+			<em>Id</em> if no 
+			<em>Label</em> is set) prefixed with the string 
+			<code>"new "</code> (e.g. 
+			<code>new Package Contents</code>).
+		</p>
+		<p>It is recommended that the 
+			<em>Edition Table Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the 
+			<em>Metamodels</em> property section of the 
+			<em>Edition Table Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your 
+			<a href="../../Glossary.html#VSM">
+				<em>VSM</em>
+			</a>.
+		</p>
+		<p>The 
+			<em>Initialization</em> and 
+			<em>Show on startup</em> flags control whether table instances are created and/or opened automatically without user intervention. If 
+			<em>Initialization</em> is set, then when the viewpoint which contains this table description is enabled, instances of this table description will be automatically created on all compatible semantic elements. If 
+			<em>Show on startup</em> in set, then when a modeling project is opened which contains instances of this table description, they will be opened: if only one such representation exist, it will be opened automatically; is there are more than one, a dialog box will appear to allow the user to select which one(s) to open.
+		</p>
+		<p>Finally, the 
+			<em>Initial Header Column Width</em> (
+			<em>Advanced</em> category) is specific to table descriptions (both edition tables and cross tables). It can be used to specify the default size (in pixels) of the left-most column of the table, which contains the labels of the elements represented by each line. If the value if 0 (the default), the column width will be computed from the initial content when the table is created.
+		</p>
+		<h3 id="table_tools">Table Tools</h3>
+		<p>Some tools which apply to the whole table are specified directly inside the 
+			<em>Edition Table Description</em>:
+		</p>
+		<ul>
+			<li>
+				<em>Representation Creation Tools</em>: These tools (one for each kind of representation supported by Sirius) can be used to create (and open) a new representation from an existing table element. It will be available to end-users in the 
+				<em>Navigate</em> context menu on compatible table elements. To configure the tool, simply select in the 
+				<em>Mappings</em> property which kinds of lines the tool should appear on (you can be more precise using the 
+				<em>Precondition</em> expression if necessary), and select the kind of representation which should be created using the 
+				<em>Representation Description</em> property (in practice, one of 
+				<em>Diagram Description</em>, 
+				<em>Table Description</em> or 
+				<em>Tree Description</em> depending on the tool). Normally, the new representation will be created on the semantic element represented by the tree item on which the user invoked the tool. Sometimes you want the tool to appear on one element, but create a representation on another one. In this case, use the 
+				<em>Browse expression</em> (in the 
+				<em>Advanced</em> category) to navigate from the element selected to the one one which the new representation should actually be created. Finally, any operation you specify in the body of the tool will be executed when the tool is invoked; you can use it to initialize the content of the model represented.
+			</li>
+			<li>
+				<em>Representation Navigation Tools</em>: These tools (one for each kind of representation supported by Sirius) are very similar to the previous ones. The only differences is that they allow users to navigate to existing representation instead of creating new ones. If such a tool exists, the 
+				<em>Navigate</em> context menu on an element will contains an entry for each corresponding representation which already exists on the element selected (or reachable from the selected element using the 
+				<em>Browse expression</em>). You can specify a 
+				<em>Navigation name expression</em> (
+				<em>Advanced</em> category) to be used in the menu entry instead of using the title of the existing representation. This can be useful to make it more explicit what the relationship is between the current element and the target tree.
+			</li>
+			<li>
+				<em>Line Creation Tools</em> which are directly contained inside the 
+				<em>Table Description</em> are used to create root table lines. They are available to end-users through a combo button in the main Eclipse tool-bar. To configure it, simply select the kind of line the tool will create in the 
+				<em>Mapping</em> property, and specify the tool&#8217;s behavior using normal model operations.
+			</li>
+		</ul>
+		<h4 id="tools_specification">Tools Specification</h4>
+		<p>
+			<a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+		</p>
+		<h3 id="line_mappings">Line Mappings</h3>
+		<p>The lines which will appear in a table (and their organization in sub-lines) are defined by the 
+			<em>Line</em> mapping elements inside the 
+			<em>Table Description</em> element. A 
+			<em>Table Description</em> contains 
+			<em>Line</em> mappings which define which elements will appear as top-level lines of the table, while each 
+			<em>Line</em> mapping can contain sub-mappings which define its own direct sub-lines. If an element (the table or a line mapping) contains several sub-mappings, the element&#8217;s content will appear in the order of the mappings: first all the instances of the first mapping, then the instances of the second one, etc.
+		</p>
+		<p>A 
+			<em>Line</em> mapping is defined by a 
+			<em>Domain Class</em> and a 
+			<em>Semantic Candidates Expression</em>. The 
+			<em>Semantic Candidates Expression</em> indicates where to look in the semantic model for elements which should be represented by the mapping. The expression is evaluated in the context of the parent&#8217;s semantic element (the parent being either the table itself or a parent line). It should return a set of semantic elements. Only those which are instances of the specified 
+			<em>Domain Class</em> are retained and actually represented as instances of this mapping. The semantic element thus associated to each line is called the line&#8217;s 
+			<em>target</em> element.
+		</p>
+		<p>You can associate more semantic elements to a line by defining the 
+			<em>Associated Elements Expression</em> (in the 
+			<em>Advanced Category</em>), which is evaluated in the context of the target and may return more semantic elements. Any change in the target element or one of the associated elements will automatically trigger a refresh of the line.
+		</p>
+		<p>The 
+			<em>Header Label Expression</em> (in the 
+			<em>Label</em> category) is evaluated in the context of a line&#8217;s target and should return the text to be shown for the line in the header column (on the left of the table).
+		</p>
+		<p>A 
+			<em>Line</em> mapping may 
+			<em>Reuse Sub Lines</em> (see the 
+			<em>Import</em> category), including itself, as sub-mappings. The effect is exactly the same as if the reused mapping(s) were created as children if the parent. However because a mapping can reuse itself or one of its parent mapping, this allows to create table of infinite depth (or at least not bounded a priori). The 
+			<em>Reused in Mappings</em> property is the symmetrical of 
+			<em>Reused Sub Lines</em>: it shows you which line mappings reuse this one as a sub-line.
+		</p>
+		<h4 id="line_style">Line Style</h4>
+		<p>You can create 
+			<em>Style</em> elements inside a line mapping to set the default style of all the cells on this line (note that this style override the column mappings one).
+		</p>
+		<p>A 
+			<em>Foreground Style</em> element can be used to set the font size, font style (e.g. italic) and text color. A 
+			<em>Background Style</em> can be used to set the background color. Both are optional.
+		</p>
+		<p>You can also specify 
+			<em>Conditional styles</em> for the foreground. Each one is a normal foreground style wrapped in a predicate expression (evaluated in the context of the line&#8217;s semantic element). If conditional styles are specified, their conditions are tested in order, and the first one which matches is used. If no conditional style is defined, the 
+			<em>Foreground Style</em> (or the default) is applied.
+		</p>
+		<h4 id="line_tools">Line Tools</h4>
+		<p>There are two kinds of tools which can be created inside line mappings (and apply to all instances of that mapping).</p>
+		<ul>
+			<li>
+				<em>Create Line Tool</em> are used to create a new lines. A mapping can contain several such tools. They appear in the context menu of the instances of the mapping, if the (optional) 
+				<em>Precondition</em> of the tool holds for the instance&#8217;s target. A creation tool must specify what kind of 
+				<em>Mapping</em> it will create. The actual behavior of the creation tool is defined in the tool&#8217;s body, using all the standard model operations.
+			</li>
+			<li>
+				<em>Delete Line Tool</em>, used to delete elements. If a line mapping does not define explicitly a deletion tool, the default behavior of the 
+				<em>Delete line</em> operation is to remove the line&#8217;s semantic 
+				<em>target</em> and all 
+				<em>associated elements</em> from the semantic model. If you want a specific behavior, you must create a 
+				<em>Delete Line Tool</em> explicitly and describe the behavior in the tool&#8217;s body. If you want to prevent the deletion of an element, you must create a 
+				<em>Delete Line Tool</em> and set a 
+				<em>Precondition</em> to return 
+				<code>false</code> for the elements which should not be deleted.
+			</li>
+		</ul>
+		<h3 id="feature_column_mapping">Feature Column Mappings</h3>
+		<p>The columns which will appear in an edition table are defined by the 
+			<em>Feature Column</em> mapping elements inside the 
+			<em>Table Description</em> element. They are named 
+			<em>Feature Column</em> mappings because they normally represent a property (maybe computed) of the elements which are represented by the table&#8217;s lines, and also to distinguish them from the kind of columns which appear in 
+			<a href="#cross_tables">cross tables</a>. 
+		</p>
+		<p>A 
+			<em>Feature Column</em> mapping is defined by its 
+			<em>Feature Name</em>, which should normally be the name of a valid feature (attribute or reference) of the element which appear in the tables' lines. If a line represents a semantic element 
+			<em>S1</em> but you want on some column to show a property of an element reachable from 
+			<em>S1</em> instead of 
+			<em>S1</em> itself, you can use the 
+			<em>Feature Parent Expression</em> (
+			<em>Advanced</em> category), which is evaluated in the context of 
+			<em>S1</em> and should return an element 
+			<em>S2</em>. 
+			<em>S2</em> will be considered the 
+			<em>target</em> element of the cell at this intersection instead of 
+			<em>S1</em>.
+		</p>
+		<p>You can associate more semantic elements to the mapping using the 
+			<em>Associated elements expression</em> in the 
+			<em>Advanced</em> category. The expression will be evaluated in the context of the target semantic element of the cell.
+		</p>
+		<p>The 
+			<em>Label Expression</em> is used to compute the text to show in each cell. It is evaluated for each cell in the context of its target semantic element. If you compute text for elements whose EClass have no common EStructuralFeatures (inherited or with same name), you can use 
+			<code>*</code> as 
+			<em>Feature Name</em> to skip the feature name validation during the cell creation. 
+		</p>
+		<p>In tables, the contents of the cell is editable by default. Even with no direct edit tool specified, Sirius will try to interpret the text entered by the user according to the type of the feature the column represents (as defined by the 
+			<em>Feature Name</em>. For example if a column represents a boolean attribute, Sirius will correctly interpret the strings 
+			<code>"true"</code> and 
+			<code>"false"</code> and set the value accordingly when the user edits a cell. You can disable this behavior by giving a 
+			<em>Can Edit</em> expression, which is evaluated in the context of the semantic element of each individual cell. It should return 
+			<code>false</code> if that cell should not be editable.
+		</p>
+		<p>Finally, the 
+			<em>Header Label Expression</em> is used to compute the header of the column itself, and is evaluated in the context of the table&#8217;s target semantic element, and the 
+			<em>Initial width</em>, if set to a non-zero value, is used as the initial width of the column.
+		</p>
+		<h4 id="column_styles">Column Styles</h4>
+		<p>Columns can contain style definition to set the style of all the cells on these columns. However, these styles can be overridden by the styles which may be present in the line mappings for the cells of this column. The style definition elements, including support for conditional styles, is the same as for style associated to line mappings. Refer to 
+			<a href="#line_style">the corresponding section</a> for more details.
+		</p>
+		<h4 id="column_tools">Column Tools</h4>
+		<p>Column can currently only define a 
+			<em>Label edit</em> tool, which will apply to all the cells of the column. It works like all edit The 
+			<em>Edit Mask</em> element (contained inside the tool) is used to parse the new label&#8217;s value as entered by the user, and to select part of this label as input variables to the editing action&#8217;s body. The mask can contain substrings of the form 
+			<code>{N}</code> where 
+			<em>N</em> is a number. The parts of the new label&#8217;s value which correspond to these substring will be available as variables named <code>argN</code>. For example, with an edit mask of <code>{0}:{1}</code> and an input string entered by the user of <code>attr : EString</code>, the tool&#8217;s body would be executed with variables <code>arg0</code> set to <code>attr&#9251;</code> and <code>arg1</code> set to <code>&#9251;EString</code>.
+		</p>
+		<h2 id="cross_tables">Cross Tables</h2>
+		<p>
+			<em>Cross Tables</em> are slightly different from edition tables. They are optimized to represent relationship between elements in a matrix-like way. Both lines and columns represent elements, and each call at an intersection if a certain relationship exists between them. Cross tables also support sub-lines, but not sub-columns. However provided the right tools are specified, users can create and/or delete columns in addition to lines.
+		</p>
+		<p>Cross tables are specified using a 
+			<em>Cross Table Description</em> element, which works exactly like 
+			<a href="#edition_tables">
+				<em>Edition Table Description</em>
+			</a> elements. The differences appear in the type of elements they can contain.
+		</p>
+		<h3 id="cross_table_tools">Table Tools</h3>
+		<p>Cross tables can contain the same kinds of tools as edition tables (see 
+			<a href="#table_tools">the corresponding section</a> for details). In addition, they can contain 
+			<em>Create Column Tools</em>, which behave exactly like 
+			<em>Create Line</em> tools, except that they apply to 
+			<a href="#element_column_mapping">
+				<em>Element Column</em> mappings
+			</a> (see below) and are used to create new columns in the table.
+		</p>
+		<h4 id="cross_table_tools_specification">Tools Specification</h4>
+		<p>
+			<a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+		</p>
+		<h3 id="element_column_mapping">Element Column Mappings</h3>
+		<p>In cross tables, columns represent elements instead of elements' properties (as is the case for edition tables). The set of columns is defined by one or more 
+			<em>Element Column</em> mappings. They are almost identical to 
+			<a href="#line_mappings">line mappings</a>, except that:
+		</p>
+		<ul>
+			<li>they can not be nested (there are no &#8220;sub-columns&#8221; like there are sub-lines), and thus can not &#8220;reuse&#8221; column mappings either;</li>
+			<li>they can have an 
+				<em>Initial width</em> (set in the 
+				<em>Advanced</em> category). 
+			</li>
+		</ul>
+		<p>
+			<em>Element Column</em> mappings can contain a 
+			<em>Create Column Tool</em> and a 
+			<em>Delete Column Tool</em>, which are specified and behave in a similar way than the 
+			<em>Create Line</em> and 
+			<em>Delete Line</em> 
+			<a href="#line_tools">tools for line mappings</a>.
+		</p>
+		<p>They can also contain style definitions (including conditional style), which apply to all the cells in the column (unless overridden by the intersection mapping or by the line mapping if any).</p>
+		<h3 id="intersection_mapping">Intersection Mappings</h3>
+		<p>The line and element column mappings in a cross table define which lines and columns will be present in the tables, but not the contents of the cells. This is defined by 
+			<em>Intersection</em> mappings. The 
+			<em>Line Mapping</em> and 
+			<em>Column Mapping</em> properties indicate which cells the mapping describes. The 
+			<em>Label Expression</em>, evaluated in the context of the cell&#8217;s targets semantic element, should return the text to show in the cell, while the 
+			<em>Can Edit</em> expression indicates whether or not the cell&#8217;s value can be edited by end-users.
+		</p>
+		<p>There are two slightly different use cases for intersection mapping, which use different sub-sets of the remaining properties:</p>
+		<ol>
+			<li>Intersections which represent a relation between the element on a line and the element on a column. For example, if both lines and columns represented UML classes, this could be the &#8220;super-class&#8221; reference between a class and those it inherits from;</li>
+			<li>Intersections which represent a semantic element (instead of just a relation) which is itself related to both the element on the line and the element on a column. To continue with the UML example, this would be used to represent UML Associations, which are full-blown objects representing a relationship between classes.</li>
+		</ol>
+		<p>If you are familiar with it, this is similar to 
+			<em>Relation Based Edges</em> and 
+			<em>Element Based Edges</em> in Sirius diagrams.
+		</p>
+		<p>In the first case (&#8220;relation-based intersection&#8221;), the semantic element of a cell will the the semantic element of the cell&#8217;s line. To configure such an intersection, you must only set the 
+			<em>Column Finder Expression</em>: from a line&#8217;s semantic target element, it should return the semantic element of the column in which the cell should appear.
+		</p>
+		<p>The second use case (&#8220;element-based intersection&#8221;) is enabled by setting the 
+			<em>Use Domain Class</em> flag in the 
+			<em>Domain Based</em> category. You must then indicate the 
+			<em>Domain Class</em> of the elements which will be represented by the cells, and the 
+			<em>Semantic Candidates Expression</em>. The expression will be evaluated in the context of the whole table&#8217;s semantic element, and should return all elements (instances of the 
+			<em>Domain Class</em>) which should be represented by cells. These elements will be the semantic target element of the cell. You can use the 
+			<em>Precondition Expression</em> and 
+			<em>Associated elements expression</em> (
+			<em>Advanced</em> category) with the same semantics as for other mappings. Finally, you must set both the 
+			<em>Column Finder Expression</em> (
+			<em>General</em> category) and the 
+			<em>Line Finder Expression</em> (
+			<em>Domain Based</em> category): they will both be evaluated in the context of the cell&#8217;s semantic element, and should return the semantic elements of the column and line at which the intersection should appear. In our example, these would be expressions which, from the 
+			<em>Association</em> element, find the source and target classes of the association.
+		</p>
+		<h4 id="intersection_mapping_style">Intersection Style</h4>
+		<p>An 
+			<em>Intersection</em> mapping can contain style elements, including conditional styles. If they are present, they override any style set on the corresponding column mapping or line mapping.
+		</p>
+		<h4 id="intersection_mapping_tools">Intersection Tools</h4>
+		<p>Intersection mappings can contain two kinds of tools:</p>
+		<ul>
+			<li>
+				<em>Label Edit</em> tools are standard &#8220;direct edit&#8221; tools, which allow end-users to edit a cell&#8217;s label. You can specify the actual changes in the model in the tool&#8217;s body.
+			</li>
+			<li>
+				<em>Create Cell Tools</em> are used when the user edits an initially empty cell, where there is no relation (or element relating) the line and column. It is defined like a 
+				<em>Label Edit</em> tool (with an 
+				<em>Edit Mask Variable</em> to obtain the text entered by the user), but instead of editing an existing relation, it should create a relation (e.g. add the class in the column as a super-class to the one on the line) or the element relating the line and column (e.g. create an 
+				<em>Association</em> which links the classes). 
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/tables/images/questionMarque.png b/doc/5.1.x/specifier/tables/images/questionMarque.png
new file mode 100644
index 0000000..09dda8c
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/images/questionMarque.png
Binary files differ
diff --git a/doc/5.1.x/specifier/tables/images/table_description_editor.png b/doc/5.1.x/specifier/tables/images/table_description_editor.png
new file mode 100644
index 0000000..4a9ab77
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/images/table_description_editor.png
Binary files differ
diff --git a/doc/5.1.x/specifier/tables/images/tricks.png b/doc/5.1.x/specifier/tables/images/tricks.png
new file mode 100644
index 0000000..a0679f0
--- /dev/null
+++ b/doc/5.1.x/specifier/tables/images/tricks.png
Binary files differ
diff --git a/doc/5.1.x/specifier/trees/Trees.html b/doc/5.1.x/specifier/trees/Trees.html
new file mode 100644
index 0000000..ca0ecd5
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/Trees.html
@@ -0,0 +1,290 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Trees</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SpecifyingTreeEditors">Specifying Tree Editors</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SpecifyingTreeEditors">Specifying Tree Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#tree_description">Tree Descriptions</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#tree_tools">Tree Tools</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#mappings">Tree Item Mappings</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#item_style">Item Style</a>
+							</li>
+							<li>
+								<a href="#item_tools">Item Tools</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>A tree is a representation which provides a hierarchical viewpoint on your data. It can provide a lot of information in a clear and concise way, and can be especially useful to progressively reveal more and more detailed information on a model when the user expands the tree elements to &#8220;dig into&#8221; the model.</p>
+		<p>Trees are probably the easiest kind of representation to define in Sirius. Do not hesitate to define small tree descriptions, even read-only, to provide alternative and synthetic viewpoints on your data, like type hierarchies, dependencies between elements, etc.</p> 
+		<img border="0" src="./images/tree_description_editor.png"/>
+<em>
+<ul>
+<img src="images/tricks.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> 
+		<em>use the <img src="images/questionMarque.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> icon to access the available fields tooltips:</em>
+<ul>
+			<li> 
+		<b>Id</b> field: The identifier of this element. Must be unique. Changing this identifier will break existing user models which reference the old identifier.</li>
+			<li> 
+		<b>Label</b> field: The label used to display this to the end-user.</li>
+			<li> 
+		<b>Domain Class</b> field: Type of the element represented by the Node.</li>
+			<li> 
+		<b>Semantic Candidates Expression</b> field:
+			    <ul>
+			    <li>Expected return type: a 
+		<code>Collection&lt;EObject&gt;</code> or an EObject.</li>
+			        <li>vailable variables: 
+			        <ul>
+		    		    <li> containerView: ecore.EObject | container of the current DTreeElement (variable is available if container is not null).</li>
+			    	    <li> view: sirius.DTreeElement | current DTreeElement.</li>
+				        <li> container: ecore.EObject | semantic target of $containerView (if it is a DSemanticDecorator).</li>
+			        </ul>
+			    </li>
+			    </ul>
+			</li>
+</ul>
+</ul>
+</em>
+		<p>
+			<strong>Note</strong>: Advanced features like layers, filters and mapping imports which exist for diagrams are not currently available for trees.
+		</p>
+		<h2 id="tree_description">Tree Descriptions</h2>
+		<p>Similar to other kinds of Sirius representations, trees are configured by creating a 
+			<em>Tree Description</em> element and its sub-elements inside a 
+			<a href="../../Glossary.html#VSM">
+				<em>Viewpoint Specification Model</em>
+			</a>.
+		</p>
+		<p>A 
+			<em>Tree Description</em> has a mandatory 
+			<em>Id</em>, which must be unique in the context of the viewpoint it is part of, and an optional 
+			<em>Label</em>. The 
+			<em>Id</em> is used internally to identify the type of tree, and must be kept stable across different versions of the description (or it will make trees created with the old 
+			<em>Id</em> unusable). The 
+			<em>Label</em> is used in the UI and will be visible to end-users. It can be changed with no impact on existing representation files. If the 
+			<em>Label</em> is not specified, the 
+			<em>Id</em> is used instead in the UI.
+		</p>
+		<p>The mandatory 
+			<em>Domain Class</em> attribute of a 
+			<em>Tree Description</em> is the type of semantic element which are represented by the tree. In the 
+			<em>Model Explorer</em>, end-users will be able to create new instances of this tree on semantic elements of this type (assuming the corresponding viewpoint is enabled in the 
+			<em>Modeling Project</em>). The syntax for the domain class name can be the basic name, like 
+			<code>Class</code>, a qualified name using name of the EMF EPackage which defines the type, like 
+			<code>uml.Class</code>, or a fully qualified URI like 
+			<code>http://www.eclipse.org/uml2/3.0.0/UML#//Class</code>.
+		</p>
+		<p>By default, new trees can be created on 
+			<em>any</em> instance of the 
+			<em>Domain Class</em>. You can use the 
+			<em>Precondition Expression</em> (available in the 
+			<em>Advanced</em> category) to change this. If such an expression is specified, it will be evaluated in the context of the semantic element the user has selected, and only if the expression returns 
+			<code>true</code> will the user be able to create a new tree on this element.
+		</p>
+		<p>The default title for newly created trees can be specified using the 
+			<em>Title expression</em>, which is evaluated in the context of the semantic element on which the tree is created, and should return a string. If the expression is not specified, the default title is the label of the tree description (of its 
+			<em>Id</em> if no 
+			<em>Label</em> is set) prefixed with the string 
+			<code>"new "</code> (e.g. 
+			<code>new Class Hierarchy</code>).
+		</p>
+		<p>It is recommended that the 
+			<em>Tree Description</em> be explicitly associated with the meta-model(s) of the semantic elements it will represent. You can add referenced meta-models from different sources in the 
+			<em>Metamodels</em> property section of the 
+			<em>Tree Description</em>. Sirius will work even without this association, but setting it explicitly will give you better feedback when validating your 
+			<a href="../../Glossary.html#VSM">
+				<em>VSM</em>
+			</a>.
+		</p>
+		<p>Finally, the 
+			<em>Initialization</em> and 
+			<em>Show on startup</em> flags control whether tree instances are created and/or opened automatically without user intervention. If 
+			<em>Initialization</em> is set, then when the viewpoint which contains this tree description is enabled, instances of this tree description will be automatically created on all compatible semantic elements. If 
+			<em>Show on startup</em> in set, then when a modeling project is opened which contains instances of this tree description, they will be opened: if only one such representation exist, it will be opened automatically; is there are more than one, a dialog box will appear to allow the user to select which one(s) to open.
+		</p>
+		<p>The main concepts which define a tree are:</p>
+		<ul>
+			<li>
+				<em>Tree Item</em> mappings, which describe the elements that will appear on this tree, and how they map to the underlying semantic elements they represent;
+			</li>
+			<li>
+				<em>Styles</em>, which describe the graphical appearance of these representation elements;
+			</li>
+			<li>
+				<em>Tools</em>, which describe the actions the end-user can perform on the tree and its items and their effect on the associated semantic elements.
+			</li>
+		</ul>
+		<h3 id="tree_tools">Tree Tools</h3>
+		<p>Some of the tools which can be defined on tree editors are specified directly inside the top-level 
+			<em>Tree Description</em> element:
+		</p>
+		<ul>
+			<li>
+				<em>Create</em>: The 
+				<em>Create</em> tools which are directly contained inside the 
+				<em>Tree Description</em> are used to create root tree items. They are available to end-users through a combo button in the main Eclipse tool-bar. To configure it, simply select the kind of tree item the tool will create in the 
+				<em>Mapping</em> property, and specify the tool&#8217;s behavior using normal model operations.
+			</li>
+			<li>
+				<em>Drop Tool</em>: When defined directly inside the 
+				<em>Tree Description</em>, a 
+				<em>Drop Tool</em> specifies what happens when the user drops an element at the root of the tree (i.e. inside the editor, but not on an existing tree item). The 
+				<em>Drag source</em> property indicates whether the tool accepts elements dragged from a tree representation (value 
+				<em>Tree</em>), from the 
+				<em>Model Explorer</em> view (value 
+				<em>Model</em>), or both. If such a drop is detected and the 
+				<em>Precondition</em> evaluates to 
+				<code>true</code>, then the body of the drop tool is executed, with the 
+				<code>element</code> variable pointing to the semantic element being dropped and 
+				<code>newContainer</code> the semantic element in which it is dropped (in this case the tree&#8217;s semantic element). 
+				<i>WARNING</i>: if you choose 
+				<em>Model</em> or 
+				<em>Both</em> as source, your tool must be prepared to accept any type of source element which can be present in the 
+				<em>Model Explorer</em> view, including elements which have no relation to the source mappings you specified for the tool. Use a precondition to check the nature of the element being dragged (available through the 
+				<code>element</code> variable) to disable the tool source elements your tool does not support.
+			</li>
+			<li>
+				<em>Tree Creation</em>: This tool can be used to create (and open) a new tree from an existing tree item. It will be available to end-users in the 
+				<em>Navigate</em> context menu on compatible tree items. To configure the tool, simply select in the 
+				<em>Mappings</em> property which kinds of tree items the tool should appear on (you can be more precise using the 
+				<em>Precondition</em> expression if necessary), and select which kind of tree should be created using the 
+				<em>Tree Description</em> property. Normally, the new tree representation will be created on the semantic element represented by the tree item on which the user invoked the tool. Sometimes you want the tool to appear on one element, but create a representation on another one. In this case, use the 
+				<em>Browse expression</em> (in the 
+				<em>Advanced</em> category) to navigate from the element selected to the one in which the new tree should actually be created. Finally, any operation you specify in the body of the tool will be executed when the tool is invoked; you can use it to initialize the content of the model represented.
+			</li>
+			<li>
+				<em>Tree Navigation</em>: This tool is very similar to the previous one. The only differences is that it allows users to navigate to existing trees instead of creating new ones. If such a tool exists, the 
+				<em>Navigate</em> context menu on an item will contains an entry for each corresponding tree which already exists on the element selected (or reachable from the selected element using the 
+				<em>Browse expression</em>). You can specify a 
+				<em>Navigation name expression</em> (
+				<em>Advanced</em> category) to be used in the menu entry instead of using the title of the existing tree. This can be useful to make it more explicit what the relationship is between the current element and the target tree.
+			</li>
+		</ul>
+		<h4 id="tools_specification">Tools Specification</h4>
+		<p>
+			<a href="../general/ToolsSpecification.html">Refer to Tools specification</a>
+		</p>
+		<h2 id="mappings">Tree Item Mappings</h2>
+		<p>Trees are recursive by nature. Their contents is specified using a single concept of 
+			<em>Tree Item</em> mapping which can be composed recursively. A 
+			<em>Tree Description</em> contains 
+			<em>Tree Item</em> mappings which define which elements will appear at the top-level of the tree, while each 
+			<em>Tree Item</em> mapping can contain sub-mappings which define its own direct content. If an element (the tree or a tree item mapping) contains several sub-mappings, the element&#8217;s content will appear in the order of the mappings: first all the instances of the first mapping, then the instances of the second one, etc.
+		</p>
+		<p>A 
+			<em>Tree Item</em> mapping is defined by a 
+			<em>Domain Class</em>, a 
+			<em>Semantic Candidates Expression</em> and an optional 
+			<em>Precondition Expression</em> (in the 
+			<em>Advanced</em> category). The 
+			<em>Semantic Candidates Expression</em> indicates where to look in the semantic model for elements which should be represented by the mapping. The expression is evaluated in the context of the parent&#8217;s semantic element (the parent being either the tree itself or the parent item). It should return a set of semantic elements. Only those which are instances of the specified 
+			<em>Domain Class</em> and which also validate the optional 
+			<em>Precondition expression</em> are retained and actually represented as instances of this mapping. The semantic element thus associated to each tree item is called the item&#8217;s 
+			<em>target</em> element.
+		</p>
+		<p>You can associate more semantic elements to an item by defining the 
+			<em>Associated Elements Expression</em> (in the 
+			<em>Advanced Category</em>), which is evaluated in the context of the target and may return more semantic elements. Any change in the target element or one of the associated elements will automatically trigger a refresh of the tree item.
+		</p>
+		<p>A 
+			<em>Tree Item</em> mapping may 
+			<em>Specialize</em> another mapping, in which case it will inherit all of the specialized mapping&#8217;s properties for which it does not specify an explicit value.
+		</p>
+		<p>A 
+			<em>Tree Item</em> mapping may 
+			<em>Reuse</em> (see the 
+			<em>Imports</em> category) existing mappings, including itself, as sub-mappings. The effect is exactly the same as if the reused mapping(s) were created as children of the parent. However because a mapping can reuse itself or one of its parent mapping, this allows to create trees of infinite depth (or at least not bounded a priori).
+		</p>
+		<p>Tree items are created lazily, only when the user expands a parent item. This means that if you define sub-mappings which use costly operations to create, the cost will only be paid when the user actually &#8220;digs into&#8221; the tree to the corresponding level of details. This also means that through reuse you can create trees of potentially infinite depth (as deep as the user chooses to expand them) without risking an infinite loop. Note however that once created tree items do not disappear if their parent is collapsed. They are only removed if the user explicitly deletes them.</p>
+		<p>The actual appearance of a tree item is defined by its 
+			<a href="#item_style">style</a>, while its behavior is defined by the 
+			<a href="#item_tools">tools</a> associated to it.
+		</p>
+		<h3 id="item_style">Item Style</h3>
+		<p>An item&#8217;s appearance is controlled by one or more 
+			<em>Style</em> element(s) defined in the corresponding tree item mapping. Each tree item mapping 
+			<em>must</em> contain exactly one default style (which is created automatically when the mapping itself is created), and 
+			<em>may</em> contain one or more 
+			<em>conditional styles</em>.
+		</p>
+		<p>An item&#8217;s style is comprised of a 
+			<em>Label expression</em>, evaluated in the context of the item&#8217;s semantic target, and which should return the text to show for the item, and several configuration properties to control the font, style, color (both of the text and its background) and icon of the item. The default icon shown for an element (if 
+			<em>Show icon</em> is set), is the one defined in the semantic meta-model for the item&#8217;s target element. You can specify a different one using the 
+			<em>Icon path</em> property (in the 
+			<em>Advanced</em> category). This is especially useful if you have several items which represent different aspects of the same semantic element and thus share the same target.
+		</p>
+		<p>
+			<em>Tree Item</em> mappings can have one ore more 
+			<em>Conditional Style</em>. They are normal style elements with the same properties as described above, but wrapped in a 
+			<em>Conditional Style</em> element which defines a boolean expression. If an item mapping contains such styles, then for each instance of the mapping, the conditional styles will first be tried, in the order of their definitions. The first style whose condition returns 
+			<code>true</code> for the item&#8217;s target is used (and the remaining ones are not tested). If none of the conditional style apply, the default one is used. Note that because the conditions are tested in the order of definition, you should order them from the most likely to the least likely to optimize performance.
+		</p>
+		<h3 id="item_tools">Item Tools</h3>
+		<p>The behavior of a tree item is defined by the tools which are associated to its mapping. The tools which should apply to a tree item mapping are simply created inside the mapping itself. They can be:</p>
+		<ul>
+			<li>
+				<em>Creation Tool</em>, which is used to create a new Tree Item. A mapping can contain several such tools. They appear in the context menu of the instances of the mapping, if the (optional) 
+				<em>Precondition</em> of the tool holds for the instance&#8217;s target. A creation tool must specify what kind of 
+				<em>Mapping</em> it will create. The actual behavior of the creation tool is defined in the tool&#8217;s body, using all the standard model operations.
+			</li>
+			<li>
+				<em>Deletion Tool</em>, used to delete elements. If a mapping does not define explicitly a deletion tool, the default behavior of the 
+				<em>Delete tree item</em> operation is to remove the item&#8217;s semantic 
+				<em>target</em> and all 
+				<em>associated elements</em> from the semantic model. If you want a specific behavior, you must create a 
+				<em>Deletion tool</em> explicitly and describe the behavior in the tool&#8217;s body. If you want to prevent the deletion of an element, you must create a 
+				<em>Deletion tool</em> and set a 
+				<em>Precondition</em> to return 
+				<code>false</code> for the elements which should not be deleted.
+			</li>
+			<li>
+				<em>Direct Edit Tool</em>, used to allow end-users to directly edit the label of a Tree Item (by double-clicking or pressing 
+				<em>F2</em> or 
+				<em>Return</em> on a Tree Item). It specifies how to interpret the new label value, and which changes to apply to the model element. The 
+				<em>Edit Mask</em> element (contained inside the tool) is used to parse the new label&#8217;s value as entered by the user, and to select part of this label as input variables to the editing action&#8217;s body. The mask can contain substrings of the form 
+				<code>{N}</code> where 
+				<em>N</em> is a number. The parts of the new label&#8217;s value which correspond to these substring will be available as variables named <code>argN</code>. For example, with an edit mask of <code>{0}:{1}</code> and an input string entered by the user of <code>attr : EString</code>, the tool&#8217;s body would be executed with variables <code>arg0</code> set to <code>attr&#9251;</code> and <code>arg1</code> set to <code>&#9251;EString</code>.
+			</li>
+			<li>
+				<em>Drop Tool</em>: When defined inside a 
+				<em>Tree Item</em> mapping, a 
+				<em>Drop Tool</em> specifies what happens when the user drops an element onto an instance of the mapping. The 
+				<em>Drag source</em> property indicates whether the tool accepts elements dragged from a tree representation (value 
+				<em>Tree</em>), from the 
+				<em>Model Explorer</em> view (value 
+				<em>Model</em>), or both. If such a drop is detected and the 
+				<em>Precondition</em> evaluates to 
+				<code>true</code>, then the body of the drop tool is executed, with the 
+				<code>element</code> variable pointing to the semantic element being dropped and 
+				<code>newContainer</code> the semantic element in which it is dropped (in this case the tree&#8217;s semantic element).
+			</li>
+			<li>
+				<em>Pop-up menus</em> are used to add new menus and actions to the context menu associated to any Tree Item.
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/specifier/trees/images/questionMarque.png b/doc/5.1.x/specifier/trees/images/questionMarque.png
new file mode 100644
index 0000000..09dda8c
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/images/questionMarque.png
Binary files differ
diff --git a/doc/5.1.x/specifier/trees/images/tree_description_editor.png b/doc/5.1.x/specifier/trees/images/tree_description_editor.png
new file mode 100644
index 0000000..f10692a
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/images/tree_description_editor.png
Binary files differ
diff --git a/doc/5.1.x/specifier/trees/images/tricks.png b/doc/5.1.x/specifier/trees/images/tricks.png
new file mode 100644
index 0000000..a0679f0
--- /dev/null
+++ b/doc/5.1.x/specifier/trees/images/tricks.png
Binary files differ
diff --git a/doc/5.1.x/user/Sirius User Manual.html b/doc/5.1.x/user/Sirius User Manual.html
new file mode 100644
index 0000000..3a6c8be
--- /dev/null
+++ b/doc/5.1.x/user/Sirius User Manual.html
@@ -0,0 +1,58 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Sirius User Manual</title>
+		<link type="text/css" rel="stylesheet" href="../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SiriusUserManual">Sirius User Manual</h1>
+		<p>This document describes how to use modelers created using Sirius. This includes graphical, tabular and hierarchical (tree) modelers. The Sirius system includes everything necessary to easily 
+			<em>define</em>  these modelers (on any standard or Domain Specific Model/Language) and then 
+			<em>use</em> them to create and manipulate actual models. This document is targeted to end users who will use already defined modelers. If you want to learn how to define your own, refer to the 
+			<a href="../specifier/Sirius%20Specifier%20Manual.html">
+				<strong>Sirius Specifier Manual</strong>
+			</a>.
+		</p>
+		<p>Note that each specific modeler will have its own set of features, and not all of the make use of all the possibilities of Sirius while others may contain custom extensions. However they all share the same common behaviors, which are described here.</p>
+		<p>You will find the following sections:</p>
+		<ul>
+			<li>
+				<a href="general/Modeling%20Project.html">
+					<strong>Modeling Project</strong>
+				</a> explains how to use the simple UI to create and manage your models and their representations.
+			</li>
+			<li>
+				<a href="general/Aird_Editor.html">
+					<strong>Aird editor</strong>
+				</a> describes the Sirius entry point editor gathering all functionalities allowing to create and manage your models and representations and to enable/disable available viewpoints in a unified easy to use UI.
+			</li>
+			<li>
+				<a href="diagrams/Diagrams.html">
+					<strong>Diagrams</strong>
+				</a> shows all the common features of graphical modelers made with Sirius.
+			</li>
+			<li>
+				<a href="sequences/Sequence%20Diagrams.html">
+					<strong>Sequence Diagrams</strong>
+				</a> are a special case of diagram with some specific behaviors which are described here.
+			</li>
+			<li>
+				<a href="tables/Tables.html">
+					<strong>Tables</strong>
+				</a> covers how to use the two kinds of tabular representations supported by Sirius: edition tables and cross-tables.
+			</li>
+			<li>
+				<a href="trees/Trees.html">
+					<strong>Trees</strong>
+				</a> describes the behavior of tree (hierarchical) editors built with Sirius.
+			</li>
+			<li>
+				<a href="properties/Properties%20View.html">
+					<strong>Properties Views</strong>
+				</a> describes behaviors specific to Sirius-defined properties views.
+			</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/diagrams/Diagrams.html b/doc/5.1.x/user/diagrams/Diagrams.html
new file mode 100644
index 0000000..a041d5d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/Diagrams.html
@@ -0,0 +1,1594 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Diagrams</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="DiagramEditors">Diagram Editors</h1>
+		<p>This document explains how to use diagram editors/modelers supported by Sirius which allow to view and manipulate data in a graphical way.</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#DiagramEditors">Diagram Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#features_overview">Features Overview</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#Creatingdiagrams">Creating diagrams</a>
+							</li>
+							<li>
+								<a href="#ManagingDiagrams">Managing Diagrams</a>
+							</li>
+							<li>
+								<a href="#Movingthediagram">Moving the diagram</a>
+							</li>
+							<li>
+								<a href="#zooming_diagram_id">Zooming the diagram</a>
+							</li>
+							<li>
+								<a href="#Resizingelements">Resizing elements</a>
+							</li>
+							<li>
+								<a href="#Movingelements">Moving elements</a>
+							</li>
+							<li>
+								<a href="#Manageedges">Manage edges</a>
+							</li>
+							<li>
+								<a href="#distribute">Distribute elements</a>
+							</li>
+							<li>
+								<a href="#reset_origin">Reset Diagram or Container Origin</a>
+							</li>
+							<li>
+								<a href="#Hidingelements">Hiding elements</a>
+							</li>
+							<li>
+								<a href="#Validatingthemodel">Validating the model</a>
+							</li>
+							<li>
+								<a href="#Filters">Filters</a>
+							</li>
+							<li>
+								<a href="#Exportingimages">Exporting images</a>
+							</li>
+							<li>
+								<a href="#Batchimagesexport">Batch images export</a>
+							</li>
+							<li>
+								<a href="#PortshiftingPortDragandDrop">Port shifting - Port Drag and Drop</a>
+							</li>
+							<li>
+								<a href="#copy_paste_format">Copy/paste of format</a>
+							</li>
+							<li>
+								<a href="#diagram_element_pinning">Diagram element pinning</a>
+							</li>
+							<li>
+								<a href="#Layoutingmodearrangeyourdiagramswithoutmodifyingsemanticmodels">Layouting mode: arrange your diagrams without modifying semantic models</a>
+							</li>
+							<li>
+								<a href="#synchronized_diagram">Synchronized/Unsynchronized diagram</a>
+							</li>
+							<li>
+								<a href="#UsingRegularExpressionstoFindDiagramElements">Using Regular Expressions to Find Diagram Elements</a>
+							</li>
+							<li>
+								<a href="#quick_outline">Quick Outline</a>
+							</li>
+							<li>
+								<a href="#styleCustomizations">Style customizations </a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#reference">Reference</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#GraphicalArea">Graphical Area</a>
+							</li>
+							<li>
+								<a href="#Palette">Palette</a>
+							</li>
+							<li>
+								<a href="#ref_tabbar">Tab-bar</a>
+							</li>
+							<li>
+								<a href="#PropertiesView">Properties View</a>
+							</li>
+							<li>
+								<a href="#Outline">Outline</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#preferences">Preferences</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#GlobalPreferences">Global Preferences</a>
+							</li>
+							<li>
+								<a href="#Appearance">Appearance</a>
+							</li>
+							<li>
+								<a href="#Printing">Printing</a>
+							</li>
+							<li>
+								<a href="#RulersAndGrid">Rulers And Grid</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Sirius provides support for diagrammatic representations, which represent information in a graphical way. Diagrams are the main and most sophisticated type of representations supported by Sirius.</p>
+		<p>	
+			<img border="0" src="images/diagram_sample1.png"/>
+		</p>
+		<p><div style="display:none">
+			<strong>TODO</strong> Add other sample screenshots showing various kinds of diagrams.</div>
+		</p>
+		<p>A diagram editor is divided in three areas:</p>
+		<ol>
+			<li>the 
+				<span style="color:orange">main graphical</span> area, which shows the elements and supports direct interaction with them;
+			</li>
+			<li>the 
+				<span style="color:red">palette</span>, which gives access to additional tools (for example creation tools to add new elements to the diagram);
+			</li>
+			<li>the 
+				<span style="color:green">
+					<em>tabbar</em>
+				</span> at the top of the graphical area, which provides additional, more global operations.
+			</li>
+		</ol>
+		<p>	
+			<img border="0" src="images/diagram_sample_annotated.png"/>
+		</p>
+		<p>In addition to these areas which are immediately visible inside the diagram editor, it is also possible to interact with the diagram and its elements through the 
+			<em>Properties View</em> and through 
+			<em>contextual menus</em> available on the graphical elements themselves and on the diagram&#8217;s background. When the current editor is a Sirius diagram, the Eclipse 
+			<em>Outline</em> view shows a graphical overview of the diagram which can be used to navigate inside it if the whole diagram is not visible in the main area.
+		</p>
+		<p>This document is structured in three parts. 
+			<a href="#features_overview">The first part</a> gives an overview of all the main features, and is organized from a functional perspective. For example it contains a section which explains the different ways available to control which elements are hidden or not on a diagram, with links to the corresponding parts of the reference section. 
+			<a href="#reference">The second part</a> is a reference and describes all the features available by looking at each of the main areas of the diagram editors (the palette, the tab-bar etc.). Finally, 
+			<a href="#preferences">the last part</a> gives a reference on all the preferences and configuration parameters which can affect the look and feel of diagrams.
+		</p>
+		<p>Note that as always with Sirius, some of the features described below may or may not be available with all specific kinds of diagrams. It all depends on which features the person who 
+			<em>specified</em> (configured) the diagram decided to support. For example, the names and effect of the tools available in the palette will be different for each graphical modeler. Refer to the documentation of the specific modeler if available for more precise details.
+		</p>
+		<h2 id="features_overview">Features Overview</h2>
+		<h3 id="Creatingdiagrams">Creating diagrams</h3>
+		<p>Creating new diagrams works in the same as for any other kinds of representation in Sirius. There are three main ways:</p>
+		<ol>
+			<li>In the 
+				<em>Model Explorer</em> view, find the semantic element you want to create a diagram on (it must be part of a semantic model inside a 
+				<em>Modeling Project</em>), and in the context menu (available with a right click), select the 
+				<em>New representation...</em> sub-menu. It will give you a list of all the representations which can be created on this object, some of which may be diagrams (there may be other kinds of representations available too, like tables for example). Just select the type of diagram you want, and enter the name of the new diagram in the dialog box which appears then. The newly created diagram will automatically open. 
+			</li>
+			<li>In the 
+				<em>Model Explorer</em> view, right-click on the 
+				<em>Modeling Project</em> which contains the semantic element to represent and select 
+				<em>Create Representation</em>. In the wizard which appears, first select the type of diagram to create (if diagrams are available), and in the next page, select the semantic element to create it on. Only the semantic elements which are compatible with the selected diagram type will be available. Just select the element you want to represent, finish the wizard, and enter the name of the new diagram in the dialog box which appears then. The newly created diagram will automatically open.
+			</li>
+			<li>Finally, on some representations (diagrams or other kinds), it may be possible to create new diagrams directly from the context menu of the element on which you want to create the diagram. If this is possible (this depends on the representations' configuration), it will be available in the 
+				<em>Navigate</em> category of the element&#8217;s context menu, with a name starting with 
+				<em>New detail:</em>. Once again, after selecting the type of diagram to create, enter the name of the new diagram in the dialog box which appears. The newly created diagram will automatically open.
+			</li>
+		</ol>
+		<p>Note that the set of diagrams you can create will depend both on the type of the selected element and on the set of viewpoints which are currently enabled.</p>
+		<p>When you create a new diagram, unless you have unchecked the 
+			<a href="#synchronized_diagram">
+				<em>Synchronized mode for new diagrams</em>
+			</a> preference, it will be initially populated with graphical elements according to its configuration and the current state of the semantic model(s) it represent. If the preference is checked, the diagram will be created empty, and only the elements you ask explicitly to be represented (through tools, which will be specific to each kind of diagram) will appear on the diagram.
+		</p>
+		<h3 id="ManagingDiagrams">Managing Diagrams</h3>
+		<p>Opening existing diagrams and renaming or deleting them works exactly as for any other kind of representation. Refer to the general documentation about the 
+			<em>Modeling Project</em> UI for details.
+		</p>
+		<h4 id="RulersGrid">Rulers &amp; Grid</h4>
+		<p>Several behaviors concerning the diagram elements editing is conditioned by properties of the diagram accessible through the 
+			<em>Rulers &amp; Grid</em> tab of the 
+			<em>Properties</em> view of the diagram.
+			<br/>
+			<img border="0" src="images/properties_view_rulers_and_grid_tab.png"/>
+		</p>
+		<h5 id="ShowRuler">Show Ruler</h5>
+		<p>
+			<em>Display/Show Ruler</em>: Display an horizontal and vertical ruler according to 
+			<em>Measurement/Ruler Units</em> property.
+		</p>
+		<h5 id="ShowGrid">Show Grid </h5>
+		<p>
+			<em>Display/Show Grid</em>: Display a grid in background of the diagram according to 
+			<em>Measurement/Grid Spacing</em> and 
+			<em>Grid Line</em> properties. This grid can be in front of all figures if the property 
+			<em>Grid In Front</em> is enabled.
+		</p>
+		<h5 id="Snaptogrid">Snap to grid</h5>
+		<p>Capability to allow edit parts to snap to the grid when editing (during creation, moving or resizing). It is also possible to have connection bendpoints snap to it. Grid snapping and visibility are two distinct properties, and it is possible to enable one without the other.</p>
+		<h5 id="snap_to_shapes">Snap to shapes</h5>
+		<p>The 
+			<em>Snap to shapes</em> feature allows you to quickly align parts being dragged or resized to other parts in the diagram or that share the same parent (e.g: edit parts inside a compartment can only snap to each other). The snap is effective on top, bottom, right, left and center of the figure. Feedback is shown in the form of a gray line when a part is being attached to another part.
+			<br/>This drag part of this feature is also available on border nodes since Sirius 4.1.0. Note: For border nodes, the snap is effective only on the center of the figure. This is why the resize part is not handled for border nodes.
+			<br/>
+			<img border="0" src="images/snap_to_shape.png"/>
+		</p>
+		<p>By pressing the <kdb>F4</kdb> shortcut key, it is possible to temporarily enable the snap to all shapes currently visible on the diagram. Some screenshots of this feature are shown below.
+			<br/>
+			<img border="0" src="images/snap_to_all_shapes.png"/>
+			<br/>
+			<img border="0" src="images/snap_to_all_shapes_2.png"/>
+		</p>
+		<h3 id="Movingthediagram">Moving the diagram</h3>
+		<p>When the diagram is larger than the editor area, you can move it in all directions by pressing the middle-button and dragging the mouse (keeping the button pressed).</p>
+		<p><video height="240" src="videos/moveInAllDirections.mp4" target="_self" autoplay="autoplay" loop="loop"></video></p>
+		<h3 id="zooming_diagram_id">Zooming the diagram</h3>
+		<p>The zoom on a diagram can be done by using the tools in the palette like explained in 
+			<a href="#standardToolId">Chapter Standard Tools</a>.
+			<br/>Or by using the combination of the keyboard key 
+			<em>CTRL</em> and the mouse wheel. Since Sirius 4.1.0, in this case, the zoom is done on the mouse location instead of the center of the editor.
+		</p>
+		<h3 id="Resizingelements">Resizing elements</h3>
+		<p>If the specifier has authorized it, it is possible to resize a shape by dragging them until they are the size that you want.</p>
+		<p>There are specific shortcuts to change the resize behavior:</p>
+		<ul>
+			<li>CTRL (or ALT for Mac users): Centered resize (expands the shape on both opposite sides)</li>
+			<li>SHIFT: Resize that keeps the ratio</li>
+			<li>ALT (or CTRL for Mac users): Resize without snap (temporarily disables the snap during the resize if it is activated). </li>
+			<li>F3: Resize with children location relative to the parent. If the shape is resized to the left, upwards, or both, the children (contained nodes for container and border nodes for all shapes) are moved with the same offset than the resize.</li>
+			<li>F4: Resize with snap to all shapes (if the 
+				<a href="#snap_to_shapes">Snap to shapes</a> is already activated for the current diagram)
+			</li>
+		</ul>
+		<h4 id="Compartments">Compartments</h4>
+		<p>The resize of compartments might evolve in future versions. The current behavior is to redistribute space between adjacent compartments and to resize the first/last compartment when the compartmented container is resized from top/bottom for a vertical stack and left/right for an horizontal one.</p>
+		<p>When resizing a compartmented container or a compartment from the top or from the left, the F3 shortcut configures the same behaviors than on standard containers (see previous section). </p>
+		<p>On 
+			<em>experimental</em> structures of containers with compartmented compartments, the F3 shortcut also allows to disable the resize propagation to manually correct the computed layout and remove empty space (
+			<em>experimental</em>). This might occur when there are several levels of compartments without the same number of compartments on each level. The corrective resize can be done on the last compartments of each compartmented container (from bottom for vertical stacks and from right for horizontal stacks).
+		</p>
+		<h3 id="Movingelements">Moving elements</h3>
+		<p>There are specific shortcuts to change the move behavior:</p>
+		<ul>
+			<li>SHIFT: Constrained move (only vertical or horizontal move is authorized at once).</li>
+			<li>ALT (or CTRL for Mac users): Ignore snap while dragging (temporarily disables the snap during the move if it is activated).</li>
+			<li>F3: Move the edge source and target if pressed during the edge move. See the &#8220;Move edge group&#8221; subsection below for more details. </li>
+			<li>F4: Move with snap to all shapes (if the 
+				<a href="#snap_to_shapes">Snap to shapes</a> is already activated for the current diagram)
+			</li>
+		</ul>
+		<h3 id="Manageedges">Manage edges</h3>
+		<h4 id="Snapbackedgelabels">Snap back edge labels</h4>
+		<p>All visible edge labels can be snapped back to their default position by using the action 
+			<em>Snap back label(s)</em>. This action is available within the edge contextual menu under the format section 
+			<em>Format/Snap back label(s)</em>:
+			<br/>
+			<img border="0" src="images/snap-back-label.png"/>
+		</p>
+		<p>The result of this action is visible here: 
+			<br/>
+			<img border="0" src="images/snapped-back-label.png"/>
+		</p>
+		<p>This action is also available individually for each visible label of an edge. To use it, you have to use the action 
+			<em>Snap Back</em> under the label contextual menu 
+			<em>Format/Snap Back</em>:
+			<br/>
+			<img border="0" src="images/snap-back-label-from-label.png"/>
+		</p>
+		<p>The result of this action is visible here: </p>
+		<p>
+			<img border="0" src="images/snapped-back-label-from-label.png"/>
+		</p>
+		<h4 id="Movebendpoints">Move bend-points</h4>
+		<p>It is possible to snap the bend-points to all shapes by pressing <kdb>F4</kdb> shortcut key during the move. This feature is only available if the 
+			<a href="#snap_to_shapes">Snap to shapes</a> is already activated for the current diagram. As for 
+			<em>Snap to grid</em>, and unlike to snap for node, there is no guide drawn during the move.
+		</p>
+		<h4 id="RemoveBendpoints">Remove Bend-points</h4>
+		<p>You can define some bend-points (or inflection points) on an edge. It is possible to remove bend-points to retrieve simple edge. 
+			<br/>For oblique edges, all bend-points will be removed to retrieve the original Straight edge.
+		</p>
+		<p>The edge state just after its creation:
+			<br/>
+			<img border="0" src="images/beforeBendpoints.png"/>
+		</p>
+		<p>The user defines some bend-points:
+			<br/>
+			<img border="0" src="images/withBendpoints.png"/>
+		</p>
+		<p>The user executes the &#8220;Remove Bend-points&#8221; action:
+			<br/>
+			<img border="0" src="images/afterRemoveBendpoints.png"/>
+		</p>
+		<p>For rectilinear edges, bend-points will be removed to retrieve a rectilinear edge with source and target connection points centered on the middle of the source or target node appropriate side. One additional  bend-point is inserted if source side and target side are in opposite direction. Two intermediates bend-points are inserted if source side and target side are in the same direction.
+			<br/>If number of bend-points can not be reduced, remove action will be inefficient (for example, case when the rectilinear edge is straight).
+		</p>
+		<p>The rectilinear edge after defining some bend-points:
+			<br/>
+			<img border="0" src="images/rectilinearWithBendpoints.png"/>
+		</p>
+		<p>The user executes the &#8220;Remove Bend-points&#8221; action:
+			<br/>
+			<img border="0" src="images/rectilinearAfterRemoveBendpoints.png"/>
+		</p>
+		<p>This action is available within the edge context menu or by using the shortcut &#8220;Ctrl&#8221; + &#8220;Shift&#8221; + &#8220;-&#8221; and it is not available on edges with a &#8220;Tree&#8221; routing style.</p>
+		<h4 id="straighten_an_edge">Straighten edges</h4>
+		<h5 id="Straightenasingleedge">Straighten a single edge</h5>
+		<p>There are eight actions to straighten an edge, i.e. to transform an edge to an horizontal, or vertical, straight edge (with only one starting point and one ending point).
+			<br/>If the edge is connected to a border node, the border node is moved too.
+		</p>
+		<p>These actions can be triggered on edge contextual menu 
+			<em>Layout/Straighten</em>: 
+		</p>
+		<p>
+			<img border="0" src="images/straightenToMenu.png"/>
+		</p>
+		<p>and also in the tabbar if at least one edge is selected: </p>
+		<p>
+			<img border="0" src="images/straightenToTabbarButton.png"/>
+		</p>
+		<p>There are two distinct kinds of straightening actions. The following examples show how they can be used.</p>
+		<p>Example for horizontal cases of result with the same initial state (the moved nodes are in red): </p>
+		<ul>
+			<li>Result after 
+				<em>Straighten to top</em> action: 
+				<img border="0" src="images/straightenToTop.png"/>
+			</li>
+			<li>Result after 
+				<em>Straighten with left side pinned</em> action: 
+				<img border="0" src="images/straightenWithLeftPinned.png"/>
+			</li>
+			<li>Result after 
+				<em>Straighten with right side pinned</em> action: 
+				<img border="0" src="images/straightenWithRightPinned.png"/>
+			</li>
+			<li>Result after 
+				<em>Straighten to bottom</em> action: 
+				<img border="0" src="images/straightenToBottom.png"/>
+			</li>
+		</ul>
+		<p>Example of initial state of vertical cases: 
+			<img border="0" src="images/straightenVerticalInitialState.png"/>
+		</p>
+		<ul>
+			<li>Result after 
+				<em>Straighten to left</em> or 
+				<em>Straighten with bottom side pinned</em> action: 
+				<img border="0" src="images/straightenToRight.png"/>
+			</li>
+			<li>Result after 
+				<em>Straighten to right</em> or 
+				<em>Straighten with top side pinned</em> action: 
+				<img border="0" src="images/straightenToLeft.png"/>
+			</li>
+		</ul>
+		<p>The action can be disabled (grayed menu) in some conditions:</p>
+		<ul>
+			<li>The action is not possible because it does not respect the source or target node boundaries.</li>
+			<li>The source and the target of the edge are not on the same &#8220;axis&#8221; (left and right sides, or, top and bottom sides).</li>
+			<li>After the action, the border node (source or target) would be overlapped by another border node.</li>
+			<li>A straighten action will be disabled if the 
+				<a href="../../specifier/diagrams/Diagrams.html#edgecentering">edge centering</a> constraint will be violated. For oblique edges, the action is disabled if at least one side is centered. For rectilinear edges, the action is disabled if the moved side is centered. There is an exception to this rule when the edge centering is activated on both source and target, and both source and target are border nodes.
+			</li>
+			<li>The source or the target of the edge is another edge.</li>
+			<li>The source and the target is the same element.</li>
+		</ul>
+		<p>The action is available (menu is displayed) if the selection contains at least one edge (note, labels and text attachments are not considered as edges). The menu will show all actions available for all edges in the selection. So if a straighten to top is available on one edge and straighten to left on another, both action will be available. Their execution will only affects the edges compatible with it.</p>
+		<h5 id="Straightenmanyedges">Straighten many edges</h5>
+		<p>The straighten actions can be triggered on one edge but also in case of a multi-selection containing more than one edges.</p>
+		<p>In this case the straighten actions available will be the union of actions available for each edges of the selection. I.e if an edge can be only straighten to top and another edge in the selection can be only straighten to top, then available actions on the selection of both edges will be both the top and left actions.</p>
+		<p>When executing a straighten action, only edges from the selection that can be affected by this action will be impacted (if a constraint prevent an edge to be straighten to the direction of the executed action, then it is untouched). </p>
+		<h4 id="move_edge_group">Move edge group</h4>
+		<p>In specific cases, we can find edges connected to border nodes. For example in a diagram representing data flows, exchanges are connected to port in and port out. When the user wants to move an exchange on a layouted diagram, he has to move the source port, then the target port and possibly move some bendpoints of the edge.
+			<br/>This feature aims to move the group {edge, labels, ports} in a single 
+			<i>drag like</i> operation when using the F3 shortcut and drag/move the edge. The F3 key has no effect if you attempt a reconnect by moving the first or last edge end.
+		</p>
+		<p>Example when activating the tool and moving the second edge toward the top:
+			<br/>
+			<img border="0" src="images/moveEdgeGroup1.png"/>
+		</p>
+		<p>The final result:
+			<br/>
+			<img border="0" src="images/moveEdgeGroup2.png"/>
+		</p>
+		<p>The edge group moving is authorized only if these conditions are met:</p>
+		<ul>
+			<li>A border node as source.</li>
+			<li>A border node as target.</li>
+			<li>Source node has only one connection: the moved edge.</li>
+			<li>Target node has only one connection: the moved edge.</li>
+			<li>Source and target are on the same &#8220;axis&#8221;:
+				<ul>
+					<li>located on west or east sides of their respective parent (could be the same).</li>
+					<li>located on north or south sides of their respective parent (could be the same).</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Examples of authorized moving:
+			<br/>
+			<img border="0" src="images/compoundmoves2.png"/>
+		</p>
+		<p>Furthermore, since Sirius 4.1, it is possible to move several edge groups at once. However, the selection needs to validate the following rules:</p>
+		<ul>
+			<li>each selected elements must be an edge with border nodes as source and target.</li>
+			<li>each edge groups must be horizontal (source and target on the west or east border) or vertical (source and target on the north or south border).</li>
+			<li>each edge groups must remain in its source and target parent bounds at the end of the move. Therefore, the move is not limited by the primary selection only (the edge that is grabbed to move the whole selection) but by each edge group.</li>
+		</ul>
+		<p>Note that an edge group new location corresponding to the former location of another edge group in the selection is valid.</p>
+		<h4 id="edge_label_attachment">Display attachment link between edge and its labels</h4>
+		<p>It is possible to display an attachment link between an edge and its labels when edge or label is selected. This is not the default behavior but it can be activated by a preference in 
+			<em>Sirius/Sirius Diagram/Connections</em> preference page.
+		</p>
+		<p>	
+			<img border="0" src="images/edgeLabelAttachment_preference.png"/>
+		</p>
+		<p>If the edge is selected, one attachment is displayed for all associated labels. </p>
+		<p>	
+			<img border="0" src="images/edgeLabelAttachment_edgeSelected.png"/>
+		</p>
+		<p>If a label is selected, only the attachment between the edge and this label is displayed.</p>
+		<p>	
+			<img border="0" src="images/edgeLabelAttachment_labelSelected.png"/>
+		</p>
+		<h3 id="distribute">Distribute elements</h3>
+		<p>Four new actions allow to distribute shapes: </p>
+		<p>
+			<img border="0" src="images/distribute_initialState.png"/>
+		</p>
+		<ul>
+			<li>Distribute centers horizontally: Distributes the selected shapes so that the gap between horizontal centers of each selected shapes will be the same.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/distribute_Centers.png"/>
+		</p>
+		<ul>
+			<li>Distribute gaps horizontally: Distributes the selected shapes so that the gap between the left side and the right side of each consecutive shapes will be the same.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/distribute_WithUniformGap.png"/>
+		</p>
+		<ul>
+			<li>Distribute centers vertically: Distributes the selected shapes so that the gap between vertical centers of each selected shapes will be the same.</li>
+		</ul>
+		<ul>
+			<li>Distribute gaps vertically: the gap between the bottom side and the top side of each consecutive shapes will be the same.</li>
+		</ul>
+		<p>These new actions are also available in contextual menu 
+			<em>Format/Distribute</em> or in menu bar _ Diagram/Distribute_.
+		</p>
+		<p>Only the top level shapes of the selection are retained for these actions: if inner shapes, border labels or edges are selected, they are ignored. 
+			<br/>These actions are enabled only if the selected shapes have the same direct parent. At least 3 shapes should be selected to enable distribute actions.
+			<br/>For border nodes, they will be enabled only if all selected border nodes have the same parent and are on the same axis (top and bottom sides for horizontal actions, left and right for vertical actions). The overlap is forbidden for border nodes, so in some conditions (location already used), these actions may not have accurate results.
+		</p>
+		<h4 id="Firstandlastshapes">First and last shapes</h4>
+		<p>For all distribute actions, the first and the last shapes do not move. The first and last shapes do not depend on the selection order. They depend on the location of each selected shapes and the chosen action.</p>
+		<p>For horizontal distribution with uniform gaps:</p>
+		<ul>
+			<li>the first shape is the leftmost one (with the minimum x location). If several shapes have the same x location, the highest one is the first.</li>
+			<li>the last shape is the rightmost one (with the right side with the maximum x coordinate). If several shapes are aligned to the right, the lowest one is the last.</li>
+		</ul>
+		<p>For horizontal centered distribution:</p>
+		<ul>
+			<li>the first shape is the leftmost one (with its center at the minimum x coordinate). If several shapes are aligned on center, the one with the highest center is the first.</li>
+			<li>the last shape is the rightmost one (with its center at the maximum x coordinate). If several shapes are aligned by center, the one with the lowest center is the last.</li>
+		</ul>
+		<p>For vertical distribution with uniform gaps:</p>
+		<ul>
+			<li>the first shape is the highest one (with the minimum y location). If several shapes have the same y location, the leftmost one is the first.</li>
+			<li>the last shape is the lowest one (with the bottom side with the maximum y coordinate). If several shapes are aligned to the bottom, the rightmost one is the last.</li>
+		</ul>
+		<p>For vertical centered distribution:</p>
+		<ul>
+			<li>the first shape is the highest one (with its center at the minimum y coordinate). If several shapes are aligned on middle, the leftmost one is the first.</li>
+			<li>the last shape is the lowest one (with the bottom side with the maximum y coordinate). If several shapes are aligned by middle, the rightmost one is the last.</li>
+		</ul>
+		<h3 id="reset_origin">Reset Diagram or Container Origin</h3>
+		<p>This action is available within the diagram or containers contextual menu (&#8220;Reset Origin&#8221;) or via &#8220;M1&#8221; + &#8220;HOME&#8221; shortcut.
+			<br/>The diagram (or container) bounds (the rectangle formed by the highest, the leftmost, the lowest and the rightmost elements) can have a negative origin or can be shifted toward the bottom-right with a blank zone at the top-left.
+			<br/>This action aims to move all diagram (or container) elements so that the diagram (or container) retrieves its origin while keeping the element layout.
+		</p>
+		<p>This action can be launched on several containers at same time.</p>
+		<p>This is an example of a diagram with a blank zone between the origin location and the figures bounds:
+			<br/>
+			<img border="0" src="images/reset_origin_before.png"/>
+		</p>
+		<p>After applying the action, the diagram figures are moved toward the top-left origin location:
+			<br/>
+			<img border="0" src="images/reset_origin_after.png"/>
+		</p>
+		<h4 id="Specificcases">Specific cases</h4>
+		<ul>
+			<li>Elements hidden by the user are not considered to compute the shift size but are shifted as the other shapes. That means if an hidden element is located at the top-left corner, the diagram coordinates will turn negative if the user reveals it after having executed the &#8220;Reset Origin&#8221; action.</li>
+			<li>Edges hidden because of a masked source or target are taken in account to compute the diagram bounds:</li>
+		</ul>
+		<p>
+			<img border="0" src="images/reset_origin_visible_edge.png"/>
+			<br/>After having scrolled the container, one of the edge end is masked so the edge is hidden. This one will be considered to compute the diagram bounds:
+			<br/>
+			<img border="0" src="images/reset_origin_masked_edge.png"/>
+		</p>
+		<h3 id="Hidingelements">Hiding elements</h3>
+		<p>Every graphical element on a diagram except compartments can be hidden explicitly. To do that, simply right click on the graphical element (or elements if you want to hide several elements at once) you want to hide. Then, choose 
+			<i>Show/Hide</i> / 
+			<i>Hide Element</i>. The graphical element is now hidden from view.
+		</p>
+		<p>The icon in the tool-bar changes showing a &#8220;check box&#8221; on it as soon as at least one element has been hidden, to remind you that what you see is not a complete view of the model being represented:</p>
+		<p>	
+			<img border="0" src="images/diagram_editor11.png"/>
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor12.png"/>
+		</p>
+		<p>The element can also be hidden from the tool-bar using the 
+			<i>Hide element</i> button.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor11_tabbar.png"/>
+		</p>
+		<p>It is also possible to hide an element from the outline view. Choose outline mode to see the semantic model in a tree viewer. You can now right click on an element and choose 
+			<em>Hide element</em>.
+		</p>
+		<p>There are two ways to reveal hidden elements:</p>
+		<ul>
+			<li>on the outline view, in outline mode, you can see every model element. The elements that are hidden have their names displayed in italic style and their icon is decorated with a yellow dot in the top left corner. To reveal one of this element, simply right click on it and choose 
+				<i>Show element</i>.
+			</li>
+		</ul>
+		<p>	
+			<img border="0" src="images/diagram_editor13.png"/>
+		</p>
+		<ul>
+			<li>Show/Hide elements using a tree viewer</li>
+		</ul>
+		<p>When there is no selected element on the diagram, the tab bar provides the button 
+			<em>Show/Hide</em>.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_show_hide_dialog1.png"/>
+		</p>
+		<p>This button opens a dialog to manage the shown and hidden elements on the diagram with a tree view, using various selection buttons (Check all, Uncheck all, Expand All and Collapse all) and various filters (All element, only checked elements and only unchecked elements).</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_show_hide_dialog2.png"/>
+		</p>
+		<p>Some elements might be grayed in this tree (compartments, Sequence diagram elements, ..), their selection will have no effect. Their grayed status indicates that they can not be hidden from the wizard but their children might support it.</p>
+		<p>You can also use 
+			<a href="#UsingRegularExpressionstoFindDiagramElements">regular expressions</a> to easily retrieve the elements you want to hide/reveal. 
+		</p>
+		<h4 id="Hidinglabels">Hiding labels</h4>
+		<p>It is also possible to hide the label of graphical elements (see the node labels section for nodes supported case).</p>
+		<p>The approach is the same as for other elements, except that there are a specific menus named &#8220;Hide/Show Label&#8221;. It is possible to call this menu directly on the label or on its element.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_hide_label_1.png"/>
+		</p>
+		<p>The tool-bar button 
+			<em>Hide label</em> can also be used.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_hide_label_tabbar.png"/>
+		</p>
+		<p>It is also possible to hide or reveal a label from the outline view, in outline mode. The elements whose label is hidden have their names displayed in italic style and their icon is decorated with a 
+			<i>L</i> in the bottom right corner. To reveal a label, simply right click on it and choose 
+			<i>Show label</i>.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_hide_label_outline.png"/>
+		</p>
+		<p>When there is no selected element on the diagram, 
+			<em>Show/Hide</em> tab bar button allows to manage the labels too.
+		</p>
+		<h5 id="ContainersListsandcompartmentslabels">Containers, Lists and compartments labels</h5>
+		<p>Labels of containers, lists and compartment might be hidden by default. You can choose to display them using the outline, contextual menu or 
+			<em>Show/Hide</em> tree view.
+		</p>
+		<h5 id="Nodeslabels">Nodes labels</h5>
+		<p>It is possible to hide the node label only if it is on the border of its node. Those nodes can have their label hidden by default. You can choose to display them using the outline, contextual menu or 
+			<em>Show/Hide</em> tree view.
+		</p>
+		<h5 id="Edgeslabels">Edges labels</h5>
+		<p>It is also possible to hide the edge labels. </p>
+		<p>The approach is the same than the nodes labels with the specific menus &#8220;Hide/Show Label&#8221; called from the edge or its label.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_hide_edge_label_1.png"/>
+		</p>
+		<p>Note that if a label of an edge is hidden (center, begin or end), all the labels of the edge will be hidden. Same behavior for the reveal action, if a label of an edge is revealed (center, begin or end), all the labels of the edge will be revealed.</p>
+		<h4 id="HidingiconsoflabelsonShapesorConnectors">Hiding icons of labels on Shapes or Connectors</h4>
+		<p>When working on 
+			<em>big</em> diagrams, you may want to hide the icons of the labels on all shapes or connectors, in order to improve the readability of your representations. To do so, open the Eclipse Preferences (
+			<em>Window</em>/ 
+			<em>Preferences</em>), and select the &#8220;Appearance&#8221; category (
+			<em>Sirius</em>/ 
+			<em>Sirius Diagram</em>/ 
+			<em>Appearance</em>).
+		</p>
+		<p>The options 
+			<em>"Hide label icons on shapes"</em> and 
+			<em>"Hide label icons on connectors"</em> will allow you to do so.
+		</p>
+		<p>By default, no shapes neither connectors are hidden :</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_hide_label_icon_1.png"/>
+		</p>
+		<p>If you check both  "
+			<em>Hide label icons on shapes</em>" and  "
+			<em>Hide label icons on connectors</em>", next time you will open your diagram, all label icons of shapes and connectors will be hidden :
+		</p>	
+		<img border="0" src="images/diagram_editor_hide_label_icon_2.png"/>
+		<h4 id="Collapsingcompartments">Collapsing compartments</h4>
+		<p>When working with compartmented containers, you may want to collapse the compartments. Select a compartment and collapse/expand it using the handle visible on the following illustration. The collapse handle&#8217;s location varies depending on the label alignment to avoid overlapping (depending on the list elements alignment for a list with an hidden label).</p>
+		<p>
+			<img border="0" src="images/compartments_collapse3.png"/> 
+		</p>
+		<h3 id="Validatingthemodel">Validating the model</h3>
+		<p>On a diagram, you can have validation rules. These rules were previously created by the architect who created the diagram&#8217;s configuration. As a user of the modeler, you can validate these rules on your model.</p>
+		<p>To validate the rules open the context menu of the diagram itself (by right-clicking on its background) and choose the 
+			<i>Validate</i> action.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor16.png"/>
+		</p>
+		<p><div style="display:none">
+			<br/>TODO fix the family.odesign validation rules on Persons diagram before update this screenshot
+			<br/>	
+			<img border="0" src="images/diagram_editor17.png"/>
+			<br/></div>
+		</p>
+		<h3 id="Filters">Filters</h3>
+		<p>Filters are created by the architect who created the diagram&#8217;s configuration. Applying a filter on a diagram will hide the graphical elements which match the filter&#8217;s criterion. To apply a filter, open the 
+			<a href="#ref_tabbar_diagram">
+				<em>Filters</em> menu in the tab-bar
+			</a> to select which filters should be enabled or disabled.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor18.png"/>
+		</p>
+		<p>To see more easily if one or more filters are activated, the icon in the tab-bar changes, showing a small check mark if at least one filter is activated.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_filter_toolbar_activated.png"/>
+		</p>
+		<h3 id="Exportingimages">Exporting images</h3>
+		<p>You can export a diagram to an image file. To do that right-click on the diagram and choose the menu  
+			<i>Export diagram as image.</i> or on this icon present in the tab-bar 
+			<img border="0" src="images/diagram_export_image_tabbar.png"/> . After selecting the file path, you can choose the image format and if you want to overwrite an existing file without warning.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor19.png"/>
+		</p>
+		<p>On the first export of diagram as image the name is set by default with the representation name. After there is an history to select the last export.</p>
+		<p>	
+			<img border="0" src="images/diagram_export_history.png"/>
+		</p>
+		<p>If you do not specify the file extension, the extension is determined from the selected image format. You can choose the directory in which to create the file using the 
+			<em>Browse</em> button.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_export_one_image.png"/>
+		</p>
+		<p>If you enter a path with an unsupported extension the file path is created with the wrong extension with selected extension in image format append to.</p>
+		<p>	
+			<img border="0" src="images/diagram_export_wrong_extension.png"/>
+		</p>
+		<p>Two checkboxes are available to customize the export:</p>
+		<ul>
+			<li>
+				<em>Export decorations</em>: if checked, some decorations which can appear in diagram elements and are declared as transient in the modeler definition (for example validation errors) are exported in the image.
+			</li>
+			<li>
+				<em>Export to HTLM</em>: if checked, the export will produce a 
+				<code>.html</code> file which references the exported image in addition to the image file itself.
+			</li>
+		</ul>
+		<p>Besides, an image size control is available to determine the size level of exported diagrams. If 
+			<em>Image Size</em> is set to 
+			<em>Max</em>, diagram will be exported with the maximum possible size (limited by system-specific limitations) while keeping its aspect ratio. This can produce higher resolution images (but also larger files and so long export time). If 
+			<em>Image Size</em> is set to level 
+			<em>Nominal</em>, diagram will be exported with nominal size (quality will be lower but export time will be shorter).
+		</p>
+		<p>For example, on this Family diagram:
+			<br/>	
+			<img border="0" src="images/exportSampleSource.png"/>
+			<br/>You can observe these different quality, file size and time generation with nominal size, max size and between both of them:
+			<br/>	
+			<img border="0" src="images/exportSample.png"/>
+		</p>
+		<p>
+			<em>
+				<strong>Note:</strong>
+			</em> Due to some technical limitations, not all export format support all the features of diagrams. For example, exporting to PNG files will not show gradients on diagram elements. The JPG format is the one which currently produces the best result in terms of fidelity to what you see in the diagram editors. 
+		</p>
+		<h3 id="Batchimagesexport">Batch images export</h3>
+		<p>It is possible to export all diagram of a representations file at once. To do that, select your representations file (
+			<code>aird</code> file) and right-click on it. Then choose the menu 
+			<i>Export diagrams as image...</i>. On the opened pop-up select the path of the folder where the images will be exported.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor20.png"/>
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor21.png"/>
+		</p>
+		<p>The same functionality is available on every semantic elements which has representations from the 
+			<em>Model Explorer</em> view. In this case, only the diagrams of the selected element will be exported.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor20b.png"/>
+		</p>
+		<h3 id="PortshiftingPortDragandDrop">Port shifting &#8211; Port Drag and Drop</h3>
+		<p>Drag and drop is a feature which can be enabled by the specifier in the Viewpoint Specification Model. It is turned off by default.</p>
+		<h4 id="Selectionhandles">Selection handles</h4>
+		<p>If the resize of the port is disabled by the specifier in the Viewpoint Specification Model, there is 4 selection handles to indicate the selection, one at each corner of the figure. Only the shifting is authorized.</p>
+		<p>
+			<img border="0" src="images/port_selection_handles1.png"/> 
+			<img border="0" src="images/port_selection_handles2.png"/>
+		</p>
+		<p>If the resize of the port is enabled by the specifier in the Viewpoint Specification Model, there is more than 4 selection handles to indicate the selection. To shift the port, you should not click on one of this handles.</p>
+		<p>
+			<img border="0" src="images/port_selection_handles3.png"/> 
+			<img border="0" src="images/port_selection_handles4.png"/>
+		</p>
+		<h4 id="Portshiftinganddraganddrop">Port shifting and 'drag and drop'</h4>
+		<p>Ports are special shapes because they are linked to a parent container, but are sometimes laid out over two containers.</p>
+		<p>When you try to shift a port, if you click over the port at a location where it is not over the parent container, a virtual area is built around the parent container. This virtual area is not visible and its size is calculated to cover the container and the port itself.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_dnd01.png"/> 
+			<img border="0" src="images/diagram_editor_dnd02a.png"/> 	
+			<img border="0" src="images/diagram_editor_dnd03a.png"/>
+		</p>
+		<p>The port shifting is protected against unexpected drag and drop in the container above mouse location.</p>
+		<p>If you want to drag and drop the port in a new container, just drag the port with the mouse beyond this virtual area (e.g., on screenshots, drag farther than right edge of port).</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_dnd01.png"/> 
+			<img border="0" src="images/diagram_editor_dnd02b.png"/> 	
+			<img border="0" src="images/diagram_editor_dnd03b.png"/>
+		</p>
+		<p>The port is dropped in the container above the mouse location and linked to its closest edge.</p>
+		<h3 id="copy_paste_format">Copy/paste of format</h3>
+		<p>It is possible to duplicate format of diagram elements, that is to say to replicate mutual organization and style of diagram elements from one diagram to another. This replication only applies to the same semantic elements between diagrams.
+			<br/>By default, this copy/paste replicates the layout (x, y width and height) AND the style (colors, font, ...).
+		</p>
+		<p>But it is also possible to only 
+			<em>Paste Layout</em> or only 
+			<em>Paste Style</em>. The initial copy is always a 
+			<em>Copy Format</em> in all cases.
+		</p>
+		<p>The next picture shows a partial view of a diagram. The tool to replicate the format is called &#8220;Copy Format&#8221; and can be activated from the tab-bar when the diagram elements are selected, from the contextual menu (see 
+			<em>Edit</em> section) or through the 
+			<em>Ctrl+Alt+Shift+C</em> shortcut. In this picture, format of John Doe and Earvin Johnson persons will be replicated to another diagram.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_copy_format.png"/>
+		</p>
+		<h4 id="PasteLayout">Paste Layout</h4>
+		<p>The next picture shows the diagram where the layout will be replicated. The tool to paste layout is called &#8220;Paste Layout&#8221; and can be activated from the tab-bar or from the contextual menu (see 
+			<em>Edit</em> section).
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_paste_layout1.png"/>
+		</p>
+		<p>The layout applies to John Doe and Earvin Johnson and is exactly the same as the original one (compare John Doe and Earvin Johnson each other positions with first screenshot).</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_paste_layout2.png"/>
+		</p>
+		<p>
+			<strong>Warning</strong> : This copy/paste operation copies exactly what you see on a diagram. When using low zoom level, some diagram elements can be twisted and the paste operation will duplicate theses twistings on the other diagram. Please, zoom in to reduce twistings.
+		</p>
+		<h4 id="PasteStyle">Paste Style</h4>
+		<p>The next picture shows the diagram where the layout will be replicated. The tool to paste style is called &#8220;Paste Style&#8221; and can be activated from the tab-bar or from the contextual menu (see 
+			<em>Edit</em> section).
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_paste_style1.png"/>
+		</p>
+		<p>The red font applies to John Doe.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_paste_style2.png"/>
+		</p>
+		<h4 id="PasteFormat">Paste Format</h4>
+		<p>The next picture shows the diagram where the layout will be replicated. The tool to paste format is called &#8220;Paste Format&#8221; and can be activated from the tab-bar when the diagram is selected, from the contextual menu (see 
+			<em>Edit</em> section) or through the 
+			<em>Ctrl+Alt+Shift+V</em> shortcut.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_paste_format1.png"/>
+		</p>
+		<p>The result is the same as applying 
+			<em>Paste Format</em> and 
+			<em>Paste Style</em>.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_paste_format2.png"/>
+		</p>
+		<h3 id="diagram_element_pinning">Diagram element pinning</h3>
+		<h4 id="Introduction">Introduction</h4>
+		<p>It is possible to mark specific elements in a diagram as having a fixed location so that they are not moved by the 
+			<i>Arrange All</i> action.
+		</p>
+		<p>Diagram element pinning allows you to combine both methods: manually arranging the position and size of elements when it is important while still being able to call 
+			<i>Arrange All</i> for the rest, without the risk of destroying your manual layouts.
+		</p>
+		<h4 id="Pinunpinactions">Pin/unpin actions</h4>
+		<p>The next picture shows a diagram with three persons.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin01.png"/>
+		</p>
+		<p>
+			<i>Arrange All</i> action lays out all diagram elements in order to produce the &#8220;best&#8221; layout. As we can see on the next picture, all diagram elements are moved.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin02.png"/>
+		</p>
+		<p>But we would like to have a fixed location for 
+			<i>John Doe</i> and 
+			<i>Jane Smith</i>. So theses elements must be marked as pinned thanks to the contextual menu.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin03.png"/>
+		</p>
+		<p>Now 
+			<i>John Doe</i> and 
+			<i>Jane Smith</i> are pinned, a new 
+			<i>Arrange All</i> action will preserve their locations.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin04.png"/>
+		</p>
+		<p>It is also possible to pin/unpin diagram elements thanks to the palette. Multiple element selections can be achieved by holding simultaneously 
+			<i>Ctrl + Mouse-left-click</i> on each diagram elements to pin or unpin.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin05.png"/>
+		</p>
+		<p>Notes:</p>
+		<ul>
+			<li>Pin/unpin information are persistent and saved in 
+				<i>.aird</i> session file.
+			</li>
+			<li>it is not possible to pin/unpin edges or compartments.</li>
+		</ul>
+		<h4 id="Configuration">Configuration</h4>
+		<p>Every diagram elements that you move will be pinned by default and will need an unpin operation to be &#8220;moveable&#8221; again.</p>
+		<p>This default behavior can be changed in Eclipse preferences, as can be seen in the next picture.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin_configuration01.png"/>
+		</p>
+		<h4 id="PinUnpinonNotes">Pin/Unpin on Notes</h4>
+		<p>The notes can be pinned if they are attached to a pinned diagram element. If a note is attached to several elements of which at least one is pinned then the note is pinned.</p>
+		<p>Otherwise for notes linked to any elements, it&#8217;s possible to use the preferences &#8220;Move unlinked notes during layout&#8221;. By default, this preference is disabled, in this case the unlinked notes are pinned.</p>
+		<p>This default behavior can be changed in Eclipse preferences, as can be seen in the next picture.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_note_pin_configuration01.png"/>
+		</p>
+		<h4 id="PinUnpinelementsusingatreeviewer">Pin/Unpin elements using a tree viewer</h4>
+		<p>When there is no selected element on the diagram, the tab bar provides the button 
+			<em>Pin/Unpin</em>.
+		</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin_dialog1.png"/>
+		</p>
+		<p>This button opens a dialog to manage the pinned and unpinned elements of the diagram with a tree view, using various selection buttons (Check all, Uncheck all, Expand All and Collapse all) and various filters (All element, only checked elements and only unchecked elements).</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin_dialog2.png"/>
+		</p>
+		<p>Some elements might be grayed in this tree (compartments, Sequence diagram elements, ..), their selection will have no effect. Their grayed status indicates that they do not support the Pin/Unpin but their displayed children might support it. Edges will not be shown as they will never have children in this tree.</p>
+		<p>You can also use 
+			<a href="#UsingRegularExpressionstoFindDiagramElements">RegularExpressions</a> to easily retrieve the elements you want to pin/unpin.
+		</p>
+		<p>To see more easily if one or more graphical elements are pinned, the icon in the toolbar change, showing a &#8220;checked&#8221; if an element is pinned.</p>
+		<p>	
+			<img border="0" src="images/diagram_editor_pin_toolbar_activated.png"/>
+		</p>
+		<h3 id="Layoutingmodearrangeyourdiagramswithoutmodifyingsemanticmodels">Layouting mode: arrange your diagrams without modifying semantic models</h3>
+		<p>When you only want to do layout operations (e.g. arrange a diagram by moving nodes or edges), you may modify the semantic models without paying attention. For example, when organizing bordered nodes, you may change the container of the semantic element, without wanting do so.</p>
+		<p>When this mode is enabled, the following operations are changed:</p>
+		<ul>
+			<li>direct edit is disabled on all elements;</li>
+			<li>moving elements by dragging them can be used to change their position, but will never trigger a drag and drop operation;</li>
+			<li>moving the extremity of an edge to adjust its connection point (to the source or target element) is possible, but will never trigger a reconnection operation.</li>
+		</ul>
+		<p>Note that other operations which can change the semantic model are still possible. Only the operations listed above, which are easy to misuse, are disabled/modified. 
+			<strong>Layout Mode is not a &#8220;read-only&#8221; mode and does not guarantee that the semantic model is not modified when it is enabled.</strong>
+		</p>
+		<p>
+			<strong>Layouting mode</strong> can be activated/disabled on a diagram through the tab bar (when there is no selected element) : 
+		</p>
+		<p>
+			<img border="0" src="images/layouting_mode_tabbar_activate.png"/>
+		</p>
+		<p>The diagram&#8217;s status line then indicates that the diagram is currently in 
+			<em>Layouting mode</em> : 
+		</p>
+		<p>
+			<img border="0" src="images/layoutingMode_forbidden_dnd.png"/>
+		</p>
+		<p>In this example, as 
+			<em>Layouting mode</em> is activated, reconnecting the Edge from 
+			<em>Abstrat Customer</em> to 
+			<em>Company</em> is forbidden. You can arrange this edge (change start location, add bending points...) without risking to modify the underlying semantic model.
+		</p>
+		<p>When a diagram is closed, the 
+			<em>Layouting mode</em> is automatically disabled.
+		</p>
+		<h3 id="synchronized_diagram">Synchronized/Unsynchronized diagram</h3>
+		<p>The contextual menu on the background of the diagram provides an action to toggle between 
+			<i>Synchronized</i> / 
+			<i>Unsynchronized</i> modes.
+		</p>
+		<p>
+			<img border="0" src="images/synchronized_diagram1.png"/>
+		</p>
+		<p>When the action is checked, the mode is 
+			<i>Unsynchronized</i>. Otherwise, the mode is 
+			<i>Synchronized</i>. 
+			<br/>When the editor is activated, the status bar informs if the diagram is 
+			<i>Synchronized</i> or 
+			<i>Unsynchronized</i> (according to preference 
+			<a href="#show_status_line">
+				<em>Sirius/Sirius Diagram/Show status line</em>
+			</a> ).
+			<br/>
+			<img border="0" src="images/synchronized_diagram_statusbar.png"/>
+			<br/>It is also possible to see this status with a decorator at the bottom-right corner of the diagram (according to preference 
+			<a href="#show_sync_decorator">_Sirius/Sirius Diagram/Show synchronize status decorator on diagram</a> )
+			<br/>
+			<img border="0" src="images/decoratorsSyncStatus.png"/>
+		</p>
+		<p>With 
+			<i>Synchronized</i> mode, the displayed diagram represents what is provided by the modeler. However, with 
+			<i>Unsynchronized</i> mode, the diagram may not display all elements provided by the modeler, but only the elements that the user selected.
+		</p>
+		<p>For instance, we will consider having a semantic model with a root element that contains a child element. In the Viewpoint Specification Model, the feature 
+			<i>Synchronization</i> (See the Common Attributes section of the specifier guide) of the mapping for the elements is defined as 
+			<i>Not synchronized</i> and the edge mapping specifies an 
+			<i>Unsynchronizable</i> behavior (default feature). To start we only have the root displayed.
+		</p>
+		<p>	
+			<img border="0" src="images/synchronized_diagram3.png"/>
+		</p>
+		<p>Then, we will drag and drop the child element from 
+			<i>Model Explorer</i> view. With 
+			<i>Synchronized</i> mode, the edges related to this dropped element will be displayed.
+		</p>
+		<p>	
+			<img border="0" src="images/synchronized_diagram4.png"/>
+		</p>
+		<p>Note: If the edge mapping was defined as 
+			<i>Synchronized</i>, the result will be the same. But if it is 
+			<i>Not synchronized</i>, the edges will not be displayed.
+		</p>
+		<p>However, with 
+			<i>Unsynchronized</i> mode, only the dropped element will be displayed.
+		</p>
+		<p>	
+			<img border="0" src="images/synchronized_diagram5.png"/>
+		</p>
+		<p>Note: If the edge mapping was defined as 
+			<i>Not Synchronized</i>, the result will be the same. But if it is 
+			<i>Synchronized</i>, the edges will be displayed.
+		</p>
+		<p>The 
+			<i>Synchronized</i> / 
+			<i>Unsynchronized</i> status of a diagram on creation can be set by default with a preference in the  preferences. You can access it by menu 
+			<i>Window</i> / 
+			<i>Preferences...</i> / 
+			<i>Sirius</i> / 
+			<i>Sirius Diagram</i>. The property is 
+			<i>Synchronized mode for new diagrams</i>. If you want your new diagrams be 
+			<i>unsynchronized</i>, uncheck this property.
+		</p>
+		<p>	
+			<img border="0" src="images/synchronized_diagram2.png"/>
+		</p>
+		<h3 id="UsingRegularExpressionstoFindDiagramElements">Using Regular Expressions to Find Diagram Elements</h3>
+		<h4 id="Rules">Rules</h4>
+		<p>Several dialogs of the Diagram Editor (like the 
+			<em>Pin/Unpin</em> or 
+			<em>Hide/Reveal</em> dialogs) allow you to filter Diagram elements using regular expressions.
+		</p>
+		<p>Those regular expressions support only the 
+			<em>'*'</em> and 
+			<em>'?'</em> wild-cards.
+		</p>
+		<ol>
+			<li>All Diagram elements which name is 
+				<strong>beginning</strong> with the given regular expression is conform to this regular expression ;
+			</li>
+			<li>Case is not relevant (i.e. 
+				<em>'a'</em> and 
+				<em>'A'</em> are strictly equivalent);
+			</li>
+			<li>A &#8216;?&#8217; wild-card can be used to replace exactly 1 character in the search ;</li>
+			<li>A &#8216;*&#8217; wild-card can be used to replace exactly 0 or more characters in the search.</li>
+		</ol>
+		<h4 id="Examples">Examples</h4>
+		<p>Consider that you have a Diagram containing the following Diagram elements :</p>
+		<ul>
+			<li>myPackage (Package)</li>
+			<li>myClass1 (Class)</li>
+			<li>MyClass2 (Class)</li>
+			<li>myAttribute1 (Attribute)</li>
+			<li>myAttribute2 (Attribute)</li>
+			<li>isaBot (Attribute)</li>
+			<li>isaBoot (Attribute)</li>
+			<li>isaBT (Attribute)</li>
+		</ul>
+		<p>Elements matching the regular expression 
+			<em>"m"</em> are all elements that starts with the letter 
+			<em>'m'</em> (any case) :
+		</p>
+		<ul>
+			<li>myPackage</li>
+			<li>myClass1</li>
+			<li>MyClass2</li>
+			<li>myAttribute1</li>
+			<li>myAttribute2</li>
+		</ul>
+		<p>Notice that you will obtain the same result with 
+			<em>"my"</em>.
+		</p>
+		<p>Elements matching the regular expression 
+			<em>"isab?t"</em> are the following elements :
+		</p>
+		<ul>
+			<li>isaBot</li>
+		</ul>
+		<p>As &#8216;?&#8217; stands for 
+			<strong>exactly</strong> one character, 
+			<em>isaBoot</em> and 
+			<em>isaBt</em> aren&#8217;t matching this regular expression.
+		</p>
+		<p>Elements matching the regular expression 
+			<em>"*1"</em> are all elements that contain the 
+			<em>'1'</em> character :
+		</p>
+		<ul>
+			<li>myClass1</li>
+			<li>myAttribute1</li>
+		</ul>
+		<p>Elements matching the regular expression _"my*a*2" are the following elements :</p>
+		<ul>
+			<li>myClass2</li>
+			<li>myAttribute2</li>
+		</ul>
+		<p>Here you can notice that for 
+			<em>myAttribute2</em> the first 
+			<em>'*'</em> represents no character.
+		</p>
+		<h3 id="quick_outline">Quick Outline</h3>
+		<p>A quick outline is available with the shortcut 
+			<code>Ctrl</code> + 
+			<code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your diagram elements elements.
+		</p>
+		<p>The star, 
+			<code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add 
+			<code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with the &#8220;Up&#8221; and &#8220;Down&#8221; arrow keys, and go to the selected element in your editor with 
+			<code>Enter</code>.
+		</p>
+		<h3 id="styleCustomizations">Style customizations </h3>
+		<p>Although the style of the diagram elements is defined in the VSM, it can be customized for each diagram elements. This customization can be applied from the tool bar, from the &#8220;Style&#8221; and &#8220;Appearance&#8221; tab of the property view, from the &#8220;Diagram&#8221; menu or from the contextual menu Format.</p>
+		<p>You have the possibility to customize :</p>
+		<ul>
+			<li>in container style : the background color, the background style, the border size, the foreground color, the label alignment, the label size and the label format.</li>
+			<li>in node style: the border size, the color, the label alignment, format, position and size.</li>
+			<li>in edge style: the folding style, the color,  the label alignment, format, position and size, the line and routing style, the size and the target and source arrow.</li>
+		</ul>
+		<p>Theses customizations can be reset by the &#8220;Reset style customization&#8221; button available in the &#8220;Appearance&#8221; tab of the property view and in the diagram editor tool bar.</p>
+		<p>NOTE: in case a user customized a Node with a WorkspaceImage style (through the &#8220;Set style to workspace image&#8221; action), it is considered in its whole customized then it can&#8217;t be updated by the refresh action, only the &#8220;Reset style properties to default values&#8221; action can update it by reset it.</p>
+		<h4 id="routingStylePref">Customize edge routing style from preferences</h4>
+		<p>You have the possibility to customize the routing style of all new edges from the preferences. In the preference page 
+			<em>Sirius/Sirius Diagram/Connections</em>, you can enable 
+			<em>user specific default values</em> and select a default routing style for all new edges.
+		</p>
+		<p>
+			<img border="0" src="images/preferences_sirius_diagram_connections.png"/>
+		</p>
+		<p>For example:</p>
+		<ul>
+			<li>The 
+				<em>user specific default values</em> is enabled and the line style is set to 
+				<em>Rectilinear</em>.
+			</li>
+			<li>You create a new edge.</li>
+			<li>The routing style is set to 
+				<em>Rectilinear</em> (regardless of the value specified in the VSM) and the 
+				<em>routingStyle</em> is considered as custom.
+			</li>
+			<li>If you call the action 
+				<em>Reset style to default value</em> on this edge, then it keeps its routing style (because the preference is considered as the default value).
+			</li>
+		</ul>
+		<h2 id="reference">Reference</h2>
+		<p>This section describes all the features which are (or can be) available on graphical modelers</p>
+		<h3 id="GraphicalArea">Graphical Area</h3>
+		<h3 id="Palette">Palette</h3>
+		<p>All Sirius diagrams have a palette of tools, which by default is docked on the right hand side of the main graphical area. The top row of the palette contains some general tools which are available on all Sirius diagrams, while the rest contains tools specific to each graphical modeler.</p>
+		<h4 id="ManagingThePalette">Managing The Palette</h4>
+		<p>By default, the palette appears with a pre-defined size on the right hand side of the diagram.</p>
+		<p>
+			<i>Resizing</i>. You can resize it to take more or less horizontal space by dragging the vertical separator between the palette and the diagram with your mouse.
+		</p>
+		<p>	
+			<img border="0" src="images/palette_resizing.png"/>
+		</p>
+		<p>
+			<i>Folding</i>. You can also fold the palette to hide it almost completely by clicking on the triangular icon in the corner of the palette header. When folded, you can restore it by clicking again on the same triangular icon. You can also keep it folded except when needed: when it is folded, a single click in the vertical folded area will reveal the palette temporarily so that you can select a tool. It will automatically hide again if you select a tool or click elsewhere.
+		</p>
+		<p>	
+			<img border="0" src="images/palette_folding.png"/>
+		</p>
+		<p>
+			<i>Moving</i>. If you prefer, you can move the palette to the left side of the diagram editor by dragging the palette&#8217;s header with the mouse, or right-clicking on the header and choosing 
+			<em>Dock On &gt; Left</em> or 
+			<em>Dock On &gt; Right</em>.
+		</p>
+		<p>	
+			<img border="0" src="images/palette_moving.png"/>
+		</p>
+		<h4 id="standardToolId">Standard Tools</h4>
+		<p>A few general tools are available in standard on all Sirius diagrams. They appear in the top row of the palette, just below the header.</p>
+		<p>	
+			<img border="0" src="images/palette_tools.png"/>
+		</p>
+		<p>
+			<i>Selection</i>. The 
+			<em>selection</em> tool is the default one initially selected when you open a diagram. To select an element on a diagram while this tool is active, simply click on it. To select several elements at the same time, you can either draw a rectangle on the diagram, or click on each element individually while keeping the 
+			<em>Ctrl</em> key pressed. When selecting elements which are already selected using this method, by clicking on them or drawing a rectangle around them, they are removed from the selection. You can combine both methods (de/selection by single click or by zone) to build complex selection incrementally by always keeping the 
+			<em>Ctrl</em> key pressed.
+			<br/>The selection of several elements by drawing a rectangle has 2 modes:
+		</p>
+		<ul>
+			<li>Selection from left to right: all the elements completely contained in the rectangle will get selected</li>
+			<li>Selection from right to left: all the elements that intersect the rectangle will get selected (except the container under the initial mouse location)</li>
+		</ul>
+		<p>To allow selection by drawing a rectangle on a container, you must simultaneously press the ALT key (otherwise the container is drag&#8217;n&#8217;dropped).</p>
+		<p>Selected elements have an outline and anchors drawn on their border. Note that when a selection contains multiple elements, exactly one of them has black selection anchors; the rest have white anchors. The element with the black anchors is called the primary selection, and some tools treat it differently than the others (for example alignment tools).</p>
+		<p>
+			<i>Zoom</i>. Next in the palette come two buttons to control the zoom level of the main diagram area. When the 
+			<em>Zoom in</em> (resp. 
+			<em>Zoom out</em>) button is active, clicking anywhere on the diagram will increment (resp. decrement) the zoom level by 25%. The current zoom level is visible in the tabbar when no diagram element is selected (see the section on the tabbar buttons for more ways to control the zoom level).
+		</p>
+		<p id="notes">
+			<i>Notes and note attachments</i>. All Sirius diagrams support the creation of notes and text elements, which can be attached to diagram elements. These elements are purely graphical annotations, and have no effect on the semantic model. The three tools used to create them are available in a combo-box in the palette&#8217;s top row. By default, the 
+			<em>Note</em> tool (represented by a yellow sticky note) is selected. If you click on the small arrow next to the sticky note, a menu appears where you can select which of the three tools to enable: 
+			<em>Note</em>, 
+			<em>Text</em> or 
+			<em>Note attachment</em>.
+		</p>
+		<p>
+			<em>Notes</em> and 
+			<em>Text</em> elements are created in a similar way: either a single click somewhere on the diagram (which creates an element with a default size), or a click-drag to create the element with a custom initial size. Once created, one can edit the text inside the note or text zone usual the standard &#8220;direct edit&#8221; behavior (
+			<em>F2</em>, a slow double click, or by directly starting to enter alpha-numeric text). The only difference between notes and text zones is the visual presentation; notes have a yellow background (by default) and a border which represents a sticky not with a folded top-right corner. 
+		</p>
+		<p>
+			<em>Note attachments</em> can be created to link either notes or text zone to diagram elements (including other notes and text attachments). To create an attachment, activate the tool and then click once on the source element and once on the target element. You can also click and drag from the source to the target elements.
+		</p>
+		<p id="pinning">
+			<i>Pin/Unpin</i>. The final standard tools which are available in the top row of all the palette allow to mark or unmark diagram elements as 
+			<em>pinned</em>. Pinning an element on the diagram means that when an automatic layout of the diagram is requested (see the 
+			<i>Arrange All</i> action), the element will not be moved or resized: it will stay at the exact same position as you placed it. Pinned element can still be moved manually. To pin or unpin an element, simply select the appropriate tool (using the arrow right next to the icon to make the menu appear), and when the tool is active, click on the element to mark as pinned or un-pinned.
+		</p>
+		<h4 id="PaletteContents">Palette Contents</h4>
+		<p>Below the palette&#8217;s header, which contains the general tools described above, you will find all the custom tools which have been configured for your modeler. Note that depending on which 
+			<em>Viewpoints</em> and 
+			<em>Layers</em> are currently enabled, some tools may or may not be visible for a given modeler. Refer to your specific designer/modeler&#8217;s documentation for details about which tools are available and how they are organized.
+		</p>
+		<p>
+			<em>Tool Drawers</em>. Tools in the palette may be organized in expandable 
+			<em>drawers</em> to group them by category. To expand a drawer and show its content, simply click once in the drawer&#8217;s header. Click again to fold it back and hide its tools. When you expand a drawer, some others may be folded automatically if there is not enough space to show all of them. To prevent this, you can &#8220;pin&#8221; a drawer opened by clicking on the &#8220;pin&#8221; icon in the drawer&#8217;s title area when it is expanded. This will force it to be kept opened, and its tools available, at all times.
+		</p>
+		<p>	
+			<img border="0" src="images/palette_tool_drawer.png"/>
+		</p>
+		<p>
+			<em>Tool Groups</em>. Most entries in the palette correspond to a single tool, but some of them represent tool groups. Tool groups are identified by a small right-facing arrow on the left of the tool&#8217;s icon. They behave like combo-boxes: click on the arrow to expand the group and reveal all the tools available in this group. Click on the tool you want to activate to make it the default and close the group. You can then use the selected tool as any other, but you have to re-open the popup menu if you want to enable a different one. When the group is expanded, you can click on the &#8220;pin&#8221; icon to the right to of the top-most tool to force the group to stay expanded, so that you can easily have access to all the tools. 
+		</p>
+		<p>	
+			<img border="0" src="images/palette_tool_group.png"/>
+		</p>
+		<h4 id="UsingTheToolsFromThePalette">Using The Tools From The Palette</h4>
+		<p>There are different interaction modes possible for the tools available in the palette. The basic pattern is to select the tool in the palette with a simple left-click on in it the palette, and then apply it once on the diagram.</p>
+		<p>Normally, when you have used a tool once, it does not stay selected; if you want to reuse it a second time, you have to re-select it in the palette. If you want to apply the same tool several times in a row, simply hold the 
+			<em>Ctrl</em> key pressed while using it; it will stay &#8220;armed&#8221; until you release the 
+			<em>Ctrl</em> key or select another tool.
+		</p>
+		<p>To deselect a tool without executing it, simply press the 
+			<em>Esc</em> key, or select another one (for example the default 
+			<em>Selection</em> tool).
+		</p>
+		<p>When a tool is selected and you move the mouse on the diagram, you will notice that the mouse cursor&#8217;s shape changes depending on where it is, to indicate whether or not the selected tool can be applied at this particular location. For example some elements can only be created at the top-level of the diagram (in the diagram&#8217;s background itself), and not inside other elements. For such a tool, if you put the cursor on top of another diagram element, the mouse cursor will change to indicate the action is not allowed. Note that the exact shape of the mouse cursor depends on the operating system.</p>
+		<p>
+			<em>Direct Action Tools</em>. Direct action tools are the simplest and most common one. They require a single click somewhere on the diagram (as long as it is allowed). The most common direct action tools are element creation tools.
+		</p>
+		<p>
+			<em>Edge Creation Tools</em>. Edge creation tools are a little more complex, in that they require the specification of both the source and target element of the new edge. Once the tool is selected, there are two possible usage modes:
+		</p>
+		<ol>
+			<li>First do a single click on the source element, then move the mouse to the target element (which may be the same) and click a second time to finish the edge creation.</li>
+			<li>Alternatively, you can click on the source element, keep the mouse button pressed, move the mouse to the target element and release it there. Both methods are equivalent.</li>
+		</ol>
+		<p>
+			<em>Tools With Selection Dialog</em>. Some complex tools require additional information to perform their jobs. In particular, tools with selection dialogs will open a dialog box when you use them on a diagram element to ask for more information. The details will vary from tool to tool, but to complete the interaction simply select the requested information and finish the dialog/wizard.
+		</p>
+		<p>
+			<em>Other Tools</em>. Finally, because Sirius is an extremely extensible system, graphical modelers may be configured with tools which have more complex interaction patterns. These will usually be custom tools very specific to a particular domain or modeler. Refer to their documentation for details.
+		</p>
+		<h3 id="ref_tabbar">Tab-bar</h3>
+		<p>The top area of all Sirius diagram editors is filled with the 
+			<em>tab-bar</em>, which provides access to many operations on diagrams and their elements. The content of the tab-bar will depend on whether the current selection is the diagram itself (i.e. no element is selected) or one or several diagram elements.
+		</p>
+		<h4 id="ref_tabbar_diagram">Tab-bar Actions Available on Diagram</h4>
+		<p>	
+			<img border="0" src="images/tabbar01.png"/>
+		</p>
+		<p>When the diagram itself (and not a specific element) is selected, the tab-bar contains the following buttons:</p>
+		<p>
+			<img border="0" src="images/tabbar_automatic_layout_tools.png"/> 
+			<em>Automatic Layout Tools</em>. The first group of tools are used to trigger an automatic layout of the elements on the diagram. Automatic layout uses a generic algorithm which tries to arrange the position and sizes of the elements on the diagram in a nice, readable way. In particular it makes sure, unless specific constraints prevent it, that no elements overlap each other, and that elements which contain others (i.e. containers) are large enough to show all their contents. It also tries to minimize the crossing of edges. The two ways to invoke the automatic layout algorithms are available as a drop-down menu on the left-most icon in the tab-bar.
+		</p>
+		<ul>
+			<li>
+				<em>Arrange All</em>. This is the action available by default. It launches the layout algorithm on all the elements in the diagram. Note that elements which have been 
+				<em>pinned</em> to their position will 
+				<strong>not</strong> be moved by the algorithm.
+			</li>
+			<li>
+				<em>Arrange Linked Border Nodes</em> This special action will only concerns nodes which are on the border of another element and which are either the source or the target of at least one edge. When invoked, the action will try to move these bordered nodes on the border of their parent on the most &#8220;natural&#8221; side of their parent element depending on the direction of the edge. For example if a border node is on the top side of an element but has an edge which goes down to a target element below its parent, this action will move the border node to the bottom side so that the edge does not cross the parent element.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/tabbar_selection_tools.png"/> 
+			<em>Selection Tools</em>. The next group of tab-bar tools, also organized in a drop-down menu, can be used to select groups of diagram elements in a single operation.
+		</p>
+		<ul>
+			<li>
+				<em>Select All</em>. This is the default operation and will select all the elements visible on the diagram. It is also available via the 
+				<em>Ctrl+A</em> keyboard shortcut.
+			</li>
+			<li>
+				<em>Select All Connectors</em>. This action will select all connectors (aka 
+				<em>edges</em>) between diagram elements which are visible on the diagram, and only them.
+			</li>
+			<li>
+				<em>Select All Shapes</em>. This action will select all diagram elements which are not connectors/edges which are visible on the diagram.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/tabbar_refresh.png"/> 
+			<em>Refresh</em>. This operation, which can also be invoked with the 
+			<em>F5</em> keyboard shortcut, will force an update of the diagram&#8217;s content according to the latest version of the underlying semantic model. The default operational mode for Sirius is to automatically refresh the diagram&#8217;s content whenever any relevant change is detected in the semantic model. This can be disabled using the 
+			<em>Automatic Refresh</em> preference (see 
+			<em>Window &gt; Preferences &gt; Sirius</em>). When in manual refresh mode (i.e. 
+			<em>Automatic Refresh</em> is unchecked), you must manually use the 
+			<em>Refresh</em> operation whenever you want the diagram to take into account changes in the model. Even in automatic refresh mode, it may be sometimes necessary to invoke an explicit, manual refresh using this operation if Sirius got confused.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_layers_selection.png"/> 
+			<em>Layers Selection</em>. The various kinds of elements which can appear on a diagram, and the tools which are available to manipulate them, are organized in 
+			<em>Layers</em>. Each diagram has a default layer which is always enabled, but may also have additional layers. Additional layers can be optional or not. You can enable or disable the optional layers at will, to hide or reveal new kinds of elements. Note that the list of layers available to you on a diagram may depend on which 
+			<em>Viewpoints</em> are currently enabled in the 
+			<em>Modeling Project</em>, as some viewpoints can contribute additional layers to diagrams. The set of layers currently enabled can be controlled using the drop-down menu in the tab-bar. Note that mandatory layers can not be disabled and are not displayed in this menu. Simply click on the button to reveal the menu, and check or un-check the optional layers you want to have enabled or disabled. A tick-mark is visible on the tab-bar button if at least one optional layer is currently enabled.
+		</p>
+		<p>
+			<img border="0" src="images/diagram_editor7.png"/>
+		</p>
+		<p id="transientLayer">Transient layers are displayed, in the drop down menu, after the non transients&#8217;s. They are separated with an horizontal separator. 
+			<br/>
+			<img border="0" src="images/diagram_editor_transient_layer.png"/>
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_filters_selection.png"/> 
+			<em>Filters Selection</em>. Diagram configurations may define 
+			<em>filters</em>, than you can enable or disable to hide (or show) diagram elements depending on semantic conditions. For example on a UML class diagram, a filter may be defined to hide all abstract classes and interfaces, so that only concrete classes are visible. The set of filters currently enabled can be controlled using the drop-down menu in the tab-bar. Simply click on the button to reveal the menu, and check or un-check the filters you want to have enabled or disabled. A tick-mark is visible on the tab-bar button if at least one filter is currently enabled.
+		</p>
+		<p>
+			<img border="0" src="images/diagram_editor8.png"/>
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_show_hide.png"/> 
+			<em>Show/Hide</em>. You can chose to hide (or reveal) specific diagram elements (or just their labels) independently of the conditions in pre-defined filters. This can be useful if you want to concentrate on specific parts of your model, or if you want hide parts which are not relevant to simplify communication with other people. You can hide elements from their context menu (using the 
+			<em>Show/Hide</em> sub-menu) or more globally by using the 
+			<em>Show/Hide</em> button in the tab-bar. This button opens a dialog box which presents all the elements visible on the diagram, organized in a hierarchical way which corresponds to their graphical organization. Note that because a single semantic element may have multiple representations on the diagram, they may appear multiple times in the dialog box. Making one representation hidden will not hide the other graphical representations of the same element. You can chose which elements should be visible (resp. hidden) on the diagram by checking (resp. unchecking) them in the dialog. For some elements (e.g. compartments), the hide is not supported and is disabled, these elements will be grayed in the dialog box and checking them will have no effect. The top area of the dialog box contains various buttons to help you find the elements you want, by show only the checked (i.e. visible) or unchecked (i.e. hidden) elements, by expanding or collapsing the tree viewer, or by checking or un-checking all elements at once. You can also search for elements by their name using the search box. For some elements (e.g. edges), you can hide the label (or labels) while keeping the element itself visible. When this is possible, the label is presented as a sub-item of the element in the dialog box, with its own check-box.
+		</p>
+		<p>
+			<img border="0" src="images/diagram_editor_show_hide_dialog2.png"/>
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_pin_unpin.png"/> 
+			<em>Pin/Unpin</em>. You can chose to pin (or unpin) elements on the diagram. Pinned elements are kept in their position by the automatic layout algorithms (see 
+			<em>Arrange All</em>), while unpinned elements can be moved and resized. You can pin/unpin elements from their context menu (using the 
+			<em>Layout</em> sub-menu) or more globally by using the 
+			<em>Pin/Unpin</em> button in the tab-bar. This button opens a dialog box which presents all the elements on the diagram, organised in a hierarchical way which corresponds to their graphical organization. Note that because a single semantic element may have multiple representations on the diagram, they may appear multiple times in the dialog box. Making one representation pinned will not pin the other graphical representations of the same element. You can chose which elements should be pinned (resp. unpinned) on the diagram by checking (resp. unchecking) them in the dialog. The top area of the dialog box contains various buttons to help you find the elements you want, by show only the checked (i.e. visible) or unchecked (i.e. hidden) elements, by expanding or collapsing the tree viewer, or by checking or un-checking all elements at once. You can also search for elements by their name using the search box. Note that pinning has currently no effect on edges.
+		</p>
+		<p>
+			<img border="0" src="images/diagram_editor_pin_dialog2.png"/>
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_paste_layout.png"/> 
+			<em>Paste Layout</em>. This button is only enabled if you have previously copied the layout of some elements in the clipboard, using the 
+			<em>Copy layout</em> action (only visible in the tab-bar when elements are select). 
+			<em>Paste layout</em> will apply the same size and positions which were copied in the clipboard to the corresponding elements in the current diagram. For the purpose of this command, the &#8220;corresponding elements&#8221; are the graphical elements which represent the same semantic objects.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_zoom.png"/> 
+			<em>Zoom Controls</em>. Next in the tab-bar is a set of buttons to control the zoom level. The 
+			<em>Zoom in</em> and 
+			<em>Zoom out</em> buttons behave similarly to their equivalents in the palette. The combo-box shows the current zoom level and allows you to choose among some pre-defined levels. You can also manually enter a specific zoom level (e.g. &#8220;42&#8221;) and hit 
+			<em>Return</em> to apply it.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_export_image.png"/> 
+			<em>Export As Image</em>. This button can be used to export the current diagram as an image file stored on disk. When you select it, a dialog box appears 
+			<img border="0" src="images/diagram_export_one_image.png"/> 
+			<br/>in which you can chose the file&#8217;s destination and format. Note that not all formats are currently equally supported; they may not all produce the same result. For diagrams which are tool large to export as a single image, the 
+			<em>Export to HTML</em> check-box can be used: when it is checked, instead of exporting a single image Sirius will split it in a matrix of smaller images, and produce an HTML file while loads them all arranged in a table to reproduce the original image.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_layouting_mode.png"/> 
+			<em>Layout Mode</em>. This button enables a special &#8220;layout mode&#8221;, in which some operations are prevented from having an effect on the semantic model. It can be used when you want to tweak the layout of a diagram and want to be sure to only make graphical changes, and not semantic ones by mistake. Click on the button to enable the &#8220;layout mode&#8221;, and click again when finished to return to the normal model. When this mode is enabled, the following operations are changed:
+		</p>
+		<ul>
+			<li>direct edit is disabled on all elements;</li>
+			<li>moving elements by dragging them can be used to change their position, but will never trigger a drag and drop operation;</li>
+			<li>moving the extremity of an edge to adjust its connection point (to the source or target element) is possible, but will never trigger a reconnection operation.</li>
+		</ul>
+		<p>Note that other operations which can change the semantic model are still possible. Only the operations listed above, which are easy to misuse, are disabled/modified. 
+			<strong>Layout Mode is not a &#8220;read-only&#8221; mode and does not guarantee that the semantic model is not modified when it is enabled.</strong>
+		</p>
+		<p>The diagram&#8217;s status line indicates when 
+			<em>Layouting mode</em> is enabled: 
+		</p>
+		<p>
+			<img border="0" src="images/layoutingMode_forbidden_dnd.png"/>
+		</p>
+		<p>When a diagram is closed, the 
+			<em>Layouting mode</em> is automatically disabled.
+		</p>
+		<h4 id="ref_tabbar_element">Tab-bar Actions Available on Diagram Elements</h4>
+		<p>The tab-bar contains a different set of actions when at least one element is selected.</p>
+		<p>	
+			<img border="0" src="images/tabbar02.png"/>
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_arrange_selection.png"/> 
+			<em>Arrange Selection</em>. This action launches the layout algorithm only for the diagram elements which are selected (and not pinned). All the other elements on the diagram, whether pinned or not, will not be moved. Note that edges may be re-arranged if one of their ends is part of the selection.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_alignment_control.png"/> 
+			<em>Alignment Control</em>. This menu contains several operations which can be used to align several graphical elements in various ways. The actions in this menu are only enabled when several elements are selected.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_distribute_actions.png"/> 
+			<em>Distribute Elements</em>. This menu contains several actions which can be used to distribute the selected diagram elements horizontally/vertically with a same space between their centers or their bounds. The actions in this menu are enabled only for selected nodes with same direct parent. At least 3 shapes should be selected to enable distribute actions.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_pin_unpin_02.png"/> 
+			<em>Pin/Unpin</em>. These two buttons can be used to mark all the selected elements as pinned or not.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_copy_layout.png"/> 
+			<em>Copy Layout</em>. This tool can be used to duplicate the layout of some diagram elements from this diagram into another. This replication only applies to the same semantic elements between diagrams. First, select the set of elements of interest, and use this 
+			<em>Copy layout</em> action. Then go to the target diagram, and choose the 
+			<em>Paste layout</em> action from the tab-bar there.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_hide.png"/> 
+			<em>Hide</em>. This button hides all the selected elements from view. It can also be invoked with the 
+			<em>Ctrl+H</em> keyboard shortcut. To reveal elements which have been hidden, you can for example deselect all element, and in the diagram&#8217;s tab-bar, choose the 
+			<em>Show/Hide</em> button, which opens a dialog box to control the elements' visibility.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_hide_label.png"/> 
+			<em>Hide</em>. This button hides the label of the selected elements. It can also be invoked with the 
+			<em>Ctrl+L</em> keyboard shortcut. To reveal hidden labels, you can for example deselect all element, and in the diagram&#8217;s tab-bar, choose the 
+			<em>Show/Hide</em> button, which opens a dialog box to control the elements' visibility. You can also select an element without label and use the 
+			<em>Show/Hide / Show label</em> menu.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_delete_from_diagram.png"/> 
+			<em>Delete from Diagram</em>. This action removes the selected graphical element from the diagram, but does not delete the corresponding semantic elements. It is only available on un-synchronized diagrams or element types.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_delete_from_model.png"/> 
+			<em>Delete from Model</em>. This action removes both the selected graphical element and the corresponding semantic elements. The exact effect of deletion on the semantic model depends on how the diagram was configured, and may have other consequences (i.e. removing or modifying other parts of the model to keep everything consistent).
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_font_controls.png"/> 
+			<em>Font Controls</em>. The next set of buttons can be used to control the font attributes (bold or italic), the font color, and the font to use itself, for the labels of the select elements. Note that all font-related attributes 
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_color_style_controls.png"/> 
+			<em>Color and Visual Style Controls</em>. The next group of buttons can be used to control some graphical attributes of the selected elements: fill color, line color and line style. The 
+			<em>Workspace image</em> button can be used to replace the graphical representation of an element by an image that you can select from anyware in your Eclipse workspace.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_cancel_custom_style.png"/> 
+			<em>Cancel Custom Style</em>. As soon as you modify manually any of the graphical properties of an element, the element&#8217;s style is marked as 
+			<em>customized</em>, and is not refreshed if its definition changes. The 
+			<em>Cancel Custom Style</em> button resets all the style attributes of an element to its default values and un-marks it as customized.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_apply_style.png"/> 
+			<em>Apply Style</em>. Use this button to reproduce the visual style of an element onto others. This action will apply the style of the last selected element to the others. When you click on this button, all the visual attributes from the last element which can are compatible with the other elements will be applied to them.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_make_same_size.png"/> 
+			<em>Make Same Size</em>. When multiple elements are selected, clicking on this tool will resize all of them to have the same size (both width and height). The element used for reference to decide the size to apply is the last selected. For region containers, if the selected region containers have the same number of regions, the regions will have the same size. If the region container used for reference has more regions than the other(s), the last region of others will have the size of all remaining regions in the one used for reference. If the region container used for reference has less region than the other(s), the action has no effect.
+		</p>
+		<p>
+			<img border="0" src="images/tabbar_auto_size.png"/> 
+			<em>Auto-Size</em>. This button marks the selected elements as auto-sized. Auto-sized elements will adjust their width an height dynamically according to their contents.
+		</p>
+		<h4 id="ref_tabbar_4x">Tab-bar in Eclipse 4.2 and 4.3</h4>
+		<p>Due to a current limitation, on Eclipse 4.2 and 4.3, the tab-bar content does not depend on the current selection and extensibility is not available:
+			<br/>
+			<img border="0" src="images/tabbar4x01.png"/>
+		</p>
+		<p>The tab-bar content enablement changes when at least one element is selected:	
+			<br/>
+			<img border="0" src="images/tabbar4x02.png"/>
+		</p>
+		<p>See the previous sections for content description.</p>
+		<h3 id="PropertiesView">Properties View</h3>
+		<p>In the Properties view, you will find several tabs which will not be the same if an element is selected on the diagram or not.</p>
+		<p>If an element is selected on the diagram, you will have on the 
+			<i>Properties</i> view the following tabs:
+		</p>
+		<ul>
+			<li>Semantic : This tab shows the properties of the semantic element selected. You will find the same informations as in the properties view of an Ecore editor.</li>
+			<li>Style : This tab presents the properties about the graphical representation of the element. You will find informations like label size and format, shape of the graphical object, background and foreground colors...</li>
+			<li>Appearance : This tab allows to choose the style and size of text fields contained by the element.</li>
+		</ul>
+		<p>	
+			<img border="0" src="images/diagram_editor3.png"/>
+		</p>
+		<p>If you do not select an element, you will have in the 
+			<i>Properties view</i> the properties of the diagram itself :
+		</p>
+		<ul>
+			<li>Semantic : The diagram has a semantic element which is the element on which we have created the diagram in the 
+				<i>Model Explorer</i> view. The content is the same as presented previously.
+			</li>
+			<li>Filters : You can apply filters on your diagram. Filters will be presented in a following part.</li>
+			<li>Documentation : This tab provides a text area for the current diagram documentation.</li>
+			<li>Rulers &amp; Grid : Allow the user to display vertical and horizontal rulers and also a grid on the diagram. You can choose how is displayed the grid (Solid style, Dash style, Dot style...).</li>
+			<li>Appearance : This tab allows to choose the style and size of text fields of every elements of diagram which have not been specifically set on the Representation Diagram.</li>
+		</ul>
+		<p>	
+			<img border="0" src="images/diagram_editor4.png"/>
+		</p>
+		<h3 id="Outline">Outline</h3>
+		<p>The outline view has two display modes that you can select in its upper toolbar:</p>
+		<ul>
+			<li>In 
+				<em>Outline</em> mode, it shows the content of the model in a tree view:
+			</li>
+		</ul>
+		<p>	
+			<img border="0" src="images/diagram_editor5.png"/>
+		</p>
+		<p>To hide/reveal an element or its label in the editor, simply right click an element in the tree and choose one of the 
+			<i>Hide element</i>, 
+			<i>Hide label</i>, 
+			<i>Show element</i>, 
+			<i>Show label</i> menus. The availability of the menus depends on the state of each element and its support of the &#8220;Show/Hide&#8221; feature.
+		</p>
+		<p>The hidden elements have their label displayed in italic style and their icon is decorated with a yellow dot in the top left corner.
+			<br/>The elements whose label is hidden have their label displayed in italic style and their icon is decorated with a 
+			<i>L</i> in the bottom right corner.
+		</p>
+		<ul>
+			<li>In 
+				<em>Overview</em> mode, it shows a complete overview of the active diagram. If the diagram is too big to be seen entirely on the diagram modeler, the overview is an easy way to navigate on the active diagram.
+			</li>
+		</ul>
+		<p>	
+			<img border="0" src="images/diagram_editor6.png"/>
+		</p>
+		<h2 id="preferences">Preferences</h2>
+		<p>Some preferences and configuration parameters are available for you to customize your experience. They can affect either the look or the behavior of diagrams. </p>
+		<h3 id="GlobalPreferences">Global Preferences</h3>
+		<p>Global preferences are global to a Sirius installation, or more precisely to an Eclipse workspace. If you change them, they will affect all the modeling projects and all their diagrams for the current workspace. They are available through the standard Eclipse preference UI (menu 
+			<em>Window &gt; Preferences</em>), under the category 
+			<em>Sirius &gt; Sirius Diagram</em> and its sub-categories:
+		</p> 
+		<img border="0" src="images/preferences_sirius_diagram.png"/>
+		<p>The illustration above shows the default value of all these preferences.</p>
+		<ul>
+			<li>
+				<em>Show connector handles:</em> This has no effect for Sirius diagram (it is inherited from the standard GMF settings).
+			</li>
+			<li>
+				<em>Show popup bars:</em> If checked, and if the diagram&#8217;s configuration supports this feature, then when you keep the mouse cursor still for a small delay on a diagram element, a 
+				<em>popup bar</em> will appear with buttons corresponding to all the tools which can be applied in this context. The tools which appear are the same as the ones available on the palette, but it can be more convenient sometimes to use the popup bar instead of going back to the palette to select the tool:
+			</li>
+		</ul> 
+		<img align="center" border="0" src="images/popup_bar.png"/>
+		<ul>
+			<li>
+				<em>Enable animated layout:</em> If checked, then when you launch an automatic layout (
+				<em>Arrange all</em>), the shapes will move smoothly to their final location. This makes the arrangement operation take a little longer, but it is easier to follow where your elements have been moved.
+			</li>
+			<li>
+				<em>Enable animated zoom:</em> If checked, when you change the zoom value, Sirius will show intermediate steps to smooth the change.
+			</li>
+			<li>
+				<em>Enable anti-aliasing:</em> If checked, the graphics on the diagram will use anti-aliasing. This preference does not take effect on all platforms.
+			</li>
+			<li>
+				<span id="show_status_line">
+					<em>Show status line:</em>
+				</span> This allows to display the GMF status line. It is used in Sirius to display the synchronize status of the diagram..
+			</li>
+		</ul>
+		<ul>
+			<li>
+				<em>Auto-size containers during arrange-all action:</em> Container elements which have an explicit size are normally not resized during an 
+				<em>Arrange All</em>. This can be problematic if the elements they contain are re-arranged so that the container&#8217;s size is not appropriate anymore. When this preference is enabled, the arrange all action will treat all containers as if they are &#8220;auto-sized&#8221;, and adjust their size to the computed arrangement for their content. After the arrange all action is finished, the containers which had an explicit size before will still have an explicit size (although potentially different); they are only switched to auto-size mode during the arrange all action. 
+			</li>
+			<li>
+				<em>Move unlinked notes during layout:</em> If checked, then the 
+				<em>Arrange all</em> will consider all 
+				<a href="#notes">notes</a> on the diagram and arrange them. If unchecked, only the notes which are attached to non-note diagram elements are moved by the layout; the rest (which are considered just comments on the diagram itself), are not touched. 
+			</li>
+			<li>
+				<em>Automatically mark moved elements as pinned:</em> If checked, then as soon as you explicitly move a element (node or container) on the diagram, Sirius will mark it as 
+				<a href="#pinning">pinned</a> and consider it should not be moved by the automatic layout. You can still explicitly 
+				<a href="#pinning">unpin</a> these elements.
+			</li>
+			<li>
+				<span id="synchronized_preference">
+					<em>Synchronized mode for new diagrams:</em>
+				</span> If checked, all newly created diagrams will initially be in 
+				<a href="#synchronized_diagram">synchronized</a> mode. You can still change the mode manually after the diagram is created.
+			</li>
+			<li>
+				<span id="show_sync_decorator">
+					<em>Show synchronize status decorator on diagram:</em>
+				</span> If checked, a decorator in the bottom-right corner of the diagram is displayed to show the 
+				<a href="#synchronized_diagram">synchronize</a> status of the diagram. A value change of this preference will be applied on the next status changed for already opened diagrams.
+			</li>
+			<li>
+				<em>Remove/hide note when the annotated element is removed/hidden:</em> If checked, then notes attached to a diagram element will be deleted if the element is deleted, or hidden if the element is hidden.
+			</li>
+			<li>
+				<em>Export as image Scaling</em>: determines default level of scaling when exporting diagrams as image and its initial value in the 
+				<em>Export as image</em> dialog. 
+				<em>Max</em> level means an optimal quality export whereas 
+				<em>nominal</em> means nominal quality export. 
+			</li>
+		</ul>
+		<h3 id="Appearance">Appearance</h3>
+		<p>The 
+			<em>Appearance</em> preferences page (see below) gives you two preferences to control whether or not to show the labels on shapes (nodes, containers, bordered nodes) and connectors (edges). It also allows you to customize the default font and colors used for some basic diagram elements. Diagram configurations already specify default values for these style attributes, so in practice these preferences are mostly useful for notes.
+		</p> 
+		<img border="0" src="images/preferences_sirius_diagram_appearance.png"/>
+		<p>The 
+			<em>Authorize decoration overlapping</em> preference lets, if checked, the decorations of different positions overlapping each other or displaying outside the diagram element bounding. If unchecked, decorations may be grouped in a 
+			<em>list decorator</em> to avoid overlapping.
+		</p>
+		<h3 id="Printing">Printing</h3>
+		<p>The 
+			<em>Printing</em> page (see below) gives you various preferences related to page layout for layout printing.
+		</p> 
+		<img border="0" src="images/preferences_sirius_diagram_printing.png"/>
+		<p>The 
+			<em>Print decoration</em> preference allows to print decorations displayed on diagram graphical elements.
+		</p>
+		<h3 id="RulersAndGrid">Rulers And Grid</h3>
+		<p>Finally, the 
+			<em>Rulers And Grid</em> page (see below) contains preferences to control whether or not new diagrams should initially show the rulers and/or grids, and whether to enable the 
+			<em>Snap to grid</em> and 
+			<em>Snap to shapes</em> behavior by default. The preferences on this page are only taken into account as starting values for new diagrams. Each diagram has its own configuration of rulers and grid which can be modified  in the 
+			<em>Rulers &amp; Grid</em> section of the 
+			<em>Properties</em> view of the diagram itself.
+		</p> 
+		<img border="0" src="images/preferences_sirius_diagram_rulers_grid.png"/>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/diagrams/images/afterRemoveBendpoints.png b/doc/5.1.x/user/diagrams/images/afterRemoveBendpoints.png
new file mode 100644
index 0000000..051e9b5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/afterRemoveBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/beforeBendpoints.png b/doc/5.1.x/user/diagrams/images/beforeBendpoints.png
new file mode 100644
index 0000000..96d8da3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/beforeBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/compartments_collapse3.png b/doc/5.1.x/user/diagrams/images/compartments_collapse3.png
new file mode 100644
index 0000000..8da9f22
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/compartments_collapse3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/compoundmoves2.png b/doc/5.1.x/user/diagrams/images/compoundmoves2.png
new file mode 100644
index 0000000..2a074f0
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/compoundmoves2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/decoratorsSyncStatus.png b/doc/5.1.x/user/diagrams/images/decoratorsSyncStatus.png
new file mode 100644
index 0000000..63ada92
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/decoratorsSyncStatus.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor11.png b/doc/5.1.x/user/diagrams/images/diagram_editor11.png
new file mode 100644
index 0000000..119b25f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor11.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor11_tabbar.png b/doc/5.1.x/user/diagrams/images/diagram_editor11_tabbar.png
new file mode 100644
index 0000000..92f16da
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor11_tabbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor12.png b/doc/5.1.x/user/diagrams/images/diagram_editor12.png
new file mode 100644
index 0000000..674600b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor12.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor13.png b/doc/5.1.x/user/diagrams/images/diagram_editor13.png
new file mode 100644
index 0000000..01ab782
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor13.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor16.png b/doc/5.1.x/user/diagrams/images/diagram_editor16.png
new file mode 100644
index 0000000..69a9c16
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor16.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor17.png b/doc/5.1.x/user/diagrams/images/diagram_editor17.png
new file mode 100644
index 0000000..cdb33a9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor17.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor18.png b/doc/5.1.x/user/diagrams/images/diagram_editor18.png
new file mode 100644
index 0000000..78370d6
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor18.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor19.png b/doc/5.1.x/user/diagrams/images/diagram_editor19.png
new file mode 100644
index 0000000..6a928fa
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor19.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor20.png b/doc/5.1.x/user/diagrams/images/diagram_editor20.png
new file mode 100644
index 0000000..9d26489
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor20.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor20b.png b/doc/5.1.x/user/diagrams/images/diagram_editor20b.png
new file mode 100644
index 0000000..199ca05
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor20b.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor21.png b/doc/5.1.x/user/diagrams/images/diagram_editor21.png
new file mode 100644
index 0000000..ba1df55
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor21.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor3.png b/doc/5.1.x/user/diagrams/images/diagram_editor3.png
new file mode 100644
index 0000000..4115f93
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor4.png b/doc/5.1.x/user/diagrams/images/diagram_editor4.png
new file mode 100644
index 0000000..345f660
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor4.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor5.png b/doc/5.1.x/user/diagrams/images/diagram_editor5.png
new file mode 100644
index 0000000..d63906d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor5.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor6.png b/doc/5.1.x/user/diagrams/images/diagram_editor6.png
new file mode 100644
index 0000000..46d7c5e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor6.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor7.png b/doc/5.1.x/user/diagrams/images/diagram_editor7.png
new file mode 100644
index 0000000..e366b0c
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor7.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor8.png b/doc/5.1.x/user/diagrams/images/diagram_editor8.png
new file mode 100644
index 0000000..5fc04a1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor8.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_copy_format.png b/doc/5.1.x/user/diagrams/images/diagram_editor_copy_format.png
new file mode 100644
index 0000000..f695bb5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_copy_format.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd01.png
new file mode 100644
index 0000000..bd885a8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02a.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02a.png
new file mode 100644
index 0000000..c748aa4
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02a.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02b.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02b.png
new file mode 100644
index 0000000..3b8d433
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd02b.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03a.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03a.png
new file mode 100644
index 0000000..2a15980
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03a.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03b.png b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03b.png
new file mode 100644
index 0000000..cd87f6b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_dnd03b.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_filter_toolbar_activated.png b/doc/5.1.x/user/diagrams/images/diagram_editor_filter_toolbar_activated.png
new file mode 100644
index 0000000..f14d385
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_filter_toolbar_activated.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_edge_label_1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_edge_label_1.png
new file mode 100644
index 0000000..49311ac
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_edge_label_1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_1.png
new file mode 100644
index 0000000..756782a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_1.png
new file mode 100644
index 0000000..42bac1e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_2.png
new file mode 100644
index 0000000..56d4580
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_icon_2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_outline.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_outline.png
new file mode 100644
index 0000000..07d213d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_outline.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_tabbar.png b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_tabbar.png
new file mode 100644
index 0000000..2c9a087
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_hide_label_tabbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_note_pin_configuration01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_note_pin_configuration01.png
new file mode 100644
index 0000000..b8445da
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_note_pin_configuration01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format1.png
new file mode 100644
index 0000000..e03e459
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format2.png
new file mode 100644
index 0000000..398999f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_format2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout1.png
new file mode 100644
index 0000000..94d8a9a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout2.png
new file mode 100644
index 0000000..9147270
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_layout2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style1.png
new file mode 100644
index 0000000..bb55dcf
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style2.png
new file mode 100644
index 0000000..18c2b4a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_paste_style2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin01.png
new file mode 100644
index 0000000..b76fb2b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin02.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin02.png
new file mode 100644
index 0000000..6abf974
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin03.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin03.png
new file mode 100644
index 0000000..c82edd8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin03.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin04.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin04.png
new file mode 100644
index 0000000..9770450
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin04.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin05.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin05.png
new file mode 100644
index 0000000..9a30c06
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin05.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_configuration01.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_configuration01.png
new file mode 100644
index 0000000..0c1ae42
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_configuration01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog1.png
new file mode 100644
index 0000000..5bff512
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog2.png
new file mode 100644
index 0000000..33ba02b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_dialog2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_pin_toolbar_activated.png b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_toolbar_activated.png
new file mode 100644
index 0000000..4487bc6
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_pin_toolbar_activated.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog1.png b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog1.png
new file mode 100644
index 0000000..90421f3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog2.png b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog2.png
new file mode 100644
index 0000000..996d84f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_show_hide_dialog2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_editor_transient_layer.png b/doc/5.1.x/user/diagrams/images/diagram_editor_transient_layer.png
new file mode 100644
index 0000000..a133501
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_editor_transient_layer.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_history.png b/doc/5.1.x/user/diagrams/images/diagram_export_history.png
new file mode 100644
index 0000000..1305006
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_history.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_image_tabbar.png b/doc/5.1.x/user/diagrams/images/diagram_export_image_tabbar.png
new file mode 100644
index 0000000..bf12106
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_image_tabbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_one_image.png b/doc/5.1.x/user/diagrams/images/diagram_export_one_image.png
new file mode 100644
index 0000000..a69284d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_one_image.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_export_wrong_extension.png b/doc/5.1.x/user/diagrams/images/diagram_export_wrong_extension.png
new file mode 100644
index 0000000..397362a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_export_wrong_extension.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_sample1.png b/doc/5.1.x/user/diagrams/images/diagram_sample1.png
new file mode 100644
index 0000000..03dfbe9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_sample1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/diagram_sample_annotated.png b/doc/5.1.x/user/diagrams/images/diagram_sample_annotated.png
new file mode 100644
index 0000000..53e10a7
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/diagram_sample_annotated.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/distribute_Centers.png b/doc/5.1.x/user/diagrams/images/distribute_Centers.png
new file mode 100644
index 0000000..74c50d8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/distribute_Centers.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/distribute_WithUniformGap.png b/doc/5.1.x/user/diagrams/images/distribute_WithUniformGap.png
new file mode 100644
index 0000000..21944de
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/distribute_WithUniformGap.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/distribute_initialState.png b/doc/5.1.x/user/diagrams/images/distribute_initialState.png
new file mode 100644
index 0000000..33e0439
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/distribute_initialState.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_edgeSelected.png b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_edgeSelected.png
new file mode 100644
index 0000000..6afb62c
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_edgeSelected.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_labelSelected.png b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_labelSelected.png
new file mode 100644
index 0000000..5c7c57e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_labelSelected.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_preference.png b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_preference.png
new file mode 100644
index 0000000..fd731fa
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/edgeLabelAttachment_preference.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/exportSample.png b/doc/5.1.x/user/diagrams/images/exportSample.png
new file mode 100644
index 0000000..7ac6ce3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/exportSample.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/exportSampleSource.png b/doc/5.1.x/user/diagrams/images/exportSampleSource.png
new file mode 100644
index 0000000..82dcde1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/exportSampleSource.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/layoutingMode_forbidden_dnd.png b/doc/5.1.x/user/diagrams/images/layoutingMode_forbidden_dnd.png
new file mode 100644
index 0000000..c82aeef
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/layoutingMode_forbidden_dnd.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/layouting_mode_tabbar_activate.png b/doc/5.1.x/user/diagrams/images/layouting_mode_tabbar_activate.png
new file mode 100644
index 0000000..c6e8330
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/layouting_mode_tabbar_activate.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/moveEdgeGroup1.png b/doc/5.1.x/user/diagrams/images/moveEdgeGroup1.png
new file mode 100644
index 0000000..e621e64
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/moveEdgeGroup1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/moveEdgeGroup2.png b/doc/5.1.x/user/diagrams/images/moveEdgeGroup2.png
new file mode 100644
index 0000000..fce0889
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/moveEdgeGroup2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_folding.png b/doc/5.1.x/user/diagrams/images/palette_folding.png
new file mode 100644
index 0000000..15101a8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_folding.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_moving.png b/doc/5.1.x/user/diagrams/images/palette_moving.png
new file mode 100644
index 0000000..a31b2ff
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_moving.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_resizing.png b/doc/5.1.x/user/diagrams/images/palette_resizing.png
new file mode 100644
index 0000000..9890cc4
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_resizing.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_tool_drawer.png b/doc/5.1.x/user/diagrams/images/palette_tool_drawer.png
new file mode 100644
index 0000000..86efacd
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_tool_drawer.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_tool_group.png b/doc/5.1.x/user/diagrams/images/palette_tool_group.png
new file mode 100644
index 0000000..e50ee39
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_tool_group.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/palette_tools.png b/doc/5.1.x/user/diagrams/images/palette_tools.png
new file mode 100644
index 0000000..c2f234f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/palette_tools.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/popup_bar.png b/doc/5.1.x/user/diagrams/images/popup_bar.png
new file mode 100644
index 0000000..ac15be9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/popup_bar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles1.png b/doc/5.1.x/user/diagrams/images/port_selection_handles1.png
new file mode 100644
index 0000000..b94a613
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles2.png b/doc/5.1.x/user/diagrams/images/port_selection_handles2.png
new file mode 100644
index 0000000..2fb3099
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles3.png b/doc/5.1.x/user/diagrams/images/port_selection_handles3.png
new file mode 100644
index 0000000..75734b9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/port_selection_handles4.png b/doc/5.1.x/user/diagrams/images/port_selection_handles4.png
new file mode 100644
index 0000000..4bbd81b
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/port_selection_handles4.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram.png
new file mode 100644
index 0000000..60ca1b7
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_appearance.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_appearance.png
new file mode 100644
index 0000000..fa5fc45
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_appearance.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_connections.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_connections.png
new file mode 100644
index 0000000..f0e0835
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_connections.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_pathmaps.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_pathmaps.png
new file mode 100644
index 0000000..e2328f1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_pathmaps.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_printing.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_printing.png
new file mode 100644
index 0000000..2ab091d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_printing.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_rulers_grid.png b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_rulers_grid.png
new file mode 100644
index 0000000..263ec95
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/preferences_sirius_diagram_rulers_grid.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/properties_view_rulers_and_grid_tab.png b/doc/5.1.x/user/diagrams/images/properties_view_rulers_and_grid_tab.png
new file mode 100644
index 0000000..0b0fc9f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/properties_view_rulers_and_grid_tab.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/rectilinearAfterRemoveBendpoints.png b/doc/5.1.x/user/diagrams/images/rectilinearAfterRemoveBendpoints.png
new file mode 100644
index 0000000..eb55619
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/rectilinearAfterRemoveBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/rectilinearWithBendpoints.png b/doc/5.1.x/user/diagrams/images/rectilinearWithBendpoints.png
new file mode 100644
index 0000000..0f0cf4d
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/rectilinearWithBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_after.png b/doc/5.1.x/user/diagrams/images/reset_origin_after.png
new file mode 100644
index 0000000..6c375ce
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_after.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_before.png b/doc/5.1.x/user/diagrams/images/reset_origin_before.png
new file mode 100644
index 0000000..be33cd1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_before.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_masked_edge.png b/doc/5.1.x/user/diagrams/images/reset_origin_masked_edge.png
new file mode 100644
index 0000000..647ab4f
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_masked_edge.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/reset_origin_visible_edge.png b/doc/5.1.x/user/diagrams/images/reset_origin_visible_edge.png
new file mode 100644
index 0000000..99dd0a3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/reset_origin_visible_edge.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap-back-label-from-label.png b/doc/5.1.x/user/diagrams/images/snap-back-label-from-label.png
new file mode 100644
index 0000000..0d64ad8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap-back-label-from-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap-back-label.png b/doc/5.1.x/user/diagrams/images/snap-back-label.png
new file mode 100644
index 0000000..b26db27
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap-back-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap_to_all_shapes.png b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes.png
new file mode 100644
index 0000000..a02d8f6
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap_to_all_shapes_2.png b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes_2.png
new file mode 100644
index 0000000..ad76b93
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap_to_all_shapes_2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snap_to_shape.png b/doc/5.1.x/user/diagrams/images/snap_to_shape.png
new file mode 100644
index 0000000..dba8a12
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snap_to_shape.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snapped-back-label-from-label.png b/doc/5.1.x/user/diagrams/images/snapped-back-label-from-label.png
new file mode 100644
index 0000000..2ceb5a0
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snapped-back-label-from-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/snapped-back-label.png b/doc/5.1.x/user/diagrams/images/snapped-back-label.png
new file mode 100644
index 0000000..912b3c7
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/snapped-back-label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenHorizontalInitialState.png b/doc/5.1.x/user/diagrams/images/straightenHorizontalInitialState.png
new file mode 100644
index 0000000..40546d9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenHorizontalInitialState.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToBottom.png b/doc/5.1.x/user/diagrams/images/straightenToBottom.png
new file mode 100644
index 0000000..9c71f08
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToBottom.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToLeft.png b/doc/5.1.x/user/diagrams/images/straightenToLeft.png
new file mode 100644
index 0000000..3c579ca
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToLeft.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToMenu.png b/doc/5.1.x/user/diagrams/images/straightenToMenu.png
new file mode 100644
index 0000000..d686ea1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToMenu.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToRight.png b/doc/5.1.x/user/diagrams/images/straightenToRight.png
new file mode 100644
index 0000000..a92f59c
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToRight.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToTabbarButton.png b/doc/5.1.x/user/diagrams/images/straightenToTabbarButton.png
new file mode 100644
index 0000000..2173ddb
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToTabbarButton.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenToTop.png b/doc/5.1.x/user/diagrams/images/straightenToTop.png
new file mode 100644
index 0000000..ccc9eee
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenToTop.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenVerticalInitialState.png b/doc/5.1.x/user/diagrams/images/straightenVerticalInitialState.png
new file mode 100644
index 0000000..6917350
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenVerticalInitialState.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenWithLeftPinned.png b/doc/5.1.x/user/diagrams/images/straightenWithLeftPinned.png
new file mode 100644
index 0000000..74bad50
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenWithLeftPinned.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/straightenWithRightPinned.png b/doc/5.1.x/user/diagrams/images/straightenWithRightPinned.png
new file mode 100644
index 0000000..0f5c24a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/straightenWithRightPinned.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram1.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram1.png
new file mode 100644
index 0000000..39d6d61
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram1.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram2.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram2.png
new file mode 100644
index 0000000..6877a48
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram2.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram3.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram3.png
new file mode 100644
index 0000000..4a95bc8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram3.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram4.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram4.png
new file mode 100644
index 0000000..7b195af
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram4.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram5.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram5.png
new file mode 100644
index 0000000..2690c09
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram5.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/synchronized_diagram_statusbar.png b/doc/5.1.x/user/diagrams/images/synchronized_diagram_statusbar.png
new file mode 100644
index 0000000..6436527
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/synchronized_diagram_statusbar.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar01.png b/doc/5.1.x/user/diagrams/images/tabbar01.png
new file mode 100644
index 0000000..6a71098
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar02.png b/doc/5.1.x/user/diagrams/images/tabbar02.png
new file mode 100644
index 0000000..ca5cf92
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar4x01.png b/doc/5.1.x/user/diagrams/images/tabbar4x01.png
new file mode 100644
index 0000000..4128e20
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar4x01.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar4x02.png b/doc/5.1.x/user/diagrams/images/tabbar4x02.png
new file mode 100644
index 0000000..e5c53cd
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar4x02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_alignment_control.png b/doc/5.1.x/user/diagrams/images/tabbar_alignment_control.png
new file mode 100644
index 0000000..86bc077
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_alignment_control.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_apply_style.png b/doc/5.1.x/user/diagrams/images/tabbar_apply_style.png
new file mode 100644
index 0000000..dab7fd9
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_apply_style.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_arrange_selection.png b/doc/5.1.x/user/diagrams/images/tabbar_arrange_selection.png
new file mode 100644
index 0000000..6b3c5d2
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_arrange_selection.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_auto_size.png b/doc/5.1.x/user/diagrams/images/tabbar_auto_size.png
new file mode 100644
index 0000000..7d39ddc
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_auto_size.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_automatic_layout_tools.png b/doc/5.1.x/user/diagrams/images/tabbar_automatic_layout_tools.png
new file mode 100644
index 0000000..230c0e5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_automatic_layout_tools.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_cancel_custom_style.png b/doc/5.1.x/user/diagrams/images/tabbar_cancel_custom_style.png
new file mode 100644
index 0000000..da854ab
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_cancel_custom_style.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_color_style_controls.png b/doc/5.1.x/user/diagrams/images/tabbar_color_style_controls.png
new file mode 100644
index 0000000..e365bef
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_color_style_controls.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_copy_layout.png b/doc/5.1.x/user/diagrams/images/tabbar_copy_layout.png
new file mode 100644
index 0000000..0f5f9b5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_copy_layout.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_delete_from_diagram.png b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_diagram.png
new file mode 100644
index 0000000..a9f3beb
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_diagram.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_delete_from_model.png b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_model.png
new file mode 100644
index 0000000..65bcca1
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_delete_from_model.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_distribute_actions.png b/doc/5.1.x/user/diagrams/images/tabbar_distribute_actions.png
new file mode 100644
index 0000000..e370d93
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_distribute_actions.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_export_image.png b/doc/5.1.x/user/diagrams/images/tabbar_export_image.png
new file mode 100644
index 0000000..c64e78a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_export_image.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_filters_selection.png b/doc/5.1.x/user/diagrams/images/tabbar_filters_selection.png
new file mode 100644
index 0000000..df398c8
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_filters_selection.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_font_controls.png b/doc/5.1.x/user/diagrams/images/tabbar_font_controls.png
new file mode 100644
index 0000000..9f31faa
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_font_controls.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_hide.png b/doc/5.1.x/user/diagrams/images/tabbar_hide.png
new file mode 100644
index 0000000..2e44d15
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_hide.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_hide_label.png b/doc/5.1.x/user/diagrams/images/tabbar_hide_label.png
new file mode 100644
index 0000000..5fff9cd
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_hide_label.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_layers_selection.png b/doc/5.1.x/user/diagrams/images/tabbar_layers_selection.png
new file mode 100644
index 0000000..2d59363
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_layers_selection.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_layouting_mode.png b/doc/5.1.x/user/diagrams/images/tabbar_layouting_mode.png
new file mode 100644
index 0000000..7043991
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_layouting_mode.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_make_same_size.png b/doc/5.1.x/user/diagrams/images/tabbar_make_same_size.png
new file mode 100644
index 0000000..1281c23
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_make_same_size.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_paste_layout.png b/doc/5.1.x/user/diagrams/images/tabbar_paste_layout.png
new file mode 100644
index 0000000..50e7fe3
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_paste_layout.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin.png b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin.png
new file mode 100644
index 0000000..5bcb47e
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin_02.png b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin_02.png
new file mode 100644
index 0000000..3ea18e5
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_pin_unpin_02.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_refresh.png b/doc/5.1.x/user/diagrams/images/tabbar_refresh.png
new file mode 100644
index 0000000..a80361a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_refresh.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_selection_tools.png b/doc/5.1.x/user/diagrams/images/tabbar_selection_tools.png
new file mode 100644
index 0000000..f3e792a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_selection_tools.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_show_hide.png b/doc/5.1.x/user/diagrams/images/tabbar_show_hide.png
new file mode 100644
index 0000000..804f768
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_show_hide.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/tabbar_zoom.png b/doc/5.1.x/user/diagrams/images/tabbar_zoom.png
new file mode 100644
index 0000000..e13cbda
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/tabbar_zoom.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/images/withBendpoints.png b/doc/5.1.x/user/diagrams/images/withBendpoints.png
new file mode 100644
index 0000000..c4fc32a
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/images/withBendpoints.png
Binary files differ
diff --git a/doc/5.1.x/user/diagrams/videos/moveInAllDirections.mp4 b/doc/5.1.x/user/diagrams/videos/moveInAllDirections.mp4
new file mode 100644
index 0000000..2c64e83
--- /dev/null
+++ b/doc/5.1.x/user/diagrams/videos/moveInAllDirections.mp4
Binary files differ
diff --git a/doc/5.1.x/user/general/Aird_Editor.html b/doc/5.1.x/user/general/Aird_Editor.html
new file mode 100644
index 0000000..2bd0a5c
--- /dev/null
+++ b/doc/5.1.x/user/general/Aird_Editor.html
@@ -0,0 +1,440 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Aird_Editor</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="AirdEditor">Aird Editor</h1>
+		<p>This document describes the new form-based editor for 
+			<code>aird</code> files introduced in version 5.0. This editor is associated to 
+			<code>*.aird</code> files (which contains Sirius representations data) and provides end-users complete overview of their models and representations, and direct access to the most common operations.
+		</p>
+		<p>This document assumes you are already faimiliar with the vocabulary associated with Sirius; if that is not the case, please refer to 
+			<a href="Modeling%20Project.html">the Modeling Project documentation</a> which describes in details the more &#8220;traditional&#8221; Sirius UI and the associated concepts.
+		</p>
+		<p>
+			<em>Note:</em> This new editor has been introduced with Sirius 5.0. While it is already functional, it should be considered as a first iteration, and its UI is subject to change without warnings in later versions based on experience and user feedback.
+		</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#AirdEditor">Aird Editor</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#overview">Overview</a>
+					</li>
+					<li>
+						<a href="#opening">Opening the Aird Editor</a>
+					</li>
+					<li>
+						<a href="#closing">Closing the Aird Editor and unloading models</a>
+					</li>
+					<li>
+						<a href="#semantic_models">Managing the Semantic Models</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#LoadinganExistingModel">Loading an Existing Model</a>
+							</li>
+							<li>
+								<a href="#model_creation_wizard">Creating New Models</a>
+							</li>
+							<li>
+								<a href="#removing_model">Removing Model Dependencies And Representations From The Aird Editor</a>
+							</li>
+							<li>
+								<a href="#removing_representation">Removing Representations From The Aird Editor</a>
+							</li>
+							<li>
+								<a href="#quick_editing">Models Quick Editing</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#representations">Managing Representations and Viewpoints</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#visualize_viewpoints_representations">Visualizing Viewpoints and Representations</a>
+							</li>
+							<li>
+								<a href="#enable_disable_viewpoints">Enabling and Disabling Viewpoints</a>
+							</li>
+							<li>
+								<a href="#create_remove_representations">Creating and Removing Representations</a>
+							</li>
+							<li>
+								<a href="#open_representation">Opening a Sirius Modeler From a Representation</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="overview">Overview</h2>
+		<p>The traditional Sirius UI is centered on the 
+			<em>Modeling</em> perspective, and in particular on the 
+			<em>Model Explorer</em> view. For some use cases, especially when Sirius representations are not the primary focus of the user but only a secondary feature to support their main task, this reliance on a specific perspective or view can be inconvenient. The Aird editor is designed to provide an alternative UI to interact with Sirius that is better suited for these use cases. Because the editor is available from any perspective and directly exposes the most common user operations inside its UI, it makes it more convenient to use Sirius in a variety of contexts.
+		</p>
+		<p>Note that most of the features available from the aird editor are also available from the 
+			<em>Model Explorer</em>'s UI; the editor simply provides alternative ways to use them that can be more convenient in some contexts. There are two exceptions, described in more details below, which are currently specific to the Aird editor: the generic 
+			<a href="#model_creation_wizard">model creation wizard</a> and the ability to 
+			<a href="#quick_editing">add/remove elements directly</a> from the semantic models.
+		</p>
+		<p>Using Sirius to display and manipulate your domain models requires telling Sirius:</p>
+		<ul>
+			<li>which are the models (files) your are interested in;</li>
+			<li>which of the compatible representation types you want to make use of.</li>
+		</ul>
+		<p>Representation types are defined in plug-ins which extend Sirius and that you need to install in your environment. Which ones will be available to you depend on what concrete modelers you have installed. Sirius-based modelers can provide many alternative representation types for the same semantic models, and organize them in 
+			<em>viewpoints</em>, which corresponds to the different activities or point of views that can be applied to the models.
+		</p>
+		<p>This organization is reflected in the editor, which presents two main blocks:</p>
+		<p>
+			<img border="0" src="images/aird_editor_full.png"/>
+		</p>
+		<p>On the left, the 
+			<em>Models</em> block shows the raw semantic models, which can come from multiple files (resources), and allows you to configure which models should be loaded, to navigate inside them, to perform some basic editing tasks, and finally to create and manage Sirius representations on them.
+		</p>
+		<p>On the right the 
+			<em>Representations</em> block displays all the types of representations available and all the concrete ones already created, organized by viewpoint (by default). It also allows you to manage the representations and viewpoints. The representation types available to you will depend both on the kind of models you have loaded and which modeler plug-ins you have installed in your environment. For example if you have installed 
+			<a href="http://www.umldesigner.org/">UML Designer</a> 
+			<strong>and</strong> have at least one 
+			<code>*.uml</code> model loaded, you will find there the different kinds of UML diagrams implemented in 
+			<em>UML Designer</em>.
+		</p>
+		<h2 id="opening">Opening the Aird Editor</h2>
+		<p>The Aird editor is the default editor associated to the 
+			<code>*.aird</code> files in Eclipse. In some perspectives (e.g. 
+			<em>Java</em>), double-clicking on an 
+			<code>aird</code> file will open the editor and automatically load all the files/models needed if that it not already the case. In other contexts where double-click performs a different operation you may need to open the context menu and select 
+			<i>Open With &gt; Aird Editor</i>.
+		</p>
+		<p>It is also possible to configure Sirius to automatically open the Aird editor when an 
+			<code>*.aird</code> file is first loaded. When this mode is enabled, opening/expanding a 
+			<em>Modeling Project</em> from the 
+			<em>Model Explorer</em>, which triggers the loading of the models, will also open the editor. This behavior can be enabled via the Sirius preference 
+			<strong>
+				<i>Automatically open the aird editor when an aird file is loaded</i>
+			</strong>: 
+		</p>
+		<p>
+			<img border="0" src="images/aird_editor_pref.png"/>
+		</p>
+		<p>When this preference is activated, then aird editor is opened automatically in the following situations:</p>
+		<ul>
+			<li>After clicking 
+				<i>Finish</i> button of the 
+				<i>Create a modeling project</i> wizard, the project is created as well as its aird file. The newly created aird file is automatically opened in the editor.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_modeling_project_creation_wizard.png"/>
+		</p>
+		<ul>
+			<li>When a project with the 
+				<em>Modeling</em> nature is opened from 
+				<i>Model Explorer</i> or 
+				<i>Project Explorer</i>, the aird editor is also automatically opened if it contains a main aird file.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_open_project_modeling_explorer.png"/>
+		</p>
+		<ul>
+			<li>When the aird file is first expanded from a project with 
+				<em>Modeling</em> nature from 
+				<i>Model Explorer</i> or 
+				<i>Project Explorer</i> view, the aird editor is also opened automatically. 
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_expand_aird_file.png"/>
+		</p>
+		<h2 id="closing">Closing the Aird Editor and unloading models</h2>
+		<p>You have four different ways to close the aird editor. But not all the ways have the same behaviour.</p>
+		<p>There is one thing to take in consideration when it comes to close the aird editor:</p>
+		<ul>
+			<li>An opened aird editor has all its referenced models loaded in memory as well as any representation opened in a Sirius editor. For big models and big representations, this can have a big memory footprint. So when you want to close the aird editor you must ask yourself if you want to free the memory used by the loaded aird or not. Then you have to choose the right way to close the editor accordingly. Indeed some way to close the editor will not free this memory and some others will.</li>
+		</ul>
+		<p>The closing mechanism which does not unload models and representations is the following:</p>
+		<ul>
+			<li>Clicking on the editor white cross on the top right corner of editor&#8217;s tab. This will only close the aird editor and will not free memory used by loaded models and representations opened in Sirius editors.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_close_editor_with_cross.png"/>
+		</p>
+		<p>The closing mechanisms which do unload models and representations from memory are the following:</p>
+		<ul>
+			<li>If your aird editor refers to an aird file on a 
+				<em>Modeling Project</em>, the only way to unload models and representations from memory is to close it.
+			</li>
+		</ul>
+		<ul>
+			<li>If your aird editor does not refer to an aird file on a 
+				<em>Modeling Project</em>, a button 
+				<em>Unload models</em> is provided by the editor and allows to close the aird editor and free memory used by loaded models and representations.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_close_editor_with_button.png"/>
+		</p>
+		<ul>
+			<li>When aird editor is not in a 
+				<em>Modeling Project</em>, 
+				<em>Close</em> action in contextual menu of the aird file is available. This action is reachable in any view showing the aird as an IFile like 
+				<em>Model Explorer</em>, 
+				<em>Package Explorer</em> etc... 
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_close_editor_with_right_click.png"/>
+		</p>
+		<h2 id="semantic_models">Managing the Semantic Models</h2>
+		<p>This section describes how to manage the semantic models associated to your aird file, which are visible in the 
+			<em>Models</em> block on the left side of the editor:
+		</p>
+		<p>
+			<img border="0" src="images/aird_editor_models_block.png"/>
+		</p>
+		<p>The 
+			<em>Models</em> block displays a tree showing all semantic models associated to the aird file, organized in two categories:
+		</p>
+		<ul>
+			<li>The models located in the same workspace project as the one containing the aird file from which editor has been opened. These are visible as root items on the graphical tree.</li>
+		</ul>
+		<ul>
+			<li>The models located in a project that is different from the project containing the aird file from which the editor has been opened. These models are visible under the 
+				<em>Project Dependencies</em> category.
+			</li>
+		</ul>
+		<p>For example:</p>
+		<p>
+			<img border="0" src="images/aird_editor_model_loading.png"/>
+		</p>
+		<p>Regardless of the category they appear in, all the semantic models associated with an aird file are fully loaded, and you can expand the tree elements to navigate inside your models. The tree can be filtered on the elements labels using the search box at the top to quickly locate specific model elements:</p>
+		<p>
+			<img border="0" src="images/aird_editor_filter_models_elements.png"/>
+		</p>
+		<p>In addition to the actual semantic elements, this view also includes all existing representations (diagrams, tables, trees). As in the case of the 
+			<em>Model Explorer</em>, the representations are available directly below the semantic element they represent, and can be opened by double-clicking on them.
+		</p>
+		<h3 id="LoadinganExistingModel">Loading an Existing Model</h3>
+		<p>To be able to edit a semantic model with a Sirius modeler, you must first tell the aird it can edit that model. There are two mechanisms to do so:</p>
+		<ul>
+			<li>An automatic one were, if your project has 
+				<em>Modeling</em> nature, any model file added inside the project will be automaticall added to the aird file.
+			</li>
+			<li>A manual one were you have two different buttons in the editor:
+				<ul>
+					<li>The 
+						<strong>
+							<i>New...</i>
+						</strong> button, which opens a wizard allowing to create a new model from any registered package and in any project you want (see the next section for more details on the wizard). The newly created model will be loaded automatically in the aird file.
+					</li>
+					<li>The 
+						<strong>
+							<i>Add</i>
+						</strong> button, which allows to load into the aird file an already existing model either from the same project or from another one.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Note that you can also add a new semantic model to a session by simply drag and dropping the model file from the workpace (from any Eclipse view) into the 
+			<em>Models</em> block on the left side of the editor.
+		</p>
+		<h3 id="model_creation_wizard">Creating New Models</h3>
+		<p>The aird editor features a generic model creation wizard that can be used to create new models files of any kind supported in the environement (i.e. instances of any installed meta-model). To create a new model, select the 
+			<i>New...</i> button. It opens a creation wizard:
+		</p>
+		<ul>
+			<li>The first page asks you to select which kind of model you want to create. It will present you all the EMF metamodels available in your installation (e.g. UML or BPMN). You can use the text field to filter among all the meta-models available (in large installations, there may be hundreds of them).</li>
+		</ul>
+		<p>
+			<img border="0" src="images\aird_editor_create_new_model.png"/>
+		</p>
+		<ul>
+			<li>Once the metamodel is selected, the second page asks for the type of the root element in the new model file. By default Sirius will try to infer good candidates for this root element type, and show only those. You can deselect the 
+				<em>Show only suggested root types</em> checkbox to reveal 
+				<strong>all</strong> the concrete types defined in the metamodel you selected.
+			</li>
+			<li>Finally, the third page of the wizard will ask you for the name and location of the new file to create. By default, the file will be created in the same project as the 
+				<code>aird</code> file and have a generated name.
+			</li>
+		</ul>
+		<h3 id="removing_model">Removing Model Dependencies And Representations From The Aird Editor</h3>
+		<p>To remove 
+			<strong>models dependencies</strong>, you must select the root model items and click on the 
+			<strong>
+				<i>Remove</i>
+			</strong> button:
+		</p>
+		<p>
+			<img border="0" src="images/aird_editor_remove_semantic_model.png"/>
+		</p>Note that this action does not delete the physical model file.
+		<p>The removal can be applied only if some rules are respected. If they are not, the remove button will still be active and its activation, will inform you of the reasons why you cannot proceed the removal.</p>
+		<p>The rules regarding models dependencies removal are the following :</p>
+		<ul>
+			<li>A model dependency cannot be removed if at least one of its element contains a representation. Note that the representation can be invisible if the viewpoint providing it is not enabled.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_remove_semantic_model_representation.png"/>
+		</p>
+		<ul>
+			<li>A model dependency cannot be removed if you are working inside a project with the 
+				<em>Modeling</em> nature and the semantic model is located inside this project. Indeed, the 
+				<em>Modeling</em> nature ensures that all model files stored inside the project are always loaded in the project&#8217;s 
+				<code>aird</code> file.
+			</li>
+		</ul>
+		<ul>
+			<li>A model dependency cannot be removed if it is a fragment of a model. In this situation you need to use the 
+				<strong>
+					<i>Uncontrol</i>
+				</strong> action to remove it.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_remove_semantic_model_uncontrol.png"/>
+		</p>
+		<h3 id="removing_representation">Removing Representations From The Aird Editor</h3>
+		<p>To remove a 
+			<strong>representation</strong> from the aird file, you can either select it in the editor and use the right click contextual action 
+			<strong>
+				<i>Delete</i>
+			</strong> or the 
+			<strong>
+				<i>DEL</i>
+			</strong> keyboard key.
+		</p>
+		<h3 id="quick_editing">Models Quick Editing</h3>
+		<p>The normal way to display and edit models with Sirius is to do it through one or several Sirius-defined representations (
+			<em>modelers</em>), which define domain-specific ways to represent and manipulate the data, and ensure some level of consistency.
+		</p>
+		<p>In some situations you may need to manipulate the model elements more directly, even if no Sirius-based modeler or tool has been defined to support your use case. The 
+			<em>aird editor</em> provides support for &#8220;quick editing&#8221; of the semantic models independently of a Sirius representation. It works like any generic EMF models editor:
+		</p>
+		<ul>
+			<li>You can right-click on a semantic element to create new children inside, or to delete it. </li>
+			<li>When you have selected an element, you can use the 
+				<em>Properties</em> view to edit its features. Note that the content of this view depends on which 
+				<em>viewpoints</em> are currently enabled. If you have enabled viewpoints which define specific properties views for your elements, these will be used instead of a generic one, so not all direct model operations may be available.
+			</li>
+		</ul>
+		<p>Keep in mind that editing the semantic models this way bypasses any high-level restrictions and rules that may be  brought by Sirius modelers. Depending on the semantic models, these direct manipulation may break domain constraints. Use with care.</p>
+		<h2 id="representations">Managing Representations and Viewpoints</h2>
+		<p>To use a Sirius modeler to edit a model element, you need to create a graphical representation for it. This representation is then editable with a Sirius modeler that can be a diagram, a tree or a table editor. Concrete representations are created from a 
+			<em>representation type</em>, which are provided by Sirius-based modelers, and organized by 
+			<em>viewpoints</em>.
+		</p>
+		<p>In addition to providing representation types from which representation can be created, viewpoints can also provide extensions to other viewpoints' representation types, adding for example new tools to them.</p>
+		<p>The following sections describe how to create/remove representations and the related functionalities.</p>
+		<h3 id="visualize_viewpoints_representations">Visualizing Viewpoints and Representations</h3>
+		<p>The aird editor has a block named 
+			<em>Representation</em> which displays all the available viewpoints (compatible with the semantic models loaded), the representation types they define, and the actual concrete representations that have been created. All these elements are organized in a tree:
+		</p>
+		<p>
+			<img border="0" src="images/aird_editor_representations_block.png"/>
+		</p>
+		<p>This 
+			<em>Representations</em> block is separated in two parts:
+		</p>
+		<ul>
+			<li>The left is the tree showing viewpoints with their representations types (showing the number of representations it contains) and representations.</li>
+			<li>The right part shows the documentation of the viewpoint of the selected element. It allows to find what viewpoint provides the representation type providing Sirius modeler functionalities fitting your needs to edit graphically your models.</li>
+		</ul>
+		<p>To the bottom of these two parts are two checkboxes, that can be used to control which elements are displayed:</p>
+		<ul>
+			<li>
+				<strong>
+					<i>Group representations by viewpoint</i>
+				</strong>: when active (the default), viewpoints items are shown in the tree. When deactivated, only representation types and their representations are shown.
+			</li>
+			<li>
+				<strong>
+					<i>Show disabled viewpoints</i>
+				</strong>: when active (the default), 
+				<strong>all</strong> the available viewpoints (and their content) which apply to the semantic elements currently loaded are displayed, even if they are currently disabled. This is useful when starting a new project as it shows you immediatly all the features that are available to you, even if you have not yet enabled any. Once you have enabled the viewpoints you need, you may want to hide the others to help focus. 
+			</li>
+		</ul>
+		<p>A viewpoint is grayed out if it is disabled. Otherwise it is enabled in the aird file.</p>
+		<p>The viewpoints shown are all the viewpoints available in your environment that are compatible with the models loaded in the aird file. So if your environment does not contain any viewpoint compatible with your models or if you have no models loaded, then the graphical representations component will be empty.</p>
+		<p>Representations can also be seen directly in the models graphical component of the aird editor under the associated model&#8217;s element if the viewpoint containing the representation type used to create the representation is activated. If not the representation will not be visible.</p>
+		<p>
+			<img border="0" src="images/aird_editor_rep_under_model.png"/>
+		</p>
+		<p>To open an exisiting representation, simply double-click on it (this works both in the 
+			<em>Representations</em> tree and in the 
+			<em>Semantics</em> tree).
+		</p>
+		<h3 id="enable_disable_viewpoints">Enabling and Disabling Viewpoints</h3>
+		<p>A viewpoint provides representation types and/or extension for other representation types. In some cases you want need to disable functionalities brought by these extensions or on the contrary to enable them. </p>
+		<p>To enable/disable a viewpoint, you can either:</p>
+		<ul>
+			<li>double click on a viewpoint item on the representations graphical component of the aird editor. It will enable or disable the viewpoint depending on its current state.</li>
+			<li>use the 
+				<strong>
+					<i>Enable</i>
+				</strong> 
+				<strong>
+					<i>Disable</i>
+				</strong> buttons after having selected one or more viewpoints.
+			</li>
+			<li>create a new representation defined in a previously disabled viewpoint. It will activate the viewpoint of the corresponding representation type.</li>
+		</ul>
+		<p>Some viewpoints have dependencies to another ones. Enabling a viewpoint will automatically enable all its dependencies. Disabling a viewpoint that is a dependency of another one will ask you to confirm its disabling as well as the ones depending on it.</p>
+		<h3 id="create_remove_representations">Creating and Removing Representations</h3>
+		<p>After having identified the representation type providing Sirius modeler functionalities you need, three methods are available to create a new representation from it and a model element to edit its content:</p>
+		<ul>
+			<li>First you can double click on a representation type from the representations graphical component of the aird editor. It opens the 
+				<strong>
+					<i>Create a new representation</i>
+				</strong> wizard. You then have to select a model element compatible with the description from which the new representation will be created.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_create_rep_double_click.png"/>
+		</p>
+		<ul>
+			<li>Second you can click on the 
+				<strong>
+					<i>New</i>
+				</strong> button of the representations graphical component of the aird editor. It opens the wizard were you have first to select the representation type from which you want to create a representation before choosing the model element.
+			</li>
+		</ul>
+		<ul>
+			<li>The last method is to use the contextual menu action 
+				<strong>
+					<i>New representation</i>
+				</strong> available on right click on a model element from the models graphical component:
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/aird_editor_new_rep_menu.png"/>
+		</p>
+		<p>The menu shows only representation types compatible with the selected model element and that belong to activated viewpoints. When choosing 
+			<strong>
+				<i>Other...</i>
+			</strong> the wizard to create new representation is opened and show the representation types compatible with the selected element whether they belong to a viewpoint activated or deactivated. If you create a representation defined in a viewpoint that was previously disabled, it will be enabled automatically.
+		</p>
+		<p>You can 
+			<em>remove</em> a representation either from the representations or models graphical components of the aird editor by:
+		</p>
+		<ul>
+			<li>using the 
+				<i>Remove</i> action in the representation&#8217;s context menu;
+			</li>
+			<li>using the 
+				<i>Remove</i> button of representations block when the representation to remove is selected there; 
+			</li>
+			<li>select the representation and hit the 
+				<i>Del</i> key.
+			</li>
+		</ul>
+		<h3 id="open_representation">Opening a Sirius Modeler From a Representation</h3>
+		<p>To open a representation to edit graphically the model&#8217;s element it is associated to, you just have to double-click on it either in the models or representations graphical component of the aird editor. </p>
+		<p>If you double click on a representation in the 
+			<em>Representations</em> block that belong to a disabled viewpoint, this viewpoint will automatically be enabled before opening the representation.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/general/Modeling Project.html b/doc/5.1.x/user/general/Modeling Project.html
new file mode 100644
index 0000000..ae3fb17
--- /dev/null
+++ b/doc/5.1.x/user/general/Modeling Project.html
@@ -0,0 +1,574 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Modeling Project</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="ModelingProjectsandRepresentations">Modeling Projects and Representations</h1>
+		<p>In this document you will learn how to create and manage Modeling Projects, which are used in Sirius to organize your models and their representations (diagrams, tables, etc.).</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#ModelingProjectsandRepresentations">Modeling Projects and Representations</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#Introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#FormerUsers">Note to Users of Previous Versions</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#Migration">Migration of Existing Representation Files</a>
+							</li>
+							<li>
+								<a href="#UICHanges">User Interface Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#ModelingPerspective">The Modeling Perspective</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#ModelExplorer">The Model Explorer View</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#MP">Modeling Projects</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#MPCreation">Creating a New Modeling Project</a>
+							</li>
+							<li>
+								<a href="#MPConversion">Converting an Existing Project into a Modeling Project</a>
+							</li>
+							<li>
+								<a href="#MPConversionReverse">Removing the Modeling Nature from a Project</a>
+							</li>
+							<li>
+								<a href="#ViewpointSelection">Selecting Which Viewpoints to Enable</a>
+							</li>
+							<li>
+								<a href="#ProjectDependencies">Project Dependencies</a>
+							</li>
+							<li>
+								<a href="#ModelsInMP">Models in Modeling Projects</a>
+							</li>
+							<li>
+								<a href="#ModelActions">Actions Available on Model Elements</a>
+							</li>
+							<li>
+								<a href="#AirdFiles">Representations Files</a>
+							</li>
+							<li>
+								<a href="#AirdStructure">Structure of a _Representations File_</a>
+							</li>
+							<li>
+								<a href="#repair">Repair action</a>
+							</li>
+							<li>
+								<a href="#MPConstraints">Constraints</a>
+							</li>
+							<li>
+								<a href="#Lifecycle">Modeling Project Lifecycle</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#Representations">Representations</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#ReprCreation">Creating a Representation</a>
+							</li>
+							<li>
+								<a href="#ReprManagement">Managing Representations</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#LegacyMode">Legacy Mode </a>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="Introduction">Introduction</h2>
+		<p>The Sirius system is used to create, visualize and edit your 
+			<em>models</em> using interactive editors called 
+			<em>modelers</em>. These modelers can be of different kinds, depending on the type of visual representations. Out of the box, Sirius supports three different 
+			<em>dialects</em> (kinds of representations) 
+			<em>diagrams</em> (graphical modelers), 
+			<em>tables</em>, and 
+			<em>trees</em> (hierarchical representations). New dialects can be added through programming.
+		</p>
+		<p>Provided with the right configuration file (something called a 
+			<em>Viewpoint Specification Model</em> or 
+			<em>VSM</em> for short), Sirius can represent any model which is compatible with EMF (the de facto standard for modeling tools in the Eclipse world). This includes standards like UML, SysML, TOGAF etc., but also any 
+			<em>Domain Specific Model</em> (
+			<em>DSM</em>) which you can create to better suit your specific needs. For one kind of model (e.g. TOGAF, which is used to describe Enterprise Architectures), several Sirius configurations can be created, each one specific to a particular 
+			<em>viewpoint</em>. Different kinds of users can thus see the same model through different viewpoints, each adapted to his preoccupations: from the same TOGAF model, the 
+			<acronym title="Chief Executing Officer">CEO</acronym> will want to see a general overview of how the company is organized, the 
+			<acronym title="Chief Operating Officer">COO</acronym> may want a view more oriented towards processes, and a system administrator will need a view on just the parts which concern software systems put in place to implement these processes.
+		</p>
+		<p>Sirius makes it easy for architects to create 
+			<em>Viewpoint Specification Model</em> suited for any kind of model. These are then packaged as Eclipse plug-ins that you can install to use their modelers. Note that Sirius itself must also be installed for the viewpoints to run (they are not self-sufficient).
+		</p>
+		<p>As an end-user, you will use already configured modelers specially adapted to your needs. If you want to create your own modelers, please refer to the 
+			<a href="../../specifier/Sirius%20Specifier%20Manual.html">Sirius Specifier Manual</a>. Simple modelers do not require any programming to create, and once you know the basics, a new graphical modeler can be created from scratch in less than an hour.
+		</p>
+		<p>To use already existing modelers (assuming the plug-ins which provide them are installed), you will need to know the following notions (see also 
+			<a href="../../Glossary.html">the Glossary</a> ):
+		</p>
+		<ul>
+			<li>a 
+				<em>resource</em> is a file (in your workspace or inside a plug-in) which contains a model;
+			</li>
+			<li>the 
+				<em>semantic model</em> is the model (or models) which contains your business data. It can be stored in one of several resources (files) which can reference each other. The type of semantic model can be different for each user. It can be based on a standard (for example 
+				<code>.uml</code> files for UML models) or based on a 
+				<em>Domain Specific Model</em> (sometimes called 
+				<em>Domain Specific Language</em>) which was specially created for your needs.
+			</li>
+			<li>a 
+				<em>dialect</em> is a kind of representation supported by Sirius. Out of the box, Sirius supports three dialects: diagrams, tables, and trees. Sequence diagrams and cross-tables, which are special kinds of diagrams (resp. tables) can also be considered of as dialects, although technically they are not.
+			</li>
+			<li>a 
+				<em>representation</em> is a particular diagram, table, or tree which you created on your semantic model. It is simply a more general term than &#8220;diagram&#8221; which is also usable for other dialects.
+			</li>
+			<li>a 
+				<em>representation file</em> is a file in which Sirius stores all informations related to which representations you created, what appears on them, the positions and colors of the elements, etc. This files have a 
+				<code>.aird</code> extension (typically 
+				<code>representations.aird</code>). Representation files reference the semantic model(s) they contain representations for, but you semantic models are kept unaware (and unpolluted) of any Sirius-specific data.
+			</li>
+			<li>a 
+				<em>viewpoint</em> is a set of representation descriptions which provide a specific point of view on some kind of semantic model. For example we could have a 
+				<em>UML Structural</em> viewpoint, which describes the sub-set of all the standard UML diagrams which deal only with structural aspects of UML models (as opposed to behavioral or requirements aspects). Viewpoints are defined in 
+				<em>Viewpoint Specification Models</em> and packaged as Eclipse plug-ins. Once you install such a plug-in, the viewpoints it defines will be available to you (with all the representations they define) on all compatible semantic models.
+			</li>
+			<li>a 
+				<em>modeling project</em> is a special kind of project in your workspace which makes it easy to manipulate representation files and semantic models in a consistent way.
+			</li>
+		</ul>
+		<p>The rest of this document explains how you can use the Sirius UI to create and manipulate representations of your semantic models. Each viewpoint and representation is specific. We will use the 
+			<em>Family</em> example for illustration purpose, but note that not all features may be available with all kinds of models and all viewpoints.
+		</p>
+		<h2 id="FormerUsers">Note to Users of Previous Versions</h2>
+		<p>New users can skip this section safely. For users of previous version who have existing models, this section explains the required steps to use their models with this version, and gives an overview of the main UI changes. See also the 
+			<a href="../../Release_Notes.html">release notes</a> for more details.
+		</p>
+		<h3 id="Migration">Migration of Existing Representation Files</h3>
+		<p>Representation files are now automatically migrated when opened. This migration is transparent for the end-user. While a representation file is not saved, the automatic migration will be replayed at the next opening.</p>
+		<h3 id="UICHanges">User Interface Changes</h3>
+		<p>You will notice some radical changes in the user interface. The most important change is the disappearance of the 
+			<em>Model Content</em> view. It has been replaced with a streamlined UI which integrates directly into the Eclipse explorer view. The notion of &#8220;Local Session&#8221; has disappeared from the user interface; its management has been made as transparent as possible so you do not have to deal with it except in some very specific circumstances.
+		</p>
+		<p>The recommended way to use Sirius is now to use the new notion of 
+			<em>Modeling Project</em> described below. If you already have existing Sirius representation files (
+			<code>aird</code> files), a 
+			<a href="#MPConversion">conversion</a> is necessary. Modeling projects have some constraints on how the files are organized. If you do not want or can not convert your models to the new recommended way, a 
+			<a href="#LegacyMode">legacy mode</a> is provided which does not require any change to your projects organisation (beyond the files' migration). Note that the support for this legacy mode is not guaranteed to be maintained in all future versions of Sirius.
+		</p>
+		<h2 id="ModelingPerspective">The Modeling Perspective</h2>
+		<p>When you first start Sirius, it opens on the 
+			<em>Modeling</em> perspective. This new perspective provides all the required views, wizards and menus to exploit designers as an end user.
+		</p> 
+		<img border="0" src="images/modeling_perspective.png"/>
+		<p>The Modeling perspective provides the following views by default:</p>
+		<ul>
+			<li>A 
+				<a href="#ModelExplorer">
+					<em>Model Explorer</em>
+				</a>, which is the main UI to interact with your models. (For users of previous versions, this explorer includes directly all the features which were found in the &#8220;Model Content&#8221; view before).
+			</li>
+			<li>An 
+				<em>Outline</em> view, which provides a structural overview of the document or model currently opened. For diagrams, it shows a miniature view of the whole diagram on which you can easily navigate to other parts of the diagram for large ones.
+			</li>
+			<li>The 
+				<em>Properties</em> view gives detailed information about the currently selected element. Depending on the nature of the selected element, some of these properties can be edited directly in the 
+				<em>Properties</em> view with immediate effect.
+			</li>
+			<li>The 
+				<em>Problems</em> view contains information markers of different severities (information only, warnings, or errors). This is where you will find validation errors on your models for example. 
+			</li>
+		</ul>
+		<p>This perspective also provides useful actions available by right-clicking in the view 
+			<a href="#ModelExplorer">
+				<em>Model Explorer</em>
+			</a>.
+		</p>
+		<p>As usual in Eclipse, this perspective can be customized at will by adding, moving or removing views, shortcuts, etc.</p>
+		<h3 id="ModelExplorer">The Model Explorer View</h3>
+		<p>The 
+			<em>Model Explorer</em> view shows all the projects in you workspace and the files they contain. It adds some special capabilities to 
+			<em>Modeling Projects</em>, to allow you to view and manipulate your semantic models and their Sirius representations directly inside the explorer.
+		</p>
+		<p>For instance, inside the 
+			<em>Model Explorer</em>, semantic models and representation files which are part of a 
+			<em>Modeling Project</em>  or model files can be expanded to display their content directly:
+		</p> 
+		<img border="0" src="images/model_explorer_view.png"/>
+		<p>In the example above, the 
+			<code>example</code> modeling project (note the blue &#8220;M&#8221; decorator on the project icon) contains a single semantic model, the 
+			<code>example.ecore</code> file, and a single representation file 
+			<code>representations.aird</code>. Both can be expanded directly from inside the 
+			<em>Model Explorer</em> view, to discover the structure of the semantic model and the graphical representations which already exist.
+		</p>
+		<p>The 
+			<em>Model Explorer</em> supports the &#8220;Link with Editor&#8221; feature, which can be enabled by pressing the icon in the top right corner of the view (the one with two horizontal arrows, pressed in the screenshot above). When this mode is enabled, if you have a representation opened, clicking anywhere on it will automatically select the corresponding semantic element(s) inside the 
+			<em>Model Explorer</em> (expanding the project and files if necessary). Conversely, if you select one or several semantic element(s) from one of your semantic models in the 
+			<em>Model Explorer</em> view and if these elements are represented somewhere on the opened editor, they will be automatically selected. This can be very useful when you have many projects and representation or large representations to avoid getting lost.
+		</p>
+		<p>The 
+			<em>Model Explorer</em> also supports filtering of elements from inside 
+			<em>Modeling Projects</em> (and only these elements): if you enter some text in the search box at the top of the view, the view will filter out all the elements which do not match your text. For example if you enter 
+			<code>Element</code> in the search box, only the model elements whose name starts with 
+			<code>Element</code> will be shown. You can use the 
+			<code>*</code> and 
+			<code>?</code> special characters in your search string to mean respectively &#8220;any text&#8221; (including none) and &#8220;any single character&#8221;. For example the search string 
+			<code>*Element</code> will show all elements whose name 
+			<em>contains</em> the string 
+			<code>Element</code> anywhere.
+		</p>
+		<p>The 
+			<em>Model Explorer</em> allows to group tree items with an intermediary level. This feature clearly enhances the expand time on huge models.
+			<br/>  
+			<img border="0" src="images/groupItems.png"/>
+			<br/>You can customize this feature with three preferences:
+		</p>
+		<ul>
+			<li>Enable/disable this feature globally</li>
+			<li>Increase/decrease the threshold that triggers the intermediary level</li>
+			<li>Increase/decrease the group size</li>
+		</ul> 
+		<img border="0" src="images/groupItems_1.png"/>
+		<p>
+			<strong>Note:</strong> We see that this feature need to be enabled and have a hierarchy context above the threshold to be triggered.
+			<br/>In another hand, to keep a consistency, the threshold and group size value need to follow these rules:
+		</p>
+		<ul>
+			<li>The threshold needs to be higher or equal to the group size. Otherwise the threshold value will be ignored and the group size value will be used instead.</li>
+			<li>The group size value needs to be higher than zero.</li>
+		</ul>
+		<p>When you update these preferences, you need to make a refresh (F5) on all resources already expanded to get an updated tree items.</p>
+		<p>
+			<img border="0" src="images/groupItems_2.png"/>
+		</p>
+		<p>This feature is also enabled on tree selection wizards in Sirius diagram tools.</p>
+		<p>
+			<img border="0" src="images/groupItems_3.png"/>
+		</p>
+		<h2 id="MP">Modeling Projects</h2>
+		<p>Modeling Projects, which are used in Sirius to organize and manage your models and their representations (diagrams, tables, etc.).</p>
+		<p>Modeling projects are responsible for storing the representation data (diagrams, tables, etc.) in special 
+			<em>representation files</em> with the extension 
+			<code>.aird</code>. Modeling projects can also be used to store the semantic data of your models but this is not mandatory. Semantic data can be stored anywhere, but representation data 
+			<strong>must be stored in 
+				<code>aird</code> files within modeling projects
+			</strong> (the only exception is the 
+			<a href="#LegacyMode">legacy mode</a> supported for compatibility with previous versions).
+		</p>
+		<p>Moreover, modeling projects provide 
+			<em>actions to manage viewpoints and representations</em>: viewpoints are associated to a modeling project, so the viewpoints that will be available for a given Modeling Project&#8217;s representations are the one attached to this project. Viewpoints selection is made by right-clicking on a Modeling Project and choosing 
+			<em>Viewpoints Selection</em>.
+		</p>
+		<h3 id="MPCreation">Creating a New Modeling Project</h3>
+		<p>To create a new 
+			<em>Modeling Project</em>, simply right-click in the 
+			<a href="#ModelExplorer">Model Explorer</a> (or use the 
+			<em>File &gt; New...</em> menu) and select 
+			<em>New &gt; Modeling Project</em>.
+		</p> 
+		<img border="0" src="images/new_project1.png"/>
+		<p>A wizard opens, asking for a mandatory project name. Entering an invalid project name will result in an error message. By default, the modeling project will be created in the workspace&#8217;s location, but this can be changed: just uncheck &#8220;Use default location&#8221; and enter the path to the location where you want your modeling project to be created.</p> 
+		<img border="0" src="images/new_project2.png"/>
+		<p>When you are done, click 
+			<em>Finish</em> to actually create the modeling project. It will appear in the 
+			<em>Model Explorer</em>, and by default contains two elements:
+		</p>
+		<ul>
+			<li>
+				<em>Project Dependencies</em>, where you can add external dependencies you rely on, i.e. models you will depend on but which are stored oustide of the project;
+			</li>
+			<li>
+				<code>representations.aird</code>, which is the top-level representation file for the project. 
+			</li>
+		</ul> 
+		<img border="0" src="images/new_project3.png"/>
+		<h3 id="MPConversion">Converting an Existing Project into a Modeling Project</h3>
+		<p>It can be useful to convert an existing project into a Modeling Project, since it is necessary for example to be able to create representations in it. An action is available to do this. Right-click on any project, then select 
+			<em>Configure... &gt; Convert to Modeling Project</em>.
+		</p> 
+		<img border="0" src="images/convert_to_modeling_project1.png"/>
+		<p>This action does not alter in any way the nature of the project. For example, if the project was a Java project, it will still be a Java project afterwards. The action just adds the 
+			<em>Modeling Project</em> nature to the selected project.
+		</p> 
+		<img border="0" src="images/convert_to_modeling_project2.png"/>
+		<p>If there is a suitable representation file, it will be considered to be the top-level representation file for the converted project. Otherwise, a new representation file named 
+			<em>representations.aird</em> will be created automatically at the root of the project.
+		</p>
+		<h3 id="MPConversionReverse">Removing the Modeling Nature from a Project</h3>
+		<p>If for some reason you want to revert the conversion of a project into a 
+			<em>Modeling Project</em>, you can use the 
+			<em>Configure... &gt; Remove Modeling Project Nature</em> action on the context menu of the project.
+		</p>
+		<p>The action will simply remove the nature from the project itself, but will not remove or alter the representation files stored inside. You will still be able to use your representations using the 
+			<a href="#LegacyMode">legacy mode</a>.
+		</p>
+		<h3 id="ViewpointSelection">Selecting Which Viewpoints to Enable</h3>
+		<p>Each modeling project has a set of viewpoints which are 
+			<em>enabled</em>. This controls what kind of representations you can create on the semantic models inside the project. The set of viewpoints which are available to you will depend on what plug-ins you have installed, and on the type of semantic models which are inside the modeling projects. For example, even if you have installed the <a href="http://marketplace.obeonetwork.com/module/uml" target="_blank">UML Designer</a>, you will only be able to enable to corresponding viewpoints if your project contains UML models (
+			<code>.uml</code> files).
+		</p>
+		<p>To select which viewpoints are enable on your project, simply use the 
+			<em>Viewpoints Selection</em> action in the context menu of the project itself. A dialog box will open which will show you all the viewpoints which are compatible with your project (depending on the kind of models it contains). You can check or un-check each viewpoint individually to enable or disable it, and click 
+			<em>OK</em> to validate your choice. Note that some viewpoints depend on other ones (especially viewpoints which extend other ones). If your selection of viewpoints does not include all the required dependencies, a message will be shown to indicate which dependencies are not resolved. You can then adjust your selection and re-validate it.
+		</p> 
+		<img border="0" src="images/viewpoint_selection1.png"/> 
+		<img border="0" src="images/viewpoint_selection2.png"/>
+		<h3 id="ProjectDependencies">Project Dependencies</h3>
+		<p>A modeling project will always have an element called 
+			<em>Project Dependencies</em> available. This is used to import external models, which are stored outside of the modeling project but used in it, for instance for certain representations of the project.
+		</p>
+		<p>To use a semantic model stored outside of the current modeling project, it must be added to the project dependencies. That will not change its location but will simply allow access to its content.
+			<br/>To add an external model to a modeling project, right-click on 
+			<em>Project Dependencies</em> then select 
+			<em>Add Model</em>.
+			<br/>Project dependencies can contain both semantic models and graphical models (
+			<em>i.e. representations files</em>)
+		</p> 
+		<img border="0" src="images/project_dependencies1.png"/>
+		<p>A wizard page opens, allowing you to enter the URI of the model to add. If the model is in the workspace, you can use the button 
+			<em>Browse Workspace</em> to look for it. If the model in in the file system, you can use the button 
+			<em>Browse File System...</em> to find it. Otherwise, you must enter the model&#8217;s URI manually.
+		</p> 
+		<img border="0" src="images/project_dependencies2.png"/>
+		<p>Once the model&#8217;s URI is entered, click 
+			<em>OK</em>. The model is added under 
+			<em>Project Dependencies</em> and a pop-up window is displayed to allow you to select the viewpoints you need. Just select or unselect the viewpoints you want and click 
+			<em>OK</em> when you&#8217;re done.
+		</p> 
+		<img border="0" src="images/project_dependencies3.png"/>
+		<p>Referenced models can be removed if they are not used, just right-click on the model in the 
+			<em>Model Dependencies</em> and select 
+			<em>Remove</em>.
+		</p> 
+		<img border="0" src="images/remove_dependencies1.png"/>
+		<p>
+			<strong>Note:</strong> If the referenced model is a non-modeling project in the workspace, the corresponding file will be decorated with an 
+			<em>M</em> in the upper right corner to indicate that this model is used in a Modeling Project. This decorator disappears if the modeling projects that use this model are closed.
+		</p> 
+		<img border="0" src="images/decorated_model1.png"/>
+		<h3 id="ModelsInMP">Models in Modeling Projects</h3>
+		<p>Any model available in a modeling project, whether physically located in the modeling project or just referenced by it (
+			<em>via</em> the 
+			<em>Project Dependencies</em>), will be expandable. This means that the content of any model used or referenced in a modeling project can be browse directly in the modeling project, in the view 
+			<a href="#ModelExplorer">Model Explorer</a>.
+		</p> 
+		<img border="0" src="images/models_content1.png"/>
+		<h3 id="ModelActions">Actions Available on Model Elements</h3>
+		<p>When browsing a model in a modeling project, several actions can be accessed by right-clicking on a model element:</p>
+		<ul>
+			<li>
+				<em>New Representation</em> allows you to create a new representation. The availability of this action depends on the kind of model and selected viewpoints, the action being displayed only when it makes sense;
+			</li>
+			<li>
+				<em>Export diagrams as images</em> allows you to export the diagrams related to this element (those that are displayed directly under this element) in image files.
+			</li>
+		</ul>
+		<h3 id="AirdFiles">Representations Files</h3>
+		<p>Representations files are used to store representations. They have the extension 
+			<code>.aird</code>.
+			<br/>Such files contain the data needed to display the diagrams (or other kinds of representations) but they do not contain semantic data, which are stored by the models themselves.
+			<br/>Representations files located in modeling projects can be unfolded to browse their content.
+		</p>
+		<h3 id="AirdStructure">Structure of a 
+			<em>Representations File</em>
+		</h3>
+		<p>The content of a 
+			<em>representations file</em> is structured in three levels:
+		</p>
+		<ul>
+			<li>Viewpoint 1
+				<ul>
+					<li>Representation Type 1.1
+						<ul>
+							<li>Representation 1.1.1</li>
+							<li>Representation 1.1.2</li>
+						</ul>
+					</li>
+					<li>Representation Type 1.2
+						<ul>
+							<li>Representation 1.2.1</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+			<li>Viewpoint 2
+				<ul>
+					<li>Representation Type 2.1
+						<ul>
+							<li>Representation 2.1.1</li>
+						</ul>
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>The first level displays the available viewpoints, which match the viewpoints selected on the 
+			<em>modeling project</em>.
+			<br/>The second level, inside a given viewpoint, displays 
+			<em>representation types</em>. Only 
+			<em>representation types</em> for which at least one representation exists are displayed.
+			<br/>The third level, inside a 
+			<em>representation type</em>, displays the representations actually present for this type.
+		</p> 
+		<img border="0" src="images/aird_unfolded1.png"/>
+		<h3 id="repair">Repair action</h3>
+		<p>A repair action is available in representations file context menu
+			<br/>In some case, you will need to execute a repair action on your representations file, especially when you have modified the VSM (odesign file). 
+		</p>
+		<h4 id="Operationsdoneduringrepairexecution">Operations done during repair execution</h4>
+		<ul>
+			<li>Deleting representations without semantic target.</li>
+			<li>Deactivating behavior, filter, rules that no longer exist in VSM.</li>
+			<li>Saving all diagram elements state (such as style, bounds, expended bounds for collapsed node).</li>
+			<li>Deleting diagram elements that will be recreated by refresh.</li>
+			<li>Refresh all representations.</li>
+			<li>Restore diagram elements state.</li>
+		</ul>
+		<h4 id="Caseswhereusingrepairaction">Cases where using repair action</h4>
+		<ul>
+			<li>After removing behavior, rules or filter into VSM.</li>
+			<li>After removing or updating some mapping.</li>
+			<li>After removing some semantic elements.</li>
+		</ul>
+		<p>In most of case, a simple refresh of representation should be enough. Note that repair action could take some time depending on representations file size.</p>
+		<h3 id="MPConstraints">Constraints</h3>
+		<p>There is one important constraint regarding 
+			<em>modeling projects</em>. They can only contain 
+			<strong>one</strong> top-level 
+			<em>representations file</em>.
+		</p>
+		<p>A top-level 
+			<em>representations file</em> is a file that stores representations. Such files can be modularized, which means they can be split in several files, but there is always one 
+			<em>master</em> file which references the others and is referenced by none. This file is the top-level file, and there can be only one per 
+			<em>modeling project</em>.
+			<br/>To say this differently: If you want to have several independent 
+			<em>representations files</em>, each of them must be placed in its own 
+			<em>modeling project</em>.
+		</p>
+		<h3 id="Lifecycle">Modeling Project Lifecycle</h3>
+		<p>As mentioned before, models in a 
+			<em>Modeling Project</em> are automatically loaded when first needed. They are not unloaded automatically. If you want them to be unloaded (and retreive the associated memory), you must close the modeling project itself.
+		</p>
+		<p>Besides, all representations of a given 
+			<em>modeling project</em> are part of the same model. Any modification to one of these representations will cause all of them to go dirty (which means that a little * symbol will be displayed in the editor title to indicate that the file contains unsaved modifications). Conversely, saving any representation of a 
+			<em>modeling project</em> saves all of them. What is actually saved is the 
+			<em>representations file</em>, which contains all the representations.
+		</p>
+		<h2 id="Representations">Representations</h2>
+		<p>Representations are stored in 
+			<code>*.aird</code> files. An 
+			<code>*.aird</code> file is called a 
+			<a href="#AirdFiles">
+				<strong>Representations File</strong>
+			</a>.
+			<br/>A representation can be a diagram, a table, a cross-table, a tree, etc.
+		</p>
+		<p>
+			<strong>Note:</strong> 
+			<em>Representations files</em> located in 
+			<em>modeling projects</em> are loaded automatically.
+		</p>
+		<h3 id="ReprCreation">Creating a Representation</h3>
+		<p>There are two ways of creating a representation. Both take place in the 
+			<em>Model Explorer</em>.
+		</p>
+		<p>The first way of creating a representation is to navigate in a model to an element for which you know there is a 
+			<em>representation type</em> available. Right-click on this element, then select 
+			<em>New Representation &gt; &lt;Representation type&gt;</em>.
+		</p> 
+		<img border="0" src="images/create_representation1.png"/>
+		<p>The other way consists in right-clicking on the 
+			<em>Modeling Project</em> itself. Select 
+			<em>Create Representation</em>.
+		</p> 
+		<img border="0" src="images/create_representation1_alt.png"/>
+		<p>This opens a wizard that displays available viewpoints and available 
+			<em>representation types</em> in these viewpoints.
+			<br/>Just select the type of representation you want to create and click 
+			<em>Next &gt;</em>.
+		</p> 
+		<img border="0" src="images/create_representation2.png"/>
+		<p>The wizard then displays the available models (those that are in the current modeling project and those that are imported). When you browse the content of these models, you will notice that their content is filtered to display only elements that are relevant for the selected representation type.
+			<br/>Select the element for which you want to create a representation and click 
+			<em>Finish</em>.
+		</p> 
+		<img border="0" src="images/create_representation3.png"/>
+		<p>Either way, a pop-up window appears, where you can enter a name for the new representation. A default name is proposed. Click 
+			<em>OK</em>.
+		</p> 
+		<img border="0" src="images/create_representation4.png"/>
+		<p>If there are several 
+			<em>representations files</em> in the current 
+			<em>modeling project</em>, a pop-up window appears before the actual creation to allow you to select the 
+			<em>representations file</em> that will contain the representation.
+		</p> 
+		<img border="0" src="images/create_representation5.png"/>
+		<p>The representation is then created and opened.</p>
+		<h3 id="ReprManagement">Managing Representations</h3>
+		<p>Available representations can be accessed by browsing 
+			<em>representation files</em> to the third level. Right-clicking on a representation then offers several actions:
+		</p> 
+		<img border="0" src="images/managing_representation1.png"/>
+		<ul>
+			<li>
+				<strong>Open</strong> opens the representation in the relevant editor. You can also open the representation by double-click on it;
+			</li>
+			<li>
+				<strong>Delete</strong> deletes the representation: Del key can be used as shortcut (
+				<strong>Warning:</strong> this cannot be undone);
+			</li>
+			<li>
+				<strong>Rename</strong> opens a pop-up window where you can enter a new name for the representation: F2 key can be used as shortcut;
+			</li>
+			<li>
+				<strong>Copy</strong> duplicates the representation, opening a pop-up window where you can enter the name of the copy;
+			</li>
+			<li>
+				<strong>Move</strong> (only if there are several 
+				<em>representations files</em> in the current 
+				<em>modeling project</em>) allows you to move a representation to another 
+				<em>representations file</em>;
+			</li>
+			<li>
+				<strong>Extract to .aird file ...</strong> extracts the selected element to another 
+				<em>representations file</em>, which will be located in the workspace. A pop-up window opens to let you select the destination file, and the new file is automatically added to the project&#8217;s dependencies if needed;
+			</li>
+			<li>
+				<strong>Export Diagrams as images</strong> allows you to export all the diagrams stored inside a representation file in one operation. You can choose the destination folder and image format..
+			</li>
+		</ul>
+		<h2 id="LegacyMode">Legacy Mode </h2>
+		<p>The legacy UI mode is made available for users of previous versions of Sirius who can not or do not want to convert their projects into 
+			<em>Modeling Projects</em>. As such, it works with all existing representation files (provided they have been migrated if required), even if they are inside non-Modeling projects or if there are several top-level representation files inside the same project.
+		</p>
+		<p>When using the legacy mode, you must explicitly 
+			<em>open</em> a representation file using the 
+			<em>Open</em> action in the context menu of the file. This is equivalent to opening a 
+			<em>session</em> in previous versions of Sirius. Once the representation file is open, you can expand it, and inside you will find all the same elements that you would find inside a normal 
+			<em>Modeling Project</em>: the semantic model(s) associated to the representation file, and the representations themselves.
+		</p> 
+		<img border="0" src="images/legacy_mode1.png"/>
+		<p>All the actions which are normally performed on the modeling project itslef, like selecting which viewpoints are enabled, are available in the context menu of the representation file itself:</p> 
+		<img border="0" src="images/legacy_mode2.png"/>
+		<p>Note that the 
+			<em>Project dependencies</em> entry is not available in legacy mode. To associate new semantic models to the representation file, use the 
+			<em>Add model</em> action directly on the representation file.
+		</p>
+		<p>Once you have finished using the models and or representations, you must explitly close it (equivalent to closing the 
+			<em>session</em> in previous versions) by using the 
+			<em>Close</em> action on the top-level representation file.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/general/images/aird_editor_close_editor_with_button.png b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_button.png
new file mode 100644
index 0000000..f455f51
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_button.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_close_editor_with_cross.png b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_cross.png
new file mode 100644
index 0000000..138801f
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_cross.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_close_editor_with_right_click.png b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_right_click.png
new file mode 100644
index 0000000..666b7eb
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_close_editor_with_right_click.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_create_new_model.png b/doc/5.1.x/user/general/images/aird_editor_create_new_model.png
new file mode 100644
index 0000000..c9ad149
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_create_new_model.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_create_rep_double_click.png b/doc/5.1.x/user/general/images/aird_editor_create_rep_double_click.png
new file mode 100644
index 0000000..dfa3b84
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_create_rep_double_click.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_expand_aird_file.png b/doc/5.1.x/user/general/images/aird_editor_expand_aird_file.png
new file mode 100644
index 0000000..c5eff57
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_expand_aird_file.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_filter_models_elements.png b/doc/5.1.x/user/general/images/aird_editor_filter_models_elements.png
new file mode 100644
index 0000000..ea2a0c8
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_filter_models_elements.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_full.png b/doc/5.1.x/user/general/images/aird_editor_full.png
new file mode 100644
index 0000000..878376c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_full.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_model_loading.png b/doc/5.1.x/user/general/images/aird_editor_model_loading.png
new file mode 100644
index 0000000..271a68c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_model_loading.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_modeling_project_creation_wizard.png b/doc/5.1.x/user/general/images/aird_editor_modeling_project_creation_wizard.png
new file mode 100644
index 0000000..c99457c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_modeling_project_creation_wizard.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_models_block.png b/doc/5.1.x/user/general/images/aird_editor_models_block.png
new file mode 100644
index 0000000..f4a4297
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_models_block.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_new_rep_menu.png b/doc/5.1.x/user/general/images/aird_editor_new_rep_menu.png
new file mode 100644
index 0000000..d3c532c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_new_rep_menu.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_open_project_modeling_explorer.png b/doc/5.1.x/user/general/images/aird_editor_open_project_modeling_explorer.png
new file mode 100644
index 0000000..e976f1e
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_open_project_modeling_explorer.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_pref.png b/doc/5.1.x/user/general/images/aird_editor_pref.png
new file mode 100644
index 0000000..6709410
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_pref.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model.png b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model.png
new file mode 100644
index 0000000..71348e2
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_representation.png b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_representation.png
new file mode 100644
index 0000000..f5cbddd
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_representation.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_uncontrol.png b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_uncontrol.png
new file mode 100644
index 0000000..9d8993b
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_remove_semantic_model_uncontrol.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_rep_under_model.png b/doc/5.1.x/user/general/images/aird_editor_rep_under_model.png
new file mode 100644
index 0000000..4afc08c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_rep_under_model.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_editor_representations_block.png b/doc/5.1.x/user/general/images/aird_editor_representations_block.png
new file mode 100644
index 0000000..06c07d9
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_editor_representations_block.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/aird_unfolded1.png b/doc/5.1.x/user/general/images/aird_unfolded1.png
new file mode 100644
index 0000000..40c3a5d
--- /dev/null
+++ b/doc/5.1.x/user/general/images/aird_unfolded1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/convert_to_modeling_project1.png b/doc/5.1.x/user/general/images/convert_to_modeling_project1.png
new file mode 100644
index 0000000..8e48753
--- /dev/null
+++ b/doc/5.1.x/user/general/images/convert_to_modeling_project1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/convert_to_modeling_project2.png b/doc/5.1.x/user/general/images/convert_to_modeling_project2.png
new file mode 100644
index 0000000..45c1d73
--- /dev/null
+++ b/doc/5.1.x/user/general/images/convert_to_modeling_project2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation1.png b/doc/5.1.x/user/general/images/create_representation1.png
new file mode 100644
index 0000000..5d80afd
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation1_alt.png b/doc/5.1.x/user/general/images/create_representation1_alt.png
new file mode 100644
index 0000000..63092ff
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation1_alt.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation2.png b/doc/5.1.x/user/general/images/create_representation2.png
new file mode 100644
index 0000000..c755aad
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation3.png b/doc/5.1.x/user/general/images/create_representation3.png
new file mode 100644
index 0000000..a6eb546
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation4.png b/doc/5.1.x/user/general/images/create_representation4.png
new file mode 100644
index 0000000..b2afd2a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation4.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/create_representation5.png b/doc/5.1.x/user/general/images/create_representation5.png
new file mode 100644
index 0000000..6c00d19
--- /dev/null
+++ b/doc/5.1.x/user/general/images/create_representation5.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/decorated_model1.png b/doc/5.1.x/user/general/images/decorated_model1.png
new file mode 100644
index 0000000..e78e1d4
--- /dev/null
+++ b/doc/5.1.x/user/general/images/decorated_model1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems.png b/doc/5.1.x/user/general/images/groupItems.png
new file mode 100644
index 0000000..89a7ea3
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems_1.png b/doc/5.1.x/user/general/images/groupItems_1.png
new file mode 100644
index 0000000..284fcbf
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems_1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems_2.png b/doc/5.1.x/user/general/images/groupItems_2.png
new file mode 100644
index 0000000..be72a13
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems_2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/groupItems_3.png b/doc/5.1.x/user/general/images/groupItems_3.png
new file mode 100644
index 0000000..acca274
--- /dev/null
+++ b/doc/5.1.x/user/general/images/groupItems_3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/legacy_mode1.png b/doc/5.1.x/user/general/images/legacy_mode1.png
new file mode 100644
index 0000000..ce97022
--- /dev/null
+++ b/doc/5.1.x/user/general/images/legacy_mode1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/legacy_mode2.png b/doc/5.1.x/user/general/images/legacy_mode2.png
new file mode 100644
index 0000000..80ed150
--- /dev/null
+++ b/doc/5.1.x/user/general/images/legacy_mode2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/managing_representation1.png b/doc/5.1.x/user/general/images/managing_representation1.png
new file mode 100644
index 0000000..81aa0a1
--- /dev/null
+++ b/doc/5.1.x/user/general/images/managing_representation1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/model_explorer_view.png b/doc/5.1.x/user/general/images/model_explorer_view.png
new file mode 100644
index 0000000..3af361a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/model_explorer_view.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/modeling_perspective.png b/doc/5.1.x/user/general/images/modeling_perspective.png
new file mode 100644
index 0000000..d1e6b4c
--- /dev/null
+++ b/doc/5.1.x/user/general/images/modeling_perspective.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/models_content1.png b/doc/5.1.x/user/general/images/models_content1.png
new file mode 100644
index 0000000..04111ca
--- /dev/null
+++ b/doc/5.1.x/user/general/images/models_content1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/new_project1.png b/doc/5.1.x/user/general/images/new_project1.png
new file mode 100644
index 0000000..2326e62
--- /dev/null
+++ b/doc/5.1.x/user/general/images/new_project1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/new_project2.png b/doc/5.1.x/user/general/images/new_project2.png
new file mode 100644
index 0000000..8b60a28
--- /dev/null
+++ b/doc/5.1.x/user/general/images/new_project2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/new_project3.png b/doc/5.1.x/user/general/images/new_project3.png
new file mode 100644
index 0000000..5553ccf
--- /dev/null
+++ b/doc/5.1.x/user/general/images/new_project3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/open_aird__modeling_project.png b/doc/5.1.x/user/general/images/open_aird__modeling_project.png
new file mode 100644
index 0000000..3a42e04
--- /dev/null
+++ b/doc/5.1.x/user/general/images/open_aird__modeling_project.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/project_dependencies1.png b/doc/5.1.x/user/general/images/project_dependencies1.png
new file mode 100644
index 0000000..b69d17e
--- /dev/null
+++ b/doc/5.1.x/user/general/images/project_dependencies1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/project_dependencies2.png b/doc/5.1.x/user/general/images/project_dependencies2.png
new file mode 100644
index 0000000..33f2c98
--- /dev/null
+++ b/doc/5.1.x/user/general/images/project_dependencies2.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/project_dependencies3.png b/doc/5.1.x/user/general/images/project_dependencies3.png
new file mode 100644
index 0000000..c6bfd56
--- /dev/null
+++ b/doc/5.1.x/user/general/images/project_dependencies3.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/remove_dependencies1.png b/doc/5.1.x/user/general/images/remove_dependencies1.png
new file mode 100644
index 0000000..fc9b9e1
--- /dev/null
+++ b/doc/5.1.x/user/general/images/remove_dependencies1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/viewpoint_selection1.png b/doc/5.1.x/user/general/images/viewpoint_selection1.png
new file mode 100644
index 0000000..e75177a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/viewpoint_selection1.png
Binary files differ
diff --git a/doc/5.1.x/user/general/images/viewpoint_selection2.png b/doc/5.1.x/user/general/images/viewpoint_selection2.png
new file mode 100644
index 0000000..ec5404a
--- /dev/null
+++ b/doc/5.1.x/user/general/images/viewpoint_selection2.png
Binary files differ
diff --git a/doc/5.1.x/user/properties/Properties View.html b/doc/5.1.x/user/properties/Properties View.html
new file mode 100644
index 0000000..febdafa
--- /dev/null
+++ b/doc/5.1.x/user/properties/Properties View.html
@@ -0,0 +1,66 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Properties View</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="PropertiesViews">Properties Views</h1>
+		<p>This document describes behaviors specific to Sirius-defined properties views.</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#PropertiesViews">Properties Views</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#preferences">Preferences</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#LegacySemanticPropertiesTabs">Legacy Semantic Properties Tabs</a>
+							</li>
+							<li>
+								<a href="#SiriusDefaultTabs">Sirius Default Tabs</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="preferences">Preferences</h2>
+		<p>Some preferences and configuration parameters are available for you to customize your experience. They can affect the look of the properties view.</p>
+		<p>
+			<img border="0" src="./images/PropertiesViewPreferencePage.png"/>
+		</p>
+		<h3 id="LegacySemanticPropertiesTabs">Legacy Semantic Properties Tabs</h3>
+		<p>This group contains preferences to show or hide tabs provided by Sirius which display the raw properties of all semantic elements currently selected in a representation or in the 
+			<em>Model Explorer</em>. Starting from version 4.0, Sirius provides better alternatives for showing these semantic properties, but the legacy tabs are still available if needed.
+		</p>
+		<ul>
+			<li>
+				<em>Show Default Tab:</em> This checkbox allows to hide the 
+				<code>Default</code> tab which is visible by default when you select an element from the 
+				<em>Model Explorer</em>.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="./images/DefaultTabPreference.png"/>
+		</p>
+		<ul>
+			<li>
+				<em>Show Semantic Tab:</em> This checkbox allows to hide the 
+				<code>Semantic</code> tab which is visible by default when you select an element from a Sirius representation.
+			</li>
+		</ul>
+		<h3 id="SiriusDefaultTabs">Sirius Default Tabs</h3>
+		<p>This group contains preferences to modify the behavior of the tabs rendered by the Sirius properties view default rules. Note that this will only apply to the generic properties views which are used when a modeler does not provide custom ones. </p>
+		<ul>
+			<li>
+				<em>Maximum size of tabs name:</em> This field defines the maximal length of tabs names. This is used to shorten the tabs names when the default rules are used to render the properties view. The default is 20 characters.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="./images/MaxTabNamePreference.png"/>
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/properties/images/DefaultTabPreference.png b/doc/5.1.x/user/properties/images/DefaultTabPreference.png
new file mode 100644
index 0000000..8bbdc20
--- /dev/null
+++ b/doc/5.1.x/user/properties/images/DefaultTabPreference.png
Binary files differ
diff --git a/doc/5.1.x/user/properties/images/MaxTabNamePreference.png b/doc/5.1.x/user/properties/images/MaxTabNamePreference.png
new file mode 100644
index 0000000..423d211
--- /dev/null
+++ b/doc/5.1.x/user/properties/images/MaxTabNamePreference.png
Binary files differ
diff --git a/doc/5.1.x/user/properties/images/PropertiesViewPreferencePage.png b/doc/5.1.x/user/properties/images/PropertiesViewPreferencePage.png
new file mode 100644
index 0000000..45222f4
--- /dev/null
+++ b/doc/5.1.x/user/properties/images/PropertiesViewPreferencePage.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/Sequence Diagrams.html b/doc/5.1.x/user/sequences/Sequence Diagrams.html
new file mode 100644
index 0000000..095f483
--- /dev/null
+++ b/doc/5.1.x/user/sequences/Sequence Diagrams.html
@@ -0,0 +1,313 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Sequence Diagrams</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="SequenceDiagramsEditors">Sequence Diagrams Editors</h1>
+		<p>This document explains how to use sequence diagrams editors/modelers. Sequence diagrams share most  of the functionalities of normal diagrams, but they have some specificities and restrictions.</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#SequenceDiagramsEditors">Sequence Diagrams Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#semantics">Sequence Diagrams Semantics</a>
+					</li>
+					<li>
+						<a href="#restrictions">Restrictions and Limitations</a>
+					</li>
+					<li>
+						<a href="#layout">Automatic Layout</a>
+					</li>
+					<li>
+						<a href="#elements">Sequence Diagram Elements</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#Lifelines">Life-lines</a>
+							</li>
+							<li>
+								<a href="#lifelines_header">Life-lines header</a>
+							</li>
+							<li>
+								<a href="#Executions">Executions</a>
+							</li>
+							<li>
+								<a href="#BasicMessages">Basic Messages</a>
+							</li>
+							<li>
+								<a href="#ComplexMessages">Complex Messages</a>
+							</li>
+							<li>
+								<a href="#CreationandDestructionMessages">Creation and Destruction Messages</a>
+							</li>
+							<li>
+								<a href="#Lostandfoundmessages">Lost and found messages</a>
+							</li>
+							<li>
+								<a href="#InteractionUsesandStates">Interaction Uses and States</a>
+							</li>
+							<li>
+								<a href="#CombinedFragmentsandOperands">Combined Fragments and Operands</a>
+							</li>
+							<li>
+								<a href="#ConstraintsandObservationPoints">Constraints and Observation Points</a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Sirius supports a special kind of diagrams which reuse the notations and conventions of UML Sequence Diagrams, but can be applied to other domains than just UML. Here is an example which illustrates most  of the graphical constructions which can appear on these diagrams:</p> 
+		<img border="0" src="images/full_sequence_example.png"/>
+		<p>These diagrams behave mostly like normal Sirius diagrams, but in order to ensure the consistency of the model they represent, they have some restrictions. They also support some additional features or change the classical behavior of some features.</p>
+		<p>This document only describes the specificities of sequence diagrams. Unless otherwise stated here, all the features of normal Sirius diagrams apply also to sequence diagrams, so you can refer to 
+			<a href="../diagrams/Diagrams.html">the general diagrams user manual</a> for more information.
+		</p>
+		<p>
+			<strong>IMPORTANT WARNING</strong>: To work correctly, Sirius sequence diagrams must have a tight control on where the graphical elements are placed on the diagram and on their synchronization with the underlying semantic model. This means that to use sequence diagrams you 
+			<em>must</em>:
+		</p>
+		<ol>
+			<li>Disable the 
+				<em>Snap to Grid</em> and the 
+				<em>Snap to Shapes</em> behaviors. For an existing diagram, this is available in the 
+				<em>Rulers &amp; Grid</em> section of the 
+				<em>Properties</em> view when the diagram itself is selected. You can also disable it for all future diagrams in the preferences: 
+				<em>Sirius &gt; Sirius Diagram &gt; Rulers and Grid</em>, un-check the 
+				<em>Snap to grid for new diagrams</em> and 
+				<em>Snap to shapes for new diagrams</em> check boxes. Since Sirius 3.1.0, the snap features are automatically disabled in Sequence diagram editors and the user can not reactivate them.
+			</li>
+			<li>Enable Sirius&#8217;s 
+				<em>Automatic Refresh</em> (in the main 
+				<em>Sirius</em> preferences page) to ensure the diagram is always kept in synch with the underlying semantic model.
+			</li>
+		</ol>
+		<h2 id="semantics">Sequence Diagrams Semantics</h2>
+		<p>As their name says, sequence diagrams are meant to represent ordered sequences of elements. Typically, they represent 
+			<em>events</em> sent and received between some entities over 
+			<em>time</em>. The canonical case is a UML Sequence Diagram (where the notation comes from), which represents the messages exchanged between objects in a software system.
+		</p>
+		<p>The most important consequence of this is that contrary to what happens on a classical diagram, 
+			<em>the relative graphical positions of elements on a sequence diagram have strong meaning</em>. This is true for the vertical placement and for the left-to-right order of lifelines. However placing a message above or below another one has a strong implication on the ordering of the events they represent, and thus on the structure of the underlying semantic model which is represented. Sirius works hard to ensure that what you see on your sequence diagram (in terms of vertical ordering of elements and horizontal ordering of lifelines) always correspond to the semantic ordering of the represented events.
+		</p>
+		<p>This works both ways:</p>
+		<ul>
+			<li>Assuming your diagram is synchronized (i.e. you are in 
+				<em>Automatic Refresh</em> mode or your manually refreshed it since the last semantic changes), Sirius will always organize the elements on the diagram in a way which is compatible with the semantic ordering of the events: if you see an execution 
+				<em>E1</em> placed above another execution 
+				<em>E2</em>, you can be sure the events corresponding to 
+				<em>E1</em> happen before the events of 
+				<em>E2</em> in the semantic model.
+			</li>
+			<li>Symmetrically, and perhaps more importantly, 
+				<em>moving</em> elements on a sequence diagram may trigger changes in the underlying semantic model to reflect the new event order implied by the positions you changed. This is very different from what happens in other diagrams, where most graphical repositioning of elements are only cosmetic. Keeping the example above, moving execution 
+				<em>E2</em> graphically above 
+				<em>E1</em> will trigger changes in the semantic model to move the corresponding event of 
+				<em>E2</em> before the events of 
+				<em>E1</em>.
+			</li>
+		</ul>
+		<p>Most of the specific features and restrictions of sequence diagrams compared to other diagrams derive from this strong guarantee that at all time, the graphical (vertical) order of the elements you see on the diagram match exactly the semantic order of the events which exist in the underlying model.</p>
+		<h2 id="restrictions">Restrictions and Limitations</h2>
+		<p>In order to guarantee the strong guarantee described above, some of the features present on normal diagrams are not supported, or even completely disabled on sequence diagrams. Basically, anything which would make it possible on a normal diagram to have meaningful semantic elements not visible on the diagram is forbidden. This would make it impossible for Sirius to keep consistent tracking of the &#8220;position&#8221; of these invisible elements relative to the ones which are visible.</p>
+		<ul>
+			<li>
+				<em>Layers</em>: sequence diagrams may define optional layers, as long as they do not make graphical elements appear or disappear on the diagram when they are selected or de-selected. Layers which contribute new tools in the palette for example are fine.
+			</li>
+			<li>
+				<em>Filters</em>: filters which may hide elements from a sequence diagram when enabled are not supported.
+			</li>
+			<li>
+				<em>Hide/Reveal</em>: hiding elements explicitly is not supported. The actions are disabled in the UI.
+			</li>
+			<li>
+				<em>Pin/Unpin</em>: pinning graphical elements has no effect on the automatic layout of sequence diagrams. Even if an element has been marked as pinned, Sirius must be able to move it graphically as needed in order to maintain the graphical order of element in sync with the semantic order. The actions are disabled in the UI.
+			</li>
+		</ul>
+		<h2 id="layout">Automatic Layout</h2>
+		<p>The 
+			<em>Arrange All</em> command which launches an automatic layout of all the elements on a diagram has been completely customized for sequence diagrams. Arranging a sequence diagram will keep the relative positions of all the elements, but reduce any un-needed vertical or horizontal spaces. All elements will be resized to the minimum size necessary, and &#8220;packed&#8221; towards the top-left corner of the diagram. This results in a diagram which uses the minimum space required to present all the elements, while keeping enough white-space between them to be easy to read.
+		</p>
+		<h2 id="elements">Sequence Diagram Elements</h2>
+		<p>This section presents each type of elements specific to sequence diagrams which are supported by Sirius, and their specificities (if any). Note that not all sequence diagrams will support all kinds of elements; this depends on the diagram&#8217;s configuration.</p>
+		<h3 id="Lifelines">Life-lines</h3>
+		<p>Life-lines represent the entities which interact (by exchanging events) on a sequence diagrams. They can be many different things depending on the domain being modeled: software objects, machines, people, etc. They are represented by a node (often a rectangle) at the top, and a thin vertical line attached to the bottom side of the node (always horizontally centered on it). There may be another node (generally small) at the bottom of the lifeline, representing the end of the life-line.</p>
+		<p>The example below shows three life-lines, named 
+			<code>a</code>, 
+			<code>b</code> and 
+			<code>c</code>. Then end of 
+			<code>a</code> and 
+			<code>c</code> is a small grey circle at the bottom of the life-lines, while the end of 
+			<code>b</code>, which is explicitly destroyed by the 
+			<code>m_destroy2</code> message, is a black cross.  
+		</p> 
+		<img border="0" src="images/lifelines.png"/>
+		<p>Life-lines can be moved horizontally, but their vertical placement can not be controlled directly. It is determined automatically by Sirius using the following rules:</p>
+		<ol>
+			<li>Life-lines which are not explicitly created by a 
+				<a href="#CreationandDestructionMessages">
+					<em>creation messages</em>
+				</a> are assumed to exist from the beginning of the sequence, and are all aligned at the top of the diagram. In the example, 
+				<code>a</code> and 
+				<code>c</code> are aligned at the top of the diagram.
+			</li>
+			<li>Life-lines which are explicitly created by a 
+				<em>creation messages</em> have their top node vertically aligned with the creation message. In the example, 
+				<code>b</code> is aligned with the 
+				<code>m_create1</code> creation message. Moving that message vertically would also move the top of the 
+				<code>b</code> life-line to stay aligned.
+			</li>
+		</ol>
+		<p>The vertical size of life-lines can be controlled, following some rules:</p>
+		<ol>
+			<li>Life-lines which are not explicitly destroyed by a 
+				<a href="#CreationandDestructionMessages">
+					<em>destruction message</em>
+				</a> are assumed to exist until (at least) the end of the sequence. They all finish at the same vertical position, which is always after the last event on the whole sequence. If life-lines have a node at their bottom (this depends on the configuration), these nodes can be dragged to resize all the life-lines which are not explicitly destroyed (as long as their new end position is after all events). In the example, dragging the grey circles at the bottom of 
+				<code>a</code> or 
+				<code>c</code> would resize both life-lines (but not 
+				<code>b</code>).  
+			</li>
+			<li>Life-lines which are explicitly destroyed by a 
+				<em>drestruction message</em> have the bottom node vertically aligned with the destruction message. In the example, 
+				<code>b</code> ends when it receives the 
+				<code>m_destroy2</code> message. Moving either the destruction message or the black cross which represents 
+				<code>b</code>'s destruction would resize the life-line (but only 
+				<code>b</code>).
+			</li>
+		</ol>
+		<p>Empty life-lines have a default size large enough that you can add several elements to them without the need for resizing. In the example, 
+			<code>a</code> and 
+			<code>c</code> have the default size.
+		</p>
+		<p>When you move life-lines horizontally, you can change their left-to-right order. If required, the system may move some other life-lines to ensure there is always some minimal horizontal blank space between two consecutive life-lines.</p>
+		<h3 id="lifelines_header">Life-lines header</h3>
+		<p>When a scenario diagram is higher than the displayed area, reading the last messages of the diagram makes the instance role of the life-lines not visible and does not help to locate the source and the target of a message. You can keep life-line header visible by activating &#8220;Display header&#8221; into 
+			<code>Preferences &gt; Sirius &gt; Sirius Diagram &gt; Appearance</code>. This preference is enabled by default.
+		</p>
+		<p>
+			<img border="0" src="images/header.png"/>
+		</p>
+		<p>The optimum height is automatically computed during the creation of a new sequence diagram. You can change the height manually by:</p>
+		<ul>
+			<li>Double-clicking on the separator between header and diagram. This computes again the optimum height according to current labels and width.</li>
+			<li>Moving the separator between header and diagram.</li>
+		</ul>
+		<p>The height is stored in the diagram. The next time you open the diagram, the header will be the same size.</p>
+		<h3 id="Executions">Executions</h3>
+		<p>Executions usually represent a time interval during which one of the participants in the sequence is active. They are represented by vertical rectangles superposed to the corresponding life-line, or to another execution (recursively).</p>
+		<p>The example below show a single life-line with five executions on it: two are top-level executions directly on the life-line itself, while the rest are sub-executions of others.</p> 
+		<img border="0" src="images/executions.png"/>
+		<p>Note that not all sequence diagram modelers will allow for the creation of &#8220;raw&#8221; executions like these, which are not connected to messages. This all depends on the semantics of the underlying models and of the diagram&#8217;s configuration.</p>
+		<h3 id="BasicMessages">Basic Messages</h3>
+		<p>Basic messages represent some form of communication between lifelines. They are represented by horizontal arrows between lifelines (or executions on lifelines).</p>
+		<p>The example below shows three lifelines and three messages. Note that the last one, 
+			<code>m3</code>, is a 
+			<em>reflective</em> message which is received by the same lifeline which sent it. 
+		</p> 
+		<img border="0" src="images/basic_messages.png"/>
+		<p>Note that not all sequence diagram modelers will allow for the creation of basic message like these, which are not connected the beginning or end of an execution. This all depends on the semantics of the underlying models and of the diagram&#8217;s configuration.</p>
+		<h3 id="ComplexMessages">Complex Messages</h3>
+		<p>Most sequence diagrams (including UML) will support some sort of 
+			<em>complex messages</em>, which include both executions and basic messages combined in special ways. This is used for example to represent 
+			<em>synchronous messages</em> in UML, where the first message sent triggers the execution of some behavior on the target lifeline, behavior which produces a return value sent back to the origin when the execution terminates.
+		</p>
+		<p>In the example below, the lifeline 
+			<code>a</code> sends a message 
+			<code>m1</code> to 
+			<code>b</code>, which triggers the execution of a complex behavior before 
+			<code>b</code> can send the result value back to 
+			<code>a</code>. During the execution of the behavior in 
+			<code>b</code>, it sends another message to 
+			<code>c</code>, waits for the answer, and then sends a message to itself which executes a sub-behavior (but does not return any useful value).
+		</p> 
+		<img border="0" src="images/complex_messages.png"/>
+		<h3 id="CreationandDestructionMessages">Creation and Destruction Messages</h3>
+		<p>Two special kinds of messages are used to represent the creation of a lifeline or its destruction by another participant. 
+			<em>Creation messages</em> are represented as normal messages, except that the top of the lifeline they target is always vertically aligned with the message (representing the fact that this lifeline did not exist before the message created it). Similarly, 
+			<em>destruction messages</em> are normal messages except that the bottom of the lifeline they target is aligned with the message. It is customary that the 
+			<em>End of Life</em> marker at the bottom of the lifeline (used to resize it) uses a different visual style (often a black cross) to represent the fact that the lifeline is destroyed by the message and does not exist afterwards.
+		</p>
+		<p>The figure below shows one example of each of these special kinds of messages: lifeline 
+			<code>a</code> first sends message 
+			<code>m_create1</code> which creates lifeline 
+			<code>b</code>, and then sends destruction message 
+			<code>m_destroy2</code> which provokes the destruction of 
+			<code>c</code>.
+		</p> 
+		<img border="0" src="images/creation_destruction_messages.png"/>
+		<h3 id="Lostandfoundmessages">Lost and found messages</h3>
+		<p>Lost and found messages are messages with an end which does not cover any lifeline. </p>
+		<ul>
+			<li>Lost messages are messages with known send, but the reception of the message does not happen.</li>
+			<li>Found messages are messages with knwon receiver, but the sending of the message is not described.</li>
+		</ul>
+		<p>The figure below shows one example of lost and found message for each of the different kinds of messages: lifeline 
+			<code>e</code> first receives found message 
+			<code>m_create7</code> which creates the lifeline, and then sends lost messages 
+			<code>m1</code> which should triggers the execution of a complex behavior, creation message 
+			<code>m_create2</code> which should create another lifeline, destruction message 
+			<code>m_destroy3</code> which could provoke its destruction, 
+			<code>m4</code> which could be linked to a lifeline not represented on the current diagram. Lifeline 
+			<code>e</code> finally receive three found messages: 
+			<code>m9</code> which triggers the execution of a complex behavior, 
+			<code>m8</code> which is a simple message and 
+			<code>m_destroy8</code> which provokes the destruction of 
+			<code>e</code>.
+		</p> 
+		<img border="0" src="images/found_lost_ends.png"/> 
+		<p>A lost/found message can be moved vertically like other messages. Align commands are available for lost and found message ends.</p>
+		<h3 id="InteractionUsesandStates">Interaction Uses and States</h3>
+		<p>
+			<em>Interaction Uses</em> are constructions which usually represent &#8220;shortcuts&#8221;, indicating that some complex interaction, which may be defined in another sequence diagrams, occurs at some point without cluttering the current diagram. They are represented by rectangles centered on the lifeline(s) which are concerned. They can contain a label in the top-left corner, indicating what kind of shortcut they represent, and another label (not editable directly) centered in the rectangle. Interaction uses may 
+			<em>cover</em> several lifelines.
+		</p>
+		<p>
+			<em>States</em> are more general annotations which are typically used to indicate that some condition regarding the state of a participant is true at this point in the sequence. They are represented by simple nodes centered on the single lifeline they concern.
+		</p>
+		<p>The figure below shows two interaction uses, one which covers only 
+			<code>a</code> and the other covering both 
+			<code>a</code> and 
+			<code>b</code>. It also shows a simple state 
+			<code>s1</code> on 
+			<code>b</code>, which is represented by a blue oval in this diagram.
+		</p> 
+		<img border="0" src="images/iu_states.png"/>
+		<h3 id="CombinedFragmentsandOperands">Combined Fragments and Operands</h3>
+		<p>
+			<em>Combined Fragments</em> and 
+			<em>Operands</em> are the most complex constructions on sequence diagrams. They are used to regroup other constructions (including other 
+			<em>Combined Fragments</em>) into blocks. A 
+			<em>combined fragment</em> is represented in a way similar to interaction uses (a rectangle which can cover several lifelines), except that it can contain one or more 
+			<em>operands</em>, separated by a dotted horizontal line. Operands can contain almost all the other constructions supported by sequence diagrams, with the restriction that they must be self-contained: a message which starts inside an operand must end inside the operand (i.e. on a lifeline which is covered by the parent combined fragment), and an execution which starts in an operand must end in the same (it can not end in another operand below).
+		</p>
+		<p>The figure below shows a top-level combined fragment named 
+			<code>alt</code>, which represent 
+			<em>alternatives</em> (the semantics is just an example, it is entirely dependent on the diagram&#8217;s configuration and underlying model). It contains three operands, labeled 
+			<code>x &lt; 0</code>, 
+			<code>x &gt; 0</code> and 
+			<code>x == 0</code>. Here, the content of each operand represent the alternative which would be executed if the corresponding condition was true. Note that the last operand, 
+			<code>x == 0</code>, contains a sub-fragment, named 
+			<code>par</code>, with two operands. Here the intended semantics is that for the 
+			<code>x == 0</code> case, we execute both 
+			<code>step1</code> and 
+			<code>step2</code> in 
+			<code>par</code>-allel.
+		</p> 
+		<img border="0" src="images/cfc_cfo.png"/> 
+		<h3 id="ConstraintsandObservationPoints">Constraints and Observation Points</h3>
+		<p>The elements displayed on a sequence diagram are delimited with some events which belong to the diagram semantic (chronological and global) ordering. An observation point is a node representing (gray dots on the following picture) those events, they are automatically placed and allow to create and display constraints between the events.</p>
+		<p>The figure below shows observation points as grayed dots on each sequence diagram element and several constraints with bracket style created between them. </p>
+		<p>
+			<img border="0" src="images/constraints.png"/>
+		</p>
+		<p>The main segment of the constraint can be moved and rotated. The other segments cannot be moved, the constraint is attached to observation points which are placed by the automatic layout. So move commands are disabled on observation points, but resize commands activation depends on the resize kind defined in the Viewpoint Specification Model.</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/sequences/images/basic_messages.png b/doc/5.1.x/user/sequences/images/basic_messages.png
new file mode 100644
index 0000000..c318ddc
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/basic_messages.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/cfc_cfo.png b/doc/5.1.x/user/sequences/images/cfc_cfo.png
new file mode 100644
index 0000000..d0445e9
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/cfc_cfo.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/complex_messages.png b/doc/5.1.x/user/sequences/images/complex_messages.png
new file mode 100644
index 0000000..9faa9fe
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/complex_messages.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/constraints.png b/doc/5.1.x/user/sequences/images/constraints.png
new file mode 100644
index 0000000..e2570a6
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/constraints.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/creation_destruction_messages.png b/doc/5.1.x/user/sequences/images/creation_destruction_messages.png
new file mode 100644
index 0000000..2791d76
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/creation_destruction_messages.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/executions.png b/doc/5.1.x/user/sequences/images/executions.png
new file mode 100644
index 0000000..ea995ea
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/executions.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/found_lost_ends.png b/doc/5.1.x/user/sequences/images/found_lost_ends.png
new file mode 100644
index 0000000..30f72e4
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/found_lost_ends.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/full_sequence_example.png b/doc/5.1.x/user/sequences/images/full_sequence_example.png
new file mode 100644
index 0000000..de24e1a
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/full_sequence_example.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/header.png b/doc/5.1.x/user/sequences/images/header.png
new file mode 100644
index 0000000..7ec9429
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/header.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/iu_states.png b/doc/5.1.x/user/sequences/images/iu_states.png
new file mode 100644
index 0000000..8575b94
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/iu_states.png
Binary files differ
diff --git a/doc/5.1.x/user/sequences/images/lifelines.png b/doc/5.1.x/user/sequences/images/lifelines.png
new file mode 100644
index 0000000..29962fa
--- /dev/null
+++ b/doc/5.1.x/user/sequences/images/lifelines.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/Tables.html b/doc/5.1.x/user/tables/Tables.html
new file mode 100644
index 0000000..72da77a
--- /dev/null
+++ b/doc/5.1.x/user/tables/Tables.html
@@ -0,0 +1,194 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Tables</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="TableEditors">Table Editors</h1>
+		<p>This document explains how to use the two kinds of tabular editors/modelers supported by Sirius: normal edition tables and cross-tables.</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#TableEditors">Table Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#managing">Creating, Renaming and Deleting Tables</a>
+					</li>
+					<li>
+						<a href="#refresh">Refreshing Tables</a>
+					</li>
+					<li>
+						<a href="#lines_columns">Adding and Removing Lines and Columns</a>
+					</li>
+					<li>
+						<a href="#HidingLinesandColumns">Hiding Lines and Columns</a>
+					</li>
+					<li>
+						<a href="#ChangingtheWidthofaColumn">Changing the Width of a Column</a>
+					</li>
+					<li>
+						<a href="#sorting">Sorting by Column</a>
+					</li>
+					<li>
+						<a href="#SortingbyLine">Sorting by Line</a>
+					</li>
+					<li>
+						<a href="#editing">Editing Cell Values</a>
+					</li>
+					<li>
+						<a href="#quick_outline">Quick Outline</a>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Sirius provides support for tabular representations. Tables allow to present information in structured forms. There are two kinds of tables:</p>
+		<ul>
+			<li>
+				<em>Edition tables</em> show one element per line, and one property (potentially computed) per column. Each cell shows the value of the property for the corresponding element, and may be editable.
+			</li>
+			<li>
+				<em>Cross tables</em> are designed to show relationships between elements. Both lines and columns represent elements. The cell at an intersection represent the relationship between the elements on the line and column (it may be empty if there is no relationships). These cells may also be editable to change the relationships between the elements.
+			</li>
+		</ul> 
+		<img border="0" src="images/tables_representations1.png"/>
+		<p>Both kinds of tables can also support sub-lines (and sub-sub-lines, etc.), which can be expanded or folded to show/hide some details, and share the same kinds of interactions. Unless otherwise stated, the rest of this document applies to both kinds of tables.</p>
+		<p>Note that as always with Sirius, some of the features described below may or may not be available with all specific kinds of tables. Some tables are designed to only present information but do not allow edition for example. It all depends on which features the person who 
+			<em>specified</em> (configured) the table decided to support.
+		</p>
+		<h2 id="managing">Creating, Renaming and Deleting Tables</h2>
+		<p>Tables are managed in the same way as the other kinds or representations supported by Sirius (diagrams, trees...). They are created either through the 
+			<em>New Representation</em> context menu on a semantic element, or through the 
+			<em>Create Representation</em> action on the context menu of a 
+			<em>Modeling Project</em>. Newly created tables are automatically opened. To open an existing table, simply double-click on it in the 
+			<em>Model Explorer</em>: it will appear both inside the representation file (
+			<code>aird</code> file) and under the semantic element it represents inside the semantic model.
+		</p>
+		<p>You can rename, duplicate or delete a table by choosing the corresponding action (resp. 
+			<em>Rename</em>, 
+			<em>Copy</em> or 
+			<em>Delete</em>) in the context menu on the table element in the 
+			<em>Model Explorer</em>.
+		</p>
+		<h2 id="refresh">Refreshing Tables</h2>
+		<p>Depending on the value of the 
+			<i>Automatic refresh</i> Sirius preference (accessible through 
+			<i>Window</i> / 
+			<i>Preferences...</i> / 
+			<i>Sirius</i>), the contents of opened tables may or may not be automatically updated when the underlying semantic model changes. In 
+			<em>manual refresh</em> mode (when 
+			<i>Automatic refresh</i> is unchecked), you can explicitly request a refresh of the whole table by using the 
+			<em>Refresh</em> button in the main Eclipse toolbar, as shown below:
+		</p> 
+		<img border="0" src="images/table_refresh1.png"/>
+		<h2 id="lines_columns">Adding and Removing Lines and Columns</h2>
+		<p>If the table&#8217;s configuration has defined tools to create new lines and columns, they will appear in the context menu of table elements. The name of the creation tools depends entirely on the table&#8217;s configuration, so it will be different for each tabular modeler. Note that you must have a table element selected for the creation tools to appear in the context menu; the behavior of the tool may depend on the selected element. If the table is completely empty and you have no element to select, you can still create elements (if supported by the table&#8217;s configuration) by using the drop-down menus in the main Eclipse toolbar (see screenshot).</p>
+		<p>Note that both kinds of tables can support line creation, but only cross tables support the creation of new columns.</p> 
+		<img border="0" src="images/table_create_item1.png"/> 
+		<img border="0" src="images/table_create_item2.png"/> 
+		<h2 id="HidingLinesandColumns">Hiding Lines and Columns</h2>
+		<p>You can control the visibility on individual lines and columns using the 
+			<i>Show/Hide</i> context menu, available on every table cell.
+		</p>
+		<p>Selecting a cell and choosing 
+			<i>Show/Hide &gt; Hide line</i> will hide the corresponding line. To reveal a hidden line, you can use either 
+			<i>Show/Hide &gt; Hide/Show Lines</i>, and select individually which lines should be visible or hidden. You can also use the 
+			<i>Show/Hide &gt; Show Hidden Lines</i>, which makes all the hidden lines visible again in one operation.
+		</p> 
+		<img border="0" src="images/table_show_hide1.png"/> 
+		<img border="0" src="images/table_show_hide2.png"/>
+		<p>The same operations can be performed on column using the corresponding operations in the 
+			<i>Show/Hide</i> menu for columns.
+		</p>
+		<p>Note that the visibility status of lines and columns are persisted: if you save and close a table with lines and/or columns hidden, they will still be hidden when you re-open the table later.</p>
+		<h2 id="ChangingtheWidthofaColumn">Changing the Width of a Column</h2>
+		<p>It is possible to change the width of a column by placing the cursor between two column headers and moving the separator. The columns' width is persisted: if you save and close your table, re-opening it later will restore the widths you set.</p>
+		<h2 id="sorting">Sorting by Column</h2>
+		<p>To sort the lines of a table by the values in a specific column, select one of the cells of the desired column, and in the context menu (right click), select the 
+			<i>Sort by column</i> entry. You can also click directly on the column&#8217;s header.
+		</p>
+		<p>The sorting is performed in the lexicographical order of the labels in the sort column. If a table contains sub-lines, the lines are sorted level by level: top-level lines are sorted relative to each other, then direct sub-lines of each line are sorted among themselves, etc.</p>
+		<p>The initial order of lines (when no sorting is active) is the &#8220;intrinsic&#8221; order of the elements, as defined by the table&#8217;s configuration. When you first activate sorting, lines are sorted in ascending order. If you sort a second time, they are sorted in descending order. Any operation which refreshes the table&#8217;s content (a manual refresh or a model change when in automatic refresh mode) resets the lines' ordering to the intrinsic order and disabled any sorting.</p> 
+		<img border="0" src="images/table_sort_by1.png"/>
+		<table>
+			<tr>
+				<th>Sorted Ascending</th>
+				<th>Sorted Descending</th>
+				<th>Unsorted</th>
+			</tr>
+			<tr>
+				<td>
+					<img border="0" src="images/table_sort_ascending.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/table_sort_descending.png"/>
+				</td>
+				<td>
+					<img border="0" src="images/table_sort_unsorted.png"/>
+				</td>
+			</tr>
+		</table>
+		<h2 id="SortingbyLine">Sorting by Line</h2>
+		<p>This kind of sorting is only available for cross table. It is symmetrical to the &#8220;Sort by column&#8221; feature, but sorts the columns of a cross table according to the values on a given line.</p>
+		<p>It is triggered in a similar way, by using the 
+			<i>Sort by line</i> item in the context menu on a cell in the cross table, and follows the same cycling rules (first ascending order, then descending if activated twice, and reset by a refresh).
+		</p>
+		<p>On a cross table, it is possible to combine sorting by line and columns.</p>
+		<h2 id="editing">Editing Cell Values</h2>
+		<p>When you select a cell in a table, the 
+			<i>Properties</i> will contain a tab named 
+			<i>Semantic</i> (normally the first one). This tab shows all the properties of all the semantic elements associated to the cell (there may be several elements), and you can edit each property individually. Note that because this tab shows all the raw properties of the semantic elements, it may be dangerous to edit them directly. Depending on how the table was configured, tabs with more user-oriented property sheets may also be available.
+		</p>
+		<p>Depending on the table&#8217;s configuration, it may also be possible to edit elements directly in the cells (this is called 
+			<em>direct edit</em>). To activate the edition of a cell, select it and then either:
+		</p>
+		<ul>
+			<li>hit the 
+				<em>Return</em> key;
+			</li>
+			<li>hit the 
+				<em>F2</em> key;
+			</li>
+			<li>double-click on it;</li>
+			<li>or type any alpha-numeric character (for text edition only).</li>
+		</ul>
+		<p>The editor offered depends on the contents of the cell. It may be:</p>
+		<ul>
+			<li>a combo-box if the content can only be a value in a pre-defined list (enumeration);</li>
+			<li>a check-box if the content is a boolean;</li>
+			<li>a text editor in all the other cases;</li>
+			<li>a dialog box for many-valued references.</li>
+		</ul>
+		<p>For combo-boxes, you can start typing the beginning of the value to filter the content of the combo-box.</p>
+		<p>For check-boxes, you can either click or use the space key to directly change the value of the check-box.</p>
+		<p>For plain text edition, to facilitate the mass data entry you can begin to directly enter the desired value without first start editing. If the first character typed is alpha-numeric, the text editor will be directly activated. If the property edited with the cell is declared as multi-line, a multi-line text editor is proposed for editing the content of the cell. There is a difference between Windows and Linux for this feature.</p>
+		<ul>
+			<li>On Linux, the height of the line fits its content. So if the text of one of the cells of a line is 4 lines high, the height is calculated accordingly. When editing, the editor appears on the location of the cell, several lines are visible at the same time.</li>
+			<li>On Windows, a restriction requires that all lines have the same height. So all the text will be shown on one line.When editing, a single line is visible and you must use the up/down arrow to display the other lines.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/table_multiline_edit_windows.png"/> 
+		</p>
+		<p>Under all systems, to finish the edition of a multi-line text, you need to use 
+			<em>Ctrl+Return</em>. Hitting 
+			<em>Return</em> will simply add a new line.
+		</p>
+		<h2 id="quick_outline">Quick Outline</h2>
+		<p>A quick outline is available with the shortcut 
+			<code>Ctrl</code> + 
+			<code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your table elements elements.
+		</p>
+		<p>The star, 
+			<code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add 
+			<code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with 
+			<code>↑</code> and 
+			<code>↓</code>, and go to the selected element in your editor with 
+			<code>Enter</code>.
+		</p>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/tables/images/table_create_item1.png b/doc/5.1.x/user/tables/images/table_create_item1.png
new file mode 100644
index 0000000..1eac7dd
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_create_item1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_create_item2.png b/doc/5.1.x/user/tables/images/table_create_item2.png
new file mode 100644
index 0000000..fa5c6c5
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_create_item2.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_multiline_edit_windows.png b/doc/5.1.x/user/tables/images/table_multiline_edit_windows.png
new file mode 100644
index 0000000..4bcace1
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_multiline_edit_windows.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_refresh1.png b/doc/5.1.x/user/tables/images/table_refresh1.png
new file mode 100644
index 0000000..015c68d
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_refresh1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_show_hide1.png b/doc/5.1.x/user/tables/images/table_show_hide1.png
new file mode 100644
index 0000000..23ce738
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_show_hide1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_show_hide2.png b/doc/5.1.x/user/tables/images/table_show_hide2.png
new file mode 100644
index 0000000..449f131
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_show_hide2.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_ascending.png b/doc/5.1.x/user/tables/images/table_sort_ascending.png
new file mode 100644
index 0000000..012cd3b
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_ascending.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_by1.png b/doc/5.1.x/user/tables/images/table_sort_by1.png
new file mode 100644
index 0000000..5d7eae7
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_by1.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_descending.png b/doc/5.1.x/user/tables/images/table_sort_descending.png
new file mode 100644
index 0000000..7e0db46
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_descending.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/table_sort_unsorted.png b/doc/5.1.x/user/tables/images/table_sort_unsorted.png
new file mode 100644
index 0000000..bfcf477
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/table_sort_unsorted.png
Binary files differ
diff --git a/doc/5.1.x/user/tables/images/tables_representations1.png b/doc/5.1.x/user/tables/images/tables_representations1.png
new file mode 100644
index 0000000..38e8234
--- /dev/null
+++ b/doc/5.1.x/user/tables/images/tables_representations1.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/Trees.html b/doc/5.1.x/user/trees/Trees.html
new file mode 100644
index 0000000..bf8c416
--- /dev/null
+++ b/doc/5.1.x/user/trees/Trees.html
@@ -0,0 +1,118 @@
+<?xml version='1.0' encoding='utf-8' ?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+	<head>
+		<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+		<title>Trees</title>
+		<link type="text/css" rel="stylesheet" href="../../resources/bootstrap.css"/>
+		<link type="text/css" rel="stylesheet" href="../../resources/custom.css"/>
+	</head>
+	<body>
+		<h1 id="TreeEditors">Tree Editors</h1>
+		<p>This document explains how to use Sirius tree editors/modelers which allow to view and manipulate data in a hierarchical way.</p>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#TreeEditors">Tree Editors</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#introduction">Introduction</a>
+					</li>
+					<li>
+						<a href="#managing">Creating, Renaming and Deleting Trees</a>
+					</li>
+					<li>
+						<a href="#refresh">Refreshing Trees</a>
+					</li>
+					<li>
+						<a href="#items">Adding and Removing Tree Items</a>
+					</li>
+					<li>
+						<a href="#editing">Editing Tree Items</a>
+					</li>
+					<li>
+						<a href="#dragndrop">Tree Items Drag and Drop</a>
+					</li>
+					<li>
+						<a href="#quick_outline">Quick Outline</a>
+					</li>
+					<li>
+						<a href="#font_override">Overriding Tree Items Font</a>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="introduction">Introduction</h2>
+		<p>Sirius provides support for hierarchical representations called 
+			<em>trees</em>, which represent information in a hierarchical way.
+		</p> 
+		<img border="0" src="images/tree_representation1.png"/>
+		<p>Note that as always with Sirius, some of the features described below may or may not be available with all specific tree editors. Some tree editors are configured to only display information but do not allow edition for example. It all depends on which features the person who 
+			<em>specified</em> (configured) the tree decided to support.
+		</p>
+		<h2 id="managing">Creating, Renaming and Deleting Trees</h2>
+		<p>Trees are managed in the same way as the other kinds or representations supported by Sirius (diagrams, tables...). They are created either through the 
+			<em>New Representation</em> context menu on a semantic element, or through the 
+			<em>Create Representation</em> action on the context menu of a 
+			<em>Modeling Project</em>. Newly created trees are automatically opened. To open an existing tree, simply double-click on it in the 
+			<em>Model Explorer</em>: it will appear both inside the representation file (
+			<code>aird</code> file) and under the semantic element it represents inside the semantic model.
+		</p>
+		<p>You can rename, duplicate or delete a tree by choosing the corresponding action (resp. 
+			<em>Rename</em>, 
+			<em>Copy</em> or 
+			<em>Delete</em>) in the context menu on the tree element in the 
+			<em>Model Explorer</em>.
+		</p>
+		<h2 id="refresh">Refreshing Trees</h2>
+		<p>Depending on the value of the 
+			<i>Automatic refresh</i> Sirius preference (accessible through 
+			<i>Window</i> / 
+			<i>Preferences...</i> / 
+			<i>Sirius</i>), the contents of opened trees may or may not be automatically updated when the underlying semantic model changes. In 
+			<em>manual refresh</em> mode (when 
+			<i>Automatic refresh</i> is unchecked), you can explicitly request a refresh of the whole tree by using the 
+			<em>Refresh</em> button in the main Eclipse toolbar, as shown below:
+		</p> 
+		<img border="0" src="images/tree_representation2.png"/>
+		<h2 id="items">Adding and Removing Tree Items</h2>
+		<p>If the tree&#8217;s configuration has defined tools to create new element (tree items), they will appear in the context menu of existing tree items. The name of the creation tools is not fixed; it depend on the tree&#8217;s configuration, so it will be different for each tree modeler. Note that you must have a tree element selected for the creation tools to appear in the context menu, and the behavior of the tool may depend on the selected element. </p> 
+		<img border="0" src="images/tree_representation3.png"/>
+		<p>If the tree is completely empty and you have no element to select, you can still create elements (if supported by the tree&#8217;s configuration) by using the drop-down menus in the main Eclipse toolbar (see screenshot).</p>
+		<img border="0" src="images/tree_representation4.png"/>
+		<h2 id="editing">Editing Tree Items</h2>
+		<p>There are several ways to activate the edition of a tree item:</p>
+		<ul>
+			<li>F2 key, </li>
+			<li>Double-click, </li>
+			<li>Any alpha-numeric character key (for text edition only).</li>
+		</ul>
+		<p>Once the edit mode is enabled, simply enter your text and hit 
+			<em>Return</em> to validate. The expected format of the edit string and its interpretation depends on how the tree&#8217;s configuration has been set up to interpret the text you enter.
+		</p>
+		<h2 id="dragndrop">Tree Items Drag and Drop</h2>
+		<p>Drag and drop is a feature which can be enabled by the specifier in the tree configuration. It is turned off by default.</p>
+		<p>Simply select the Tree Items you would like to drag, and drop them inside an other Tree Item. Most of the time, this will result in the dropped element being added to the new location, but the exact effect of the operation is entirely dependent on how the tree was configured by its specifier.</p>
+		<p>Notice that it may also possible to drag elements from other Eclipse views. Again, this depends on how the tree was configured.</p>
+		<h2 id="quick_outline">Quick Outline</h2>
+		<p>A quick outline is available with the shortcut 
+			<code>Ctrl</code> + 
+			<code>O</code>. This allows you to rapidly search text in the displayed name or the contained String attributes of your table elements elements.
+		</p>
+		<p>The star, 
+			<code>*</code>, is a joker character, allowing you to search with more complicated patterns. Regarding this, an element is found if there is a word in its name or one of its attributes that match with the text in the filter, so if you want to search within words too, add 
+			<code>*</code> at the start of your pattern. Also, you can navigate along the matching elements with 
+			<code>↑</code> and 
+			<code>↓</code>, and go to the selected element in your editor with 
+			<code>Enter</code>.
+		</p>
+		<h2 id="font_override">Overriding Tree Items Font</h2>
+		<p>The tree editor always specify a font and text size to use when displaying tree items. If these do not render well on your machine for any reason, you can tell Sirius to use the default font from your environment instead.</p>
+		<p>To do so, go to &#8220;Window&gt;Preferences&#8221;. In the preference window: </p>
+		<ul>
+			<li>select the Sirius Tree preferences and check the preference &#8220;Always use standard font&#8221;.</li>
+		</ul>
+		<img border="0" src="images/runtime_font_preference.png"/>
+		<ul>
+			<li>reopen all the tree editors currently opened. The font used is now your runtime one.</li>
+		</ul>
+	</body>
+</html>
\ No newline at end of file
diff --git a/doc/5.1.x/user/trees/images/runtime_font_preference.png b/doc/5.1.x/user/trees/images/runtime_font_preference.png
new file mode 100644
index 0000000..b67d123
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/runtime_font_preference.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation1.png b/doc/5.1.x/user/trees/images/tree_representation1.png
new file mode 100644
index 0000000..8f9f441
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation1.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation2.png b/doc/5.1.x/user/trees/images/tree_representation2.png
new file mode 100644
index 0000000..5cfbda0
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation2.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation3.png b/doc/5.1.x/user/trees/images/tree_representation3.png
new file mode 100644
index 0000000..dd99944
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation3.png
Binary files differ
diff --git a/doc/5.1.x/user/trees/images/tree_representation4.png b/doc/5.1.x/user/trees/images/tree_representation4.png
new file mode 100644
index 0000000..913d62b
--- /dev/null
+++ b/doc/5.1.x/user/trees/images/tree_representation4.png
Binary files differ
diff --git a/doc/viewpoint-eef.html b/doc/5.1.x/viewpoint-eef.html
similarity index 100%
rename from doc/viewpoint-eef.html
rename to doc/5.1.x/viewpoint-eef.html
diff --git a/doc/Release_Notes.html b/doc/Release_Notes.html
index 8ab17e1..934c130 100644
--- a/doc/Release_Notes.html
+++ b/doc/Release_Notes.html
@@ -13,35 +13,32 @@
 				<a href="#ReleaseNotesforSirius">Release Notes for Sirius</a>
 				<ol style="list-style: disc;">
 					<li>
-						<a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
+						<a href="#sirius6.0.0">Changes in Sirius 6.0.0</a>
 						<ol style="list-style: disc;">
 							<li>
 								<a href="#UserVisibleChanges">User-Visible Changes</a>
 							</li>
 							<li>
+								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+							</li>
+							<li>
 								<a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
 							</li>
 						</ol>
 					</li>
 					<li>
-						<a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
+						<a href="#sirius5.1.1">Changes in Sirius 5.1.1</a>
 						<ol style="list-style: disc;">
 							<li>
 								<a href="#UserVisibleChanges2">User-Visible Changes</a>
 							</li>
 							<li>
-								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
-							</li>
-							<li>
 								<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
 							</li>
 						</ol>
 					</li>
 					<li>
-						<a href="#sirius5.0.1">Changes in Sirius 5.0.1</a>
-					</li>
-					<li>
-						<a href="#sirius5.0.0">Changes in Sirius 5.0.0</a>
+						<a href="#sirius5.1.0">Changes in Sirius 5.1.0</a>
 						<ol style="list-style: disc;">
 							<li>
 								<a href="#UserVisibleChanges3">User-Visible Changes</a>
@@ -55,7 +52,10 @@
 						</ol>
 					</li>
 					<li>
-						<a href="#sirius4.1.2">Changes in Sirius 4.1.2</a>
+						<a href="#sirius5.0.1">Changes in Sirius 5.0.1</a>
+					</li>
+					<li>
+						<a href="#sirius5.0.0">Changes in Sirius 5.0.0</a>
 						<ol style="list-style: disc;">
 							<li>
 								<a href="#UserVisibleChanges4">User-Visible Changes</a>
@@ -63,45 +63,9 @@
 							<li>
 								<a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
 							</li>
-						</ol>
-					</li>
-					<li>
-						<a href="#sirius4.1.1">Changes in Sirius 4.1.1</a>
-						<ol style="list-style: disc;">
-							<li>
-								<a href="#UserVisibleChanges5">User-Visible Changes</a>
-							</li>
-							<li>
-								<a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
-							</li>
-						</ol>
-					</li>
-					<li>
-						<a href="#sirius4.1.0">Changes in Sirius 4.1.0</a>
-						<ol style="list-style: disc;">
-							<li>
-								<a href="#UserVisibleChanges6">User-Visible Changes</a>
-							</li>
 							<li>
 								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
 							</li>
-							<li>
-								<a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
-							</li>
-						</ol>
-					</li>
-					<li>
-						<a href="#sirius4.0.0">Changes in Sirius 4.0.0</a>
-						<ol style="list-style: disc;">
-							<li>
-								<a href="#UserVisibleChanges7">User-Visible Changes</a>
-							</li>
-							<li>
-								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
-							</li>
-							<li>
-								<a href="#DeveloperVisibleChanges7">Developer-Visible Changes</a>
-							</li>
 						</ol>
 					</li>
 				</ol>
@@ -110,9 +74,209 @@
 		<p>This document contains the release notes for recent major releases of Sirius. See also 
 			<a href="Release_Notes_Previous.html">the release notes from previous versions</a> for details about older releases.
 		</p>
-		<h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
+		<h2 id="sirius6.0.0">Changes in Sirius 6.0.0</h2>
 		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
 		<ul>
+			<li><span class="label label-success">Added</span> A new feature allows user to insert vertical blank space in sequence diagram. You can refer to the 
+				<a href="user/sequences/Sequence%20Diagrams.html#insert_vertical_blank_space">user documentation </a> for more details. 
+			</li>
+			<li><span class="label label-success">Added</span> A new feature called &#8220;Generic Edge Creation Tool&#8221; allows to create an edge by starting to select the source and the target before choosing the concrete edge creation tool. That allows to restrict the list of possible edge creation tools (possibly only one edge or no one) according to the selected source and target.</li>
+		</ul>
+		<p>
+			<img border="0" src="images/genericEdgeCreationTool.png"/>
+		</p>
+		<ul>
+			<li> <span class="label label-success">Added</span> A new feature called &#8220;Link Note&#8221; has been added. It is a special kind of note which references any existing representation in the project. It is possible to navigate to the target representation by double clicking on a link note. You can refer to the 
+				<a href="user/diagrams/Diagrams.html#notes">user documentation</a> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> The color palette for text, line and fill buttons, in appearance tab in properties view, has been enhanced. Before, when clicking on text, line or fill buttons, the available colors were only 12 arbitrary colors. Now, there are 50 maximum colors distributed in 10 columns. The displayed colors are
+				<ul>
+					<li>a shading of black to white then,</li>
+					<li>all fixed colors defined in VSM of all selected viewpoints and </li>
+					<li>the Sirius fixed colors following the colors of the rainbow.</li>
+				</ul>
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="images/color_palette.png"/>
+		</p>
+		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> An action is added in main toolbar to reload the VSM of installed plug-ins that may have changed. Refer to the 
+				<a href="specifier/general/Specifying_Viewpoints.html#reloadVSM">specifier documentation</a> for details.
+			</li>
+			<li><span class="label label-success">Added</span> In the VSM editor, when the cursor is inside an interpreted expression at a location which corresponds to a Java service invocation, hitting 
+				<strong>F3</strong> will navigate to the service implementation in a Java editor. See 
+				<a href="specifier/general/Writing_Queries.html#service_navigation">the documentation</a> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> Specifier can now define a background color for a diagram representation. It is possible by specifying color in the 
+				<em>Background</em> property section of the 
+				<em>Diagram Description</em>. Pre-defined system colors and colors from the 
+				<em>User Color Palette</em> are supported. See 
+				<a href="specifier/diagrams/Diagrams.html#diagram_description">the documentation</a> for details.
+			</li>
+			<li><span class="label label-info">Modified</span> Warning: Java service throwing an 
+				<code>OperationCanceledException</code> with a message containing the specific key word "
+				<code>-RT-</code>" has now a specific behavior. In this case, the 
+				<code>OperationCanceledException</code> is rethrown to rollback the command if this Java service is called from an AQL expression or through the service interpreter. You can refer to 
+				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=531487">bugzilla 531487</a> for more details.
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-info">Modified</span> The SWTBot test framework version has been upgraded toward SWTBot 2.6. The main impacts are described below:
+				<ul>
+					<li>The way we retrieved some views by using 
+						<code>bot.viewByTitle</code> (like &#8220;Problems&#8221; or &#8220;Error Log&#8221;) may not work anymore. Use 
+						<code>bot.viewByPartName</code> instead.
+					</li>
+					<li>
+						<code>org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot.contextMenu(String)</code> raise a 
+						<code>WidgetNotFoundException</code> instead of a 
+						<code>TimeoutException</code>.
+					</li>
+					<li>The 
+						<code>org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil</code> has been updated to be compatible with Oxygen and Photon platforms. Some methods may not work anymore on Neon platform.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-info">Modified</span> Some changes have been done in the image export tooling. Main impacts are described below:
+				<ul>
+					<li>The export of images, methods 
+						<code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.execute</code> and 
+						<code>org.eclipse.sirius.ui.tools.api.actions.export.ExportAction.createImageFiles</code>, do not open UI Dialogs anymore. It throws an 
+						<code>java.lang.reflect.InvocationTargetException</code> that wraps the real cause of the error (
+						<code>org.eclipse.sirius.ui.tools.api.actions.export.SizeTooLargeException</code> or 
+						<code>java.lang.OutOfMemoryError</code>). Callers have to handle properly the exception.
+					</li>
+					<li>The mechanism allowing to authorize or forbid the export of an image, method 
+						<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.isTooBig</code>, can now handle very large images that previously leads to incorrect exports.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-danger">Removed</span> Since Sirius 5.0.0, 
+				<code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> is not used anymore to provide a tooltip on diagram element decorations defined in the VSM. The tooltip is defined directly with an interpreted expression on 
+				<code>GenericDecorationDescription</code>, 
+				<code>MappingBasedDecoration</code> and 
+				<code>SemanticBasedDecoration</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li><span class="label label-danger">Removed</span> The interface 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IExpressionProposal</code> and its only implementation 
+				<code>DefaultExpressionProposal</code> (in the same package) have been removed. They were not used anywhere, expression completion API is actually defined in package 
+				<code>org.eclipse.sirius.common.tools.api.contentassist</code> which has its own types.  
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistry.reloadAllFromPlugins()</code> has been added to reload, from the runtime, all the VSMs of installed plug-ins and have the effect dynamically in the runtime.
+			</li>
+			<li><span class="label label-info">Modified</span> The class 
+				<code>org.eclipse.sirius.business.api.componentization.ViewpointRegistryImpl()</code> has been moved to 
+				<code>org.eclipse.sirius.business.internal.componentization</code> package.
+			</li>
+			<li><span class="label label-danger">Removed</span> The whole 
+				<code>contribution</code> metamodel, which lived in package 
+				<code>org.eclipse.sirius.description.contribution</code>, has been removed. It corresponded to an experimental feature which has been abandonned long ago.
+			</li>
+			<li><span class="label label-danger">Removed</span> The whole 
+				<code>DRefreshable.refresh()</code> EOperation has been removed from the metamodel, along with all its implementations. Client code that needs the functionality can use either 
+				<code>DialectManager.refresh()</code> for 
+				<code>DRepesentations</code> or the new 
+				<code>org.eclipse.sirius.diagram.tools.api.command.view.RefreshSiriusElement.refresh(DRefreshable)</code> static method for diagram elements (
+				<code>DRefreshable.refresh()</code> was a no-op for elements of other dialects). 
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.viewpointSpecificationModel</code> extension point has been removed. It was part of the same experimental feauture and not actually used in practice.
+			</li>
+			<li><span class="label label-danger">Removed</span> In 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code>, the method 
+				<code>getViewpointSelection()</code> has been removed. It used an internal type as argument which has also been removed.
+			</li>
+			<li><span class="label label-danger">Removed</span> In 
+				<code>org.eclipse.sirius.business.api.helper.SiriusResourceHelper</code>, the method 
+				<code>getCorrespondingViewpoint(Session session, URI, boolean)</code> has been removed. It was not used anywhere, the real one is 
+				<code>getCorrespondingViewpoint(Session, Viewpoint)</code> in the same class.
+			</li>
+			<li><span class="label label-danger">Removed</span> In 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices</code> (and all its implementations), the method 
+				<code>refreshEffectiveRepresentationDescription(DRepresentation, IProgressMonitor)</code> has been removed. It corresponded to an experimental feature which has been abandonned long ago. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.tools.api.preferences.SiriusDiagramPreferencesKeys.PREF_DISPLAY_GENERIC_EDGE_CREATION_TOOL</code> has been added to make to possible to hide the new generic edge creation tool. See the 
+				<em>User-Visible Changes</em> or the user documentation for more details.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor.createStraightenContribution()</code> has been added to make accessible the creation of the Straighten To tabbar contribution item.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</code> extension point has been added. It allows to contribute layout algorithms that can be configured directly in the VSM. This extension point comes with the following classes as API: 
+				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithmProvider</code>, 
+				<code>org.eclipse.sirius.diagram.ui.api.layout.CustomLayoutAlgorithm</code>, 
+				<code>org.eclipse.sirius.diagram.ui.api.layout.EnumChoice</code> and 
+				<code>org.eclipse.sirius.diagram.ui.api.layout.LayoutOptionFactory</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.ui.business.api.viewpoint.ViewpointSelectionDialog</code> has been removed.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tests.support.api.TestsUtil.isBeforeOxygenPlatform()</code> has been added to detect if the current platform corresponds to a version before Oxygen.
+			</li>
+			<li><span class="label label-info">Modified</span> A 
+				<code>String</code> parameter has been added to the method 
+				<code>org.eclipse.sirius.tests.support.api.TestsUtil.setTargetPlatform()</code>. This new parameter corresponds to the plug-in name from where the tests are currently launched (for example 
+				<code>org.eclipse.sirius.tests.swtbot.Activator.PLUGIN_ID</code>). It avoids to build a wrong target platform containing each Sirius plug-ins twice. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-danger">Removed</span> The method 
+				<code>org.eclipse.sirius.tests.swtbot.support.utils.dnd.DndUtil#dragAndDrop(AbstractSWTBot&lt;? extends Widget&gt;, AbstractSWTBot&lt;? extends Widget&gt;)</code> has been removed. When explicit drop coordinates are not needed, use the standard SWTbot 
+				<code>org.eclipse.swtbot.swt.finder.widgets.AbstractSWTBot.dragAndDrop(AbstractSWTBot&lt;? extends Widget&gt;)</code> method instead. 
+			</li>
+		</ul>
+		<h4 id="Migrations">Migrations</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A migration participant has been added to fix diagram with note attachment corrupted (see 
+				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=533177">bugzilla #533177</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
+				<em>13.0.0.201804031646</em>.
+			</li>
+		</ul>
+		<h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
+		<h2 id="sirius5.1.1">Changes in Sirius 5.1.1</h2>
+		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+		<ul>
 			<li><span class="label label-info">Modified</span> When exporting a diagram as an image, it is now possible to choose an image size level. Before this, a preference called 
 				<em>AutoScale</em> was available and when it was enable, the diagram was scaled to the maximum size safely allowed by the system. Now, a new preference named 
 				<em>Size of exported images</em> is available in the 
@@ -134,16 +298,8 @@
 				<a href="user/diagrams/Diagrams.html#standardToolId">Standard Tools</a> chapter for more details on this tool.
 			</li>
 		</ul>
-		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-danger">Removed</span> Since Sirius 5.0.0, 
-				<code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> is not used anymore to provide a tooltip on diagram element decorations defined in the VSM. The tooltip is defined directly with an interpreted expression on 
-				<code>GenericDecorationDescription</code>, 
-				<code>MappingBasedDecoration</code> and 
-				<code>SemanticBasedDecoration</code>.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius">Changes in 
+		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+		<h4 id="Changesinorg.eclipse.sirius2">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -157,7 +313,7 @@
 				<code>org.eclipse.sirius.business.api.query.SiriusReferenceFinder.getReferencingSiriusElements(Collection&lt;EObject&gt;, SearchScope)</code>. The SearchScope.LOADED_REPRESENTATIONS_SCOPE scope covers the search and result scope. Then, no additional resource will be loaded using this scope.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -181,7 +337,7 @@
 		<pre>SiriusEditPlugin.getPlugin().getPreferenceStore().setDefault(SiriusUIPreferencesKeys.PREF_SCALE_LEVEL_DIAGRAMS_ON_EXPORT.name(),0); 
 
 </pre>
-		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -193,7 +349,7 @@
 				<code>org.eclipse.sirius.ui.business.api.dialect.ExportFormat</code> has a new attribute representing the scaling level to use for diagram export. It is defined by an integer type. Refer to the JavaDoc for details on its meaning.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in 
 			<code>org.eclipse.sirius.tests.junit.support</code>
 		</h4>
 		<ul>
@@ -204,7 +360,7 @@
 		</ul>
 		<p>testcase.</p>
 		<h2 id="sirius5.1.0">Changes in Sirius 5.1.0</h2>
-		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
 		<ul>
 			<li><span class="label label-success">Added</span> When exporting a diagram as an image, it is now possible to choose whether or not the diagram should be scaled. If disabled, the diagram will be exported with its normal size (equivalent to a 100% zoom level). If auto-scaling is enabled, the diagram will be scaled to the maximum size safely allowed by the system (this can be different on different OSes). Note that when auto-scaling is enabled, the image files produced may be larger than without. When exporting very large diagrams it is also possible that the diagram will be scaled 
 				<em>down</em> (i.e. with a zoom level smaller than 100%). Enabling auto-scaling can be chosen on a case by case basis from the export dialog; the initial value in the dialog can be controlled by a new preference available in the 
@@ -253,7 +409,7 @@
 				<a href="developer/extensions-provide_custom_bundled_image_shape.html#bundleImageShape">bundleImageShape</a> ), opening or refreshing a diagram will not display exception anymore when the bundleImageShape extension is not valid. A warning is now displayed in the Error Log view to inform user of which attribute of the extension is not correct.
 			</li>
 		</ul>
-		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
 		<ul>
 			<li><span class="label label-success">Added</span> An 
 				<a href="./user/general/Modeling%20Project.html#Migration">automatic migration</a> has been added in this version to fix diagram with edge labels corrupted (see 
@@ -282,8 +438,8 @@
 				<em>Reference Name</em> field (if a valid feature has been specified).
 			</li>
 		</ul>
-		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
-		<h4 id="Migrations">Migrations</h4>
+		<h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
+		<h4 id="Migrations2">Migrations</h4>
 		<ul>
 			<li><span class="label label-success">Added</span> A migration has been added to fix diagram with edge labels corrupted (see 
 				<a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=518870">bugzilla #518870</a> for more details). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
@@ -308,7 +464,7 @@
 				<em>12.1.0.201708031200</em>.
 			</li>
 		</ul>
-		<h4 id="TranslationKeysChanges">Translation Keys Changes</h4>
+		<h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
 		<p>See 
 			<a href="i18n_changes.html#sirius51">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
 		</p>
@@ -317,7 +473,7 @@
 			<code>createLocalRepresentationInSeparateResource</code> at true. For more detail, see the developer documentation: 
 			<a href="./developer/representations_lazy_loading.html">Representations lazy loading (experimental)</a>.
 		</p>
-		<h4 id="Changesinorg.eclipse.sirius2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius3">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -391,7 +547,7 @@
 				<code>DialectManagerImpl</code>.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.common">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.common2">Changes in 
 			<code>org.eclipse.sirius.common</code>
 		</h4>
 		<ul>
@@ -403,7 +559,7 @@
 				<code>getFilesFromWorkspace(Collection&lt;IContainer&gt;, String)</code> to be more generic.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in 
 			<code>org.eclipse.sirius.diagram</code>
 		</h4>
 		<ul>
@@ -413,7 +569,7 @@
 				<code>DDiagram.getActivatedLayers</code> in several cases if you directly use it.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -462,7 +618,7 @@
 				<a href="./specifier/general/Writing_Queries.html#service_methods">specifier documentation</a>, it is recommended to use List or Set instead of Collection in java services signature.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -528,7 +684,7 @@
 			<a href="user/general/Aird_Editor.html">the aird editor</a>.
 		</p>
 		<h2 id="sirius5.0.0">Changes in Sirius 5.0.0</h2>
-		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges4">User-Visible Changes</h3>
 		<ul>
 			<li><span class="label label-success">Added</span> An new 
 				<em>aird editor</em> is available on 
@@ -552,7 +708,8 @@
 			</li>
 			<li><span class="label label-info">Modified</span> Decorators on diagram elements are drawn on top of other figures. If there is an overlap between a decorator of a figure A and another figure B that is over figure A, when user clicks on the decorator, the figure B is now selected (before it was the parent figure A).</li>
 		</ul>
-		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+		<h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
 		<ul>
 			<li><span class="label label-success">Added</span> It is now possible to automatically create one or several pre-configured widget(s) in a group if its domain class and if the meta-models of the properties view containing it have been specified. The widget(s) created will be infered from the features in the domain class (e.g. a properly configured 
 				<em>Checkbox</em> widget will be created for boolean attributes).
@@ -605,18 +762,17 @@
 				<em>Properties</em> DSL can now have an identifier, a label and some documentation.
 			</li>
 		</ul>
-		<h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
-		<h4 id="Migrations2">Migrations</h4>
+		<h4 id="Migrations3">Migrations</h4>
 		<ul>
 			<li><span class="label label-success">Added</span> A migration is added in this version to fix the alignment of the text in notes (as explained in user visible changes). The corresponding version, stored in attribute version of viewpoint:DAnalysis of the aird file, is 
 				<em>12.0.0.201704070000</em>.
 			</li>
 		</ul>
-		<h4 id="TranslationKeysChanges2">Translation Keys Changes</h4>
+		<h4 id="TranslationKeysChanges3">Translation Keys Changes</h4>
 		<p>See 
 			<a href="i18n_changes.html#sirius50">this document</a> for the complete list of message keys added or removed in Sirius 5.0.
 		</p>
-		<h4 id="Changesinorg.eclipse.sirius.common2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.common3">Changes in 
 			<code>org.eclipse.sirius.common</code> 
 		</h4>
 		<ul>
@@ -640,7 +796,7 @@
 				<code>org.eclipse.emf.edit.ui.celleditor.FeatureEditorDialog</code> equivalent provided by EMF directly instead.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
 			<code>org.eclipse.sirius</code> 
 		</h4>
 		<ul>
@@ -774,7 +930,7 @@
 				<code>RepresentationElementIdentifier</code>) have been removed.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -867,7 +1023,7 @@
 				<em>Model Request Interpreter</em> view is still present if needed during the transition, but not exposed or used anywhere. It will be removed in a future version. 
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in 
 			<code>org.eclipse.sirius.diagram</code>
 		</h4>
 		<ul>
@@ -896,7 +1052,7 @@
 				<code>NodeStyleIdentifier</code>) have been removed.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -1057,7 +1213,7 @@
 				<code>AbstractMetamodelPropertySectionSpec</code>. Those classes are now used for the edition of the metamodels of both the Properties view description and the various representations.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in 
 			<code>org.eclipse.sirius.tests.junit.support</code>
 		</h4>
 		<ul>
@@ -1068,7 +1224,7 @@
 				<code>org.eclipse.sirius.tests.support.api.OpenedSessionsCondition</code> has been extracted from a junit test to be used by multiple junit tests. It allows to wait until a session is in opened state.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in 
 			<code>org.eclipse.sirius.tests.swtbot.support</code>
 		</h4>
 		<ul>
@@ -1115,1065 +1271,6 @@
 // are not really redrawn and the rest of the test is not reliable.
 SWTBotUtils.waitAllUiEvents();
 
-
 </pre>
-		<h2 id="sirius4.1.2">Changes in Sirius 4.1.2</h2>
-		<h3 id="UserVisibleChanges4">User-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> A new preference named 
-				<em>Maximum size of tabs name</em> is available in the Sirius Properties View preference page. This preference is used to shorten the tabs names when the default rules are used to render the properties view.
-			</li>
-		</ul>
-		<p>
-			<img border="0" src="./images/PreferencePageMaxTabName.png"/> 
-		</p>
-		<h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> class has been added to handle copy/paste format with mapping information when an element target of a format pasting has many source diagram format corresponding to its key. In this case, we use the mapping information to get the more precise data format. And if no result matched, then we return the first found by using the key.
-			</li>
-		</ul>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> method has been added to retrieve during format pasting the data format corresponding to the given key and mapping when more than one result correspond to the key. If no result matches the mapping, then the first result found by using the key is returned.
-			</li>
-		</ul>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> method has been added to allow data format manager to register data format with mapping information when copying format.
-			</li>
-		</ul>
-		<ul>
-			<li><span class="label label-success">Deprecated</span></li>
-		</ul>
-		<p>
-			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.getFormatData(FormatDataKey)</code> It is replaced by 
-			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> to better handle copy/paste format cases.
-		</p>
-		<ul>
-			<li><span class="label label-success">Deprecated</span></li>
-		</ul>
-		<p>
-			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.addFormatData(FormatDataKey, AbstractFormatData)</code> It is replaced by 
-			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> to better handle copy/paste format cases.
-		</p>
-		<h2 id="sirius4.1.1">Changes in Sirius 4.1.1</h2>
-		<h3 id="UserVisibleChanges5">User-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-info">Modified</span>The &#8220;straighten to&#8221; actions were previously disabled when an edge is connected to border nodes that have several edges. It is now allowed.</li>
-		</ul>
-		<h3 id="DeveloperVisibleChanges5">Developer-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEStructuralFeature(DLine, DColumn)</code> method has been added to retrieve the EStructuralFeature associated to a table column.
-			</li>
-		</ul>
-		<h2 id="sirius4.1.0">Changes in Sirius 4.1.0</h2>
-		<h3 id="UserVisibleChanges6">User-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> Copy/Paste Layout has been completed with Copy/Paste Style and Copy/Paste Format. 
-				<em>Paste Format</em> is equivalent to paste 
-				<em>Layout</em> and 
-				<em>Style</em> action. See chapter 
-				<a href="./user/diagrams/Diagrams.html#copy_paste_format">
-					<em>Copy/paste of format</em>
-				</a> in 
-				<em>User Manual</em> for more details.
-			</li>
-			<li><span class="label label-success">Added</span> The 
-				<a href="./user/diagrams/Diagrams.html#snap_to_shapes">snap to shape</a> feature is now available on border nodes.
-			</li>
-			<li><span class="label label-success">Added</span> It is now possible to display an attachment link between an edge and its labels when label or edge is selected. This is not the default behavior but it can be activated by a preference in 
-				<em>Sirius/Sirius Diagram/Connections</em> preference page. See chapter 
-				<a href="./user/diagrams/Diagrams.html#edge_label_attachment">
-					<em>Display attachment link between edge and its labels</em>
-				</a> in 
-				<em>User Manual</em> for more details.
-			</li>
-			<li><span class="label label-success">Added</span> It is now possible to straighten an edge to top, bottom, left or right. These actions are available on edge contextual menu 
-				<em>Layout/Straighten</em>. See chapter 
-				<a href="./user/diagrams/Diagrams.html#straighten_an_edge">
-					<em>Straighten an edge</em>
-				</a> in 
-				<em>User Manual</em> for more details.
-			</li>
-			<li><span class="label label-success">Added</span> It is now possible to disable the 
-				<em>Default</em> and 
-				<em>Semantic</em> properties tabs (visible when selecting and element from the 
-				<em>Model Explorer</em> or from a Sirius editor, respectively) when using modelers which provide fully-functional replacements defined directly with Sirius. This is controled in the new 
-				<em>Sirius &gt; Sirius Properties View</em> preference page.
-			</li>
-			<li><span class="label label-success">Added</span> Sirius-defined properties view are now enabled for semantic elements selected directly from inside the 
-				<em>Model Explorer</em> (as long as the selected element is from inside an open Sirius session/project). Previously only elements selected from inside a Sirius editor were supported.
-			</li>
-			<li><span class="label label-info">Modified</span> In the Sirius-provided 
-				<em>Properties View</em>, the edition of a text field is only taken into account when pressing 
-				<em>Enter</em> or leaving the field. Previously it was triggered asynchronously after a small delay without activity, which could be confusing.
-			</li>
-			<li><span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of 
-				<code>UICallBack</code> in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk.
-			</li>
-		</ul>
-		<p>If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the 
-			<code>ViewpointRegistry</code> will not register it and a warning is logged in the error log view to inform the user.
-		</p>
-		<ul>
-			<li><span class="label label-info">Modified</span> The 
-				<a href="./user/diagrams/Diagrams.html#move_edge_group">move edge group</a> feature now also work for a selection of edge group.
-			</li>
-			<li><span class="label label-info">Modified</span> In a diagram editor, the zoom with mouse wheel is now zooming on mouse location instead of center of the editor. See 
-				<a href="./user/diagrams/Diagrams.html#zooming_diagram_id">user documentation</a> .
-			</li>
-			<li><span class="label label-info">Modified</span> The direct edit on a Note or Text is now accessible by a slow double click like any other diagram element.</li>
-			<li><span class="label label-info">Modified</span> The shortcut 
-				<em>Ctrl+&amp;</em>, for 
-				<a href="./user/diagrams/Diagrams.html#reset_origin">
-					<em>Reset Origin</em>
-				</a> action, has been replaced by 
-				<em>Ctrl+HOME</em>.
-			</li>
-		</ul>
-		<h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> It is now possible to inline a copy of the default Properties Views model inside the VSM. This is a copy of the model Sirius would use if no 
-				<em>Properties View Description</em> was specified. It can be used as a starting point for manual customization, or as a complement for elements for which you do not provide any custom rules. 
-			</li>
-			<li><span class="label label-success">Added</span> In the definition of the Properties view, hyperlink and label widgets can now have widget actions.</li>
-			<li><span class="label label-success">Added</span> Hyperlink and label widgets now have a 
-				<code>displayExpression</code>, if blank the result of the value expression will be used after a call to the method 
-				<code>java.lang.Object#toString()</code>.
-			</li>
-			<li><span class="label label-success">Added</span> Hyperlink and label widgets now support optional associated actions (visible as buttons on the right of the widget).</li>
-			<li><span class="label label-success">Added</span> A new widget named List with the same behavior as the multiple reference widget.</li>
-			<li><span class="label label-success">Added</span> 
-				<em>Page</em> and 
-				<em>Group</em> descriptions in 
-				<em>Properties View</em> models now support a 
-				<code>preconditionExpression</code>, which behaves in the same way as preconditions for mappings on representation descriptions.
-			</li>
-			<li><span class="label label-info">Modified</span> The rules concerning the layout of compartments have been changed/completed. You can have a look at the 
-				<a href="specifier/diagrams/Diagrams.html#compartments_layout">dedicated chapter</a> in the specifier documentation for more details.
-			</li>
-			<li><span class="label label-info">Modified</span> In the VSM editor, all dialogs which ask for selecting elements from the VSM will now show the fully qualified path of each element, instead of just their name, to allow distinguishing elements with the same name appearing in different places.</li>
-			<li><span class="label label-info">Modified</span> The properties 
-				<code>fontSize</code> and 
-				<code>labelFontSize</code> have been renamed into 
-				<code>fontSizeExpression</code> and 
-				<code>labelFontSizeExpression</code> since both of them were already treated as expression.
-			</li>
-			<li><span class="label label-info">Modified</span> In the VSM editor, the 
-				<em>Identifier</em> attribute of many 
-				<em>Prroperties View</em> related elements has been moved into the 
-				<em>Advanced</em> tab and renamed 
-				<em>Extension Id</em>, as it is not actually required on common use cases but only for extensibility purposes.
-			</li>
-			<li><span class="label label-info">Modified</span> The property 
-				<code>Domain Class Expression</code> in 
-				<code>DynamicMappingFor</code> elements (in properties views definitions) has been renamed into 
-				<code>Iterable Expression</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> The 
-				<em>Properties View</em> widget which was named 
-				<em>Reference</em> in Sirius 4.0 has been renamed as 
-				<em>List</em>, as it corresponds to an arbitrary list of elements with customizable buttons for acting on them. A new 
-				<em>Reference</em> widget was added for handling plain 
-				<em>EReference</em> edition with minimal configuration needed.
-			</li>
-			<li><span class="label label-info">Modified</span> When opening a VSM, the editor now automatically expands the first few levels to immediatly reveal the interesting elements (representation descriptions).</li>
-			<li><span class="label label-warning">Deprecated</span> The extension point 
-				<code>org.eclipse.sirius.diagram.ui.layoutDataManager</code> is deprecated. It is replaced by the new extension point 
-				<code>org.eclipse.sirius.diagram.ui.formatDataManager</code>. The deprecated extension point will be removed in the next 5.0 Sirius major release. Several classes associated with this deprecated extension point are also deprecated (see Developer-Visible Changes for details).
-			</li>
-		</ul>
-		<h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> As the first step to save the DRepresentation in its own resource, 
-				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as a wrapper of the 
-				<code>DRepresentation</code>. The 
-				<code>DRepresentationDescriptor</code> is contained by the 
-				<code>DView</code> and the 
-				<code>DRepresentationDescriptor</code> have a reference to the 
-				<code>DRepresentation</code>. In this step, the main impact is that the Sirius common navigator does not display the 
-				<code>DRepresentation</code> anymore but the 
-				<code>DRepresentationDescriptor</code> instead. All the actions and commands are then based on 
-				<code>DRepresentationDescriptor</code>.
-			</li>
-			<li><span class="label label-success">Added</span> As the second step to save the DRepresentation in its own resource, 
-				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentations()</code> has been removed. The 
-				<code>DRepresentation</code> is now created as root element of the representations resource. The main impact is on the core of Sirius but also potentially on client Sirius customization. Each peace of code that makes the supposition that the 
-				<code>DView</code> is the container of the 
-				<code>DRepresentation</code> must be reworked. The code using methods in the following list may be concerned by the rework:
-				<ul>
-					<li>
-						<code>EObject.eContainer()</code>. If the object is a 
-						<code>DRepresentation</code>, its container is now null.
-					</li>
-					<li>
-						<code>EcoreUtil.getRootContainer(xxx)</code>. The root container of a DDiagramElement is the 
-						<code>DRepresentation</code> and not the 
-						<code>DAnalysis</code> any more.
-					</li>
-					<li>
-						<code>EcoreUtil.isAncestor(xxx)</code>. the 
-						<code>DView</code> is not an ancestor of a 
-						<code>DRepresentation</code> (or its content) anymore.
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-success">Added</span> As a developer, the followings utility methods will help you to migrate your code following the second step described above:
-				<ul>
-					<li>
-						<code>org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentations()</code> replaces the removed 
-						<code>DView.getOwnedRepresentations()</code> method. It provides all the loaded representations holds by a 
-						<code>DView</code>. In this step, all that representations are always loaded as they are into the .aird resource.
-					</li>
-					<li>
-						<code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(final Predicate&lt;? super EObject&gt;)</code> provides the content of a 
-						<code>DView</code> according to a predicate.
-					</li>
-					<li>
-						<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> provides the 
-						<code>DRepresentationDescriptor</code> which references the 
-						<code>DRepresentation</code>.
-					</li>
-					<li>
-						<code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> allows to retrieve a DAnalysis from a 
-						<code>DRepresentationElement</code>
-					</li>
-				</ul>
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
-			<code>org.eclipse.sirius</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> A new extension point named 
-				<code>org.eclipse.sirius.interpretedExpressionQueryProvider</code> (with the associated new interface 
-				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQueryProvider</code>) allows external contribution of 
-				<code>IInterpretedExpressionQuery</code> specific to some particular expression occurrences in the VSM. This is used in particular for VSM extensions which do not fit well into the hard-coded assumptions about 
-				<code>IInterpretedExpressionQuery</code>. In Sirius 4.1, this is used to add completion and validation support for expressions used in properties views descriptions.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.migration.AirdResourceVersionMismatchException</code> exception has been added to cancel Sirius session opening due to an .aird version mismatch, i.e. when one the of the loaded Representation resources is coming from a newer Sirius release.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as the first step to save the DRepresentation in its own resource. In this step, the DRepresentationDescriptor life cycle is the same as the associated DRepresentation.
-				<ul>
-					<li>
-						<code>org.eclipse.sirius.business.api.dialect.command.RenameRepresentationCommand</code>
-					</li>
-					<li>
-						<code>org.eclipse.sirius.business.api.dialect.command.DeleteRepresentationCommand</code>
-					</li>
-					<li>
-						<code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand</code>
-					</li>
-					<li>
-						<code>org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand</code>
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>getAvailableRepresentationDescriptions(Collection&lt;Viewpoint&gt;, EObject)</code>, 
-				<code>getAllRepresentationDescriptors(Session )</code>, 
-				<code>getRepresentationDescriptors(EObject, Session)</code> and 
-				<code>getRepresentationDescriptors(RepresentationDescription, Session )</code> have been added in 
-				<code>org.eclipse.sirius.business.api.dialect.DialectServices</code> and implemented in 
-				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>. These methods are used, instead of their equivalent with DRepresentation, for every functionality which relies on 
-				<code>DRepresentationDescriptor</code> instead of 
-				<code>DRepresentation</code> such as actions, wizards or views.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isSupported(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to 
-				<code>DRepresentation</code> are now related to 
-				<code>DRepresentationDescriptor</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.canHandle(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to 
-				<code>DRepresentation</code> are now related to 
-				<code>DRepresentationDescriptor</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager.canExport(DRepresentationDescriptor, ExportFormat)</code> has been added because actions, wizards or views that were related to 
-				<code>DRepresentation</code> are now related to 
-				<code>DRepresentationDescriptor</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> has been added to retrieve the 
-				<code>DRepresentationDescriptor</code> that references the 
-				<code>DRepresentation</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR_FROM_DESCRIPTION</code> and 
-				<code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR</code> have been added. They are used to get or put 
-				<code>DRepresentationDescriptor</code> in the model managed by the 
-				<code>Session</code> through the 
-				<code>org.eclipse.sirius.business.api.session.SessionService.putCustomData(String, EObject, EObject)</code> and 
-				<code>SessionService.getCustomData(String, EObject)</code> methods.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> has been added to retrieve a DAnalysis from a 
-				<code>DRepresentationElement</code>
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been changed to 
-				<code>findDViewForRepresentationDescription(DAnalysis , final RepresentationDescription)</code> because that API was previously badly defined.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.business.api.dialect.DialectServices.deleteRepresentation(DRepresentation, Session)</code> has been changed to 
-				<code>deleteRepresentation(DRepresentationDescriptor, Session)</code> because now the 
-				<code>DRepresentationDescriptor</code> is the entry point to delete the 
-				<code>DRepresentation</code> and itself.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>DRepresentationDescriptor</code> is now the entry point to move, control or uncontrol a 
-				<code>DRepresentation</code> instead of the 
-				<code>DRepresentation</code> itself. Accordingly, the return type or parameter of the followings have changed to switch from 
-				<code>DRepresentation</code> to 
-				<code>DRepresentationDescriptor</code>
-				<ul>
-					<li>constructors of 
-						<code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code>
-					</li>
-					<li>the constructor 
-						<code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand.MoveRepresentationCommand(Session, DAnalysis, Collection&lt;DRepresentationDescriptor&gt;)</code>
-					</li>
-					<li>the method 
-						<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.moveRepresentation(DAnalysis, DRepresentationDescriptor)</code>
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.updateModelsReferences(DView)</code> has replaced 
-				<code>updateModelsReferences(DAnalysis, Iterator&lt;DSemanticDecorator&gt;)</code> because it is more suited to the client needs.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in 
-			<code>org.eclipse.sirius.ui</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The class 
-				<code>org.eclipse.sirius.ui.business.api.dialect.HierarchyLabelProvider</code> has been added to provide a generic label provider for VSM model element giving hierarchical label. This label provider replaces the one returned by deprecated method 
-				<code>DialectUIServices.getHierarchyLabelProvider()</code>. 
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>AbstractSWTCallback</code> provides a default implementation of 
-				<code>UICallBack.askSessionReopeningWithResourceVersionMismatch()</code> method to give feedback about version mismatch and give the choice to reopen session despite a potential corruption.
-			</li>
-			<li><span class="label label-info">Modified</span> The method 
-				<code>org.eclipse.sirius.ui.tools.api.control.SiriusControlHandler.getRepresentationsToMove(Shell, Session, EObject)</code> and 
-				<code>SiriusControlHandler.collectExistingRepresentations</code> have been renamed to 
-				<code>getRepresentationDescriptorsToMove(Shell, Session, EObject)</code> and 
-				<code>SiriusControlHandler.collectExistingRepresentationDescriptors</code>. The return type of both that methods and 
-				<code>SiriusControlHandler.askUserWhichRepresentationToSplit</code> has been changed to 
-				<code>DRepresentationDescriptor</code> as 
-				<code>DRepresentationDescriptor</code> is the entry point to work with a 
-				<code>DRepresentation</code> instead of DRepresentation itself.
-			</li>
-			<li><span class="label label-warning">Deprecated</span> The method 
-				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.getHierarchyLabelProvider()</code> has been deprecated in favor of generic label provider 
-				<code>HierarchyLabelProvider</code>.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in 
-			<code>org.eclipse.sirius.diagram</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.allowsCopyPasteFormat(DSemanticDecorator)</code> has been added in replacement of 
-				<code>allowsCopyPasteLayout(DSemanticDecorator)</code> that is now deprecated. This 2 methods must return the same result. 
-				<code>allowsCopyPasteLayout(DSemanticDecorator)</code> will be removed in the new major version.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in 
-			<code>org.eclipse.sirius.diagram.ui</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The constant 
-				<code>EDGE_SNAP_BACK</code> has been added in class 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>. It corresponds to the new snap back label action id that is present on edges.
-			</li>
-			<li><span class="label label-success">Added</span> 2 methods are added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> (and also in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code>):
-				<ul>
-					<li>
-						<code>applyFormat(IGraphicalEditPart)</code>: Apply the current format data (layout data and style data) to the given edit part.
-					</li>
-					<li>
-						<code>applyStyle(IGraphicalEditPart)</code>: Apply the current style data to the give edit part.
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-success">Added</span> 2 methods are added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>:
-				<ul>
-					<li>
-						<code>createCopyFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of 
-						<code>createCopyLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
-					</li>
-					<li>
-						<code>createPasteFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of 
-						<code>createPasteLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-success">Added</span> New action ids have been added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
-				<ul>
-					<li>
-						<code>COPY_FORMAT</code>: Action contribution id for the copy format. It replaces the old 
-						<code>COPY_LAYOUT</code>.
-					</li>
-					<li>
-						<code>PASTE_FORMAT</code>: Action contribution id for the paste format. It does not replace the old 
-						<code>PASTE_LAYOUT</code>. The paste format paste the layout and the style. The paste layout only paste layout.
-					</li>
-					<li>
-						<code>PASTE_STYLE</code>: Action contribution id for the paste style.
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isDescendantOf(View)</code> has been added to know if a view is a descendant of another view.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.getAncestor(int...)</code> has been added to retrieve the first ancestor of the view, or itself, that has at least one of the visualID passed as parameter.
-			</li>
-			<li><span class="label label-success">Added</span> The new preference key 
-				<code>PREF_SHOW_LINK_EDGE_LABEL_ON_SELECTION</code> has been added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. It corresponds to the preference shown in 
-				<em>Sirius/Sirius Diagram/Connections</em> Eclipse preferences.
-			</li>
-			<li><span class="label label-success">Added</span> The new figure 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabelWithAttachment</code> is a specific 
-				<code>SiriusWrapLabel</code> that allows to show an attachment between the label and its edge.
-			</li>
-			<li><span class="label label-success">Added</span> A new kind of request, 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.StraightenToRequest</code>, has been added to handle the new 
-				<em>Straighten to</em> actions. The corresponding id has also been added: 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_STRAIGHTEN</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 4 action ids have been added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
-				<ul>
-					<li>
-						<code>STRAIGHTEN_TO_TOP</code>: For 
-						<em>Straighten to top</em> action,
-					</li>
-					<li>
-						<code>STRAIGHTEN_TO_BOTTOM</code>: For 
-						<em>Straighten to bottom</em> action,
-					</li>
-					<li>
-						<code>STRAIGHTEN_TO_LEFT</code>: For 
-						<em>Straighten to left</em> action,
-					</li>
-					<li>
-						<code>STRAIGHTEN_TO_RIGHT</code>: For 
-						<em>Straighten to right</em> action.
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-success">Added</span> Constants have been added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new straighten actions.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code> is deprecated, use 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.AbstractSiriusFormatDataManager</code> instead.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.ILayoutDataManagerProvider</code> is deprecated, use 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.IFormatDataManagerProvider</code> instead.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataHelper</code> is deprecated, use 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataHelper</code> instead.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataKey</code> is deprecated, use 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataKey</code> instead.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> is deprecated, use 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> instead.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManagerForSemanticElementsFactory</code> is deprecated, use 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerForSemanticElementsFactory</code> instead.
-			</li>
-			<li><span class="label label-info">Moved</span> The translation key 
-				<code>HierarchyLabelProvider_elementWihtoutNameLabel</code> has been removed from the 
-				<code>org.eclipse.sirius.diagram.ui</code> plug-in&#8217;s 
-				<code>Messages</code> class, and moved into the 
-				<code>org.eclipse.sirius.ui</code>'s 
-				<code>Messages</code> class.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in 
-			<code>org.eclipse.sirius.ext.gmf.runtime</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The class 
-				<code>SiriusSnapFeedbackPolicy</code> has been copied from 
-				<code>org.eclipse.sirius.ext.gef.editpolicies</code> to 
-				<code>org.eclipse.sirius.ext.gmf.runtime.editpolicies</code>. The old class in plug-in 
-				<code>org.eclipse.sirius.ext.gef</code> is deprecated and will be removed in the next version.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in 
-			<code>org.eclipse.sirius.tests.junit.support</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The utility methods 
-				<code>getRepresentationDescriptors(final String)</code>, 
-				<code>getRepresentationDescriptors(final String , final Session )</code> and 
-				<code>getRepresentationDescriptorFromRepresentation(DRepresentation)</code> have been added in class 
-				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to adapt tests considering the 
-				<code>DView.ownedRepresentationDescriptors</code> addition.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in 
-			<code>org.eclipse.sirius.tests.swtbot.support</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The utility method 
-				<code>mouseScrollWithKey(int, int, int, int)</code>, has been added in classes 
-				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>, 
-				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and 
-				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code> to allow testing events occurring after a mouse scroll combined to a keyboard key pressed at a given absolute position.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.properties">Changes in 
-			<code>org.eclipse.sirius.properties</code>
-		</h4>
-		<ul>
-			<li><span class="label label-info">Modified</span> The property 
-				<code>domainClassExpression</code> has been renamed into 
-				<code>iterableExpression</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> The properties 
-				<code>fontSize</code> and 
-				<code>labelFontSize</code> have been renamed into 
-				<code>fontSizeExpression</code> and 
-				<code>labelFontSizeExpression</code> since both of them were already treated as expression.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui.properties2">Changes in 
-			<code>org.eclipse.sirius.ui.properties</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> Four utility classes have been added as API in the package 
-				<code>org.eclipse.sirius.ui.properties.api</code> in order to help with the transformation of the description of custom widgets. The class 
-				<code>AbstractDescriptionConverter</code> can now be used as superclass for all the converters. The classes 
-				<code>DefautDescriptionConverter</code>, 
-				<code>DefautStyleDescriptionConverter</code> and 
-				<code>DefautDescriptionWithInitialOperationConverter</code>, now accessible, should handle most of the use cases. 
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in 
-			<code>org.eclipse.sirius.ecore.extender</code>
-		</h4>
-		<ul>
-			<li><span class="label label-info">Modified</span> The message 
-				<code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException.PERMISSION_ISSUE_MESSAGE</code> has been modified. You should now use the 
-				<code>MessageFormat</code>. Example: 
-				<code>LockedInstanceException.PERMISSION_ISSUE_MESSAGE + getText(lockedElements)</code> must be replaced by 
-				<code>MessageFormat.format(LockedInstanceException.PERMISSION_ISSUE_MESSAGE, getText(lockedElements))</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> The 
-				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessorsRegistry</code> has been refactored to avoid problem with 
-				<code>ModelAccessor</code> lifecycle. The constructor has no longer a parameter.
-			</li>
-		</ul>
-		<h2 id="sirius4.0.0">Changes in Sirius 4.0.0</h2>
-		<h3 id="UserVisibleChanges7">User-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> The user can now filter elements according to a Typed variable (String, Integer, EEnum or any EDataType). If a user applies a filter containing Typed Variables, a dialog is displayed to allow user entering the Typed Variable values. That values can be used as variables in the Condition Expression of the Variable Filter.</li>
-			<li><span class="label label-success">Added</span> When the diagram is larger than the editor, you can move it in all directions pressing the middle-button and dragging the mouse (keeping the button pressed).</li>
-			<li><span class="label label-info">Modified</span> Now if an object is locked and cannot be modified according to 
-				<code>IPermissionAuthority</code>, the properties view will not be editable if this locked object is selected from the Model Explorer view.
-			</li>
-			<li><span class="label label-info">Modified</span> When trying to reconnect an edge end on another edge, the edge is now highlighted only if a reconnect tool is found (the precondition of the tool is not tested here).</li>
-			<li><span class="label label-info">Modified</span> List items now have the same margin whichever their parent is a simple list or a compartmentalized list. The margin in compartmentalized list was incorrectly set to 0 pixel.</li>
-			<li><span class="label label-info">Modified</span> The wizard to ask the new representation name has been changed. These concerns the title of the wizard and the input label. Example with a new Entities diagram for EcoreTools:</li>
-		</ul>
-		<p>
-			<img border="0" src="images/representationNameWizardChange.png"/>
-		</p>
-		<ul>
-			<li><span class="label label-info">Modified</span> The export of diagram as image handles the gradient color for container background for BMP, JPG, PNG and SVG formats. Before, it only works for JPG format.</li>
-			<li><span class="label label-info">Modified</span> The <img src="images/ApplyAppearanceProperties.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> 
-				<code>Apply Appearance Properties</code> action has been modified to use the last selected element as base style instead of the first one.
-			</li>
-		</ul>
-		<h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> Sirius 4.0 introduces 
-				<strong>experimental</strong> support for specifying the properties views of your modelers directly from inside the VSM. This feature uses the same dynamic approach as for specifying diagrams, tables and trees, with a very flexible configuration language and no code generation involved (including live preview of any change). As of Sirius 4.0, this feature should be considered in an experimental state with details subject to changes until Sirius 4.1, and is not installed by default. To install it, make sure either 
-				<a href="http://download.eclipse.org/releases/neon">the Eclipse Neon repositry</a> or the 
-				<a href="http://download.eclipse.org/sirius/updates/releases/4.0.0/neon">Sirius 4.0</a> and 
-				<a href="http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6.0">EEF 1.6</a> repositories are available, and then to install the following features (from in the 
-				<em>Modeling</em> category of Neon, or 
-				<em>Sirius Experimental Features</em> of the Sirius repository ):
-				<ul>
-					<li>
-						<em>Sirius Properties Views &#8211; Runtime Support</em> (
-						<code>org.eclipse.sirius.properties.feature.feature.group</code>): needed at runtime for deployed modelers which have properties views defined in their specification.
-					</li>
-					<li>
-						<em>Sirius Properties Views &#8211; Specifier Support</em> (
-						<code>org.eclipse.sirius.specifier.properties.feature.feature.group</code>): provides support for editing the configuration model directly inside the VSM editor and the specifier documentation.
-					</li>
-				</ul>
-			</li>
-		</ul>
-		<p>Once this is done, you can find the actual documentation in the 
-			<em>Sirius Specifier Manual</em>, under the 
-			<a href="specifier/properties/Properties_View_Description.html">
-				<em>Properties View</em>
-			</a> section.
-		</p>
-		<ul>
-			<li><span class="label label-success">Added</span> All static strings defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized. Simply replace the name with a translation key reference of the form 
-				<code>%myUniqueKey</code> in the VSM, and define the value in the 
-				<em>Viewpoint Specification Project</em>'s 
-				<code>plugin.properties</code> (for the default value), or 
-				<code>plugin_XX.properties</code> for locale 
-				<code>XX</code>. The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. See 
-				<a href="specifier/general/Specifying_Viewpoints.html#translatable_messages">the corresponding section</a> in the documentation for more details.
-			</li>
-			<li><span class="label label-success">Added</span> It is possible to create 
-				<a href="specifier/diagrams/Diagrams.html#filter_with_typed_variable">Typed Variable</a> under Variable Filter.
-			</li>
-			<li><span class="label label-success">Added</span> A new class 
-				<code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> (from plug-in 
-				<code>org.eclipse.sirius.ext.emf.edit</code>) has been added with a complete set of service methods to leverage most of the features of the &#8220;EMF Edit&#8221; framework, for example the various 
-				<em>Item Providers</em> associated to semantic elements. See 
-				<a href="specifier/general/Writing_Queries.html#editing_domain_services">the documentation</a> for details.
-			</li>
-			<li><span class="label label-success">Added</span> The specifier can now restrict the border node authorized sides. This new option is available in the advanced tab of the border node style. See the 
-				<a href="specifier/diagrams/Diagrams.html#authorizedsides">specifier documentation</a> for more details.
-			</li>
-			<li><span class="label label-info">Modified</span> The use of type literals in operations like 
-				<code>filter()</code> or 
-				<code>oclIsKindOf()</code> requires to explicitly add the domain meta-models plug-ins to the dependencies of the 
-				<em>Viewpoint Specification Project</em>. The documentation has been modified to recommend this.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<strong>Warning</strong>: Before this version, a style customization of an 
-				<code>EEnum</code> attribute, like 
-				<code>labelFormat</code>, worked with a value expression using a Java service returning a 
-				<code>EEnumLiteral</code>. It is now forbidden. You must return an 
-				<code>Enumerator</code>. The documentation about 
-				<a href="specifier/diagrams/Diagrams.html#enum_customization">Styles Customization</a> now details this case.
-			</li>
-			<li><span class="label label-info">Modified</span> The 
-				<code>BorderSizeComputationExpression</code> migration has been corrected to recursively handle the sub container mappings. VSM created or migrated with Sirius 3.1.0, 3.1.1 or 3.1.2 might require a manual modification for the style descriptions of sub container mappings with border size computation equals to 0 as we cannot determine if they were added (or updated) after or before the migration: starting with Sirius 3.1.0, no border will be displayed for a 0 pixel value whereas with older version container always had at least a 1 pixel border.
-			</li>
-			<li><span class="label label-info">Modified</span> The variable under VariableFilter, previously named &#8220;Variable&#8221;, is renamed to &#8220;Select Model Element Variable&#8221;. It is functionally equivalent.</li>
-		</ul>
-		<h3 id="DeveloperVisibleChanges7">Developer-Visible Changes</h3>
-		<ul>
-			<li><span class="label label-success">Added</span> It is now possible to provide a full customized tab-bar by implementing the 
-				<code>ITabbarContributor</code> through the 
-				<code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. See the 
-				<a href="developer/extensions-provide_tabbar_extensions.html#contributeFullTabbar">developer documentation</a> for more details.
-			</li>
-			<li><span class="label label-success">Added</span> It is now possible to provide new shapes for basic shape styles through the 
-				<code>org.eclipse.sirius.diagram.bundledImageShape</code> extension-point. See the 
-				<a href="developer/extensions-provide_custom_bundled_image_shape.html">developer documentation</a> for more details.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius5">Changes in 
-			<code>org.eclipse.sirius</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The method 
-				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getStatus()</code> has been added to have the status about session opening, i.e. if it has been correctly opened, cancelled or an exception has occurred. 
-			</li>
-			<li><span class="label label-success">Added</span> A new variant of 
-				<code>org.eclipse.sirius.business.api.helper.task.TaskHelper.buildTaskFromModelOperation(EObject, ModelOperation)</code> has been added, which does not require to specify a 
-				<code>DRepresentation</code> in the context. It allows the creation of a task which executes a behavior specified by 
-				<code>ModelOperations</code> outside of the context of a specific representation, provided the 
-				<code>ModelOperations</code> work in that context.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.viewpoint.description.TypedVariable</code> has been created.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code> has been created as tag interface for variables that require user interaction to be valued.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.tools.api.command.ui.NoUICallback.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have mean to get required viewpoints to use a representation.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have a default implementation of 
-				<code>DialectServices.getRequiredViewpoints(DRepresentation)</code> method.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isRelatedViewpointSelected(Session, RepresentationDescription)</code> protected method has been added to check if a 
-				<code>RepresentationDescription</code> is usable in the context of the specified session.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String, String)</code> method has been added to replace the deprecated 
-				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String)</code>. This method now uses the description name as title for the wizard. This new method has been implemented by 
-				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback</code> and 
-				<code>org.eclipse.sirius.tools.api.command.ui.NoUICallback</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.loadAndOpenRepresentationsFile(URI, boolean)</code> has been added to specify if job used to open a session must be considered as launched by the user or not, because by default with 
-				<code>ModelingProjectManager.loadAndOpenRepresentationsFile(URI)</code> the job was not considered as launched by the user.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code> now implements 
-				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.viewpoint.description.tool.AbstractVariable</code> has been moved to 
-				<code>org.eclipse.sirius.viewpoint.description.AbstractVariable</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.viewpoint.description.tool.SubVariable</code> has been moved to 
-				<code>org.eclipse.sirius.viewpoint.description.SubVariable</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> methods no more update workspace resource about markers, now this must be done in caller on IllegalArgumentException catch in a workspace aware operation.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.canExecute()</code> now returns false if a 
-				<code>DRepresentation</code> cannot be refreshed, by calling 
-				<code>DialectManager.canRefresh(DRepresentation)</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> Several methods of 
-				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code> now return a 
-				<code>fr.obeo.dsl.viewpoint.DView</code> instead of a 
-				<code>fr.obeo.dsl.viewpoint.DRepresentationContainer</code>: * 
-				<code>findContainer(EObject, Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>,
-				<ul>
-					<li>
-						<code>findContainerForAddedRepresentation(EObject, Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector, DRepresentation)</code>,
-					</li>
-					<li>
-						<code>findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code>, 
-						<code>findFreeContainer(Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>
-					</li>
-					<li>
-						<code>findFreeContainer(Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>.
-					</li>
-				</ul>
-			</li>
-			<li><span class="label label-danger">Removed</span> The 
-				<code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> EClass have been removed. It used to be the only implementation of 
-				<code>org.eclipse.sirius.viewpoint.DView</code>, the 
-				<code>models</code> derived transient reference has been moved to 
-				<code>DView</code>. An automatic migration has been added during the loading of the representation to handle this change.
-			</li>
-			<li><span class="label label-danger">Removed</span> The class 
-				<code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been deleted and is now 
-				<code>MetamodelDescriptorProvider</code>. 
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.common3">Changes in 
-			<code>org.eclipse.sirius.common</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> A method 
-				<code>getInferredVariableTypes(Boolean value)</code> in 
-				<code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> so that 
-				<code>IInterpreter</code> implementations able to infer more specific types based on predicates result provides this information to Sirius which will then use it for validating other expressions. You might want to look at 
-				<code>org.eclipse.sirius.common.acceleo.aql.business.internal.AQLSiriusInterpreter</code> which is an implementation providing this type inference.
-			</li>
-			<li><span class="label label-success">Added</span> A helper 
-				<code>org.eclipse.sirius.common.tools.api.util.MessageTranslator</code> providing 
-				<code>getMessage(EObject, String)</code> and 
-				<code>getMessage(Bundle, String)</code> service dedicated into processing a translatable message to return the translation in the active language when available. This service returns the String without modification if not translatable or no translation is available.
-			</li>
-			<li><span class="label label-success">Added</span> The &#8220;INFO&#8221; severity has been added to 
-				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus</code> to reflect all kind of language validation severity (of AQL for example).
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in 
-			<code>org.eclipse.sirius.diagram</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.VariableValue</code>, 
-				<code>org.eclipse.sirius.diagram.TypedVariableValue</code> and 
-				<code>org.eclipse.sirius.diagram.EObjectVariableValue</code> has been created.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code> has been created to indicate that variables have to be computed again.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.description.style.Side</code> EEnum has been added to define a border node side on the parent.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.description.style.NodeStyleDescription#forbiddenSides</code> attribute has been added to set the border node forbidden sides on the parent.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.business.api.query.DNodeQuery.getForbiddenSide()</code> has been added to retrieve the forbidden sides of a DNode (make sense only for Border Nodes).
-			</li>
-			<li><span class="label label-info">Modified</span> The type of 
-				<code>org.eclipse.sirius.diagram.description.filter.VariableFilter.ownedVariable</code> has been changed to 
-				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> The type of 
-				<code>org.eclipse.sirius.diagram.FilterVariableHistory.ownedValues</code> has been changed to 
-				<code>org.eclipse.sirius.diagram.VariableValue</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> The return type of 
-				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.findRepresentationContainer(DDiagram)</code> has been changed from 
-				<code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> to 
-				<code>org.eclipse.sirius.viewpoint.DView</code>.
-			</li>
-			<li><span class="label label-danger">Removed</span> 
-				<code>org.eclipse.sirius.diagram.description.filter.FilterVariable</code> has been removed. It is replaced by 
-				<code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code>.
-			</li>
-			<li><span class="label label-danger">Removed</span> 
-				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.setFilterContext()</code> has been removed. This method was, in part, useless and is replaced by 
-				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code>.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui5">Changes in 
-			<code>org.eclipse.sirius.ui</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
-			</li>
-			<li><span class="label label-success">Added</span> The new internationalizable label 
-				<code>Messages_createRepresentationInputDialog_DefaultRepresentationDescName</code> has been added (available through 
-				<code>org.eclipse.sirius.ui.tools.api.Messages.createRepresentationInputDialog_DefaultRepresentationDescName</code>. Its value is &#8220;Representation&#8221;.
-			</li>
-			<li><span class="label label-info">Modified</span> The internationalizable label 
-				<code>Messages_createRepresentationInputDialog_NewRepresentationNameLabel</code> has been replaced by &#8220;Name:&#8221; (previous value was &#8220;Representation name:&#8221;). 
-			</li>
-			<li><span class="label label-info">Modified</span> The internationalizable label 
-				<code>Messages_createRepresentationInputDialog_RepresentationDescriptionLabel</code> has been replaced by &#8220;Representation description: {0}&#8221; (previous value was &#8220;Representation description: &#8221;). 
-			</li>
-			<li><span class="label label-info">Modified</span> The internationalizable label 
-				<code>Messages_createRepresentationInputDialog_Title</code> has been replaced by &#8220;New {0}&#8221; (previous value was &#8220;New Representation&#8221;).
-			</li>
-			<li><span class="label label-danger">Removed</span> The internationalizable label 
-				<code>org.eclipse.sirius.viewpoint.provider.Messages.OpenRepresentationsFileJob_initModelingProjectsTask</code> has been removed as this message is no more used.
-			</li>
-			<li><span class="label label-danger">Removed</span> The class 
-				<code>org.eclipse.sirius.ui.business.api.editor.SpecificSessionManager</code> has been removed. 
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in 
-			<code>org.eclipse.sirius.diagram.ui</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> A new system property named 
-				<code>org.eclipse.sirius.diagram.ui.svg.maxCacheSizeMB</code> has been added. It can be used to tweak the maximum size (in megabytes) of pre-rendered SVG images to keep in cache. The default is 50, corresponding to 50MB of bitmaps of 4 8-bit channels. Increasing the limit can improve performance when using diagrams with a lot of SVG images, at the cost of increased memory usage.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> interface has been added to provide a customized tab-bar for a specific selection.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code> is an abstract implementation of 
-				<code>ITabbarContributor</code> that allows reusing one or several of the default Sirius contribution items.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.editor.properties.sections.style.bundledimagedescription.BundledImageDescriptionShapePropertySectionSpec</code> has been added to have a custom display in the VSM for provided basic shape.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart.createNodeFigure()</code> has been created to factorize the 
-				<code>DNode2EditPart</code> and 
-				<code>DNode4EditPart</code> constructors.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.setForbiddenSides(int...)</code> has been added to set the figure forbidden sides on its parent.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.getAuthorizedSides()</code> has been added to retrieve the figure authorized side (by default all sides).
-			</li>
-			<li><span class="label label-success">Added</span> The following protected methods have been added to 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> : 
-				<code>String getKey(Graphics)</code>, 
-				<code>Image getImage(Rectangle, Graphics)</code>, 
-				<code>static boolean doRemoveFromCache(String)</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 2 methods are added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code> to manage gradient color in export to PNG or SVG formats: 
-				<code>DiagramEditPartService.saveSVGToFile(IPath, SiriusDiagramSVGGenerator, IProgressMonitor)</code> and 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.saveToFile(IPath, SiriusDiagramSVGGenerator, ImageFileFormat, IProgressMonitor)</code>. These 2 methods are copy of parent methods with 
-				<code>SiriusDiagramSVGGenerator</code> as parameter instead of a 
-				<code>DiagramSVGGenerator</code>.
-			</li>
-			<li><span class="label label-success">Added</span> The method 
-				<code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getGradientPaintFromValue(int, int, int, int, Color, Color)</code> has been added to handle a cache for 
-				<code>java.awt.GradientPaint</code> as it is the case for 
-				<code>org.eclipse.swt.graphics.Pattern</code> with 
-				<code>getPatternFromValue()</code>.
-			</li>
-			<li><span class="label label-success">Added</span> Methods have been added in 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientHelper</code> to handle 
-				<code>java.awt.GradientPaint</code> as 
-				<code>org.eclipse.swt.graphics.Pattern</code>: 
-				<code>getGradientPaintDiag(Rectangle, Color, Color)</code>, 
-				<code>getGradientPaintLeftToRight(Rectangle, Color, Color)</code>, 
-				<code>getGradientPaintTopToBottom(Rectangle, Color, Color)</code> and 
-				<code>getGradientPaint(int, Rectangle, Color, Color)</code>.
-			</li>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES</code> has been added to identify the new 
-				<em>Sirius Copy Appearence Properties</em> action.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundleImageFigure</code> now overrides the method 
-				<code>setBorder(Border border)</code>. It also provides the accessors for the new field 
-				<code>mainBorderSize</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundledImageFigure</code> now inherits directly from 
-				<code>SVGFigure</code> instead of 
-				<code>AbstractCachedSVGFigure</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure</code> now inherits directly from 
-				<code>SVGFigure</code> instead of 
-				<code>AbstractCachedSVGFigure</code>.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> now implements interfaces 
-				<code>StyledFigure</code>, 
-				<code>ITransparentFigure</code> and 
-				<code>ImageFigureWithAlpha</code>.
-			</li>
-			<li><span class="label label-danger">Removed</span> The following mehtods have been removed from 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code>: 
-				<code>NodeList getNodes(String)</code>, 
-				<code>Color getColor(Element, String)</code>, 
-				<code>void updateRenderingHints(Graphics)</code>, 
-				<code>staticImage toSWT(Device, BufferedImage)</code>, 
-				<code>boolean checkContentAvailable()</code>, 
-				<code>Rectangle2D getAreaOfInterest()</code>, 
-				<code>void setAreaOfInterest(Rectangle2D)</code>, 
-				<code>boolean isSpecifyCanvasWidth()</code>, 
-				<code>void setSpecifyCanvasWidth(boolean)</code>, 
-				<code>boolean isSpecifyCanvasHeight()</code>, 
-				<code>void setSpecifyCanvasHeight(boolean)</code>, 
-				<code>boolean getSpecifyCanvasWidth()</code>, 
-				<code>boolean getSpecifyCanvasHeight()</code>.
-			</li>
-			<li><span class="label label-danger">Removed</span> The class 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> has been removed. Its functionality was merged directly into 
-				<code>SVGFigure</code>.
-			</li>
-			<li><span class="label label-danger">Removed</span> The static 
-				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure.createImageFigure(ContainerStyle)</code> method has been removed; it was broken and not called anywhere.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ext.emf.ui">Changes in 
-			<code>org.eclipse.sirius.ext.emf.ui</code>
-		</h4>
-		<ul>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.ext.emf.ui.properties.ExtensiblePropertySource.collector</code> field is now in protected visibility to be modifiable and accessible by subclass.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in 
-			<code>org.eclipse.sirius.ext.gmf.runtime</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The interface 
-				<code>org.eclipse.sirius.ext.gmf.runtime.diagram.ui.tools.MoveInDiagramDragTracker</code> has been added to declare states used by all DragTrackers which manage move in diagram using mouse middle click.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui6">Changes in 
-			<code>org.eclipse.sirius.ui</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> 
-				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertyDescriptor</code> has been added to provide a specific 
-				<code>ExtensiblePropertyDescriptor</code> which test 
-				<code>IPermissionAuthority</code> to make properties view editable or not.
-			</li>
-			<li><span class="label label-info">Modified</span> 
-				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been modified to use 
-				<code>SiriusExtensiblePropertyDescriptor</code> to provide not editable properties view when the object, selected from the Model Explorer view, cannot be modified.
-			</li>
-			<li><span class="label label-danger">Removed</span> The 
-				<code>org.eclipse.sirius.ui</code>, and thus the whole 
-				<code>org.eclipse.sirius.runtime</code> feature no longer depends on the JDT (technically the dependency towards 
-				<code>org.eclipse.jdt.core</code> has been removed). If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
-				<code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support4">Changes in 
-			<code>org.eclipse.sirius.tests.junit.support</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The class 
-				<code>org.eclipse.sirius.tests.support.api.DefaultTestMemento</code> has been created. It help to simulate a real 
-				<code>IMemento</code> for editor restoration.
-			</li>
-			<li><span class="label label-success">Added</span> The method 
-				<code>SiriusTestCase.initViewpoint(String, Session, boolean)</code> has been added to allow viewpoint activation without creating representations.
-			</li>
-			<li><span class="label label-success">Added</span> The methods 
-				<code>initLoggers()</code> and 
-				<code>disposeLoggers()</code> of class 
-				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> have now a protected visibility (instead of private) to allow subclasses to use this logger without all the 
-				<code>genericSetUp</code> behavior.
-			</li>
-			<li><span class="label label-warning">Deprecated</span> The method 
-				<code>SiriusTestCase.initViewpoint(String, Session, EObject)</code> has been deprecated because the last parameter is useless to activate a viewpoint.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in 
-			<code>org.eclipse.sirius.tests.swtbot.support</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The method 
-				<code>getTreeItem(final SWTBotTreeItem[], final String)</code> has been added in 
-				<code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a 
-				<code>SWTBotTreeItem</code> in a 
-				<code>SWTBotTreeItem</code> array.
-			</li>
-			<li><span class="label label-success">Added</span> The class 
-				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.ShellChangedCondition</code> has been added to wait until the current active shell has changed.
-			</li>
-			<li><span class="label label-success">Added</span> The class 
-				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeItemWithImageCondition</code> has been added to wait until the given treeItem has the expected image.
-			</li>
-			<li><span class="label label-info">Modified</span> A second 
-				<code>String</code> parameter has been added to the method 
-				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession.newDiagramRepresentation(String, String)</code>. This parameter is the label of the representation description. It is necessary since the change of the wizard to ask the new representation name (see User-Visible Changes for detail).
-			</li>
-			<li><span class="label label-info">Modified</span> A third 
-				<code>String</code> parameter has been added to the constructor of 
-				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UINewRepresentationBuilder</code> for the same above reasons.
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.common.xtext">Changes in 
-			<code>org.eclipse.sirius.common.xtext</code>
-		</h4>
-		<ul>
-			<li><span class="label label-info">Modified</span> The dependency from 
-				<code>org.eclipse.sirius.common.xtext</code> to the JDT plug-in 
-				<code>org.eclipse.jdt.core</code> is now optional. If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
-				<code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
-			</li>
-		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.editor">Changes in 
-			<code>org.eclipse.sirius.editor</code>
-		</h4>
-		<ul>
-			<li><span class="label label-success">Added</span> The method 
-				<code>bindCompletionProcessor(AbstractPropertySection, IAssistContentProvider, Text)</code> has been added to the class 
-				<code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider</code> to allow to bind a specific IAssistContentProvider to the text.
-			</li>
-		</ul>
 	</body>
 </html>
\ No newline at end of file
diff --git a/doc/Release_Notes_Previous.html b/doc/Release_Notes_Previous.html
index 915b8a2..3e9ccd8 100644
--- a/doc/Release_Notes_Previous.html
+++ b/doc/Release_Notes_Previous.html
@@ -13,43 +13,93 @@
 				<a href="#ReleaseNotesforOlderVersionofSirius">Release Notes for Older Version of Sirius</a>
 				<ol style="list-style: disc;">
 					<li>
-						<a href="#sirius3.1.0">Changes in Sirius 3.1.0</a>
+						<a href="#sirius4.1.2">Changes in Sirius 4.1.2</a>
 						<ol style="list-style: disc;">
 							<li>
 								<a href="#UserVisibleChanges">User-Visible Changes</a>
 							</li>
 							<li>
-								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
-							</li>
-							<li>
 								<a href="#DeveloperVisibleChanges">Developer-Visible Changes</a>
 							</li>
 						</ol>
 					</li>
 					<li>
-						<a href="#sirius3.0.0">Changes in Sirius 3.0.0</a>
+						<a href="#sirius4.1.1">Changes in Sirius 4.1.1</a>
 						<ol style="list-style: disc;">
 							<li>
 								<a href="#UserVisibleChanges2">User-Visible Changes</a>
 							</li>
 							<li>
-								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
-							</li>
-							<li>
 								<a href="#DeveloperVisibleChanges2">Developer-Visible Changes</a>
 							</li>
 						</ol>
 					</li>
 					<li>
-						<a href="#sirius2.0.0">Changes in Sirius 2.0.0</a>
+						<a href="#sirius4.1.0">Changes in Sirius 4.1.0</a>
 						<ol style="list-style: disc;">
 							<li>
 								<a href="#UserVisibleChanges3">User-Visible Changes</a>
 							</li>
 							<li>
+								<a href="#SpecifierVisibleChanges">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges3">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius4.0.0">Changes in Sirius 4.0.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges4">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges2">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges4">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius3.1.0">Changes in Sirius 3.1.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges5">User-Visible Changes</a>
+							</li>
+							<li>
 								<a href="#SpecifierVisibleChanges3">Specifier-Visible Changes</a>
 							</li>
 							<li>
+								<a href="#DeveloperVisibleChanges5">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius3.0.0">Changes in Sirius 3.0.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges6">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#DeveloperVisibleChanges6">Developer-Visible Changes</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#sirius2.0.0">Changes in Sirius 2.0.0</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#UserVisibleChanges7">User-Visible Changes</a>
+							</li>
+							<li>
+								<a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
+							</li>
+							<li>
 								<a href="#APIChanges">API Changes</a>
 							</li>
 						</ol>
@@ -58,10 +108,10 @@
 						<a href="#sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</a>
 						<ol style="list-style: disc;">
 							<li>
-								<a href="#UserVisibleChanges4">User-Visible Changes</a>
+								<a href="#UserVisibleChanges8">User-Visible Changes</a>
 							</li>
 							<li>
-								<a href="#SpecifierVisibleChanges4">Specifier-Visible Changes</a>
+								<a href="#SpecifierVisibleChanges6">Specifier-Visible Changes</a>
 							</li>
 							<li>
 								<a href="#APIChanges2">API Changes</a>
@@ -72,7 +122,7 @@
 						<a href="#sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</a>
 						<ol style="list-style: disc;">
 							<li>
-								<a href="#SpecifierVisibleChanges5">Specifier-Visible Changes</a>
+								<a href="#SpecifierVisibleChanges7">Specifier-Visible Changes</a>
 							</li>
 							<li>
 								<a href="#APIChanges3">API Changes</a>
@@ -91,7 +141,7 @@
 						<a href="#sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</a>
 						<ol style="list-style: disc;">
 							<li>
-								<a href="#UserVisibleChanges5">User-Visible Changes</a>
+								<a href="#UserVisibleChanges9">User-Visible Changes</a>
 							</li>
 							<li>
 								<a href="#APIChanges5">API Changes</a>
@@ -102,7 +152,7 @@
 						<a href="#sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</a>
 						<ol style="list-style: disc;">
 							<li>
-								<a href="#UserVisibleChanges6">User-Visible Changes</a>
+								<a href="#UserVisibleChanges10">User-Visible Changes</a>
 							</li>
 							<li>
 								<a href="#APIChanges6">API Changes</a>
@@ -128,10 +178,10 @@
 								<a href="#OtherAPIChanges">Other API Changes</a>
 							</li>
 							<li>
-								<a href="#SpecifierVisibleChanges6">Specifier-Visible Changes</a>
+								<a href="#SpecifierVisibleChanges8">Specifier-Visible Changes</a>
 							</li>
 							<li>
-								<a href="#UserVisibleChanges7">User-Visible Changes</a>
+								<a href="#UserVisibleChanges11">User-Visible Changes</a>
 							</li>
 						</ol>
 					</li>
@@ -139,9 +189,1067 @@
 			</li>
 		</ol>
 		<p>This document contains the release notes for older versions of of Sirius.</p>
-		<h2 id="sirius3.1.0">Changes in Sirius 3.1.0</h2>
+		<h2 id="sirius4.1.2">Changes in Sirius 4.1.2</h2>
 		<h3 id="UserVisibleChanges">User-Visible Changes</h3>
 		<ul>
+			<li><span class="label label-success">Added</span> A new preference named 
+				<em>Maximum size of tabs name</em> is available in the Sirius Properties View preference page. This preference is used to shorten the tabs names when the default rules are used to render the properties view.
+			</li>
+		</ul>
+		<p>
+			<img border="0" src="./images/PreferencePageMaxTabName.png"/> 
+		</p>
+		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping</code> class has been added to handle copy/paste format with mapping information when an element target of a format pasting has many source diagram format corresponding to its key. In this case, we use the mapping information to get the more precise data format. And if no result matched, then we return the first found by using the key.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> method has been added to retrieve during format pasting the data format corresponding to the given key and mapping when more than one result correspond to the key. If no result matches the mapping, then the first result found by using the key is returned.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> method has been added to allow data format manager to register data format with mapping information when copying format.
+			</li>
+		</ul>
+		<ul>
+			<li><span class="label label-success">Deprecated</span></li>
+		</ul>
+		<p>
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.getFormatData(FormatDataKey)</code> It is replaced by 
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.getFormatData(FormatDataKey, RepresentationElementMapping)</code> to better handle copy/paste format cases.
+		</p>
+		<ul>
+			<li><span class="label label-success">Deprecated</span></li>
+		</ul>
+		<p>
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager.addFormatData(FormatDataKey, AbstractFormatData)</code> It is replaced by 
+			<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerWithMapping.addFormatData(FormatDataKey, RepresentationElementMapping, AbstractFormatData)</code> to better handle copy/paste format cases.
+		</p>
+		<h2 id="sirius4.1.1">Changes in Sirius 4.1.1</h2>
+		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-info">Modified</span>The &#8220;straighten to&#8221; actions were previously disabled when an edge is connected to border nodes that have several edges. It is now allowed.</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.table.business.api.helper.TableHelper.getEStructuralFeature(DLine, DColumn)</code> method has been added to retrieve the EStructuralFeature associated to a table column.
+			</li>
+		</ul>
+		<h2 id="sirius4.1.0">Changes in Sirius 4.1.0</h2>
+		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> Copy/Paste Layout has been completed with Copy/Paste Style and Copy/Paste Format. 
+				<em>Paste Format</em> is equivalent to paste 
+				<em>Layout</em> and 
+				<em>Style</em> action. See chapter 
+				<a href="./user/diagrams/Diagrams.html#copy_paste_format">
+					<em>Copy/paste of format</em>
+				</a> in 
+				<em>User Manual</em> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> The 
+				<a href="./user/diagrams/Diagrams.html#snap_to_shapes">snap to shape</a> feature is now available on border nodes.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to display an attachment link between an edge and its labels when label or edge is selected. This is not the default behavior but it can be activated by a preference in 
+				<em>Sirius/Sirius Diagram/Connections</em> preference page. See chapter 
+				<a href="./user/diagrams/Diagrams.html#edge_label_attachment">
+					<em>Display attachment link between edge and its labels</em>
+				</a> in 
+				<em>User Manual</em> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to straighten an edge to top, bottom, left or right. These actions are available on edge contextual menu 
+				<em>Layout/Straighten</em>. See chapter 
+				<a href="./user/diagrams/Diagrams.html#straighten_an_edge">
+					<em>Straighten an edge</em>
+				</a> in 
+				<em>User Manual</em> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to disable the 
+				<em>Default</em> and 
+				<em>Semantic</em> properties tabs (visible when selecting and element from the 
+				<em>Model Explorer</em> or from a Sirius editor, respectively) when using modelers which provide fully-functional replacements defined directly with Sirius. This is controled in the new 
+				<em>Sirius &gt; Sirius Properties View</em> preference page.
+			</li>
+			<li><span class="label label-success">Added</span> Sirius-defined properties view are now enabled for semantic elements selected directly from inside the 
+				<em>Model Explorer</em> (as long as the selected element is from inside an open Sirius session/project). Previously only elements selected from inside a Sirius editor were supported.
+			</li>
+			<li><span class="label label-info">Modified</span> In the Sirius-provided 
+				<em>Properties View</em>, the edition of a text field is only taken into account when pressing 
+				<em>Enter</em> or leaving the field. Previously it was triggered asynchronously after a small delay without activity, which could be confusing.
+			</li>
+			<li><span class="label label-info">Modified</span> When trying to open a session which holds a representation resource or a VSP which was saved using a more recent version of Sirius than the one you are using, the session will be automatically closed displaying an error message. You can overload this behavior by providing you own implementation of 
+				<code>UICallBack</code> in which you can have an UI feedback letting you choose if you want to open the session anyway. Warning: if you choose to proceed, there is no guarantee that the resulting session will be usable. It may even lead to data loss or corruption; use at your own risk.
+			</li>
+		</ul>
+		<p>If a viewpoint has been defined with a more recent version of Sirius than the one you are using, the 
+			<code>ViewpointRegistry</code> will not register it and a warning is logged in the error log view to inform the user.
+		</p>
+		<ul>
+			<li><span class="label label-info">Modified</span> The 
+				<a href="./user/diagrams/Diagrams.html#move_edge_group">move edge group</a> feature now also work for a selection of edge group.
+			</li>
+			<li><span class="label label-info">Modified</span> In a diagram editor, the zoom with mouse wheel is now zooming on mouse location instead of center of the editor. See 
+				<a href="./user/diagrams/Diagrams.html#zooming_diagram_id">user documentation</a> .
+			</li>
+			<li><span class="label label-info">Modified</span> The direct edit on a Note or Text is now accessible by a slow double click like any other diagram element.</li>
+			<li><span class="label label-info">Modified</span> The shortcut 
+				<em>Ctrl+&amp;</em>, for 
+				<a href="./user/diagrams/Diagrams.html#reset_origin">
+					<em>Reset Origin</em>
+				</a> action, has been replaced by 
+				<em>Ctrl+HOME</em>.
+			</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> It is now possible to inline a copy of the default Properties Views model inside the VSM. This is a copy of the model Sirius would use if no 
+				<em>Properties View Description</em> was specified. It can be used as a starting point for manual customization, or as a complement for elements for which you do not provide any custom rules. 
+			</li>
+			<li><span class="label label-success">Added</span> In the definition of the Properties view, hyperlink and label widgets can now have widget actions.</li>
+			<li><span class="label label-success">Added</span> Hyperlink and label widgets now have a 
+				<code>displayExpression</code>, if blank the result of the value expression will be used after a call to the method 
+				<code>java.lang.Object#toString()</code>.
+			</li>
+			<li><span class="label label-success">Added</span> Hyperlink and label widgets now support optional associated actions (visible as buttons on the right of the widget).</li>
+			<li><span class="label label-success">Added</span> A new widget named List with the same behavior as the multiple reference widget.</li>
+			<li><span class="label label-success">Added</span> 
+				<em>Page</em> and 
+				<em>Group</em> descriptions in 
+				<em>Properties View</em> models now support a 
+				<code>preconditionExpression</code>, which behaves in the same way as preconditions for mappings on representation descriptions.
+			</li>
+			<li><span class="label label-info">Modified</span> The rules concerning the layout of compartments have been changed/completed. You can have a look at the 
+				<a href="specifier/diagrams/Diagrams.html#compartments_layout">dedicated chapter</a> in the specifier documentation for more details.
+			</li>
+			<li><span class="label label-info">Modified</span> In the VSM editor, all dialogs which ask for selecting elements from the VSM will now show the fully qualified path of each element, instead of just their name, to allow distinguishing elements with the same name appearing in different places.</li>
+			<li><span class="label label-info">Modified</span> The properties 
+				<code>fontSize</code> and 
+				<code>labelFontSize</code> have been renamed into 
+				<code>fontSizeExpression</code> and 
+				<code>labelFontSizeExpression</code> since both of them were already treated as expression.
+			</li>
+			<li><span class="label label-info">Modified</span> In the VSM editor, the 
+				<em>Identifier</em> attribute of many 
+				<em>Prroperties View</em> related elements has been moved into the 
+				<em>Advanced</em> tab and renamed 
+				<em>Extension Id</em>, as it is not actually required on common use cases but only for extensibility purposes.
+			</li>
+			<li><span class="label label-info">Modified</span> The property 
+				<code>Domain Class Expression</code> in 
+				<code>DynamicMappingFor</code> elements (in properties views definitions) has been renamed into 
+				<code>Iterable Expression</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<em>Properties View</em> widget which was named 
+				<em>Reference</em> in Sirius 4.0 has been renamed as 
+				<em>List</em>, as it corresponds to an arbitrary list of elements with customizable buttons for acting on them. A new 
+				<em>Reference</em> widget was added for handling plain 
+				<em>EReference</em> edition with minimal configuration needed.
+			</li>
+			<li><span class="label label-info">Modified</span> When opening a VSM, the editor now automatically expands the first few levels to immediatly reveal the interesting elements (representation descriptions).</li>
+			<li><span class="label label-warning">Deprecated</span> The extension point 
+				<code>org.eclipse.sirius.diagram.ui.layoutDataManager</code> is deprecated. It is replaced by the new extension point 
+				<code>org.eclipse.sirius.diagram.ui.formatDataManager</code>. The deprecated extension point will be removed in the next 5.0 Sirius major release. Several classes associated with this deprecated extension point are also deprecated (see Developer-Visible Changes for details).
+			</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges3">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> As the first step to save the DRepresentation in its own resource, 
+				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as a wrapper of the 
+				<code>DRepresentation</code>. The 
+				<code>DRepresentationDescriptor</code> is contained by the 
+				<code>DView</code> and the 
+				<code>DRepresentationDescriptor</code> have a reference to the 
+				<code>DRepresentation</code>. In this step, the main impact is that the Sirius common navigator does not display the 
+				<code>DRepresentation</code> anymore but the 
+				<code>DRepresentationDescriptor</code> instead. All the actions and commands are then based on 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> As the second step to save the DRepresentation in its own resource, 
+				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentations()</code> has been removed. The 
+				<code>DRepresentation</code> is now created as root element of the representations resource. The main impact is on the core of Sirius but also potentially on client Sirius customization. Each peace of code that makes the supposition that the 
+				<code>DView</code> is the container of the 
+				<code>DRepresentation</code> must be reworked. The code using methods in the following list may be concerned by the rework:
+				<ul>
+					<li>
+						<code>EObject.eContainer()</code>. If the object is a 
+						<code>DRepresentation</code>, its container is now null.
+					</li>
+					<li>
+						<code>EcoreUtil.getRootContainer(xxx)</code>. The root container of a DDiagramElement is the 
+						<code>DRepresentation</code> and not the 
+						<code>DAnalysis</code> any more.
+					</li>
+					<li>
+						<code>EcoreUtil.isAncestor(xxx)</code>. the 
+						<code>DView</code> is not an ancestor of a 
+						<code>DRepresentation</code> (or its content) anymore.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> As a developer, the followings utility methods will help you to migrate your code following the second step described above:
+				<ul>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.DViewQuery.getLoadedRepresentations()</code> replaces the removed 
+						<code>DView.getOwnedRepresentations()</code> method. It provides all the loaded representations holds by a 
+						<code>DView</code>. In this step, all that representations are always loaded as they are into the .aird resource.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.DViewQuery.getAllContentInRepresentations(final Predicate&lt;? super EObject&gt;)</code> provides the content of a 
+						<code>DView</code> according to a predicate.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> provides the 
+						<code>DRepresentationDescriptor</code> which references the 
+						<code>DRepresentation</code>.
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> allows to retrieve a DAnalysis from a 
+						<code>DRepresentationElement</code>
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A new extension point named 
+				<code>org.eclipse.sirius.interpretedExpressionQueryProvider</code> (with the associated new interface 
+				<code>org.eclipse.sirius.business.api.dialect.description.IInterpretedExpressionQueryProvider</code>) allows external contribution of 
+				<code>IInterpretedExpressionQuery</code> specific to some particular expression occurrences in the VSM. This is used in particular for VSM extensions which do not fit well into the hard-coded assumptions about 
+				<code>IInterpretedExpressionQuery</code>. In Sirius 4.1, this is used to add completion and validation support for expressions used in properties views descriptions.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.migration.AirdResourceVersionMismatchException</code> exception has been added to cancel Sirius session opening due to an .aird version mismatch, i.e. when one the of the loaded Representation resources is coming from a newer Sirius release.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.DView.getOwnedRepresentationDescriptors()</code> has been added as the first step to save the DRepresentation in its own resource. In this step, the DRepresentationDescriptor life cycle is the same as the associated DRepresentation.
+				<ul>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.RenameRepresentationCommand</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.DeleteRepresentationCommand</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand</code>
+					</li>
+					<li>
+						<code>org.eclipse.sirius.business.api.dialect.command.CopyRepresentationCommand</code>
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>getAvailableRepresentationDescriptions(Collection&lt;Viewpoint&gt;, EObject)</code>, 
+				<code>getAllRepresentationDescriptors(Session )</code>, 
+				<code>getRepresentationDescriptors(EObject, Session)</code> and 
+				<code>getRepresentationDescriptors(RepresentationDescription, Session )</code> have been added in 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices</code> and implemented in 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices</code>. These methods are used, instead of their equivalent with DRepresentation, for every functionality which relies on 
+				<code>DRepresentationDescriptor</code> instead of 
+				<code>DRepresentation</code> such as actions, wizards or views.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isSupported(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to 
+				<code>DRepresentation</code> are now related to 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.canHandle(DRepresentationDescriptor)</code> has been added because actions, wizards or views that were related to 
+				<code>DRepresentation</code> are now related to 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIManager.canExport(DRepresentationDescriptor, ExportFormat)</code> has been added because actions, wizards or views that were related to 
+				<code>DRepresentation</code> are now related to 
+				<code>DRepresentationDescriptor</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.DRepresentationQuery.getRepresentationDescriptor()</code> has been added to retrieve the 
+				<code>DRepresentationDescriptor</code> that references the 
+				<code>DRepresentation</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR_FROM_DESCRIPTION</code> and 
+				<code>org.eclipse.sirius.business.api.session.CustomDataConstants.DREPRESENTATION_DESCRIPTOR</code> have been added. They are used to get or put 
+				<code>DRepresentationDescriptor</code> in the model managed by the 
+				<code>Session</code> through the 
+				<code>org.eclipse.sirius.business.api.session.SessionService.putCustomData(String, EObject, EObject)</code> and 
+				<code>SessionService.getCustomData(String, EObject)</code> methods.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.query.EObjectQuery.getDAnalysis()</code> has been added to retrieve a DAnalysis from a 
+				<code>DRepresentationElement</code>
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code> has been changed to 
+				<code>findDViewForRepresentationDescription(DAnalysis , final RepresentationDescription)</code> because that API was previously badly defined.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.deleteRepresentation(DRepresentation, Session)</code> has been changed to 
+				<code>deleteRepresentation(DRepresentationDescriptor, Session)</code> because now the 
+				<code>DRepresentationDescriptor</code> is the entry point to delete the 
+				<code>DRepresentation</code> and itself.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>DRepresentationDescriptor</code> is now the entry point to move, control or uncontrol a 
+				<code>DRepresentation</code> instead of the 
+				<code>DRepresentation</code> itself. Accordingly, the return type or parameter of the followings have changed to switch from 
+				<code>DRepresentation</code> to 
+				<code>DRepresentationDescriptor</code>
+				<ul>
+					<li>constructors of 
+						<code>org.eclipse.sirius.business.api.control.SiriusControlCommand</code>
+					</li>
+					<li>the constructor 
+						<code>org.eclipse.sirius.business.api.dialect.command.MoveRepresentationCommand.MoveRepresentationCommand(Session, DAnalysis, Collection&lt;DRepresentationDescriptor&gt;)</code>
+					</li>
+					<li>the method 
+						<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSession.moveRepresentation(DAnalysis, DRepresentationDescriptor)</code>
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper.updateModelsReferences(DView)</code> has replaced 
+				<code>updateModelsReferences(DAnalysis, Iterator&lt;DSemanticDecorator&gt;)</code> because it is more suited to the client needs.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.ui.business.api.dialect.HierarchyLabelProvider</code> has been added to provide a generic label provider for VSM model element giving hierarchical label. This label provider replaces the one returned by deprecated method 
+				<code>DialectUIServices.getHierarchyLabelProvider()</code>. 
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>AbstractSWTCallback</code> provides a default implementation of 
+				<code>UICallBack.askSessionReopeningWithResourceVersionMismatch()</code> method to give feedback about version mismatch and give the choice to reopen session despite a potential corruption.
+			</li>
+			<li><span class="label label-info">Modified</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.control.SiriusControlHandler.getRepresentationsToMove(Shell, Session, EObject)</code> and 
+				<code>SiriusControlHandler.collectExistingRepresentations</code> have been renamed to 
+				<code>getRepresentationDescriptorsToMove(Shell, Session, EObject)</code> and 
+				<code>SiriusControlHandler.collectExistingRepresentationDescriptors</code>. The return type of both that methods and 
+				<code>SiriusControlHandler.askUserWhichRepresentationToSplit</code> has been changed to 
+				<code>DRepresentationDescriptor</code> as 
+				<code>DRepresentationDescriptor</code> is the entry point to work with a 
+				<code>DRepresentation</code> instead of DRepresentation itself.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> The method 
+				<code>org.eclipse.sirius.ui.business.api.dialect.DialectUIServices.getHierarchyLabelProvider()</code> has been deprecated in favor of generic label provider 
+				<code>HierarchyLabelProvider</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.business.api.diagramtype.IDiagramDescriptionProvider.allowsCopyPasteFormat(DSemanticDecorator)</code> has been added in replacement of 
+				<code>allowsCopyPasteLayout(DSemanticDecorator)</code> that is now deprecated. This 2 methods must return the same result. 
+				<code>allowsCopyPasteLayout(DSemanticDecorator)</code> will be removed in the new major version.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The constant 
+				<code>EDGE_SNAP_BACK</code> has been added in class 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>. It corresponds to the new snap back label action id that is present on edges.
+			</li>
+			<li><span class="label label-success">Added</span> 2 methods are added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> (and also in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code>):
+				<ul>
+					<li>
+						<code>applyFormat(IGraphicalEditPart)</code>: Apply the current format data (layout data and style data) to the given edit part.
+					</li>
+					<li>
+						<code>applyStyle(IGraphicalEditPart)</code>: Apply the current style data to the give edit part.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> 2 methods are added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code>:
+				<ul>
+					<li>
+						<code>createCopyFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of 
+						<code>createCopyLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+					</li>
+					<li>
+						<code>createPasteFormatContribution(IDiagramWorkbenchPart)</code>: In replacement of 
+						<code>createPasteLayoutContribution(IDiagramWorkbenchPart)</code> that is now deprecated.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> New action ids have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+				<ul>
+					<li>
+						<code>COPY_FORMAT</code>: Action contribution id for the copy format. It replaces the old 
+						<code>COPY_LAYOUT</code>.
+					</li>
+					<li>
+						<code>PASTE_FORMAT</code>: Action contribution id for the paste format. It does not replace the old 
+						<code>PASTE_LAYOUT</code>. The paste format paste the layout and the style. The paste layout only paste layout.
+					</li>
+					<li>
+						<code>PASTE_STYLE</code>: Action contribution id for the paste style.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.NodeQuery.isDescendantOf(View)</code> has been added to know if a view is a descendant of another view.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.business.api.query.ViewQuery.getAncestor(int...)</code> has been added to retrieve the first ancestor of the view, or itself, that has at least one of the visualID passed as parameter.
+			</li>
+			<li><span class="label label-success">Added</span> The new preference key 
+				<code>PREF_SHOW_LINK_EDGE_LABEL_ON_SELECTION</code> has been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.preferences.SiriusDiagramUiPreferencesKeys</code>. It corresponds to the preference shown in 
+				<em>Sirius/Sirius Diagram/Connections</em> Eclipse preferences.
+			</li>
+			<li><span class="label label-success">Added</span> The new figure 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SiriusWrapLabelWithAttachment</code> is a specific 
+				<code>SiriusWrapLabel</code> that allows to show an attachment between the label and its edge.
+			</li>
+			<li><span class="label label-success">Added</span> A new kind of request, 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.StraightenToRequest</code>, has been added to handle the new 
+				<em>Straighten to</em> actions. The corresponding id has also been added: 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.requests.RequestConstants.REQ_STRAIGHTEN</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 4 action ids have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds</code>:
+				<ul>
+					<li>
+						<code>STRAIGHTEN_TO_TOP</code>: For 
+						<em>Straighten to top</em> action,
+					</li>
+					<li>
+						<code>STRAIGHTEN_TO_BOTTOM</code>: For 
+						<em>Straighten to bottom</em> action,
+					</li>
+					<li>
+						<code>STRAIGHTEN_TO_LEFT</code>: For 
+						<em>Straighten to left</em> action,
+					</li>
+					<li>
+						<code>STRAIGHTEN_TO_RIGHT</code>: For 
+						<em>Straighten to right</em> action.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-success">Added</span> Constants have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.image.DiagramImagesPath</code> for the icon path of the four new straighten actions.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.AbstractSiriusLayoutDataManager</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.AbstractSiriusFormatDataManager</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.ILayoutDataManagerProvider</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.IFormatDataManagerProvider</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataHelper</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataHelper</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.LayoutDataKey</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.FormatDataKey</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManager</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManager</code> instead.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.SiriusLayoutDataManagerForSemanticElementsFactory</code> is deprecated, use 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.format.SiriusFormatDataManagerForSemanticElementsFactory</code> instead.
+			</li>
+			<li><span class="label label-info">Moved</span> The translation key 
+				<code>HierarchyLabelProvider_elementWihtoutNameLabel</code> has been removed from the 
+				<code>org.eclipse.sirius.diagram.ui</code> plug-in&#8217;s 
+				<code>Messages</code> class, and moved into the 
+				<code>org.eclipse.sirius.ui</code>'s 
+				<code>Messages</code> class.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in 
+			<code>org.eclipse.sirius.ext.gmf.runtime</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>SiriusSnapFeedbackPolicy</code> has been copied from 
+				<code>org.eclipse.sirius.ext.gef.editpolicies</code> to 
+				<code>org.eclipse.sirius.ext.gmf.runtime.editpolicies</code>. The old class in plug-in 
+				<code>org.eclipse.sirius.ext.gef</code> is deprecated and will be removed in the next version.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The utility methods 
+				<code>getRepresentationDescriptors(final String)</code>, 
+				<code>getRepresentationDescriptors(final String , final Session )</code> and 
+				<code>getRepresentationDescriptorFromRepresentation(DRepresentation)</code> have been added in class 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> to adapt tests considering the 
+				<code>DView.ownedRepresentationDescriptors</code> addition.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The utility method 
+				<code>mouseScrollWithKey(int, int, int, int)</code>, has been added in classes 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusDiagramEditor</code>, 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.editor.SWTBotSiriusGefViewer</code> and 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.widget.SWTBotSiriusFigureCanvas</code> to allow testing events occurring after a mouse scroll combined to a keyboard key pressed at a given absolute position.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.properties">Changes in 
+			<code>org.eclipse.sirius.properties</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The property 
+				<code>domainClassExpression</code> has been renamed into 
+				<code>iterableExpression</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The properties 
+				<code>fontSize</code> and 
+				<code>labelFontSize</code> have been renamed into 
+				<code>fontSizeExpression</code> and 
+				<code>labelFontSizeExpression</code> since both of them were already treated as expression.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui.properties">Changes in 
+			<code>org.eclipse.sirius.ui.properties</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> Four utility classes have been added as API in the package 
+				<code>org.eclipse.sirius.ui.properties.api</code> in order to help with the transformation of the description of custom widgets. The class 
+				<code>AbstractDescriptionConverter</code> can now be used as superclass for all the converters. The classes 
+				<code>DefautDescriptionConverter</code>, 
+				<code>DefautStyleDescriptionConverter</code> and 
+				<code>DefautDescriptionWithInitialOperationConverter</code>, now accessible, should handle most of the use cases. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in 
+			<code>org.eclipse.sirius.ecore.extender</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The message 
+				<code>org.eclipse.sirius.ecore.extender.business.api.permission.exception.LockedInstanceException.PERMISSION_ISSUE_MESSAGE</code> has been modified. You should now use the 
+				<code>MessageFormat</code>. Example: 
+				<code>LockedInstanceException.PERMISSION_ISSUE_MESSAGE + getText(lockedElements)</code> must be replaced by 
+				<code>MessageFormat.format(LockedInstanceException.PERMISSION_ISSUE_MESSAGE, getText(lockedElements))</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>org.eclipse.sirius.ecore.extender.business.api.accessor.ModelAccessorsRegistry</code> has been refactored to avoid problem with 
+				<code>ModelAccessor</code> lifecycle. The constructor has no longer a parameter.
+			</li>
+		</ul>
+		<h2 id="sirius4.0.0">Changes in Sirius 4.0.0</h2>
+		<h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> The user can now filter elements according to a Typed variable (String, Integer, EEnum or any EDataType). If a user applies a filter containing Typed Variables, a dialog is displayed to allow user entering the Typed Variable values. That values can be used as variables in the Condition Expression of the Variable Filter.</li>
+			<li><span class="label label-success">Added</span> When the diagram is larger than the editor, you can move it in all directions pressing the middle-button and dragging the mouse (keeping the button pressed).</li>
+			<li><span class="label label-info">Modified</span> Now if an object is locked and cannot be modified according to 
+				<code>IPermissionAuthority</code>, the properties view will not be editable if this locked object is selected from the Model Explorer view.
+			</li>
+			<li><span class="label label-info">Modified</span> When trying to reconnect an edge end on another edge, the edge is now highlighted only if a reconnect tool is found (the precondition of the tool is not tested here).</li>
+			<li><span class="label label-info">Modified</span> List items now have the same margin whichever their parent is a simple list or a compartmentalized list. The margin in compartmentalized list was incorrectly set to 0 pixel.</li>
+			<li><span class="label label-info">Modified</span> The wizard to ask the new representation name has been changed. These concerns the title of the wizard and the input label. Example with a new Entities diagram for EcoreTools:</li>
+		</ul>
+		<p>
+			<img border="0" src="images/representationNameWizardChange.png"/>
+		</p>
+		<ul>
+			<li><span class="label label-info">Modified</span> The export of diagram as image handles the gradient color for container background for BMP, JPG, PNG and SVG formats. Before, it only works for JPG format.</li>
+			<li><span class="label label-info">Modified</span> The <img src="images/ApplyAppearanceProperties.png" style="box-shadow:none;display:inline;margin:0px;padding:0px;"/> 
+				<code>Apply Appearance Properties</code> action has been modified to use the last selected element as base style instead of the first one.
+			</li>
+		</ul>
+		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> Sirius 4.0 introduces 
+				<strong>experimental</strong> support for specifying the properties views of your modelers directly from inside the VSM. This feature uses the same dynamic approach as for specifying diagrams, tables and trees, with a very flexible configuration language and no code generation involved (including live preview of any change). As of Sirius 4.0, this feature should be considered in an experimental state with details subject to changes until Sirius 4.1, and is not installed by default. To install it, make sure either 
+				<a href="http://download.eclipse.org/releases/neon">the Eclipse Neon repositry</a> or the 
+				<a href="http://download.eclipse.org/sirius/updates/releases/4.0.0/neon">Sirius 4.0</a> and 
+				<a href="http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6.0">EEF 1.6</a> repositories are available, and then to install the following features (from in the 
+				<em>Modeling</em> category of Neon, or 
+				<em>Sirius Experimental Features</em> of the Sirius repository ):
+				<ul>
+					<li>
+						<em>Sirius Properties Views &#8211; Runtime Support</em> (
+						<code>org.eclipse.sirius.properties.feature.feature.group</code>): needed at runtime for deployed modelers which have properties views defined in their specification.
+					</li>
+					<li>
+						<em>Sirius Properties Views &#8211; Specifier Support</em> (
+						<code>org.eclipse.sirius.specifier.properties.feature.feature.group</code>): provides support for editing the configuration model directly inside the VSM editor and the specifier documentation.
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<p>Once this is done, you can find the actual documentation in the 
+			<em>Sirius Specifier Manual</em>, under the 
+			<a href="specifier/properties/Properties_View_Description.html">
+				<em>Properties View</em>
+			</a> section.
+		</p>
+		<ul>
+			<li><span class="label label-success">Added</span> All static strings defined in the VSMs which are visible to the end-user of the modeler, like viewpoint and tools names, can now be internationalized. Simply replace the name with a translation key reference of the form 
+				<code>%myUniqueKey</code> in the VSM, and define the value in the 
+				<em>Viewpoint Specification Project</em>'s 
+				<code>plugin.properties</code> (for the default value), or 
+				<code>plugin_XX.properties</code> for locale 
+				<code>XX</code>. The underlying mechanism is the same as for Eclipse/OSGi plug-ins, so translations can even be contributed by physically separate plug-in fragments. See 
+				<a href="specifier/general/Specifying_Viewpoints.html#translatable_messages">the corresponding section</a> in the documentation for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is possible to create 
+				<a href="specifier/diagrams/Diagrams.html#filter_with_typed_variable">Typed Variable</a> under Variable Filter.
+			</li>
+			<li><span class="label label-success">Added</span> A new class 
+				<code>org.eclipse.sirius.ext.emf.edit.EditingDomainServices</code> (from plug-in 
+				<code>org.eclipse.sirius.ext.emf.edit</code>) has been added with a complete set of service methods to leverage most of the features of the &#8220;EMF Edit&#8221; framework, for example the various 
+				<em>Item Providers</em> associated to semantic elements. See 
+				<a href="specifier/general/Writing_Queries.html#editing_domain_services">the documentation</a> for details.
+			</li>
+			<li><span class="label label-success">Added</span> The specifier can now restrict the border node authorized sides. This new option is available in the advanced tab of the border node style. See the 
+				<a href="specifier/diagrams/Diagrams.html#authorizedsides">specifier documentation</a> for more details.
+			</li>
+			<li><span class="label label-info">Modified</span> The use of type literals in operations like 
+				<code>filter()</code> or 
+				<code>oclIsKindOf()</code> requires to explicitly add the domain meta-models plug-ins to the dependencies of the 
+				<em>Viewpoint Specification Project</em>. The documentation has been modified to recommend this.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<strong>Warning</strong>: Before this version, a style customization of an 
+				<code>EEnum</code> attribute, like 
+				<code>labelFormat</code>, worked with a value expression using a Java service returning a 
+				<code>EEnumLiteral</code>. It is now forbidden. You must return an 
+				<code>Enumerator</code>. The documentation about 
+				<a href="specifier/diagrams/Diagrams.html#enum_customization">Styles Customization</a> now details this case.
+			</li>
+			<li><span class="label label-info">Modified</span> The 
+				<code>BorderSizeComputationExpression</code> migration has been corrected to recursively handle the sub container mappings. VSM created or migrated with Sirius 3.1.0, 3.1.1 or 3.1.2 might require a manual modification for the style descriptions of sub container mappings with border size computation equals to 0 as we cannot determine if they were added (or updated) after or before the migration: starting with Sirius 3.1.0, no border will be displayed for a 0 pixel value whereas with older version container always had at least a 1 pixel border.
+			</li>
+			<li><span class="label label-info">Modified</span> The variable under VariableFilter, previously named &#8220;Variable&#8221;, is renamed to &#8220;Select Model Element Variable&#8221;. It is functionally equivalent.</li>
+		</ul>
+		<h3 id="DeveloperVisibleChanges4">Developer-Visible Changes</h3>
+		<ul>
+			<li><span class="label label-success">Added</span> It is now possible to provide a full customized tab-bar by implementing the 
+				<code>ITabbarContributor</code> through the 
+				<code>org.eclipse.sirius.diagram.ui.tabbarContributor</code> extension-point. See the 
+				<a href="developer/extensions-provide_tabbar_extensions.html#contributeFullTabbar">developer documentation</a> for more details.
+			</li>
+			<li><span class="label label-success">Added</span> It is now possible to provide new shapes for basic shape styles through the 
+				<code>org.eclipse.sirius.diagram.bundledImageShape</code> extension-point. See the 
+				<a href="developer/extensions-provide_custom_bundled_image_shape.html">developer documentation</a> for more details.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius2">Changes in 
+			<code>org.eclipse.sirius</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.business.api.session.SessionEditorInput.getStatus()</code> has been added to have the status about session opening, i.e. if it has been correctly opened, cancelled or an exception has occurred. 
+			</li>
+			<li><span class="label label-success">Added</span> A new variant of 
+				<code>org.eclipse.sirius.business.api.helper.task.TaskHelper.buildTaskFromModelOperation(EObject, ModelOperation)</code> has been added, which does not require to specify a 
+				<code>DRepresentation</code> in the context. It allows the creation of a task which executes a behavior specified by 
+				<code>ModelOperations</code> outside of the context of a specific representation, provided the 
+				<code>ModelOperations</code> work in that context.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.description.TypedVariable</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code> has been created as tag interface for variables that require user interaction to be valued.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tools.api.command.ui.NoUICallback.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.DialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have mean to get required viewpoints to use a representation.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.getRequiredViewpoints(DRepresentation)</code> has been added to have a default implementation of 
+				<code>DialectServices.getRequiredViewpoints(DRepresentation)</code> method.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.business.api.dialect.AbstractRepresentationDialectServices.isRelatedViewpointSelected(Session, RepresentationDescription)</code> protected method has been added to check if a 
+				<code>RepresentationDescription</code> is usable in the context of the specified session.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String, String)</code> method has been added to replace the deprecated 
+				<code>org.eclipse.sirius.tools.api.command.ui.UICallBack.askForDetailName(String, String)</code>. This method now uses the description name as title for the wizard. This new method has been implemented by 
+				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback</code> and 
+				<code>org.eclipse.sirius.tools.api.command.ui.NoUICallback</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.loadAndOpenRepresentationsFile(URI, boolean)</code> has been added to specify if job used to open a session must be considered as launched by the user or not, because by default with 
+				<code>ModelingProjectManager.loadAndOpenRepresentationsFile(URI)</code> the job was not considered as launched by the user.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code> now implements 
+				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.description.tool.AbstractVariable</code> has been moved to 
+				<code>org.eclipse.sirius.viewpoint.description.AbstractVariable</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.viewpoint.description.tool.SubVariable</code> has been moved to 
+				<code>org.eclipse.sirius.viewpoint.description.SubVariable</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.modelingproject.ModelingProject.getMainRepresentationsFileURI()</code> methods no more update workspace resource about markers, now this must be done in caller on IllegalArgumentException catch in a workspace aware operation.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.business.api.dialect.command.RefreshRepresentationsCommand.canExecute()</code> now returns false if a 
+				<code>DRepresentation</code> cannot be refreshed, by calling 
+				<code>DialectManager.canRefresh(DRepresentation)</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> Several methods of 
+				<code>org.eclipse.sirius.business.api.session.danalysis.DAnalysisSessionHelper</code> now return a 
+				<code>fr.obeo.dsl.viewpoint.DView</code> instead of a 
+				<code>fr.obeo.dsl.viewpoint.DRepresentationContainer</code>: * 
+				<code>findContainer(EObject, Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>,
+				<ul>
+					<li>
+						<code>findContainerForAddedRepresentation(EObject, Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector, DRepresentation)</code>,
+					</li>
+					<li>
+						<code>findContainerForAddedRepresentation(DAnalysis, DRepresentation)</code>, 
+						<code>findFreeContainer(Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>
+					</li>
+					<li>
+						<code>findFreeContainer(Viewpoint, Collection&lt;DAnalysis&gt;, DAnalysisSelector)</code>.
+					</li>
+				</ul>
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> EClass have been removed. It used to be the only implementation of 
+				<code>org.eclipse.sirius.viewpoint.DView</code>, the 
+				<code>models</code> derived transient reference has been moved to 
+				<code>DView</code>. An automatic migration has been added during the loading of the representation to handle this change.
+			</li>
+			<li><span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.business.api.extender.MetamodelDescriptorProvider2</code> has been deleted and is now 
+				<code>MetamodelDescriptorProvider</code>. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common">Changes in 
+			<code>org.eclipse.sirius.common</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A method 
+				<code>getInferredVariableTypes(Boolean value)</code> in 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.ValidationResult</code> so that 
+				<code>IInterpreter</code> implementations able to infer more specific types based on predicates result provides this information to Sirius which will then use it for validating other expressions. You might want to look at 
+				<code>org.eclipse.sirius.common.acceleo.aql.business.internal.AQLSiriusInterpreter</code> which is an implementation providing this type inference.
+			</li>
+			<li><span class="label label-success">Added</span> A helper 
+				<code>org.eclipse.sirius.common.tools.api.util.MessageTranslator</code> providing 
+				<code>getMessage(EObject, String)</code> and 
+				<code>getMessage(Bundle, String)</code> service dedicated into processing a translatable message to return the translation in the active language when available. This service returns the String without modification if not translatable or no translation is available.
+			</li>
+			<li><span class="label label-success">Added</span> The &#8220;INFO&#8221; severity has been added to 
+				<code>org.eclipse.sirius.common.tools.api.interpreter.IInterpreterStatus</code> to reflect all kind of language validation severity (of AQL for example).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in 
+			<code>org.eclipse.sirius.diagram</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.VariableValue</code>, 
+				<code>org.eclipse.sirius.diagram.TypedVariableValue</code> and 
+				<code>org.eclipse.sirius.diagram.EObjectVariableValue</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code> has been created to indicate that variables have to be computed again.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.description.style.Side</code> EEnum has been added to define a border node side on the parent.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.description.style.NodeStyleDescription#forbiddenSides</code> attribute has been added to set the border node forbidden sides on the parent.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.business.api.query.DNodeQuery.getForbiddenSide()</code> has been added to retrieve the forbidden sides of a DNode (make sense only for Border Nodes).
+			</li>
+			<li><span class="label label-info">Modified</span> The type of 
+				<code>org.eclipse.sirius.diagram.description.filter.VariableFilter.ownedVariable</code> has been changed to 
+				<code>org.eclipse.sirius.viewpoint.description.InteractiveVariableDescription</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The type of 
+				<code>org.eclipse.sirius.diagram.FilterVariableHistory.ownedValues</code> has been changed to 
+				<code>org.eclipse.sirius.diagram.VariableValue</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> The return type of 
+				<code>org.eclipse.sirius.diagram.business.api.helper.SiriusDiagramUtil.findRepresentationContainer(DDiagram)</code> has been changed from 
+				<code>org.eclipse.sirius.viewpoint.DRepresentationContainer</code> to 
+				<code>org.eclipse.sirius.viewpoint.DView</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.diagram.description.filter.FilterVariable</code> has been removed. It is replaced by 
+				<code>org.eclipse.sirius.viewpoint.description.tool.SelectModelElementVariable</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> 
+				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.setFilterContext()</code> has been removed. This method was, in part, useless and is replaced by 
+				<code>org.eclipse.sirius.diagram.description.filter.impl.VariableFilterImpl.resetVariables()</code>.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.command.AbstractSWTCallback.askForTypedVariable(List&lt;TypedVariable&gt;, List&lt;String&gt;)</code> has been created.
+			</li>
+			<li><span class="label label-success">Added</span> The new internationalizable label 
+				<code>Messages_createRepresentationInputDialog_DefaultRepresentationDescName</code> has been added (available through 
+				<code>org.eclipse.sirius.ui.tools.api.Messages.createRepresentationInputDialog_DefaultRepresentationDescName</code>. Its value is &#8220;Representation&#8221;.
+			</li>
+			<li><span class="label label-info">Modified</span> The internationalizable label 
+				<code>Messages_createRepresentationInputDialog_NewRepresentationNameLabel</code> has been replaced by &#8220;Name:&#8221; (previous value was &#8220;Representation name:&#8221;). 
+			</li>
+			<li><span class="label label-info">Modified</span> The internationalizable label 
+				<code>Messages_createRepresentationInputDialog_RepresentationDescriptionLabel</code> has been replaced by &#8220;Representation description: {0}&#8221; (previous value was &#8220;Representation description: &#8221;). 
+			</li>
+			<li><span class="label label-info">Modified</span> The internationalizable label 
+				<code>Messages_createRepresentationInputDialog_Title</code> has been replaced by &#8220;New {0}&#8221; (previous value was &#8220;New Representation&#8221;).
+			</li>
+			<li><span class="label label-danger">Removed</span> The internationalizable label 
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.OpenRepresentationsFileJob_initModelingProjectsTask</code> has been removed as this message is no more used.
+			</li>
+			<li><span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.ui.business.api.editor.SpecificSessionManager</code> has been removed. 
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in 
+			<code>org.eclipse.sirius.diagram.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> A new system property named 
+				<code>org.eclipse.sirius.diagram.ui.svg.maxCacheSizeMB</code> has been added. It can be used to tweak the maximum size (in megabytes) of pre-rendered SVG images to keep in cache. The default is 50, corresponding to 50MB of bitmaps of 4 8-bit channels. Increasing the limit can improve performance when using diagrams with a lot of SVG images, at the cost of increased memory usage.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.ITabbarContributor</code> interface has been added to provide a customized tab-bar for a specific selection.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.editor.tabbar.AbstractTabbarContributor</code> is an abstract implementation of 
+				<code>ITabbarContributor</code> that allows reusing one or several of the default Sirius contribution items.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.editor.properties.sections.style.bundledimagedescription.BundledImageDescriptionShapePropertySectionSpec</code> has been added to have a custom display in the VSM for provided basic shape.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramBorderNodeEditPart.createNodeFigure()</code> has been created to factorize the 
+				<code>DNode2EditPart</code> and 
+				<code>DNode4EditPart</code> constructors.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.setForbiddenSides(int...)</code> has been added to set the figure forbidden sides on its parent.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.DBorderedNodeFigure.getAuthorizedSides()</code> has been added to retrieve the figure authorized side (by default all sides).
+			</li>
+			<li><span class="label label-success">Added</span> The following protected methods have been added to 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> : 
+				<code>String getKey(Graphics)</code>, 
+				<code>Image getImage(Rectangle, Graphics)</code>, 
+				<code>static boolean doRemoveFromCache(String)</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 2 methods are added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService</code> to manage gradient color in export to PNG or SVG formats: 
+				<code>DiagramEditPartService.saveSVGToFile(IPath, SiriusDiagramSVGGenerator, IProgressMonitor)</code> and 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.part.DiagramEditPartService.saveToFile(IPath, SiriusDiagramSVGGenerator, ImageFileFormat, IProgressMonitor)</code>. These 2 methods are copy of parent methods with 
+				<code>SiriusDiagramSVGGenerator</code> as parameter instead of a 
+				<code>DiagramSVGGenerator</code>.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>org.eclipse.sirius.ui.tools.api.color.VisualBindingManager.getGradientPaintFromValue(int, int, int, int, Color, Color)</code> has been added to handle a cache for 
+				<code>java.awt.GradientPaint</code> as it is the case for 
+				<code>org.eclipse.swt.graphics.Pattern</code> with 
+				<code>getPatternFromValue()</code>.
+			</li>
+			<li><span class="label label-success">Added</span> Methods have been added in 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.GradientHelper</code> to handle 
+				<code>java.awt.GradientPaint</code> as 
+				<code>org.eclipse.swt.graphics.Pattern</code>: 
+				<code>getGradientPaintDiag(Rectangle, Color, Color)</code>, 
+				<code>getGradientPaintLeftToRight(Rectangle, Color, Color)</code>, 
+				<code>getGradientPaintTopToBottom(Rectangle, Color, Color)</code> and 
+				<code>getGradientPaint(int, Rectangle, Color, Color)</code>.
+			</li>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.ui.actions.ActionIds.ACTION_SIRIUS_COPY_APPEARANCE_PROPERTIES</code> has been added to identify the new 
+				<em>Sirius Copy Appearence Properties</em> action.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundleImageFigure</code> now overrides the method 
+				<code>setBorder(Border border)</code>. It also provides the accessors for the new field 
+				<code>mainBorderSize</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.BundledImageFigure</code> now inherits directly from 
+				<code>SVGFigure</code> instead of 
+				<code>AbstractCachedSVGFigure</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure</code> now inherits directly from 
+				<code>SVGFigure</code> instead of 
+				<code>AbstractCachedSVGFigure</code>.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code> now implements interfaces 
+				<code>StyledFigure</code>, 
+				<code>ITransparentFigure</code> and 
+				<code>ImageFigureWithAlpha</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The following mehtods have been removed from 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGFigure</code>: 
+				<code>NodeList getNodes(String)</code>, 
+				<code>Color getColor(Element, String)</code>, 
+				<code>void updateRenderingHints(Graphics)</code>, 
+				<code>staticImage toSWT(Device, BufferedImage)</code>, 
+				<code>boolean checkContentAvailable()</code>, 
+				<code>Rectangle2D getAreaOfInterest()</code>, 
+				<code>void setAreaOfInterest(Rectangle2D)</code>, 
+				<code>boolean isSpecifyCanvasWidth()</code>, 
+				<code>void setSpecifyCanvasWidth(boolean)</code>, 
+				<code>boolean isSpecifyCanvasHeight()</code>, 
+				<code>void setSpecifyCanvasHeight(boolean)</code>, 
+				<code>boolean getSpecifyCanvasWidth()</code>, 
+				<code>boolean getSpecifyCanvasHeight()</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The class 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.AbstractCachedSVGFigure</code> has been removed. Its functionality was merged directly into 
+				<code>SVGFigure</code>.
+			</li>
+			<li><span class="label label-danger">Removed</span> The static 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.figure.SVGWorkspaceImageFigure.createImageFigure(ContainerStyle)</code> method has been removed; it was broken and not called anywhere.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.emf.ui">Changes in 
+			<code>org.eclipse.sirius.ext.emf.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.ext.emf.ui.properties.ExtensiblePropertySource.collector</code> field is now in protected visibility to be modifiable and accessible by subclass.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in 
+			<code>org.eclipse.sirius.ext.gmf.runtime</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The interface 
+				<code>org.eclipse.sirius.ext.gmf.runtime.diagram.ui.tools.MoveInDiagramDragTracker</code> has been added to declare states used by all DragTrackers which manage move in diagram using mouse middle click.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
+			<code>org.eclipse.sirius.ui</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> 
+				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertyDescriptor</code> has been added to provide a specific 
+				<code>ExtensiblePropertyDescriptor</code> which test 
+				<code>IPermissionAuthority</code> to make properties view editable or not.
+			</li>
+			<li><span class="label label-info">Modified</span> 
+				<code>org.eclipse.sirius.ui.tools.api.properties.SiriusExtensiblePropertySource</code> has been modified to use 
+				<code>SiriusExtensiblePropertyDescriptor</code> to provide not editable properties view when the object, selected from the Model Explorer view, cannot be modified.
+			</li>
+			<li><span class="label label-danger">Removed</span> The 
+				<code>org.eclipse.sirius.ui</code>, and thus the whole 
+				<code>org.eclipse.sirius.runtime</code> feature no longer depends on the JDT (technically the dependency towards 
+				<code>org.eclipse.jdt.core</code> has been removed). If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+				<code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in 
+			<code>org.eclipse.sirius.tests.junit.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.support.api.DefaultTestMemento</code> has been created. It help to simulate a real 
+				<code>IMemento</code> for editor restoration.
+			</li>
+			<li><span class="label label-success">Added</span> The method 
+				<code>SiriusTestCase.initViewpoint(String, Session, boolean)</code> has been added to allow viewpoint activation without creating representations.
+			</li>
+			<li><span class="label label-success">Added</span> The methods 
+				<code>initLoggers()</code> and 
+				<code>disposeLoggers()</code> of class 
+				<code>org.eclipse.sirius.tests.support.api.SiriusTestCase</code> have now a protected visibility (instead of private) to allow subclasses to use this logger without all the 
+				<code>genericSetUp</code> behavior.
+			</li>
+			<li><span class="label label-warning">Deprecated</span> The method 
+				<code>SiriusTestCase.initViewpoint(String, Session, EObject)</code> has been deprecated because the last parameter is useless to activate a viewpoint.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in 
+			<code>org.eclipse.sirius.tests.swtbot.support</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>getTreeItem(final SWTBotTreeItem[], final String)</code> has been added in 
+				<code>org.eclipse.sirius.tests.swtbot.support.utils</code> to retrieve recursively a 
+				<code>SWTBotTreeItem</code> in a 
+				<code>SWTBotTreeItem</code> array.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.ShellChangedCondition</code> has been added to wait until the current active shell has changed.
+			</li>
+			<li><span class="label label-success">Added</span> The class 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.condition.TreeItemWithImageCondition</code> has been added to wait until the given treeItem has the expected image.
+			</li>
+			<li><span class="label label-info">Modified</span> A second 
+				<code>String</code> parameter has been added to the method 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UILocalSession.newDiagramRepresentation(String, String)</code>. This parameter is the label of the representation description. It is necessary since the change of the wizard to ask the new representation name (see User-Visible Changes for detail).
+			</li>
+			<li><span class="label label-info">Modified</span> A third 
+				<code>String</code> parameter has been added to the constructor of 
+				<code>org.eclipse.sirius.tests.swtbot.support.api.business.UINewRepresentationBuilder</code> for the same above reasons.
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.common.xtext">Changes in 
+			<code>org.eclipse.sirius.common.xtext</code>
+		</h4>
+		<ul>
+			<li><span class="label label-info">Modified</span> The dependency from 
+				<code>org.eclipse.sirius.common.xtext</code> to the JDT plug-in 
+				<code>org.eclipse.jdt.core</code> is now optional. If you need the JDT Core in your environment, you will need to add the dependency explicitly. The Sirius specification environment (
+				<code>org.eclipse.sirius.editor</code>) still depends on PDE (and thus indirectly the JDT too).
+			</li>
+		</ul>
+		<h4 id="Changesinorg.eclipse.sirius.editor">Changes in 
+			<code>org.eclipse.sirius.editor</code>
+		</h4>
+		<ul>
+			<li><span class="label label-success">Added</span> The method 
+				<code>bindCompletionProcessor(AbstractPropertySection, IAssistContentProvider, Text)</code> has been added to the class 
+				<code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider</code> to allow to bind a specific IAssistContentProvider to the text.
+			</li>
+		</ul>
+		<h2 id="sirius3.1.0">Changes in Sirius 3.1.0</h2>
+		<h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+		<ul>
 			<li><span class="label label-success">Added</span> A new feature allows to snap to all shapes (instead of just to snap to sibling shapes). The <kdb>F4</kdb> shortcut key activates this mode when you resize a node, move a node or move a bendpoint of an edge, see 
 				<a href="./user/diagrams/Diagrams.html#snap_to_shapes">the documentation</a> for details.
 			</li>
@@ -179,7 +1287,7 @@
 				<em>Arrange Linked Border Nodes</em> as it is border nodes which are layouted and not bordered nodes.
 			</li>
 		</ul>
-		<h3 id="SpecifierVisibleChanges">Specifier-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
 		<ul>
 			<li><span class="label label-info">Modified</span> The 
 				<em>Acceleo Query Language</em> (AQL) interpreter has been improved. AQL, and its support in Sirius, is no longer considered experimental, and instead is now the recommended query language to use for new VSMs. Improvements mostly concern better completion and validation, and more precise error reporting. In particular AQL expressions will now be able to display warnings and errors in the Interpreter view. The message displayed in the Interpreter view after an evaluation has also been improved to display the qualified name of the type of the value computed (
@@ -226,7 +1334,7 @@
 				<code>IPermissionAuthority</code>) of the potential to delete objects. This is the reverse order of what was done before, and can have performance impacts if the precondition is slow. The specifier will to take care to ensure a good performance for the precondition expression of the delete tool.
 			</li>
 		</ul>
-		<h3 id="DeveloperVisibleChanges">Developer-Visible Changes</h3>
+		<h3 id="DeveloperVisibleChanges5">Developer-Visible Changes</h3>
 		<h4 id="Partialsupportforinternationalization">Partial support for internationalization</h4>
 		<p>Sirius 3.1 introduces partial support for internationalization: all literal strings from the runtime part of Sirius are now externalized and can be localized by third parties by providing the appropriate &#8220;language packs&#8221; as OSGi fragments. Note that this does not concern the VSM editor&#8217;s UI, the VSMs themselves, or the parts of the UI inherited from Eclipse/EMF/GEF/GMF and other libraries and frameworks used by Sirius.</p>
 		<p>Some API changes were required to enable this. While technically breaking changes if interpreting strictly the OSGi versioning rules, the major version number of the impacted bundles was not incremented as the changes only concern classes that should not impact the vast majority of users. Most breaking changes concern the plug-in/activator classes from each bundle. They are:</p>
@@ -437,7 +1545,7 @@
 				</ul>
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.common">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.common2">Changes in 
 			<code>org.eclipse.sirius.common</code>
 		</h4>
 		<ul>
@@ -467,7 +1575,7 @@
 				<code>org.eclipse.sirius.common.tools.api.contentassist.ContentProposalBuilder</code> used to build the content proposals with their various parameters more easily.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius3">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -506,7 +1614,7 @@
 				<code>org.eclipse.sirius.tools.api.command.IUndoableCommand</code> interface removed because it is useless since undo/redo is managed by EMF Transaction.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -528,7 +1636,7 @@
 				<code>IEditorPart</code> through the navigation history view.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -592,7 +1700,7 @@
 				<code>RefreshPlan</code> in parameter to have more informations to say if children must be synchronized.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support3">Changes in 
 			<code>org.eclipse.sirius.tests.junit.support</code>
 		</h4>
 		<ul>
@@ -614,7 +1722,7 @@
 				</ul>
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in 
 			<code>org.eclipse.sirius.tests.swtbot.support</code>
 		</h4>
 		<ul>
@@ -673,7 +1781,7 @@
 				<code>org.eclipse.sirius.ext.jface.viewers.IToolTipProvider</code> has been copied from JFace 3.10 from Luna, so that we can use it with Juno and Kepler too.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime3">Changes in 
 			<code>org.eclipse.sirius.ext.gmf.runtime</code>
 		</h4>
 		<ul>
@@ -684,7 +1792,7 @@
 			</li>
 		</ul>
 		<h2 id="sirius3.0.0">Changes in Sirius 3.0.0</h2>
-		<h3 id="UserVisibleChanges2">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges6">User-Visible Changes</h3>
 		<ul>
 			<li><span class="label label-success">Added</span> The ability to print table representations has been re-introduced.</li>
 			<li><span class="label label-success">Added</span> The quick outline feature has been added for tree and table editors, see documentation for details.</li>
@@ -709,7 +1817,7 @@
 				<em>Viewpoint Selection</em> dialog and wizard page, the &#8220;plug-in&#8221; decorator for viewpoints loaded from plug-ins is removed, and a &#8220;Folder&#8221; decorator for viewpoints loaded from the current workspace has been added. This makes the icons more visible in the most common where viewpoints come from installed plug-ins.
 			</li>
 		</ul>
-		<h3 id="SpecifierVisibleChanges2">Specifier-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
 		<ul>
 			<li><span class="label label-success">Added</span> <span class="label label-info">Experimental</span> Optional support for the experimental 
 				<em>Acceleo Query Language</em> (AQL) has been added to write interpreted expressions.  It is provided by the 
@@ -783,7 +1891,7 @@
 				<em>EStructuralFeature</em> (inherited or with same name).
 			</li>
 		</ul>
-		<h3 id="DeveloperVisibleChanges2">Developer-Visible Changes</h3>
+		<h3 id="DeveloperVisibleChanges6">Developer-Visible Changes</h3>
 		<p>The most important and impacting changes in this release are (details below in plug-in specific sections):</p>
 		<ul>
 			<li><span class="label label-success">Added</span>  The new extension point 
@@ -860,7 +1968,7 @@
 			<li><span class="label label-success">Added</span> Sirius now provides an <a href="http://www.eclipse.org/oomph" target="_blank">Oomph</a> setup file to automatically create a fully configured Eclipse installation ready for contributing patches to Sirius. The latest version can be obtained <a href="http://git.eclipse.org/c/sirius/org.eclipse.sirius.git/plain/releng/org.eclipse.sirius.settings/Sirius.setup" target="_blank">here</a>.</li>
 			<li><span class="label label-success">Added</span> New patches proposed by contributors on the <a href="https://git.eclipse.org/r/#/admin/projects/sirius/org.eclipse.sirius" target="_blank">Sirius Gerrit</a> now automatically trigger a sub-set of the Sirius automated test suites, which give a good feedback on the absence of regressions introduced by the proposed patch.</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.common2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.common3">Changes in 
 			<code>org.eclipse.sirius.common</code>
 		</h4>
 		<ul>
@@ -979,7 +2087,7 @@
 				<code>org.eclipse.sirius.common.ui.ext</code>.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -1115,7 +2223,7 @@
 				<code>org.eclipse.sirius.viewpoint.DContainer</code> has been removed.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui5">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -1149,7 +2257,7 @@
 				<code>org.eclipse.sirius.ui.ext</code>.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ecore.extender">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender2">Changes in 
 			<code>org.eclipse.sirius.ecore.extender</code>
 		</h4>
 		<ul>
@@ -1166,7 +2274,7 @@
 				<code>org.eclipse.sirius.ecore.extender.IllegalURIException</code> has been removed. It was not actually thrown anywhere in the code.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.editor">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.editor2">Changes in 
 			<code>org.eclipse.sirius.editor</code>
 		</h4>
 		<ul>
@@ -1175,7 +2283,7 @@
 				<code>org.eclipse.sirius.editor.tools.api.assist.TypeContentProposalProvider.bindCompletionProcessor(AbstractPropertySection, Text)</code>, the difference is that it binds the completion processors available in plugins to the text.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in 
 			<code>org.eclipse.sirius.diagram</code>
 		</h4>
 		<ul>
@@ -1216,7 +2324,7 @@
 				<code>ComputedStyleDescriptionRegistry.computedStyleDescriptions</code> list.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -1522,7 +2630,7 @@
 				</ul>
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.junit.support4">Changes in 
 			<code>org.eclipse.sirius.tests.junit.support</code>
 		</h4>
 		<ul>
@@ -1567,7 +2675,7 @@
 				<code>org.eclipse.sirius.tests.support.api.EclipseTestsSupportHelper.setReadOnlyStatus(boolean, IResource...)</code> can be used instead.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support4">Changes in 
 			<code>org.eclipse.sirius.tests.swtbot.support</code>
 		</h4>
 		<ul>
@@ -1628,7 +2736,7 @@
 			<code>org.eclipse.sirius.xxx.ui.ext</code>, allowing them not have all that functionalities they may not want.
 		</p>
 		<h2 id="sirius2.0.0">Changes in Sirius 2.0.0</h2>
-		<h3 id="UserVisibleChanges3">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges7">User-Visible Changes</h3>
 		<ul>
 			<li>It is now possible to select element that intersects the selection rectangle and not that is completely contained by the selection rectangle. This new behavior is enabled when user selects elements from right to left. The normal mode (previous mode) remains when the user selects elements from left to right.</li>
 			<li>The edges appearance is now kept, as much as possible, when one of its extremity is moved. A move of an extremity should move only the closest segment of the edge.</li>
@@ -1679,7 +2787,7 @@
 			<li>Reconnection of an edge will only now move the minimum necessary bendpoints instead of reseting it to default.</li>
 			<li>A new action has been added to reset the diagram (or container) origin: the diagram (or container) bounds (the rectangle formed by the highest, the leftmost, the lowest and the rightmost children elements) can have a negative origin or can be shifted toward the bottom-right with a blank zone at the top-left. This action aims to move all diagram (or container) elements so that the it retrieves its origin while keeping elements layout.</li>
 		</ul>
-		<h3 id="SpecifierVisibleChanges3">Specifier-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges5">Specifier-Visible Changes</h3>
 		<ul>
 			<li>The specifier can now choose to hold the edge ends toward the center of the source, target or both. New fields within the &#8220;advance&#8221; tab of EdgeStyle description have been added to choose for which source or target mappings an edge should be centered. See 
 				<a href="specifier/diagrams/Diagrams.html#edges_styles">Edges Styles &gt; Edge Centering</a> in the specifier manual for more details.
@@ -1690,7 +2798,7 @@
 			<li>&#8220;Lozenge&#8221; is replaced by &#8220;Diamond&#8221; in diagram style.</li>
 		</ul>
 		<h3 id="APIChanges">API Changes</h3>
-		<h4 id="Changesinorg.eclipse.sirius3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius5">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -1765,7 +2873,7 @@
 				<code>org.eclipse.gmf.runtime.emf.core.util.CrossReferenceAdapter</code>. However considering the way Sirius uses GMF, this adapter is not needed.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui6">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -1779,7 +2887,7 @@
 				<code>findViewpointByName()</code> to correct a wrong rebranding.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.common3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.common4">Changes in 
 			<code>org.eclipse.sirius.common</code>
 		</h4>
 		<ul>
@@ -1817,7 +2925,7 @@
 				<code>IServiceLocator.getService()</code> on the site.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in 
 			<code>org.eclipse.sirius.diagram</code>
 		</h4>
 		<ul>
@@ -1848,7 +2956,7 @@
 				<code>org.eclipse.sirius.diagram.description.CenteringStyle</code>, to determine whether the edge target or source ends should be centered.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -1946,7 +3054,7 @@
 				<code>org.eclipse.sirius.synchronizer.ModelToModelSynchronizer.update(CreatedOutput, boolean)</code> has been added to specify if we want partial refresh or not.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ecore.extender2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender3">Changes in 
 			<code>org.eclipse.sirius.ecore.extender</code>
 		</h4>
 		<ul>
@@ -1960,7 +3068,7 @@
 				<code>EObject</code> from its container after a check by the permission authority that all changeable feature to modify can be edited.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime2">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ext.gmf.runtime4">Changes in 
 			<code>org.eclipse.sirius.ext.gmf.runtime</code>
 		</h4>
 		<ul>
@@ -2011,7 +3119,7 @@
 				</ul>
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.tests.swtbot.support5">Changes in 
 			<code>org.eclipse.sirius.tests.swtbot.support</code>
 		</h4>
 		<ul>
@@ -2053,11 +3161,11 @@
 			</li>
 		</ul>
 		<h2 id="sirius1.0.0">Changes in Sirius 1.0.0 (from Sirius 1.0.0M7)</h2>
-		<h3 id="UserVisibleChanges4">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges8">User-Visible Changes</h3>
 		<ul>
 			<li>The ability to print table representations has been disabled for the 1.0.0 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=435204" target="_blank">bug #435204</a> for the details).</li>
 		</ul>
-		<h3 id="SpecifierVisibleChanges4">Specifier-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges6">Specifier-Visible Changes</h3>
 		<ul>
 			<li>
 				<em>Node</em>, 
@@ -2072,7 +3180,7 @@
 			</li>
 		</ul>
 		<h3 id="APIChanges2">API Changes</h3>
-		<h4 id="Changesinorg.eclipse.sirius4">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius6">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -2091,7 +3199,7 @@
 				<code>computeResourcesToSave()</code> method.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui4">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui6">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -2103,7 +3211,7 @@
 				<code>org.eclipse.sirius.diagram.ui.edit.api.part.AbstractDiagramListEditPart.createLayoutEditPolicy</code> implementation has been removed.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram.ui5">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram.ui7">Changes in 
 			<code>org.eclipse.sirius.diagram.ui</code>
 		</h4>
 		<ul>
@@ -2117,7 +3225,7 @@
 			</li>
 		</ul>
 		<h2 id="sirius1.0M7">Changes in Sirius 1.0.0M7 (from Sirius 1.0M6)</h2>
-		<h3 id="SpecifierVisibleChanges5">Specifier-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges7">Specifier-Visible Changes</h3>
 		<ul>
 			<li>The default value of the 
 				<em>Semantic Candidates Expression</em> for Tree Items has changed from an empty string (meaning &#8220;any compatible element in the session&#8221;) to 
@@ -2336,7 +3444,7 @@
 				</ul>
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.common4">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.common5">Changes in 
 			<code>org.eclipse.sirius.common</code>
 		</h4>
 		<ul>
@@ -2348,7 +3456,7 @@
 				<code>Predicate</code> tested on the key.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius5">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius7">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -2456,7 +3564,7 @@
 				<code>getSavingPolicy()</code> method which gives access to the currently configured saving policy.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram5">Changes in 
 			<code>org.eclipse.sirius.diagram</code>
 		</h4>
 		<ul>
@@ -2564,7 +3672,7 @@
 				<code>org.eclipse.sirius.diagram.sequence.template.Transformer</code> interface instead, which is functionally equivalent.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui4">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui7">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -2583,7 +3691,7 @@
 				<code>org.eclipse.sirius.ui.tools.api.project.ModelingProjectManager.initializeAfterLoad()</code> method has been removed. There is no replacement for this method documented as &#8220;Not intended to be used by client&#8221;.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ecore.extender3">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender4">Changes in 
 			<code>org.eclipse.sirius.ecore.extender</code>
 		</h4>
 		<ul>
@@ -2734,7 +3842,7 @@
 		<p>if 
 			<code>element</code> is a Diagram concept.
 		</p>
-		<h4 id="Changesinorg.eclipse.sirius6">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius8">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -2780,7 +3888,7 @@
 				<code>new org.eclipse.sirius.business.api.query.EObjectQuery(element).getParentDiagram()</code> instead.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui5">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui8">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -2795,7 +3903,7 @@
 				<code>org.eclipse.sirius.ui.tools.api.dialogs.ExportSeveralRepresentationsAsImagesDialog</code> instead.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram4">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram6">Changes in 
 			<code>org.eclipse.sirius.diagram</code>
 		</h4>
 		<ul>
@@ -2822,7 +3930,7 @@
 			</li>
 		</ul>
 		<h2 id="sirius1.0M5">Changes in Sirius 1.0.0M5 (from Sirius 1.0M4)</h2>
-		<h3 id="UserVisibleChanges5">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges9">User-Visible Changes</h3>
 		<ul>
 			<li>The table csv export has been improved to handle cropped label. In some specific cases, the cell label is automatically cropped and &#8216;...&#8217; is concatenated to the resulting value. This cropped displayed label was previously exported, now the complete semantic value is exported.</li>
 		</ul>
@@ -2898,7 +4006,7 @@
 				<code>viewpoint/diagram/description/concern</code>
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius7">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius9">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -2948,7 +4056,7 @@
 				<code>DCellQuery.getExportableLabel()</code> to compute the cell labels used in HTML export.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui6">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui9">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -2958,13 +4066,13 @@
 			</li>
 		</ul>
 		<h2 id="sirius1.0M4">Changes in Sirius 1.0.0M4 (from Sirius 0.9)</h2>
-		<h3 id="UserVisibleChanges6">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges10">User-Visible Changes</h3>
 		<ul>
 			<li>The ability to print table representations, which had been disabled for the 0.9 release, has been re-enabled.</li>
 		</ul>
 		<h3 id="APIChanges6">API Changes</h3>
 		<p>Sirius 1.0.0M4 includes a lots of API-breaking changes, as part of a global effort to improve the quality of the Sirius internals. In this milestone in particular, most of the APIs which were marked as deprecated in previous versions of Sirius (and before that of Viewpoint) have been either removed (if a replacement exists) or marked as non-deprecated (if no replacement exists yet).</p>
-		<h4 id="Changesinorg.eclipse.sirius.common5">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.common6">Changes in 
 			<code>org.eclipse.sirius.common</code>
 		</h4>
 		<ul>
@@ -2990,7 +4098,7 @@
 				<code>org.eclipse.sirius.table.tools.api.interpreter.IInterpreterSiriusTableVariables</code> instead.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius8">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius10">Changes in 
 			<code>org.eclipse.sirius</code>
 		</h4>
 		<ul>
@@ -3177,7 +4285,7 @@
 				<code>DiagramDescription</code> has been removed from the viewpoint.ecore meta-model. This reference always returns empty list.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.diagram5">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.diagram7">Changes in 
 			<code>org.eclipse.sirius.diagram</code>
 		</h4>
 		<ul>
@@ -3186,7 +4294,7 @@
 				<code>AbstractDiagramEdgeEditPart.refreshPath()</code> have been removed. It is not called in Sirius code anymore
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ecore.extender4">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ecore.extender5">Changes in 
 			<code>org.eclipse.sirius.ecore.extender</code>
 		</h4>
 		<ul>
@@ -3198,7 +4306,7 @@
 				<code>ECrossReferenceAdapter</code> can be null.
 			</li>
 		</ul>
-		<h4 id="Changesinorg.eclipse.sirius.ui7">Changes in 
+		<h4 id="Changesinorg.eclipse.sirius.ui10">Changes in 
 			<code>org.eclipse.sirius.ui</code>
 		</h4>
 		<ul>
@@ -3534,7 +4642,7 @@
 void removeSelectedView(DView view);
 
 </pre>
-		<h3 id="SpecifierVisibleChanges6">Specifier-Visible Changes</h3>
+		<h3 id="SpecifierVisibleChanges8">Specifier-Visible Changes</h3>
 		<p>New variables are available for 
 			<code>sizeComputationExpression</code> to compute the size of edges on 
 			<code>EdgeStyleDescription</code> and 
@@ -3556,7 +4664,7 @@
 				<em>targetView</em>: the target view of the current edge.
 			</li>
 		</ul>
-		<h3 id="UserVisibleChanges7">User-Visible Changes</h3>
+		<h3 id="UserVisibleChanges11">User-Visible Changes</h3>
 		<ul>
 			<li>The ability to print table representations has been disabled for the 0.9 release due to an external dependency issue (see <a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=422223" target="_blank">bug #422223</a>: for the details). It should be re-introduced in 1.0.</li>
 		</ul>
diff --git a/doc/developer/Architecture_Overview.html b/doc/developer/Architecture_Overview.html
index efa27fb..2e20e5d 100644
--- a/doc/developer/Architecture_Overview.html
+++ b/doc/developer/Architecture_Overview.html
@@ -20,7 +20,7 @@
 			</li>
 		</ol>
 		<p>The general architecture of Sirius is illustrated in the figure below and reflects this split:</p>
-		<img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - High-Level Architecture Overview.png"/> 
+		<img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius_High-Level_Architecture_Overview.png"/> 
 		<p>On top of Eclipse and EMF, Sirius is made of two main parts.</p>
 		<p>The Sirius 
 			<strong>tooling</strong>   (on the right hand of the figure), is the part used by architects. It provides an environment in which they can specify the modeler(s) they want to give to their end-users. This specification is done in a declarative way, by configuring a 
@@ -50,7 +50,7 @@
 			<em>interact</em>  with his models as represented, but only in the ways configured by the architect. When the user interacts with the representation in the editor, some interactions (e.g. dragging and dropping and element on a diagram) can trigger behaviors defined by the architect, which will modify the underlying business model in ways that are consistent with the business rules. Whenever the business model is modified, Sirius re-launches the refresh algorithm, which is incremental: instead of creating a new representation model for the updated business model’s state, it updates the existing model and only changes the parts that need it. The ends-user can then see the effect of his changes immediately in the editor.
 		</p>
 		<p>
-			<img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius - Representation Refresh-Sync.png"/>
+			<img style="box-shadow: 0 0 0 0" border="0" src="images/Sirius_Representation_Refresh-Sync.png"/>
 		</p>
 		<p>An important property of the refresh algorithm(s) is that they are not only incremental in terms of changes in the business model, but also in terms of changes in the modeler description model itself. This gives rise to one of the most important and distinctive features of Sirius: support for dynamic and incremental development of modelers by architects, with real-time feedback. In practice, this means that when an architect is developing a new modeler definition (or changing an existing one), he can have both the modeler’s definition open (using the Sirius Tooling) and an example representation also open alongside, and whenever he changes the modeler’s definition and saves it, the updated definition is automatically picked-up by the runtime and taken into account instantaneously by issuing a refresh.</p>
 		<p>In addition to the 
diff --git a/doc/developer/extensions-provide_custom-arrange-all.html b/doc/developer/extensions-provide_custom-arrange-all.html
index 8dfdcde..46b5190 100644
--- a/doc/developer/extensions-provide_custom-arrange-all.html
+++ b/doc/developer/extensions-provide_custom-arrange-all.html
@@ -7,25 +7,82 @@
 		<link type="text/css" rel="stylesheet" href="../resources/custom.css"/>
 	</head>
 	<body>
-		<h1 id="Provideacustomarrangeall">Provide a custom arrange-all</h1>
-		<h2 id="Goals">Goals</h2>
-		<p>One of the main issues of visual modelers is the global arrangement of all elements. GMF provides a default implementation of an &quot;Arrange All&quot; algorithm to solve this issue but it happens that this default behavior is not adapted for some diagrams. Imagine a diagram representing the hierarchy between a program classes, the &quot;natural&quot; representation a human thinks about is that of a tree. When you add associations on such diagrams, GMF won&#8217;t keep the tree representation of the diagram. Sirius provides an API to arrange diagrams according to custom business rules.</p>
-		<h2 id="ThearrangeallconceptasimplementedbyGMF">The arrange all concept as implemented by GMF</h2>
-		<p>GMF provides basic API and implementations to ease the customization of the &quot;Arrange All&quot; mechanism. It also implements a complete algorithm that is based on the graphical elements.</p>
+		<h1 id="ProvidingacustomdiagramlayoutalgorithmArrangeAll">Providing a custom diagram layout algorithm (&#8220;Arrange All&#8221;)</h1>
+		<ol class="toc" style="list-style: disc;">
+			<li>
+				<a href="#ProvidingacustomdiagramlayoutalgorithmArrangeAll">Providing a custom diagram layout algorithm ("Arrange All")</a>
+				<ol style="list-style: disc;">
+					<li>
+						<a href="#TheArrangeAllfunctionalityinshort">The Arrange All functionality in short</a>
+					</li>
+					<li>
+						<a href="#TheArrangeAllconceptasimplementedbyGMF">The Arrange All concept as implemented by GMF</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#Theviewsandeditparts">The views and edit parts</a>
+							</li>
+						</ol>
+					</li>
+					<li>
+						<a href="#SiriusLayoutingAPI">Sirius Layouting API</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#siriusLayoutProviders">Sirius Layout providers</a>
+							</li>
+							<li>
+								<a href="#Theviewordering">The view ordering</a>
+							</li>
+							<li>
+								<a href="#Writeyourcustomlayoutalgorithm">Write your custom layout algorithm</a>
+							</li>
+							<li>
+								<a href="#IntegrateyourcustomlayoutalgorithmtoSirius">Integrate your custom layout algorithm to Sirius </a>
+							</li>
+						</ol>
+					</li>
+				</ol>
+			</li>
+		</ol>
+		<h2 id="TheArrangeAllfunctionalityinshort">The Arrange All functionality in short</h2>
+		<p>The arrange-all functionality is available in Sirius diagram editors in the form of a button and a context menu:</p>
+		<p>
+			<img border="0" src="images/arrange-all/arrange-all-ui.png"/>
+		</p>
+		<p>Its effect is to layout the selected diagram elements (or the whole diagram if no elements are selected) based on the layout algorithm defined for the diagram, or using a default, generic algorithm if nothing is specified. </p>
+		<p>By default, there are two different layout algorithm that can be configured in the VSM for a diagram:</p>
+		<ul>
+			<li>The 
+				<code>Ordered Tree Layout</code> algorithm: useful to represent elements in a hierarchical way. 
+			</li>
+			<li>The 
+				<code>Composite Layout</code> algorithm: used to customize specific aspects of the default algorithm, i.e. the general layout orientation and the padding between elements.
+			</li>
+		</ul>
+		<img border="0" src="images/arrange-all/arrange-all-vsm.png"/>
+		<p>If none of these algorithms fit your needs, Sirius provides two extension points 
+			<code>org.eclipse.sirius.diagram.ui.layoutProvider</code> and 
+			<code>org.eclipse.sirius.diagram.ui.viewOrderingProvider</code> as well as an API to ease the writing of your own layout algorithms and their usage in Sirius diagram editors.
+		</p>
+		<p>This API reuse the GMF &#8220;Arrange All&#8221; API and augments it with features needed by Sirius layout algorithms like:</p>
+		<ul>
+			<li>The need to take in consideration pinned diagram elements</li>
+			<li>The need to take in consideration bordered nodes connected to edges</li>
+		</ul>
+		<h2 id="TheArrangeAllconceptasimplementedbyGMF">The Arrange All concept as implemented by GMF</h2>
+		<p>GMF provides basic API and implementations to ease the customization of the &#8220;Arrange All&#8221; mechanism. It also implements a complete algorithm that is based on the graphical elements.</p>
 		<p>The top level type of this this API is 
-			<code>ILayoutNodeProvider</code>
+			<code>ILayoutNodeProvider</code> :
 		</p>
-		<p>
-			<img border="0" src="images/arrange-all/arrange-all-tlinterface.jpg"/>
+		<img border="0" src="images/arrange-all/arrange-all-iproviderApi.png"/>
+		<p>This interface is very generic, but GMF provides abstract classes that handle the low-level work while letting you define only the layouting business rules:</p>
+		<img border="0" src="images/arrange-all/arrange-all-ilayoutNodeproviderApi.png"/>
+		<p>This can be done by creating a component inheriting the abstract class 
+			<code>AbstractLayoutEditPartProvider</code> and implementing its methods:
 		</p>
-		<p>As you can see, this interface is designed for genericity. Fortunately, GMF provides abstract classes that handle the low-level work while letting you define the business rules:</p>
-		<p>
-			<img border="0" src="images/arrange-all/arrange-all-ls.jpg"/>
-		</p>
-		<p>This can be done by implementing three operations:</p>
 		<ul>
 			<li>
-				<code>boolean provides(IOperation operation)</code>
+				<code>boolean provides(IOperation operation)</code>  from 
+				<code>IProvider</code> super interface
 			</li>
 			<li>
 				<code>Command layoutEditParts(GraphicalEditPart containerEditPart, IAdaptable layoutHint)</code>
@@ -35,318 +92,794 @@
 			</li>
 		</ul>
 		<p>The 
-			<code>provides</code> operation is meant to return true if the class can arrange the diagram for the specified operation.
+			<code>provides</code> operation is meant to return true if the class can arrange the diagram for the specified operation. 
 		</p>
 		<p>The 
-			<code>layoutEditParts</code> operations will return the commands that will actually be in charge of arranging the diagrams' edit parts. The first one takes the main container that is to be arranged while the latter accepts a list of edit parts to arrange.
+			<code>layoutEditParts</code> operations will return the commands that will actually be in charge of arranging the diagrams' edit parts. The first one takes the main container that is to be arranged while the latter accepts a list of edit parts to arrange. 
 		</p>
-		<h2 id="TheLayoutProvidersasprovidedbySirius">The LayoutProviders as provided by Sirius</h2>
-		<p>The class 
-			<code>AbstractLayoutEditPartProvider</code> is the simplest one. Sirius provides utility classes to ease the implementation of &quot;Arrange All&quot; algorithms:
+		<p>The implementation of those three methods forms your layout algorithm.</p>
+		<p>With this API comes an extension point 
+			<code>org.eclipse.gmf.runtime.diagram.ui.layoutProviders</code>. It allows your own 
+			<code>AbstractLayoutEditPart</code> layout algorithm to be used. 
 		</p>
+		<h3 id="Theviewsandeditparts">The views and edit parts</h3>
+		<p>When doing layouting with GMF based tools like Sirius you will hear about views and edit parts. It is important to understand what they are.</p>
+		<p>The views are persisted model elements that when interpreted represent your diagram visually. You have the 
+			<code>Node</code>, 
+			<code>Edge</code>, 
+			<code>Style</code>, etc...
+		</p>
+		<p>They contain all visual information like the position, the size of the element, its color, etc... 
+			<br/>Edit parts ties the model (the views) to a visual representation with a one on one relationship. One edit part points at one view. They are responsible for making changes to the model and interpret and display graphically the view.
+		</p>
+		<h2 id="SiriusLayoutingAPI">Sirius Layouting API</h2>
+		<p>The Sirius Layouting API simplifies the writing of a custom layout algorithm by providing different layout providers specific to Sirius context that you can reuse easily in addition of your own layout algorithm if it does not conflict with these. </p>
+		<p>It also provides utility methods that you can find useful</p>
+		<p>The Sirius API for layouting Sirius diagrams is the following:</p>
 		<p>
-			<img border="0" src="images/arrange-all/arrange-all-air.jpg"/>
+			<img border="0" src="images/arrange-all/arrange-all-layoutingAPI.png"/>
 		</p>
-		<p>Here is a list of all provided layout providers and a basic description of each:</p>
+		<h3 id="siriusLayoutProviders">Sirius Layout providers</h3>
+		<p>Sirius defines and already uses various different layout providers in different contexts.</p>
+		<p>Here is a list of all of those with a basic description of each:</p>
+		<h5 id="DefaultLayoutProvider">DefaultLayoutProvider</h5>
+		<p>It is used by Sirius as entry point to dispatch arrange requests on a Sirius diagram to registered layout providers. The dispatch takes in consideration layout algorithm specified in the VSM and layout providers provided from the Sirius extension point 
+			<code>org.eclipse.sirius.diagram.ui.layoutProvider</code>.
+		</p>
+		<h5 id="LineLayoutProvider">LineLayoutProvider</h5>
+		<p>Lays out all views on a single line (either vertical or horizontal). </p>
+		<h5 id="GridLayoutProvider">GridLayoutProvider</h5>
+		<p>Lays out all views as a grid.</p>
+		<h5 id="InlineEdgeLayoutProvider">InlineEdgeLayoutProvider</h5>
+		<p>Lays out connections alongside their source and target nodes (useful on the sequence diagram for example).</p>
+		<h5 id="ArrangeSelectionLayoutProvider">ArrangeSelectionLayoutProvider</h5>
+		<p>This provider only purpose is to delegate arrangement to attached layout provider after having added information about not selected parts in the layout hint. </p>
+		<p>It is used for example with our composite layout providers to keep fixed the not selected parts and to avoid putting other selected parts on it when layouting. </p>
+		<p>It is used primary by default provider whenever the arrange-all action is called because the arrangement can be done on a selection and not on all diagram elements.</p>
+		<h5 id="ArrangeAllOnlyLayoutProvider">ArrangeAllOnlyLayoutProvider</h5>
+		<p>This provider is used to delegate layouting to attached provider only when an arrange-all is done on a diagram and not an arrange selection. </p>
+		<p>When used as primary provider, the arrange selection action is not available in the menu of a Sirius editor using this provider. </p>
+		<p>It is used for example in the 
+			<code>OrderedTreeLayoutProvider</code> where it does not make sense to make a tree of just some elements because the all concept is to have a complete tree representation.
+		</p>
+		<h5 id="PinnedElementLayoutProvider">PinnedElementLayoutProvider</h5>
+		<p>This provider is designed to work with another layout provider. When its attached layout provider has done its layouting part, this provider iterates on all diagram elements that are pinned (should not have its position changes by an automatic layout) to put it back at its original position. In case of visual overlap conflict with a non-pinned element, the non-pinned element is move near the pinned one where no overlap is visible.</p>
+		<h5 id="CompoundLayoutProvider">CompoundLayoutProvider</h5>
+		<p>This provider allows to compose different layout providers into a compound one. It is useful to reuse some layouting rules that does not conflict with others needed ones.</p>
+		<p>For example the providers 
+			<code>CompositeDownTopLayoutProvider</code> and 
+			<code>PinnedElementLayoutProvider</code> can be attached to a compound instance. Then those providers are called in their attach order one after another to do their layouting parts. It avoids the composite provider to duplicate code to handle pinned elements.
+		</p>
+		<h5 id="BorderedItemAwareLayoutProvider">BorderedItemAwareLayoutProvider</h5>
+		<p>This provider arranges all the bordered nodes which are connected to one edge. It reduces the path of the edge between each extremity. For example:</p>
+		<img border="0" src="images/arrange-all/arrange-all-border1.png"/>
+		<p>Becomes </p>
+		<img border="0" src="images/arrange-all/arrange-all-border2.png"/>
+		<h3 id="Theviewordering">The view ordering</h3>
+		<h4 id="API">API</h4>
+		<p>The view ordering is an API used by layout algorithms provided by Sirius. It allows to define a sub class of 
+			<code>ViewOrdering</code> that will sort children views of a parent view. The layouting will be done on sorted views instead of the original order in the layout provider.
+		</p>
+		<p>For example, if I use the 
+			<code>LineLayoutProvider</code> with default view ordering component in a diagram with two elements, views will be aligned in their natural iteration order:
+		</p> 
+		<img border="0" src="images/arrange-all/arrange-all-viewOrdering.png"/>
+		<p>If I define a view ordering component that reorder view in the lexicographic order, views will be aligned accordingly:</p>  
+		<img border="0" src="images/arrange-all/arrange-all-viewOrdering2.png"/>
+		<p>This mechanism avoid to rewrite a layout provider if the only thing that should be changed is the order the layout provider lays out its views.</p>
+		<p>Its architecture is the following:</p>
+		<img border="0" src="images/arrange-all/arrange-all-viewOrderingArchitecture.png"/>
+		<h4 id="Compatibleproviders">Compatible providers</h4>
+		<p>Layout providers need to sort view by using the view ordering framework so your view ordering component can be used. The Sirius providers using this framework are the following:</p>
 		<ul>
 			<li>
-				<code>LineLayoutProvider</code>: lays out all views on a single line (either vertical or horizontal).
+				<code>GridLayoutProvider</code>
 			</li>
 			<li>
-				<code>GrigLayoutProvider</code>: lays out all views as a grid.
+				<code>InlineEdgeLAyoutProvider</code>
 			</li>
 			<li>
-				<code>InlineEdgeLayoutProvider</code>: lays out connections alongside their source and target nodes (useful on the sequence diagram for example).
+				<code>LineLAyoutProvider</code>
 			</li>
 		</ul>
-		<h2 id="TheViewOrderings">The ViewOrderings</h2>
-		<h3 id="TheAPI">The API</h3>
-		<p>
-			<img border="0" src="images/arrange-all/viewordering.jpg"/>
+		<h4 id="WritingaViewOrdering">Writing a ViewOrdering</h4>
+		<p>To contribute a 
+			<code>ViewOrdering</code> that should be used in a Sirius provider, you have to create a sub class of 
+			<code>AbstractViewOrdering</code> or 
+			<code>AbstractViewOrdering</code> or 
+			<code>ViewOrdering</code> if you need to do an ordering different from what Sirius offers with its abstract classes.
+			<br/>Sirius abstract classes offers ordering only on Node views by default.
 		</p>
-		<p>All 
-			<code>LayoutProvider</code> provided by Sirius can be used with a 
-			<code>ViewOrdering</code> which has the responsibility of actually ordering the views.
-		</p>
-		<p>The aim of all these classes is to order the GMF views and to provide this result to an 
-			<code>AbstractLayoutProvider</code>.
-		</p>
-		<h3 id="Sample">Sample</h3>
-		<p>Here is a sample ordering all views to get a tree from a list of UML2 packages :</p>
-		<pre>/**
- * Orders packages.
- */
-public class PackageTreeOrdering extends SemanticTreeOrdering {
+		<p>For example the lexicographic view ordering component would be the following:</p>
+		<pre><code>public class LexicographicViewOrdering extends AbstractViewOrdering {
 
-    public List getSemanticChildren(EObject semanticParent, List candidates) {
-        List result = Collections.EMPTY_LIST;
-        if (semanticParent instanceof Package) {
-            result = new LinkedList&amp;lt;Package&amp;gt;(((Package) semanticParent).getNestedPackages());
-            result.retainAll(candidates);
+        @Override
+        protected List&lt;View&gt; sortViews(List&lt;View&gt; views) {
+            Comparator&lt;View&gt; comparing = Comparator.comparing(new Function&lt;View, String&gt;() {
+                @Override
+                public String apply(View t) {
+                    DDiagramElement element = (DDiagramElement) t.getElement();
+                    return element.getName();
+                }
+            });
+            Collections.sort(views, comparing);
+            return views;
         }
-        return result;
     }
 
-    public List getSemanticRoots(List objects) {
-        List&amp;lt;Package&amp;gt; roots = new LinkedList&amp;lt;Package&amp;gt;();
-        for (Object object : objects) {
-            EObject semantic = (EObject) object;
-            if (semantic instanceof Package) {
-                Package package_ = (Package) semantic;
-                if (package_.eContainer() == null || !objects.contains(package_.eContainer())) {
-                    roots.add(package_);
-                }
-            }
-        }
-        return roots;
+</code></pre>
+		<h4 id="ContributingyourViewOrderingwithextensionpoint">Contributing your ViewOrdering with extension point</h4>
+		<p>Once your view ordering component has been written you have to make Sirius aware of it so it can be used.
+			<br/>To do that Sirius provides an extension point 
+			<code>org.eclipse.sirius.diagram.viewOrderingProvider</code>. 
+			<br/>It allows to register a 
+			<code>ViewOrderingProvider</code> that will provide your view ordering component:
+		</p>
+		<img border="0" src="images/arrange-all/arrange-all-viewOrderingProvider.png"/>
+		<p>It contains the following methods:
+			<br/>- 
+			<code>provides</code>:  tell Sirius if your ordering component should be used when layouting views associated to the given mapping.
+			<br/>- 
+			<code>getViewOrdering</code>: tell Sirius what view ordering component to use to order views when the provides method returns true.
+		</p>
+		<p>For example with the lexicographic you will have:</p> 
+		<img border="0" src="images/arrange-all/arrange-all-viewOrderingExtensionPoint.png"/>
+		<pre><code>&lt;extension point="org.eclipse.sirius.diagram.viewOrderingProvider"&gt;
+   &lt;viewOrderingProvider providerClass="org.eclipse.sirius.diagram.ui.tools.internal.providers.LexicographicViewOrderingProvider" /&gt;
+&lt;/extension&gt;
+
+
+</code></pre>
+		<p>The 
+			<code>LexicographicViewOrderingProvider</code> code would be:
+		</p>
+		<pre><code>public class LexicographicViewOrderingProvider implements ViewOrderingProvider {
+
+    public LexicographicViewOrderingProvider() {
+    }
+
+    @Override
+    public boolean provides(DiagramElementMapping mapping) {
+        return true;
+    }
+
+    @Override
+    public ViewOrdering getViewOrdering(DiagramElementMapping mapping) {
+        return new LexicographicViewOrdering();
+    }
+}
+
+
+</code></pre>
+		<h3 id="Writeyourcustomlayoutalgorithm">Write your custom layout algorithm</h3>
+		<p>To create your own layout algorithm with Sirius API you have to subclass one Sirius abstract class depending on what you need to use:</p>
+		<h5 id="DefaultLayoutProvider2">DefaultLayoutProvider</h5>
+		<p>This provider is the recommended one to use if you don&#8217;t need the liberty of composition of others below. If you want to have the capability for specifiers to be able to configure your layout algorithm directly in the VSM you must use this provider.</p>
+		<p>For example the ELK layout algorithms if installed are using it:</p>
+		<pre><code>/**
+ * Layout node provider allowing to apply an ELK layout algorithm while
+ * arranging diagram elements.
+ * 
+ * @author &lt;a href=mailto:pierre.guilet@obeo.fr&gt;Pierre Guilet&lt;/a&gt;
+ *
+ */
+public class ELKLayoutNodeProvider extends DefaultLayoutProvider {
+
+    @Override
+    public Command layoutEditParts(final List selectedObjects, final IAdaptable layoutHint) {
+        Injector injector = LayoutConnectorsService.getInstance().getInjector(null, selectedObjects);
+        ElkDiagramLayoutConnector connector = injector.getInstance(ElkDiagramLayoutConnector.class);
+        LayoutMapping layoutMapping = connector.buildLayoutGraph(null, selectedObjects);
+        connector.layout(layoutMapping);
+        connector.transferLayout(layoutMapping);
+        return connector.getApplyCommand(layoutMapping);
     }
 
 }
 
-This tells us how to order the packages. We must notify Sirius that this @ViewOrdering@ has to be used for the Package Hierarchy diagram.
-
-</pre>
-		<h3 id="TheViewOrderingProvider">The 
-			<code>ViewOrderingProvider</code>
-		</h3>
-		<p>Here is the implementation of a 
-			<code>ViewOrderingProvider</code> for an UML2 modeler :
+</code></pre>
+		<h5 id="AbstractLayoutEditPartProvider">AbstractLayoutEditPartProvider</h5>
+		<p>This class should be extended if you do not need what AbstractLayoutProvider provides.
+			<br/>Its API is:
 		</p>
-		<pre>/**
- * The view ordering provider for UML2 modeler.
- */
-public class Uml2ViewOrderingProvider implements ViewOrderingProvider {
+		<p>
+			<img border="0" src="images/arrange-all/arrange-all-abstractLayoutEditPart.png"/>
+		</p>
+		<p>Only the abstract methods 
+			<code>layoutEditParts</code> should be override. It is these methods that do the layouting by providing commands modifying underlying views information.
+		</p>
+		<h5 id="AbstractLayoutProvider">AbstractLayoutProvider</h5>
+		<p>This class should be extended if your layouting algorithm is meant to be used in addition to others during a same layouting pass and if you need to be aware of the bound changes produced by the other algorithms. It also should be used if you need all the utility methods regarding view bounds manipulation provided by this abstract class.</p>
+		<p>When sub classing this one, you only have to implement 
+			<code>layoutEditParts(List, IAdaptable)</code> and to override 
+			<code>provides(IOperation)</code> methods.
+		</p>
+		<p>For example the 
+			<code>LineLayoutProvider</code> have the following code:
+		</p>
+		<pre><code>public class LineLayoutProvider extends AbstractLayoutProvider {
 
-    /** The classifier ordering. */
-    private ClassifierTreeOrdering classifierOrdering = new ClassifierTreeOrdering();
+    /** The default padding. */
+    private static final Insets DEFAULT_PADDING = new Insets(30, 30, 30, 30);
 
-    public Uml2ViewOrderingProvider() {
-        classifierOrdering.setUserAwareCapable(true);
+    /**
+     * &lt;code&gt;true&lt;/code&gt; if the line is horizontal, &lt;code&gt;false&lt;/code&gt; if the line is vertical.
+     */
+    private boolean horizontal = true;
+
+    /**
+     * &lt;code&gt;true&lt;/code&gt; if the line is horizontal, &lt;code&gt;false&lt;/code&gt; if the line is vertical.
+     * 
+     * @param horizontal
+     *            &lt;code&gt;true&lt;/code&gt; if the line is horizontal, &lt;code&gt;false&lt;/code&gt; if the line is vertical.
+     */
+    public void setHorizontal(final boolean horizontal) {
+        this.horizontal = horizontal;
     }
 
-    public ViewOrdering getViewOrdering(DiagramElementMapping mapping) {
-        return (ViewOrdering) getMappingToViewOrdering().get(getMappingName(mapping));
-    }
-
-    public boolean provides(DiagramElementMapping mapping) {
-        return getMappingToViewOrdering().containsKey(getMappingName(mapping));
-    }
-
-    private String getMappingName(DiagramElementMapping mapping) {
-        String result = null;
-        if (mapping instanceof NodeMapping) {
-            result = ((NodeMapping) mapping).getName();
-        } else if (mapping instanceof EdgeMapping) {
-            result = ((EdgeMapping) mapping).getName();
-        } else if (mapping instanceof ContainerMapping) {
-            result = ((ContainerMapping) mapping).getName();
+    @Override
+    public Command layoutEditParts(final List selectedObjects, final IAdaptable layoutHint) {
+        final Iterator&lt;?&gt; iterEditParts = selectedObjects.iterator();
+        final List&lt;View&gt; views = new ArrayList&lt;View&gt;(selectedObjects.size());
+        final Map&lt;View, ShapeEditPart&gt; viewsToEditPartMap = new HashMap&lt;View, ShapeEditPart&gt;();
+        while (iterEditParts.hasNext()) {
+            final Object next = iterEditParts.next();
+            if (next instanceof ShapeEditPart &amp;&amp; !(next instanceof IBorderItemEditPart)) {
+                final ShapeEditPart shapeEditPart = (ShapeEditPart) next;
+                final View view = shapeEditPart.getNotationView();
+                viewsToEditPartMap.put(view, shapeEditPart);
+                views.add(view);
+            } else {
+                iterEditParts.remove();
+            }
         }
-        return result;
+        ViewOrdering viewOrdering = ViewOrderingHint.getInstance().consumeViewOrdering(getContainerEditPart(selectedObjects).getNotationView());
+        if (viewOrdering == null) {
+            // use a simple view ordering ... too bad.
+            viewOrdering = new SimpleViewOrdering();
+        }
+
+        viewOrdering.setViews(views);
+        final List&lt;View&gt; sortedViews = viewOrdering.getSortedViews();
+        final List&lt;ShapeEditPart&gt; sortedEditParts = new ArrayList&lt;ShapeEditPart&gt;(sortedViews.size());
+        final Iterator&lt;View&gt; iterSortedViews = sortedViews.listIterator();
+        while (iterSortedViews.hasNext()) {
+            final View currentView = iterSortedViews.next();
+            final ShapeEditPart currentEditPart = viewsToEditPartMap.get(currentView);
+            sortedEditParts.add(currentEditPart);
+        }
+        return createNodeChangeBoundCommands(sortedEditParts);
     }
 
     /**
-     * Returns a map : MappingName(String) -&amp;gt; ViewOrdering.
-     *
-     * @return a map : MappingName(String) -&amp;gt; ViewOrdering.
+     * Create the change bounds commands.
+     * 
+     * @param sortedNodes
+     *            the nodes to move.
+     * @return the change bounds command.
      */
-    private Map getMappingToViewOrdering() {
-        Map result = new HashMap();
-        result.put(Uml2Constants.LIFELINE_MAPPING_NAME, new LifelineOrdering());
-        result.put(Uml2Constants.MESSAGE_MAPPING_NAME, new MessageOrdering());
-        result.put(Uml2Constants.CLASS_MAPPING_NAME, this.classifierOrdering);
-        result.put(Uml2Constants.INTERFACE_MAPPING_NAME, this.classifierOrdering);
+    protected Command createNodeChangeBoundCommands(final List&lt;ShapeEditPart&gt; sortedNodes) {
+        final CompoundCommand result = new CompoundCommand();
+        final Iterator&lt;ShapeEditPart&gt; iterEditParts = sortedNodes.iterator();
+        int currentX = 0;
+        while (iterEditParts.hasNext()) {
+            final ShapeEditPart shapeEditPart = iterEditParts.next();
+            if (!(shapeEditPart instanceof IBorderItemEditPart)) {
+
+                final View view = shapeEditPart.getNotationView();
+                // the zoom.
+                double scale = 1.0;
+                if (shapeEditPart.getRoot() instanceof DiagramRootEditPart) {
+                    final ZoomManager zoomManager = ((DiagramRootEditPart) shapeEditPart.getRoot()).getZoomManager();
+                    scale = zoomManager.getZoom();
+                }
+                //
+                // Compute request data.
+                final Point ptOldLocation = shapeEditPart.getFigure().getBounds().getLocation();
+                // shapeEditPart.getFigure().translateToAbsolute(ptOldLocation);
+                final int locationX = horizontal ? currentX + this.getPadding().left : this.getPadding().left;
+                final int locationY = horizontal ? this.getPadding().top : currentX + this.getPadding().top;
+                final Point ptLocation = new Point(locationX, locationY);
+                final Dimension delta = ptLocation.getDifference(ptOldLocation);
+
+                final Object existingRequest = this.findRequest(view, org.eclipse.gef.RequestConstants.REQ_MOVE);
+                int step = 0;
+                if (existingRequest == null) {
+                    final ChangeBoundsRequest request = new ChangeBoundsRequest(org.eclipse.gef.RequestConstants.REQ_MOVE);
+                    request.setEditParts(shapeEditPart);
+                    request.setMoveDelta(new PrecisionPoint(delta.width * scale, delta.height * scale));
+                    request.setLocation(new PrecisionPoint(ptLocation.x * scale, ptLocation.y * scale));
+                    step = this.horizontal ? getBounds(shapeEditPart).width : getBounds(shapeEditPart).height;
+
+                    final Command cmd = this.buildCommandWrapper(request, shapeEditPart);
+                    if (cmd != null &amp;&amp; cmd.canExecute()) {
+                        result.add(cmd);
+                        // this.getViewsToChangeBoundsRequest().put(view,
+                        // request);
+                    }
+                } else if (existingRequest instanceof ChangeBoundsRequest) {
+                    final ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) existingRequest;
+                    changeBoundsRequest.setMoveDelta(new PrecisionPoint(delta.width * scale, delta.height * scale));
+                    changeBoundsRequest.setLocation(new PrecisionPoint(ptLocation.x * scale, ptLocation.y * scale));
+
+                    step = this.horizontal ? getBounds(shapeEditPart).width : getBounds(shapeEditPart).height;
+                }
+                currentX += horizontal ? step + getPadding().right + getPadding().left : step + this.getPadding().bottom + this.getPadding().top;
+
+                // check the size of the container.
+                EditPart container = shapeEditPart.getParent();
+                while (container instanceof CompartmentEditPart) {
+                    container = container.getParent();
+                }
+                if (container instanceof ShapeEditPart) {
+                    final ShapeEditPart containerEditPart = (ShapeEditPart) container;
+
+                    // The minimum witdh
+                    final int minWidth = this.horizontal ? ((getPadding().left + getPadding().right) * sortedNodes.size()) + (getNodeMaxWidth(sortedNodes) * sortedNodes.size())
+                            : getPadding().left + getNodeMaxWidth(sortedNodes) + getPadding().right;
+                    // The minimum height
+                    final int minHeight = this.horizontal ? getPadding().top + this.getNodeMaxHeight(sortedNodes) + this.getPadding().bottom
+                            : ((getPadding().top + getPadding().bottom) * sortedNodes.size()) + (this.getNodeMaxHeight(sortedNodes) * sortedNodes.size());
+
+                    final Dimension minDimension = new Dimension(minWidth, minHeight);
+
+                    final Dimension difference = minDimension.getShrinked(containerEditPart.getFigure().getBounds().getSize());
+                    if (difference.width &gt; 0 || difference.height &gt; 0) {
+                        final Object existingContainerRequest = this.findRequest(containerEditPart, org.eclipse.gef.RequestConstants.REQ_RESIZE); // ;this.getViewsToChangeBoundsRequest().get(containerEditPart.getNotationView());
+                        createChangeBoundsCommand(result, existingContainerRequest, containerEditPart, difference, scale);
+                    }
+
+                }
+
+            }
+        }
         return result;
     }
 
-}
+    private void createChangeBoundsCommand(final CompoundCommand compoundCommand, final Object existingContainerRequest, final ShapeEditPart containerEditPart, final Dimension difference,
+            final double scale) {
 
-
-</pre>
-		<p>Once this has been implemented, we need to add the extension to the plugin.xml :</p>
-		<p>
-			<img border="0" src="images/arrange-all/arrange-all-provider-extension.png"/>
-		</p>
-		<pre><code>&lt;extension point="org.eclipse.sirius.diagram.viewOrderingProvider"&gt;
-   &lt;viewOrderingProvider providerClass="com.example.uml2.specific.provider.Uml2ViewOrderingProvider" /&gt;
-&lt;/extension&gt;
-</code></pre>
-		<h2 id="HowtomapaLayoutProviderwithaDiagram">How to map a Layout Provider with a Diagram</h2>
-		<p>Now, we know how to both order and arrange views. We still need to let Sirius know that we want to use a custom Layout Provider for a specific Diagram.</p>
-		<p>
-			<img border="0" src="images/arrange-all/airlayoutprovider.jpg"/>
-		</p>
-		<p>Here is a provider designed for an UML2 modeler:</p>
-		<pre>public class Uml2LayoutProvider implements LayoutProvider {
-
-    /** The GMF layout provider. */
-    private CompoundLayoutProvider layoutProvider;
-
-    /** The class diagram layout provider. */
-    private GridLayoutProvider classDiagramLayoutProvider;
-
-    /** The package hierarchy layout provider. */
-    private GridLayoutProvider packageHierarchyLayoutProvider;
-
-
-    public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
-        if (isSequenceDiagram(container)) {
-            if (this.layoutProvider == null) {
-                this.layoutProvider = new CompoundLayoutProvider();
-                LineLayoutProvider lineLayoutProvider = new LineLayoutProvider();
-                lineLayoutProvider.getPadding().right = 80;
-                lineLayoutProvider.setHorizontal(true);
-                this.layoutProvider.addProvider(lineLayoutProvider);
-                inlineEdgeLayoutProvider inlineEdgeLayoutProvider = new InlineEdgeLayoutProvider();
-                inlineEdgeLayoutProvider.setSide(PositionConstants.EAST_WEST);
-                inlineEdgeLayoutProvider.setStart(PositionConstants.RIGHT);
-                inlineEdgeLayoutProvider.setAlignment(PositionConstants.VERTICAL);
-                inlineEdgeLayoutProvider.setChangeNodeHeight(true);
-                inlineEdgeLayoutProvider.setChangeNodeWidth(true);
-                inlineEdgeLayoutProvider.getPaddings().top = 50;
-                this.layoutProvider.addProvider(inlineEdgeLayoutProvider);
+        if (existingContainerRequest == null) {
+            final ChangeBoundsRequest changeBoundsRequest = new ChangeBoundsRequest();
+            changeBoundsRequest.setEditParts(containerEditPart);
+            changeBoundsRequest.setResizeDirection(PositionConstants.SOUTH_EAST);
+            changeBoundsRequest.setSizeDelta(new Dimension((int) (difference.width * scale), (int) (difference.height * scale)));
+            changeBoundsRequest.setLocation(new Point(0, 0));
+            changeBoundsRequest.setType(org.eclipse.gef.RequestConstants.REQ_RESIZE);
+            final Command cmd = this.buildCommandWrapper(changeBoundsRequest, containerEditPart);
+            if (cmd.canExecute()) {
+                compoundCommand.add(cmd);
+                // this.getViewsToChangeBoundsRequest().put(containerEditPart.getNotationView(),
+                // changeBoundsRequest);
             }
-            return this.layoutProvider;
-        } else if (isClassDiagram(container)) {
-            return this.getClassDiagramLayoutProvider();
-        } else if (isPackageHierarchyDiagram(container)) {
-            return this.getPackageHierarchyLayoutProvider();
+        } else if (existingContainerRequest instanceof ChangeBoundsRequest) {
+            final ChangeBoundsRequest changeBoundsRequest = (ChangeBoundsRequest) existingContainerRequest;
+            changeBoundsRequest.setResizeDirection(PositionConstants.SOUTH_EAST);
+            changeBoundsRequest.setSizeDelta(new Dimension((int) (difference.width * scale), (int) (difference.height * scale)));
+        }
+    }
+
+    /**
+     * Return the maximum width of all nodes (instances of {@link ShapeEditPart} ) that are in the specified list.
+     * 
+     * @param nodes
+     *            the nodes.
+     * @return the maximum width of all nodes that are in the specified list.
+     */
+    protected int getNodeMaxWidth(final List&lt;ShapeEditPart&gt; nodes) {
+        int max = -1;
+        for (final ShapeEditPart shapeEditPart : nodes) {
+            final Object existingRequest = this.getViewsToChangeBoundsRequest().get(shapeEditPart.getNotationView());
+            int width = shapeEditPart.getFigure().getBounds().width;
+            if (existingRequest instanceof ChangeBoundsRequest) {
+                width = width + ((ChangeBoundsRequest) existingRequest).getSizeDelta().width;
+            }
+            if (width &gt; max) {
+                max = width;
+            }
+        }
+        return max;
+    }
+
+    /**
+     * Return the maximum height of all nodes (instances of {@link ShapeEditPart}) that are in the specified list.
+     * 
+     * @param nodes
+     *            the nodes.
+     * @return the maximum width of all nodes that are in the specified list.
+     */
+    protected int getNodeMaxHeight(final List&lt;ShapeEditPart&gt; nodes) {
+        int max = -1;
+        for (final ShapeEditPart shapeEditPart : nodes) {
+            final int height = this.getBounds(shapeEditPart).height;
+            if (height &gt; max) {
+                max = height;
+            }
+        }
+        return max;
+    }
+
+    @Override
+    public boolean provides(final IOperation operation) {
+        final View cview = getContainer(operation);
+        if (cview == null) {
+            return false;
+        }
+        final IAdaptable layoutHint = ((ILayoutNodeOperation) operation).getLayoutHint();
+        final String layoutType = layoutHint.getAdapter(String.class);
+        return LayoutType.DEFAULT.equals(layoutType);
+    }
+
+    /**
+     * Return the padding to use.
+     * 
+     * @return the padding to use.
+     */
+    public Insets getPadding() {
+        return DEFAULT_PADDING;
+    }
+
+    /**
+     * Get the container edit part of an object list. Currently the function takes only the first object of the list
+     * 
+     * @param selectedObjects
+     *            the selected object
+     * @return the container edit part
+     */
+    protected IGraphicalEditPart getContainerEditPart(final List&lt;EditPart&gt; selectedObjects) {
+        if (selectedObjects != null &amp;&amp; !selectedObjects.isEmpty()) {
+            return (IGraphicalEditPart) (selectedObjects.iterator().next()).getParent();
         }
         return null;
     }
 
-    public boolean provides(IGraphicalEditPart container) {
-        return (isClassDiagram(container) &amp;amp;&amp;amp; isAbleToLayoutClassDiagram(container)) || isSequenceDiagram(container) || isPackageHierarchyDiagram(container);
-    }
-
-    private boolean isSequenceDiagram(IGraphicalEditPart container) {
-        if (container instanceof AbstractDDiagramEditPart) {
-            AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
-            if (editPart.resolveSemanticElement() instanceof DDiagram) {
-                DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
-                if (viewPoint.getDescription() != null) {
-                    DiagramDescription diagramDescription = diagram.getDescription();
-                    return Uml2Constants.SEQUENCE_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
-                }
-            }
+}
+</code></pre>
+		<h4 id="Allowvieworderingcustomization">Allow view ordering customization</h4>
+		<p>If you want to add the capability for other developers to customize the order the views are laid out in your layout algorithm, you have to use the Sirius view ordering API. For example you will have in your 
+			<code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.LineLayoutProvider.layoutEditParts(List, IAdaptable)</code> method of your layout provider the following code:
+		</p>
+		<pre><code>ViewOrdering viewOrdering = ViewOrderingHint.getInstance().consumeViewOrdering(getContainerEditPart(selectedObjects).getNotationView());
+        if (viewOrdering == null) {
+            //Use the default one that return the same order.
+            viewOrdering = new SimpleViewOrdering();
         }
-        return false;
-    }
 
-    private boolean isClassDiagram(IGraphicalEditPart container) {
-        if (container instanceof AbstractDDiagramEditPart) {
-            AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
-            if (editPart.resolveSemanticElement() instanceof ViewPoint) {
-                DDiagram diagram = (DDaiagram) editPart.resolveSemanticElement();
-                if (diagram.getDescription() != null) {
-                    DiagramDescription diagramDescription = diagram.getDescription();
-                    return Uml2Constants.CLASS_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
-                }
-            }
+        viewOrdering.setViews(views);
+        final List&lt;View&gt; sortedViews = viewOrdering.getSortedViews();
+</code></pre>
+		<p>with the method 
+			<code>getContainerEditPart</code> that would be :
+		</p>
+		<pre><code>protected IGraphicalEditPart getContainerEditPart(final List&lt;EditPart&gt; selectedObjects) {
+        if (selectedObjects != null &amp;&amp; !selectedObjects.isEmpty()) {
+            return (IGraphicalEditPart) (selectedObjects.iterator().next()).getParent();
         }
-        return false;
+        return null;
     }
+</code></pre>
+		<p>Then you will apply your layout algorithm on those ordered views.</p>
+		<h3 id="IntegrateyourcustomlayoutalgorithmtoSirius">Integrate your custom layout algorithm to Sirius </h3>
+		<p>Three extension points are available to provide your custom algorithms.</p>
+		<ul>
+			<li>the GMF one 
+				<code>org.eclipse.gmf.runtime.diagram.ui.layoutProviders</code> is the high level one. It does not contains specificities linked to Sirius API. You will have to handle those on your own. 
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.layoutProvider</code> is the oldest Sirius extension point. It avoids you to handle specificities linked to Sirius API. 
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</code> is the new one used by ELK it avoids you to handle specificities linked to Sirius API. It also allows you to let specifiers configure your layout algorithm directly in the VSM. The layout algorithm from PinnedElementLayoutProvider and BorderedItemAwareLayoutProvider will be applied after your layouting pass.  You should use this one if it fits your needs.
+			</li>
+		</ul>
+		<h4 id="org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider">org.eclipse.sirius.diagram.ui.customLayoutAlgorithmProvider</h4>
+		<p>This extension point requires a sub class of 
+			<code>CustomLayoutAlgorithmProvider</code> that will provide your layout algorithm(s) as 
+			<code>CustomLayoutAlgorithm</code> based on 
+			<code>DefaultLayoutProvider</code> class. 
+		</p>
+		<p>When provided, Sirius will expose your algorithm in the VSM like for ELK integration:</p>
+		<img border="0" src="images/arrange-all/arrange-all-siriusVSMIntegration.png"/>
+		<p>The API is the following: </p>
+		<img border="0" src="images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png"/>
+		<h5 id="CustomLayoutAlgorithmProvider">CustomLayoutAlgorithmProvider</h5>
+		<p>This interface contains one method to implement: </p>
+		<ul>
+			<li>
+				<code>List&lt;CustomLayoutAlgorithm&gt; getCustomLayoutAlgorithms()</code> It must returns a 
+				<code>CustomLayoutAlgorithm</code> per layout algorithm you want to provide to the Sirius environment.
+			</li>
+		</ul>
+		<h5 id="CustomLayoutAlgorithm">CustomLayoutAlgorithm</h5>
+		<p>Allows you to provide an instance of the layout algorithm to be used by Sirius as well as all the options to configure it and that will be available from the VSM. 
+			<br/>The API is the following:
+		</p>
+		<img border="0" src="images/arrange-all/arrange-all-customLayoutAlgorithm.png"/>
+		<p>You will have to provide it by using the constructor: </p>
+		<ul>
+			<li>an id for your algorithm. This id should be unique.</li>
+			<li>a label that will be used when displaying information about your algorithm in Sirius.</li>
+			<li>a 
+				<code>Supplier&lt;DefaultLayoutProvider&gt;</code> that will allow Sirius to instantiate your layout algorithm when needed.
+			</li>
+			<li>a map of 
+				<code>Map&lt;String, LayoutOption&gt;</code> that will contain the options allowing to configure your algorithm and that will be readable by Sirius. To create option you must use the 
+				<code>LayoutOptionFactory</code> described below. Option type supported are the following:
+				<ul>
+					<li>
+						<code>Boolean</code>
+					</li>
+					<li>
+						<code>Integer</code>
+					</li>
+					<li>
+						<code>String</code>
+					</li>
+					<li>
+						<code>Double</code>
+					</li>
+					<li>
+						<code>Enum</code>
+					</li>
+					<li>
+						<code>EnumSet</code>
+					</li>
+				</ul>
+			</li>
+		</ul>
+		<h5 id="LayoutOptionFactory">LayoutOptionFactory</h5>
+		<p>The 
+			<code>LayoutOptionFactory</code> must be used to create an option to give to a 
+			<code>CustomLayoutAlgorithm</code>. This option will be readable by Sirius and offered to VSM specifiers.
+		</p>
+		<pre><code>LayoutOptionFactory layoutOptionFactory = new LayoutOptionFactory();
 
-    private boolean isPackageHierarchyDiagram(IGraphicalEditPart container) {
-        if (container instanceof AbstractDDiagramEditPart) {
-            AbstractDDiagramEditPart editPart = (AbstractDDiagramEditPart) container;
-            if (editPart.resolveSemanticElement() instanceof DDiagram) {
-                DDiagram diagram = (DDiagram) editPart.resolveSemanticElement();
-                if (viewPoint.getDescription() != null) {
-                    DiagramDescription diagramDescription = diagram.getDescription();
-                    return Uml2Constants.PACKAGE_HIERARCHY_DIAGRAM_DESCRIPTION_NAME.equals(diagramDescription.getName());
-                }
-            }
-        }
-        return false;
-    }
+</code></pre>
+		<p>This factory contains a method per option type handled. The created option will have:</p>
+		<ul>
+			<li>An 
+				<strong>id</strong> to identify it. Should be unique.
+			</li>
+			<li>A 
+				<strong>label</strong> to be display in the Sirius environment.
+			</li>
+			<li>A 
+				<strong>description</strong> that will be available to Sirius specifier when modifying it.
+			</li>
+			<li>The available 
+				<strong>value(s)</strong> to select for enum and enum set.
+			</li>
+		</ul>
+		<p>For example, the ELK integration is the following:</p>
+		<pre><code>public class ELKAlgorithmProvider implements CustomLayoutAlgorithmProvider {
 
-    private boolean isAbleToLayoutClassDiagram(IGraphicalEditPart container) {
-        if (container instanceof DiagramEditPart) {
-            int nbNoInherance = 0;
-            int nbInheritance = 0;
-            Iterator iterConnections = ((DiagramEditPart) container).getConnections().iterator();
-            while (iterConnections.hasNext()) {
-                ConnectionEditPart connectionEditPart = (ConnectionEditPart) iterConnections.next();
-                EObject semantic = connectionEditPart.resolveSemanticElement();
-                if (semantic != null &amp;amp;&amp;amp; semantic instanceof DecorateSemanticElement) {
-                    EObject realSemantic = ((DecorateSemanticElement) semantic).getTarget();
-                    if (realSemantic instanceof Generalization) {
-                        nbInheritance++;
-                    } else {
-                        nbNoInherance++;
+    @Override
+    public List&lt;CustomLayoutAlgorithm&gt; getCustomLayoutAlgorithms() {
+        List&lt;CustomLayoutAlgorithm&gt; layoutAlgorithms = new ArrayList&lt;&gt;();
+        // we fill the Sirius layout algorithm registry with all ELK algorithms.
+        Collection&lt;LayoutAlgorithmData&gt; algorithmData = LayoutMetaDataService.getInstance().getAlgorithmData();
+        for (LayoutAlgorithmData layoutAlgorithmData : algorithmData) {
+
+            List&lt;LayoutOptionData&gt; optionDatas = LayoutMetaDataService.getInstance().getOptionData(layoutAlgorithmData, Target.PARENTS);
+            Map&lt;String, LayoutOption&gt; layoutOptions = new HashMap&lt;&gt;();
+            LayoutOptionFactory layoutOptionFactory = new LayoutOptionFactory();
+            for (LayoutOptionData layoutOptionData : optionDatas) {
+                if (!CoreOptions.ALGORITHM.getId().equals(layoutOptionData.getId()) &amp;&amp; !layoutOptionData.getVisibility().equals(Visibility.HIDDEN)) {
+                    switch (layoutOptionData.getType()) {
+                    case STRING:
+                        layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createStringOption((String) layoutOptionData.getDefault(), layoutOptionData.getId(),
+                                layoutOptionData.getDescription(), layoutOptionData.getName()));
+                        break;
+                    case BOOLEAN:
+                        layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createBooleanOption((Boolean) layoutOptionData.getDefault(), layoutOptionData.getId(),
+                                layoutOptionData.getDescription(), layoutOptionData.getName()));
+                        break;
+                    case INT:
+                        layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createIntegerOption((Integer) layoutOptionData.getDefault(), layoutOptionData.getId(),
+                                layoutOptionData.getDescription(), layoutOptionData.getName()));
+                        break;
+                    case DOUBLE:
+                        layoutOptions.put(layoutOptionData.getId(), layoutOptionFactory.createDoubleOption((Double) layoutOptionData.getDefault(), layoutOptionData.getId(),
+                                layoutOptionData.getDescription(), layoutOptionData.getName()));
+                        break;
+                    case ENUMSET:
+                    case ENUM:
+
+                        String[] choices = layoutOptionData.getChoices();
+                        List&lt;EnumChoice&gt; choicesList = new ArrayList&lt;&gt;();
+                        for (int i = 0; i &lt; choices.length; i++) {
+                            String choiceId = choices[i];
+                            choicesList.add(new EnumChoice(choiceId, ""));
+
+                        }
+                        String defaultValue = null;
+                        Object defaultObject = layoutOptionData.getDefaultDefault();
+                        if (defaultObject instanceof Enum) {
+                            defaultValue = ((Enum&lt;?&gt;) defaultObject).name();
+                        }
+                        if (layoutOptionData.getType() == Type.ENUM) {
+                            layoutOptions.put(layoutOptionData.getId(),
+                                    layoutOptionFactory.createEnumOption(choicesList, layoutOptionData.getId(), layoutOptionData.getDescription(), layoutOptionData.getName(), defaultValue));
+                        } else {
+                            layoutOptions.put(layoutOptionData.getId(),
+                                    layoutOptionFactory.createEnumSetOption(choicesList, layoutOptionData.getId(), layoutOptionData.getDescription(), layoutOptionData.getName()));
+                        }
+
+                        break;
+                    default:
+                        break;
                     }
-                } else {
-                    nbNoInherance++;
                 }
             }
-            return nbInheritance &amp;gt; nbNoInherance;
+            layoutAlgorithms.add(new CustomLayoutAlgorithm(layoutAlgorithmData.getId(), layoutAlgorithmData.getName(), () -&gt; new ELKLayoutNodeProvider(), layoutOptions));
+        }
+        return layoutAlgorithms;
+    }
+
+}
+
+</code></pre>
+		<h5 id="DefaultLayoutProvider3">DefaultLayoutProvider</h5>
+		<p>This class contains the core layout algorithm. When a user calls an arrange-all on a diagram that will be configured to use your layout algorithm, an instance of this class is created. You will be given the parts to layout. Then it is your job to layout it as you want. </p>
+		<p>For example, the ELK integration have the following:</p>
+		<pre><code>public class ELKLayoutNodeProvider extends DefaultLayoutProvider {
+
+    @Override
+    public Command layoutEditParts(final List selectedObjects, final IAdaptable layoutHint) {
+        Injector injector = LayoutConnectorsService.getInstance().getInjector(null, selectedObjects);
+        ElkDiagramLayoutConnector connector = injector.getInstance(ElkDiagramLayoutConnector.class);
+        LayoutMapping layoutMapping = connector.buildLayoutGraph(null, selectedObjects);
+        connector.layout(layoutMapping);
+        connector.transferLayout(layoutMapping);
+        return connector.getApplyCommand(layoutMapping);
+    }
+
+}
+
+
+</code></pre>
+		<h4 id="org.eclipse.sirius.diagram.ui.layoutProvider">org.eclipse.sirius.diagram.ui.layoutProvider</h4>
+		<p>To be used, your custom algorithm should be declared to Sirius with the provided extension point 
+			<code>org.eclipse.sirius.diagram.ui.layoutProvider</code>. This extension point requires a sub class of 
+			<code>LayoutProvider</code> that will provide your layout algorithm. Its API is the following:
+		</p>
+		<img border="0" src="images/arrange-all/arrange-all-layoutProvider.png"/>
+		<p>The 
+			<code>LayoutProvider</code> interface contains the following methods:
+		</p>
+		<ul>
+			<li>
+				<code>isDiagramLayoutProvider</code>: This method should return true if the provided layout algorithm can handle layouting from root diagram part when this part is layout action&#8217;s target. It means your provider will be called with 
+				<code>org.eclipse.gmf.runtime.diagram.ui.services.layout.AbstractLayoutEditPartProvider.layoutEditParts(GraphicalEditPart, IAdaptable)</code> in this case. The call will only be done if your provider inherits from 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.AbstractLayoutProvider</code>. If not or if 
+				<code>isDiagramLayoutProvider</code> returns false, then the method 
+				<code>org.eclipse.sirius.diagram.ui.tools.api.layout.provider.DefaultLayoutProvider.layoutEditParts(List, IAdaptable)</code> is called and will delegate to the method 
+				<code>layoutEditParts(List, IAdaptable)</code> of your provider.
+			</li>
+			<li>
+				<code>provides</code>: Should return true if your 
+				<code>LayoutProvider</code> do provide a layout algorithm for the view associated to the given edit part and should be used. False otherwise.
+			</li>
+			<li>
+				<code>getLayoutNodeProvider</code>: Return the layout algorithm component to use to lay out the diagram elements target of the layout action.
+			</li>
+		</ul>
+		<p>For example the left right composite providers is declared as followed:</p>
+		<pre><code>public class CompositeLeftRightProvider implements LayoutProvider {
+	 /** The delegated GMF provider. */
+	 private AbstractLayoutEditPartProvider layoutNodeProvider;
+	 public AbstractLayoutEditPartProvider getLayoutNodeProvider(final IGraphicalEditPart container) {
+        if (this.layoutNodeProvider == null) {
+            final CompoundLayoutProvider clp = new CompoundLayoutProvider();
+            final CompositeLeftRightLayoutProvider cdtp = new CompositeLeftRightLayoutProvider();
+            clp.addProvider(cdtp);
+            clp.addProvider(new PinnedElementsLayoutProvider(cdtp));
+            if (ENABLE_BORDERED_NODES_ARRANGE_ALL) {
+                // ArrangeSelectionLayoutProvider wrap all providers to manage
+                // the selected diagram element on diagram "Arrange all"
+                AbstractLayoutProvider abstractLayoutProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(clp);
+                this.layoutNodeProvider = new ArrangeSelectionLayoutProvider(abstractLayoutProvider);
+            } else {
+                this.layoutNodeProvider = new ArrangeSelectionLayoutProvider(clp);
+            }
+        }
+        return this.layoutNodeProvider;
+    }
+
+    public boolean provides(final IGraphicalEditPart container) {
+        return isInDDiagramWithConfiguredLeftRightLayout(container.getNotationView());
+    }
+
+    private boolean isInDDiagramWithConfiguredLeftRightLayout(final View view) {
+        final Layout foundLayout = DiagramLayoutCustomization.findLayoutSettings(view);
+        if (foundLayout instanceof CompositeLayout) {
+            return ((CompositeLayout) foundLayout).getDirection() == LayoutDirection.LEFT_TO_RIGHT;
         }
         return false;
     }
 
-    /**
-     * Returns the class diagram layout provider.
-     *
-     * @return the class diagram layout provider.
-     */
-    public GridLayoutProvider getClassDiagramLayoutProvider() {
-        if (classDiagramLayoutProvider == null) {
-            classDiagramLayoutProvider = new GridLayoutProvider();
-            classDiagramLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
-            classDiagramLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
-            classDiagramLayoutProvider.getPadding().top = 20;
-            classDiagramLayoutProvider.getPadding().bottom = 20;
-            classDiagramLayoutProvider.getPadding().left = 20;
-            classDiagramLayoutProvider.getPadding().right = 20;
-        }
-        return classDiagramLayoutProvider;
-    }
-
-    public GridLayoutProvider getPackageHierarchyLayoutProvider() {
-        if (packageHierarchyLayoutProvider == null) {
-            packageHierarchyLayoutProvider = new GridLayoutProvider();
-            packageHierarchyLayoutProvider.setColumnSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
-            packageHierarchyLayoutProvider.setLineSizeMode(GridLayoutProvider.DIMENSION_BY_LINE_OR_COLUMN);
-            packageHierarchyLayoutProvider.getPadding().top = 20;
-            packageHierarchyLayoutProvider.getPadding().bottom = 20;
-            packageHierarchyLayoutProvider.getPadding().left = 30;
-            packageHierarchyLayoutProvider.getPadding().right = 30;
-        }
-        return packageHierarchyLayoutProvider;
-    }
-
     public boolean isDiagramLayoutProvider() {
-        return false;
+        return true;
     }
-
 }
 
-</pre>
-		<p>Finally, we add the extension in the plug-in file :</p>
-		<p>
+</code></pre>
+		<p>The layout algorithm provided by this 
+			<code>LayoutProvider</code> will be used if the view to layout is associated to a Sirius mapping contained by a diagram mapping declaring the left right composite provider in the VSM.
+		</p>
+		<p>After this provider creation, you have to registered it with the extension point:
+			<br/> 
 			<img border="0" src="images/arrange-all/arrange-all-layoutprovider-extension.png"/>
 		</p>
-		<pre><code>&lt;extension point="org.eclipse.sirius.diagram.layoutProvider"&gt;
-   &lt;layoutProvider priority="high" providerClass="com.example.uml2.specific.provider.Uml2LayoutProvider"&gt;
-   &lt;/layoutProvider&gt;
-&lt;/extension&gt;
+		<p>A priority can be set. If two layout providers provide layouting for a same object, the one with the higher priority will be used.</p>
+		<h5 id="Composingyourlayoutproviders">Composing your layout providers</h5>
+		<p>You may want to reuse some of the Sirius layout providers in addition of your own layout provider to avoid code rewrite or duplication if the layouting you are doing does not conflict with the layouting other providers are doing.</p>
+		<p>To do that, Sirius offers a 
+			<code>CompoundLayoutProvider</code> allowing to trigger layouting of many compatible providers in their insertion order. The compatible providers are:
+		</p>
+		<ul>
+			<li>The PinnedElementsLayoutProvider</li>
+			<li>The LineLayoutProvider</li>
+			<li>The GridLayoutProvider</li>
+		</ul>
+		<p>Also some providers are not compatible with the compound one but instead use a wrapping mechanism. They wrap another provider. Then their layouting code is called before or after the wrapped&#8217;s code:</p>
+		<ul>
+			<li>The ArrangeSelectionLayoutProvider is called before wrapped provider</li>
+			<li>The ArrangeAllOnlyLayoutProvider is called before wrapped provider</li>
+			<li>The BorderItemAwareLayoutProvider is called after wrapped provider. Its initialization is done with the code </li>
+		</ul>
+		<pre><code>BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(clp);
 </code></pre>
-		<h2 id="EnabletheborderednodeslayoutonacustomLayoutProvider">Enable the bordered nodes layout on a custom LayoutProvider</h2>
-		<p>The bordered nodes layout arranges all the bordered nodes which are connected to one edge. This arrange reduces the path of the edge between each extremity.</p>
-		<p>Currently, the layout of the bordered nodes is activated on the default Layout Provider (CompositeDownTopProvider, CompositeLeftRightProvider and OrderedTreeLayoutProvider. To enable the bordered nodes layout on a new LayoutProvider, in the method getLayoutNodeProvider(IGraphicalEditPart), you must create a new BorderItemAwareLayoutProvider with your own LayoutProvider in parameter. This new BorderItemAwareLayoutProvider must be return instead of your own.</p>
-		<p>Example of the OrderedTreeLayoutProvider</p>
-		<pre><code>public AbstractLayoutEditPartProvider getLayoutNodeProvider(IGraphicalEditPart container) {
-    if (isDDiagramWithConfiguredOrderedTreeLayout(container)) {
-    //Get the expected layout provider
-        AbstractLayoutProvider layoutNodeProvider = getGridLayoutProvider();
-    //Create new BorderItemAwareLayoutProvider
-        layoutNodeProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(layoutNodeProvider);
-    //Return the BorderItemAwareLayoutProvider which wrap the previous one
-        return layoutNodeProvider;
-    } else {
-        return null;
+		<p>
+			<code>PinnedElementsLayoutProvider</code> should always do its layouting before BorderItemAwareLayoutProvider but after any other layouting.
+			<br/>
+			<code>BorderItemAwareLayoutProvider</code> should always do its layouting at the end.
+			<br/>To know more about these providers you can read the section 
+			<a href="#siriusLayoutProviders">Sirius Layout Providers</a>.
+		</p>
+		<p>The 
+			<code>CompoundLayoutProvider</code> API is the following:
+		</p>
+		<img border="0" src="images/arrange-all/arrange-all-CompoundLayoutProvider.png"/>
+		<p>The 
+			<code>provides</code> and 
+			<code>layoutEditParts</code> methods delegate to registered providers. You should not override those.
+			<br/>You only have to add all the providers that should be used to layout with method 
+			<code>addProvider</code>.
+		</p>
+		<h6 id="Example">Example</h6>
+		<p>Compound and wrapping providers are used for example by the composite providers that can be used from a VSM declaration:</p>
+		<pre><code>public AbstractLayoutEditPartProvider getLayoutNodeProvider(final IGraphicalEditPart container) {
+        if (this.layoutNodeProvider == null) {
+            final CompoundLayoutProvider clp = new CompoundLayoutProvider();
+            final CompositeDownTopLayoutProvider cdtp = new CompositeDownTopLayoutProvider();
+            clp.addProvider(cdtp);
+            clp.addProvider(new PinnedElementsLayoutProvider(cdtp));
+            AbstractLayoutProvider abstractLayoutProvider = BorderItemAwareLayoutProviderHelper.createBorderItemAwareLayoutProvider(clp);
+            this.layoutNodeProvider = new ArrangeSelectionLayoutProvider(abstractLayoutProvider);
+        }
+        return this.layoutNodeProvider;
     }
-}
 </code></pre>
+		<p>We see that this composite provider is composed with the 
+			<code>PinnedElementsLayoutProvider</code> in a compound provider. The composite provider does its layouting first but does not handle pinned elements. The pinned one restore pinned elements to their original position and fix potential overlaps.
+			<br/>Then the compound provider is wrapped in a 
+			<code>BorderItemAwareLayoutProvider</code> that is also wrapped in the 
+			<code>ArrangeSelectionLayoutProvider</code>.
+			<br/>The layout execution flow is the following:
+			<br/>
+			<code>ArrangeSelectionLayoutProvider</code> is called first. Then 
+			<code>CompoundLayoutProvider</code> is called and delegates to 
+			<code>CompositeDownTopLayoutProvider</code> first and 
+			<code>PinnedElementsLayoutProvider</code> second. Lastly 
+			<code>BorderItemAwareLayoutProvider</code> is called.
+		</p>
+		<h4 id="ProvideacustomlayoutalgorithmwithGMFextensionpoint">Provide a custom layout algorithm with GMF extension point</h4>
+		<p>This extension point provided by GMF can be used to provide your custom layout algorithm in Sirius diagram editors if you don&#8217;t need any of the features and implementation ease brought by Sirius API.</p>
+		<p>To do that, your layout algorithm in the form of an 
+			<code>AbstractLayoutEditPartProvider</code> can be declared in GMF extension point 
+			<code>org.eclipse.gmf.runtime.diagram.ui.layoutProviders</code>.
+		</p>
+		<p>The priority of the default one used by Sirius is medium. To be override your priority must be lowest than medium.</p>
 	</body>
 </html>
\ No newline at end of file
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.png b/doc/developer/images/Sirius_High-Level_Architecture_Overview.png
similarity index 100%
copy from doc/developer/images/Sirius - High-Level Architecture Overview.png
copy to doc/developer/images/Sirius_High-Level_Architecture_Overview.png
Binary files differ
diff --git a/doc/developer/images/Sirius - High-Level Architecture Overview.svg b/doc/developer/images/Sirius_High-Level_Architecture_Overview.svg
similarity index 100%
copy from doc/developer/images/Sirius - High-Level Architecture Overview.svg
copy to doc/developer/images/Sirius_High-Level_Architecture_Overview.svg
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.png b/doc/developer/images/Sirius_Representation_Refresh-Sync.png
similarity index 100%
copy from doc/developer/images/Sirius - Representation Refresh-Sync.png
copy to doc/developer/images/Sirius_Representation_Refresh-Sync.png
Binary files differ
diff --git a/doc/developer/images/Sirius - Representation Refresh-Sync.svg b/doc/developer/images/Sirius_Representation_Refresh-Sync.svg
similarity index 100%
copy from doc/developer/images/Sirius - Representation Refresh-Sync.svg
copy to doc/developer/images/Sirius_Representation_Refresh-Sync.svg
diff --git a/doc/developer/images/arrange-all/arrange-all-CompoundLayoutProvider.png b/doc/developer/images/arrange-all/arrange-all-CompoundLayoutProvider.png
new file mode 100644
index 0000000..1186d4d
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-CompoundLayoutProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-abstractLayoutEditPart.png b/doc/developer/images/arrange-all/arrange-all-abstractLayoutEditPart.png
new file mode 100644
index 0000000..f046f71
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-abstractLayoutEditPart.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-border1.png b/doc/developer/images/arrange-all/arrange-all-border1.png
new file mode 100644
index 0000000..572ffcc
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-border1.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-border2.png b/doc/developer/images/arrange-all/arrange-all-border2.png
new file mode 100644
index 0000000..ce54f9e
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-border2.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithm.png b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithm.png
new file mode 100644
index 0000000..d33165a
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithm.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png
new file mode 100644
index 0000000..b0a8cb0
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-customLayoutAlgorithmProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-ilayoutNodeproviderApi.png b/doc/developer/images/arrange-all/arrange-all-ilayoutNodeproviderApi.png
new file mode 100644
index 0000000..97485c8
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-ilayoutNodeproviderApi.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-iproviderApi.png b/doc/developer/images/arrange-all/arrange-all-iproviderApi.png
new file mode 100644
index 0000000..66d9771
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-iproviderApi.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-layoutProvider.png b/doc/developer/images/arrange-all/arrange-all-layoutProvider.png
new file mode 100644
index 0000000..d0b2e7c
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-layoutProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-layoutingAPI.png b/doc/developer/images/arrange-all/arrange-all-layoutingAPI.png
new file mode 100644
index 0000000..c62e9ac
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-layoutingAPI.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png b/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
index db453d3..3c501d7 100644
--- a/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
+++ b/doc/developer/images/arrange-all/arrange-all-layoutprovider-extension.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-siriusVSMIntegration.png b/doc/developer/images/arrange-all/arrange-all-siriusVSMIntegration.png
new file mode 100644
index 0000000..d8252f7
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-siriusVSMIntegration.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-ui.png b/doc/developer/images/arrange-all/arrange-all-ui.png
new file mode 100644
index 0000000..ef38c70
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-ui.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrdering.png b/doc/developer/images/arrange-all/arrange-all-viewOrdering.png
new file mode 100644
index 0000000..2608531
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrdering.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrdering2.png b/doc/developer/images/arrange-all/arrange-all-viewOrdering2.png
new file mode 100644
index 0000000..3b869bf
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrdering2.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrderingArchitecture.png b/doc/developer/images/arrange-all/arrange-all-viewOrderingArchitecture.png
new file mode 100644
index 0000000..fa8a978
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrderingArchitecture.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrderingExtensionPoint.png b/doc/developer/images/arrange-all/arrange-all-viewOrderingExtensionPoint.png
new file mode 100644
index 0000000..2dfa5bf
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrderingExtensionPoint.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-viewOrderingProvider.png b/doc/developer/images/arrange-all/arrange-all-viewOrderingProvider.png
new file mode 100644
index 0000000..5318995
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-viewOrderingProvider.png
Binary files differ
diff --git a/doc/developer/images/arrange-all/arrange-all-vsm.png b/doc/developer/images/arrange-all/arrange-all-vsm.png
new file mode 100644
index 0000000..2008f93
--- /dev/null
+++ b/doc/developer/images/arrange-all/arrange-all-vsm.png
Binary files differ
diff --git a/doc/i18n_changes.html b/doc/i18n_changes.html
index 3e9430d..1edd5d5 100644
--- a/doc/i18n_changes.html
+++ b/doc/i18n_changes.html
@@ -11,68 +11,388 @@
 		<p>This document lists the changes in 
 			<code>TranslatableMessage</code> used for Sirius internationalization in each Sirius version.
 		</p>
-		<h2 id="sirius51">Translation Keys Changes in Sirius 5.1 (from Sirius 5.0)</h2>
+		<h2 id="sirius60">Translation Keys Changes in Sirius 6.0 (from Sirius 5.1)</h2>
 		<h3 id="MessageKeysAdded">Message Keys Added</h3>
 		<ul>
-			<li>`org.eclipse.sirius.diagram.sequence.Messages.Range_wrongArgument`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.BundledImageShape_attributeAbsent`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_showSynchronizeStatusDecoratorLabel`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_edgesModified`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_title`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramSynchronized`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramUnsynchronized`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_nodesMoved`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_oneLabelSnapBacked`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_severalLabelsSnapBacked`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_title`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedLabel`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedTooltip`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedLabel`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedTooltip`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedLabel`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedTooltip`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedLabel`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedTooltip`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagSynchronized`</li>
-			<li>`org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagUnsynchronized`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_label`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_tooltip`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_addModelButton_tooltip`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_newModelButton_tooltip`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_removeModelButton_tooltip`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_badClassType`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_classInitialization`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageActivation_Failure`</li>
-			<li>`org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageCommand_Integrity_Error`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message_plural`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title_plural`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disableViewpointButton_tooltip`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_enableViewpointButton_tooltip`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_newRepresentationButton_tooltip`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_removeRepresentationButton_tooltip`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Active_Representation_Message`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Controlled_Resources_Message`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Error_Removal_Title`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Not_External_Dependency_Message`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_errorMsg`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_label`</li>
-			<li>`org.eclipse.sirius.viewpoint.Messages.DRepresentationDescriptorToDRepresentationLinkManager_repLoading`</li>
-			<li>`org.eclipse.sirius.viewpoint.Messages.ModelOperationToTask_cannotCreateTaskWarningMsg`</li>
-			<li>`org.eclipse.sirius.viewpoint.Messages.SessionFactoryImpl_ResourceTypeErrorMsg`</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_sizeGroupLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.GenericConnectionCreationTool_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.InsertBlankSpace_cmdName</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.LayoutAlgorithmProviderRegistry_badClassType</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.LayoutAlgorithmProviderRegistry_classInitialization</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SetShowingModeCommandAndUpdateActionImage_activateLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SetShowingModeCommandAndUpdateActionImage_deactivateLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.ShowingModeSwitchingAction_activate</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.ShowingModeSwitchingAction_deactivate</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.ShowingModeSwitchingAction_statusOn</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_expressionMessage</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_expressionTitle</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_expressionTooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_sameETypeMessage</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_sameETypeTitle</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StandardDiagramServices_sameETypeTooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.Messages.NoteAttachmentWithoutSourceOrTargetMigrationParticipant_edgesRemoved</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.Messages.NoteAttachmentWithoutSourceOrTargetMigrationParticipant_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.Messages.UndoRedoCapableEMFCommandFactory_insertHorizontalBlankSpaceNotImplemented</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.Messages.UndoRedoCapableEMFCommandFactory_insertVerticalBlankSpaceNotImplemented</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.workflow.internal.Messages.WorkflowMenuBuilder_NewWorkflow_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.workflow.internal.Messages.WorkflowMenuBuilder_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.AddOptionOverridePropertySection_dialogTitle</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.AddOptionOverridePropertySection_overrideButtonLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.CustomSiriusEditor_failedNavigationExceptionMessage</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.CustomSiriusEditor_failedNavigationMessage</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.CustomSiriusEditor_failedNavigationTitle</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.LayoutOptionValue_defaultLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_filteringLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionDefaultValueColumnLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionDescriptionLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionNameColumnLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_optionTypeColumnLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.OptionOverrideEditorDialog_tableLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.ServiceNavigator_serviceNavigationDialog_description</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.ServiceNavigator_serviceNavigationDialog_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.editor.Messages.ServiceNavigator_targetInitialization_error</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ext.ide.internal.Messages.DescriptorRegistryEventListener_cannotInstantiateExtension</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ext.ide.internal.Messages.DescriptorRegistryEventListener_extensionAlreadyContributed</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ext.ide.internal.Messages.DescriptorRegistryEventListener_missingAttribute</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.server.internal.Messages.SiriusServerManager_cannotStartServer</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.server.internal.Messages.SiriusServerManager_cannotStopServer</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_scalingLevelDiagramLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAction_invalidLevel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_dialogSizeGroupName</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_maxLevelLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_nominalLevelLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ExportAsImage_sizeTooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.No_Browser_Error_Message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.OpenViewpointSelectionBrowser_Error_Message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.SingleRepresentationTreeSelectionDialog_Title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.workflow.ui.page.Messages.WorkflowPage_header_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.workflow.ui.page.Messages.WorkflowPage_tab_name</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.InvalidModelingProjectMarkerUpdaterJob_updateMarkers</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_addAnotherRepresentationFile</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_addAnotherRepresentationFileSeveralProjects</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_mainRepresentationFileDeleted</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_mainRepresentationFilesOfSomeProjectsDeleted</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_satusUnsaveDataWillBeLostWithProjectNames</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.ModelingModelProvider_satusUnsavedDataWillBeLost</code>
+			</li>
 		</ul>
 		<h3 id="MessageKeysRemoved">Message Keys Removed</h3>
 		<ul>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message_plural`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title`</li>
-			<li>`org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title_plural`</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.InvalidModelingProjectMarkerUpdaterJob_updateMarkers</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_addAnotherRepresentationFile</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_addAnotherRepresentationFileSeveralProjects</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_mainRepresentationFileDeleted</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_mainRepresentationFilesOfSomeProjectsDeleted</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_satusUnsaveDataWillBeLostWithProjectNames</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.ModelingModelProvider_satusUnsavedDataWillBeLost</code>
+			</li>
+		</ul>
+		<h2 id="sirius51">Translation Keys Changes in Sirius 5.1 (from Sirius 5.0)</h2>
+		<h3 id="MessageKeysAdded2">Message Keys Added</h3>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.diagram.sequence.Messages.Range_wrongArgument</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.BundledImageShape_attributeAbsent</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_scaleDiagramOnExport</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.DiagramGeneralPreferencePage_showSynchronizeStatusDecoratorLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_edgesModified</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.RepairGMFbendpointsMigrationParticipant_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramSynchronized</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SiriusStatusLineContributionItemProvider_diagramUnsynchronized</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_nodesMoved</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_oneLabelSnapBacked</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_severalLabelsSnapBacked</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SnapBackDistantLabelsMigrationParticipant_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_BottomSidePinnedTooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_LeftSidePinnedTooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_RightSidePinnedTooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedLabel</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.StraightenToAction_TopSidePinnedTooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagSynchronized</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.diagram.ui.provider.Messages.SynchronizeStatusFigure_diagUnsynchronized</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.DefaultSessionEditorPage_closeSession_action_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_addModelButton_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_newModelButton_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.GraphicalSemanticModelsHandler_removeModelButton_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_badClassType</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.PluginPageProviderRegistry_classInitialization</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageActivation_Failure</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.ui.editor.Messages.SessionEditor_PageCommand_Integrity_Error</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractExportRepresentationsAsImagesDialog_autoScaleDiagram</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_message_plural</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.AbstractSWTCallback_DeleteRepresentationAction_title_plural</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_disableViewpointButton_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_enableViewpointButton_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_newRepresentationButton_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.GraphicalRepresentationHandler_removeRepresentationButton_tooltip</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Active_Representation_Message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Controlled_Resources_Message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Error_Removal_Title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.RemoveSemanticResourceAction_Not_External_Dependency_Message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_errorMsg</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.UpdateRepresentationsLocationHandler_label</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.DRepresentationDescriptorToDRepresentationLinkManager_repLoading</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.ModelOperationToTask_cannotCreateTaskWarningMsg</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.Messages.SessionFactoryImpl_ResourceTypeErrorMsg</code>
+			</li>
+		</ul>
+		<h3 id="MessageKeysRemoved2">Message Keys Removed</h3>
+		<ul>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_message_plural</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title</code>
+			</li>
+			<li>
+				<code>org.eclipse.sirius.viewpoint.provider.Messages.DeleteRepresentationAction_title_plural</code>
+			</li>
 		</ul>
 		<h2 id="sirius50">Translation Keys Changes in Sirius 5.0 (from Sirius 4.1)</h2>
-		<h3 id="MessageKeysAdded2">Message Keys Added</h3>
+		<h3 id="MessageKeysAdded3">Message Keys Added</h3>
 		<ul>
 			<li>
 				<code>org.eclipse.sirius.common.acceleo.aql.business.Messages.AQLInterpreter_errorWithExpression</code>
@@ -465,7 +785,7 @@
 				<code>org.eclipse.sirius.viewpoint.Messages.SessionInterpreter_evaluationError</code>
 			</li>
 		</ul>
-		<h3 id="MessageKeysRemoved2">Message Keys Removed</h3>
+		<h3 id="MessageKeysRemoved3">Message Keys Removed</h3>
 		<ul>
 			<li>
 				<code>org.eclipse.sirius.editor.properties.Messages.ImportingDefaultPropertiesViewDescriptionCommand_text</code>
diff --git a/doc/images/color_palette.png b/doc/images/color_palette.png
new file mode 100644
index 0000000..f6691c3
--- /dev/null
+++ b/doc/images/color_palette.png
Binary files differ
diff --git a/doc/images/genericEdgeCreationTool.png b/doc/images/genericEdgeCreationTool.png
new file mode 100644
index 0000000..f750891
--- /dev/null
+++ b/doc/images/genericEdgeCreationTool.png
Binary files differ
diff --git a/doc/index.html b/doc/index.html
index 9c68e8a..45f2879 100644
--- a/doc/index.html
+++ b/doc/index.html
@@ -109,7 +109,7 @@
     </div>
 
     <div class="clear"></div>
-    <p><em>Note:</em> This documentation refers to the latest major release of Sirius, version 5.1. For documentation corresponding to previous releases, see <a href="5.0.x/index.html">5.0.x</a>, <a href="4.1.x/index.html">4.1.x</a>, <a href="4.0.x/index.html">4.0.x</a>, <a href="3.1.x/index.html">3.1.x</a>, see <a href="3.0.x/index.html">3.0.x</a>, <a href="2.0.x/index.html">2.0.x</a>, <a href="1.0.x/index.html">1.0.x</a>, or <a href="0.9/index.html">0.9</a>.</p>
+    <p><em>Note:</em> This documentation refers to the latest major release of Sirius, version 6.0. For documentation corresponding to previous releases, see <a href="5.1.x/index.html">5.1.x</a> <a href="5.0.x/index.html">5.0.x</a>, <a href="4.1.x/index.html">4.1.x</a>, <a href="4.0.x/index.html">4.0.x</a>, <a href="3.1.x/index.html">3.1.x</a>, see <a href="3.0.x/index.html">3.0.x</a>, <a href="2.0.x/index.html">2.0.x</a>, <a href="1.0.x/index.html">1.0.x</a>, or <a href="0.9/index.html">0.9</a>.</p>
     <div class="clear"></div>
     <p>For further information, please visit our website at <a href="http://www.eclipse.org/sirius/" target="_blank">www.eclipse.org/sirius</a>.</p>
   </body>
diff --git a/doc/specifier/diagrams/Diagrams.html b/doc/specifier/diagrams/Diagrams.html
index f2786d9..3e693bf 100644
--- a/doc/specifier/diagrams/Diagrams.html
+++ b/doc/specifier/diagrams/Diagrams.html
@@ -185,6 +185,13 @@
 			<em>Enable Popup Bars</em> flag is set, then when the end-user leaves the mouse pointer still on a diagram (or diagram element) for a small time, a 
 			<em>popup bar</em> will appear with shortcut buttons to all the tools which can be applied in this context. It can be useful to create elements without going to the palette to select tools, but it can also become visually distracting if too many tools are available in the popup bar.
 		</p>
+		<p>By default, diagrams are displayed with white background. In the 
+			<em>Background</em> property section of the 
+			<em>Diagram Description</em>, you can add either one of the pre-defined system colors or one which you have defined yourself in a 
+			<em>Users Color Palette</em>. See 
+			<a href="../general/Colors.html">the general section on colors</a> on colors for more details on dynamic and computed color of the 
+			<em>Users Color Palette</em>. Note that when dynamic/computed colors are re-computed because of model change for example, background color is refreshed.
+		</p>
 		<p>The content of the 
 			<em>Diagram Description</em> is mostly made of 
 			<a href="#graphical_elements">graphical elements mappings</a>, organized in 
@@ -214,6 +221,9 @@
 			<em>Ordered Tree Layout</em> enables one to lay out nodes as an ordered tree. The manner to retrieve children for each node should be specified.
 		</p>
 		<p>NOTE: these layout algorithms manage only nodes connected by edges, other nodes are layouted from left to right as usual.</p>
+		<p>Additional layout algorithms can be available if you have installed the ELK integration with Sirius. Please refers to the 
+			<a href="https://www.eclipse.org/elk/reference/algorithms.html">ELK documentation</a> if you want details about these algorithms. All these algorithms exclude pinned element from the layouting and shorten edges between border nodes in addition to their core algorithm. 
+		</p>
 		<p>If you need to go beyond that, you can provide your own layout algorithm programmatically (see the 
 			<a href="../../developer/Sirius%20Developer%20Manual.html">developer documentation</a> for details).
 		</p>
diff --git a/doc/specifier/general/Specifying_Viewpoints.html b/doc/specifier/general/Specifying_Viewpoints.html
index 2e9806c..56d15d0 100644
--- a/doc/specifier/general/Specifying_Viewpoints.html
+++ b/doc/specifier/general/Specifying_Viewpoints.html
@@ -508,6 +508,22 @@
 			<br/></div>
 		</p>
 		<p>Note that Sirius does its best to take into account any change in the VSM, even for existing and opened representations. Sometimes, if the changes are too complex or in some corner cases not yet supported, you may need to close and reopen your representation, or in extreme case delete it and create a new one, in order to take the VSM changes into account properly.</p>
+		<h4 id="reloadVSM">Reload installed VSM</h4>
+		<p>Even though having your VSP in the runtime environment workspace is the best way to do dynamic development of your VSM, if your VSP is in the installed runtime plug-ins (that is the VSP plug-in is in the development environment workspace), you have the ability the reload it from your runtime to take external changes into account.
+			<br/>This is done with the 
+			<em>Reload installed VSM</em> action from the main Eclipse tool bar. 
+			<br/>Click on 
+			<em>Reload installed VSM</em> will have automatically effects in opened representations(depending on refresh options).
+		</p>
+		<p>
+			<em>Limitations</em>:
+		</p>
+		<ul>
+			<li>The action is available only if specifier plug-ins are installed.</li>
+			<li>The action is available only if the Eclipse Runtime is a started from PDE (that is, is not a stand alone application).</li>
+			<li>Only the VSM is reloaded. The Java classes that may have been changed in the VSP are updated as normal Java classes managed in debug mode.</li>
+			<li>If you delete the VSP in the host Eclipse, you may encounter unexpected exceptions.</li>
+		</ul>
 		<h3 id="migration">Migration from Previous Versions</h3>
 		<p>The 
 			<em>Viewpoint Specification Model</em> can evolve between two versions of Sirius. The migration process is done automatically. That means all VSM are migrated at loading time without any action from the user. While a VSM is not saved, the automatic migration will be replayed at the next opening.
diff --git a/doc/specifier/general/Writing_Queries.html b/doc/specifier/general/Writing_Queries.html
index d2fd0d3..1e9501a 100644
--- a/doc/specifier/general/Writing_Queries.html
+++ b/doc/specifier/general/Writing_Queries.html
@@ -37,6 +37,9 @@
 						<a href="#service_methods">Writing Java Services</a>
 					</li>
 					<li>
+						<a href="#service_navigation">Accessing Java service implementations from interpreted expression or Java extension</a>
+					</li>
+					<li>
 						<a href="#standard_services">Standard Services</a>
 						<ol style="list-style: disc;">
 							<li>
@@ -333,7 +336,11 @@
     }
 }
 </code></pre>
-		<p>Once a service has been defined and its class is registered in your VSM, you can invoke it in the expressions of languages which support it  like this: <code>[aFamily.getFamiliesContainingParents()/]</code>. (using Acceleo syntax) The invocation looks as if the service was a normal feature of the 
+		<p>After defining a service, you have to register it in your VSM with a Java extension:</p>
+		<p>
+			<img border="0" src="images/serviceVsmRegistration.png"/>
+		</p>
+		<p>Then you can invoke it in the expressions of languages which support it  like this: <code>[aFamily.getFamiliesContainingParents()/]</code>. (using Acceleo syntax) The invocation looks as if the service was a normal feature of the 
 			<code>Family</code> type. When the service is invoked, the model element on which it is invoked is used as the first argument to the Java method. If arguments are passed in the expression, they are mapped to the second, third, etc. parameters of the Java method, assuming the types are compatible. The result of evaluating a service invocation is the result of the Java method.
 		</p>
 		<p>
@@ -351,6 +358,25 @@
 				<code>void</code>. You can return any value instead, for example target argument (the service method&#8217;s first parameter). 
 			</li>
 		</ul>
+		<h2 id="service_navigation">Accessing Java service implementations from interpreted expression or Java extension</h2>
+		<p>If you want to see the service implementation(s) used in an interpreted expression in the Java editor, you just have to put your cursor on the service and press the 
+			<strong>F3</strong> keyboard key. Three scenarios can occur after hitting F3:
+		</p>
+		<ul>
+			<li>Nothing happens if your service does not exist in any services class defined in the VSM or if the expression is not complete (missing parenthesis and parameters).</li>
+			<li>If only one implementation matches your service, it is open directly in Java editor.</li>
+			<li>If many implementations match your service call, a wizard is opened and allows you to choose the Java class containing the service implementation you wish to see:</li>
+		</ul>
+		<p>
+			<img border="0" src="images/serviceNavigation.png"/>
+		</p>
+		<p>
+			<em>Warning:</em> This functionnality works only with 
+			<code>service:</code> and 
+			<code>aql:</code> interpreters, not with the Acceleo 3/MTL 
+			<code>[/]</code> interpreter.
+		</p>
+		<p>You also can open the service class specified in a Java extension by a double click on it in the VSM. It will open a Java editor if the qualified name corresponds to an existing implementation. </p>
 		<h2 id="standard_services">Standard Services</h2>
 		<p>Sirius provides some standard services that can be used from any VSM simply by adding the appropriate reference (as a 
 			<em>Java Extension</em>) to the implementation class&#8217;s fully qualified name. When using such a service class, make sure your 
diff --git a/doc/specifier/general/images/serviceNavigation.png b/doc/specifier/general/images/serviceNavigation.png
new file mode 100644
index 0000000..dc11d93
--- /dev/null
+++ b/doc/specifier/general/images/serviceNavigation.png
Binary files differ
diff --git a/doc/specifier/general/images/serviceVsmRegistration.png b/doc/specifier/general/images/serviceVsmRegistration.png
new file mode 100644
index 0000000..50489d1
--- /dev/null
+++ b/doc/specifier/general/images/serviceVsmRegistration.png
Binary files differ
diff --git a/doc/user/diagrams/Diagrams.html b/doc/user/diagrams/Diagrams.html
index a041d5d..bdd4ce0 100644
--- a/doc/user/diagrams/Diagrams.html
+++ b/doc/user/diagrams/Diagrams.html
@@ -1155,20 +1155,30 @@
 			<em>Zoom out</em>) button is active, clicking anywhere on the diagram will increment (resp. decrement) the zoom level by 25%. The current zoom level is visible in the tabbar when no diagram element is selected (see the section on the tabbar buttons for more ways to control the zoom level).
 		</p>
 		<p id="notes">
-			<i>Notes and note attachments</i>. All Sirius diagrams support the creation of notes and text elements, which can be attached to diagram elements. These elements are purely graphical annotations, and have no effect on the semantic model. The three tools used to create them are available in a combo-box in the palette&#8217;s top row. By default, the 
-			<em>Note</em> tool (represented by a yellow sticky note) is selected. If you click on the small arrow next to the sticky note, a menu appears where you can select which of the three tools to enable: 
+			<i>Notes, Link Notes and Note attachments</i>. All Sirius diagrams support the creation of notes and text elements, which can be attached to diagram elements. These elements are purely graphical annotations, and have no effect on the semantic model. The tools used to create them are available in a combo-box in the palette&#8217;s top row. By default, the 
+			<em>Note</em> tool (represented by a yellow sticky note) is selected. If you click on the small arrow next to the sticky note, a menu appears where you can select one of the available tools: 
 			<em>Note</em>, 
+			<em>Link Note</em>, 
 			<em>Text</em> or 
 			<em>Note attachment</em>.
 		</p>
 		<p>
-			<em>Notes</em> and 
+			<em>Notes</em>, 
+			<em>Link Notes</em> and 
 			<em>Text</em> elements are created in a similar way: either a single click somewhere on the diagram (which creates an element with a default size), or a click-drag to create the element with a custom initial size. Once created, one can edit the text inside the note or text zone usual the standard &#8220;direct edit&#8221; behavior (
 			<em>F2</em>, a slow double click, or by directly starting to enter alpha-numeric text). The only difference between notes and text zones is the visual presentation; notes have a yellow background (by default) and a border which represents a sticky not with a folded top-right corner. 
 		</p>
+		<p>A 
+			<em>Link Note</em> is a special kind of note which references any existing representation in the project. When creating a link note, a the target representation must be selected from a dialog. The link note displays the name of the target representation and its icon as the note header. It is possible to navigate to the target representation by double clicking on a link note. When the targeted representation is deleted, all link notes that reference it are deleted automatically. Just like normal notes, link notes have a text field for free text and can be attached to other elements with the note attachment tool. It is also possible to set a new target representation for an existing link note by selecting 
+			<em>Set target representation ...</em> from the link note&#8217;s context menu.
+		</p>
 		<p>
 			<em>Note attachments</em> can be created to link either notes or text zone to diagram elements (including other notes and text attachments). To create an attachment, activate the tool and then click once on the source element and once on the target element. You can also click and drag from the source to the target elements.
 		</p>
+		<p>
+			<em>Generic Edge Creation Tool</em> allows to create an edge by selecting first the source and the target before choosing the concrete edge creation tool. That allows to restrict the list of possible edge creation tools between two elements. The tool is allowed when the mouse is hovering the first element if at least one edge creation tool is applicable from this element. the same is applies for the target.
+			<br/>If only one edge creation tool is available, the tool will be applied once the source and target have been selected. If several edge creation tools are applicable, a menu displaying the list of possible tools makes possible to select which one to apply.
+		</p>
 		<p id="pinning">
 			<i>Pin/Unpin</i>. The final standard tools which are available in the top row of all the palette allow to mark or unmark diagram elements as 
 			<em>pinned</em>. Pinning an element on the diagram means that when an automatic layout of the diagram is requested (see the 
diff --git a/doc/user/diagrams/images/edgeLabelAttachment_preference.png b/doc/user/diagrams/images/edgeLabelAttachment_preference.png
index fd731fa..a1eeacf 100644
--- a/doc/user/diagrams/images/edgeLabelAttachment_preference.png
+++ b/doc/user/diagrams/images/edgeLabelAttachment_preference.png
Binary files differ
diff --git a/doc/user/diagrams/images/palette_tools.png b/doc/user/diagrams/images/palette_tools.png
index c2f234f..c41215f 100644
--- a/doc/user/diagrams/images/palette_tools.png
+++ b/doc/user/diagrams/images/palette_tools.png
Binary files differ
diff --git a/doc/user/sequences/Sequence Diagrams.html b/doc/user/sequences/Sequence Diagrams.html
index 095f483..7a0349d 100644
--- a/doc/user/sequences/Sequence Diagrams.html
+++ b/doc/user/sequences/Sequence Diagrams.html
@@ -24,6 +24,11 @@
 					</li>
 					<li>
 						<a href="#layout">Automatic Layout</a>
+						<ol style="list-style: disc;">
+							<li>
+								<a href="#insert_vertical_blank_space">Manually insert vertical blank space</a>
+							</li>
+						</ol>
 					</li>
 					<li>
 						<a href="#elements">Sequence Diagram Elements</a>
@@ -135,6 +140,16 @@
 		<p>The 
 			<em>Arrange All</em> command which launches an automatic layout of all the elements on a diagram has been completely customized for sequence diagrams. Arranging a sequence diagram will keep the relative positions of all the elements, but reduce any un-needed vertical or horizontal spaces. All elements will be resized to the minimum size necessary, and &#8220;packed&#8221; towards the top-left corner of the diagram. This results in a diagram which uses the minimum space required to present all the elements, while keeping enough white-space between them to be easy to read.
 		</p>
+		<h3 id="insert_vertical_blank_space">Manually insert vertical blank space</h3>
+		<p>It is also possible to manually insert vertical blank space to facilitate the organization of messages or to add new events in a sequence diagram. This feature is available on the vertical ruler by dragging the mouse with the Ctrl key pressed.
+			<br/>Below, an example where user inserts blank space before message m3:
+			<br/>
+			<img alt="Example where user inserts blank space before message m3" title="Example where user inserts blank space before message m3" border="0" src="images/insert_vertical_blank_space.png"/>
+		</p>
+		<p>To show ruler, you need to check the option 
+			<em>Show Ruler</em> as explained in 
+			<a href="../diagrams/Diagrams.html#RulersGrid">Rulers &amp; Grid</a> chapter.
+		</p>
 		<h2 id="elements">Sequence Diagram Elements</h2>
 		<p>This section presents each type of elements specific to sequence diagrams which are supported by Sirius, and their specificities (if any). Note that not all sequence diagrams will support all kinds of elements; this depends on the diagram&#8217;s configuration.</p>
 		<h3 id="Lifelines">Life-lines</h3>
diff --git a/doc/user/sequences/images/insert_vertical_blank_space.png b/doc/user/sequences/images/insert_vertical_blank_space.png
new file mode 100644
index 0000000..6aeb0ce
--- /dev/null
+++ b/doc/user/sequences/images/insert_vertical_blank_space.png
Binary files differ
