diff --git a/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java b/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java
index c86c626..28a7096 100644
--- a/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java
+++ b/org.eclipse.opencert.apm.assurproj.reuse/src/org/eclipse/opencert/apm/assurproj/reuse/views/ReuseAssistanceView.java
Binary files differ
diff --git a/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/AssurProjRefFrameworkSelectionWizardPage.java b/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/AssurProjRefFrameworkSelectionWizardPage.java
index 4d56974..f72b153 100644
--- a/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/AssurProjRefFrameworkSelectionWizardPage.java
+++ b/org.eclipse.opencert.apm.assurproj.wizards/src/org/eclipse/opencert/apm/assurproj/wizards/ui/wizards/AssurProjRefFrameworkSelectionWizardPage.java
@@ -543,36 +543,46 @@
 		while (actIterator.hasNext()){
 			RefActivity act=actIterator.next();
 			EList<RefActivity> subActivities = act.getSubActivity();
+			
+			EList<RefRequirement> requirements = act.getOwnedRequirement();
+			EList<RefApplicability> applicabilities = act.getApplicability();
+			UpdateCriticality(criticalityViewer,aplicabilityViewer, tviewer,applicabilities,act,null);
+			UpdateReqCriticality(criticalityViewer,aplicabilityViewer, tviewer,requirements,act);
+			
 			if(subActivities.size()>0){
 				UpdateActCriticality(criticalityViewer,aplicabilityViewer, tviewer,subActivities);
 			}
-			EList<RefRequirement> requirements = act.getOwnedRequirement();
-			EList<RefApplicability> applicabilities = act.getApplicability();
-			UpdateCriticality(criticalityViewer,aplicabilityViewer, tviewer,applicabilities);
-			UpdateReqCriticality(criticalityViewer,aplicabilityViewer, tviewer,requirements);
-			
 		}
 	}
 	
 	public void UpdateReqCriticality(CheckboxTreeViewerExt criticalityViewer, 
 			CheckboxTreeViewerExt aplicabilityViewer,
 			CheckboxTreeViewerExt tviewer,
-			EList<RefRequirement> requirements){
+			EList<RefRequirement> requirements,
+			RefActivity act){
 		Iterator<RefRequirement> reqIterator = requirements.iterator();
 		while(reqIterator.hasNext()){
 			RefRequirement req = reqIterator.next();
 			EList<RefRequirement> subReq = req.getSubRequirement();
-			if(subReq.size()>0){
-				UpdateReqCriticality(criticalityViewer,aplicabilityViewer, tviewer,subReq);
-			}
+			
 			EList<RefApplicability> reqApplicabilities = req.getApplicability();
-			UpdateCriticality(criticalityViewer, aplicabilityViewer, tviewer,reqApplicabilities);
+			UpdateCriticality(criticalityViewer, aplicabilityViewer, tviewer,reqApplicabilities,act,req);
+			
+			if(subReq.size()>0){
+				UpdateReqCriticality(criticalityViewer,aplicabilityViewer, tviewer,subReq,act);
+			}
 		}
 		
 	
 	}
-	public void UpdateCriticality(CheckboxTreeViewerExt criticalityViewer, CheckboxTreeViewerExt aplicabilityViewer,CheckboxTreeViewerExt tviewer,EList<RefApplicability> applicabilities){
+	public void UpdateCriticality(CheckboxTreeViewerExt criticalityViewer, CheckboxTreeViewerExt aplicabilityViewer,CheckboxTreeViewerExt tviewer,EList<RefApplicability> applicabilities, RefActivity act, RefRequirement req){
 		
+		//Is there is not applicabilities  related to the element,it will be checked if it's parent refActivity is checked
+		if(applicabilities.size()==0){		
+			if(req!=null){
+				tviewer.setChecked(req, tviewer.getChecked(act));
+			}
+		}
 		
 		Iterator<RefApplicability> applIterator = applicabilities.iterator();		
 		while(applIterator.hasNext()){
@@ -580,7 +590,7 @@
 			RefAssurableElement target = appli.getApplicTarget();
 			if (target!=null) {			
 				tviewer.setChecked(target, false);
-				tviewer.setChildrenStatus(target,false);
+				//tviewer.setChildrenStatus(target,false);
 				EList<RefCriticalityApplicability> critAppli = appli.getApplicCritic();
 				Iterator<RefCriticalityApplicability> critAppliIterator = critAppli.iterator();
 				while(critAppliIterator.hasNext()){
@@ -591,7 +601,7 @@
 					boolean statusApp =  aplicabilityViewer.getChecked(applicabilityLevel);
 					if(statusCrit && statusApp ){
 						tviewer.setChecked(target, true);
-						tviewer.setChildrenStatus(target,true);
+						//tviewer.setChildrenStatus(target,true);
 					}
 					
 					//ALC
@@ -607,6 +617,35 @@
 				}
 					
 			}	
+			else if (act!=null){
+				EList<RefCriticalityApplicability> critAppli = appli.getApplicCritic();
+				Iterator<RefCriticalityApplicability> critAppliIterator = critAppli.iterator();
+				while(critAppliIterator.hasNext()){
+					RefCriticalityApplicability critApp = critAppliIterator.next();
+					RefCriticalityLevel criticalityLevel = critApp.getCriticLevel();
+					RefApplicabilityLevel applicabilityLevel = critApp.getApplicLevel();
+					boolean statusCrit = criticalityViewer.getChecked(criticalityLevel);
+					boolean statusApp =  aplicabilityViewer.getChecked(applicabilityLevel);
+					if(statusCrit && statusApp ){						
+						tviewer.setChecked(act, true);						
+						//tviewer.setChildrenStatus(act,true);
+						if(req!=null){
+							tviewer.setChecked(req, true);						
+							//tviewer.setChildrenStatus(req,true);
+						}
+						
+					}
+					else{
+						tviewer.setChecked(act, false);
+						//tviewer.setChildrenStatus(act,false);
+						
+						if(req!=null){
+							tviewer.setChecked(req, false);						
+						//	tviewer.setChildrenStatus(req,false);
+						}
+					}
+				}
+			}
 		}
 
 	}
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessDiagramHyperLinkAdapter.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessDiagramHyperLinkAdapter.java
index abe1926..e102ce9 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessDiagramHyperLinkAdapter.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessDiagramHyperLinkAdapter.java
@@ -1,125 +1,125 @@
-/*******************************************************************************
- * Copyright (c) 2018 ALL4TEC.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *   Thanh Liem PHAN (ALL4TEC) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.opencert.infra.dashboard.pages.adapters;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.opencert.infra.dashboard.helpers.ChessPapyrusHelper;
-import org.eclipse.opencert.infra.dashboard.helpers.EclipseHelper;
-import org.eclipse.papyrus.commands.Activator;
-import org.eclipse.papyrus.commands.ICreationCommand;
-import org.eclipse.papyrus.infra.core.resource.ModelSet;
-import org.eclipse.papyrus.infra.core.services.ServiceException;
-import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
-import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
-import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPage;
-import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPageBookView;
-import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;
-import org.eclipse.ui.IViewPart;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.forms.events.HyperlinkAdapter;
-import org.eclipse.uml2.uml.Model;
-
-/**
- * A {@link HyperlinkAdapter} to create a new CHESS diagram.
- */
-public abstract class AbstractCreateNewChessDiagramHyperLinkAdapter
-		extends AbstractCreateNewChessElementHyperLinkAdapter {
-
-	/**
-	 * {@inheritDoc}
-	 *
-	 * Overridden to create a new diagram.
-	 */
-	@Override
-	protected void createChessElement() {
-		// Create a new diagram command
-		ICreationCommand vCreationCommand = getDiagramCreationCommand();
-
-		// Get the first opened Chess Papyrus editor
-		IMultiDiagramEditor vActivePapyrusEditor = (IMultiDiagramEditor) EclipseHelper.getFirstPapyrusDiagramEditorPart();
-		
-		// If there is one Chess graphical editor is opened,
-		// try to goto the right package and create the new diagram there
-		if (Objects.nonNull(vActivePapyrusEditor)) {
-			ServicesRegistry vRegistry = vActivePapyrusEditor.getServicesRegistry();
-
-			if (Objects.nonNull(vRegistry)) {
-				ModelSet vModelSet = null;
-				try {
-					vModelSet = vRegistry.getService(ModelSet.class);
-				} catch (ServiceException pException) {
-					Activator.log.error(pException);
-				}
-
-				if (Objects.nonNull(vModelSet)) {
-					// Get the root model
-					Model vRootModel = ChessPapyrusHelper.INSTANCE.getUmlModelFromModelSet(vModelSet);
-
-					// Get the target packageable element
-					org.eclipse.uml2.uml.PackageableElement vTargetElement = getTargetElement(vRootModel);
-
-					if (Objects.nonNull(vTargetElement)) {
-						// First goto the active Papyrus editor
-						EclipseHelper.getActiveWorkbenchPage().activate(vActivePapyrusEditor);
-
-						// Then select the target element before creating a new diagram
-						IViewPart vModelExplorer = null;
-						try {
-							vModelExplorer = EclipseHelper.getActiveWorkbenchPage().showView(MODEL_EXPLORER_VIEW_ID);
-						} catch (PartInitException pException) {
-							Activator.log.error(pException);
-						}
-
-						if (vModelExplorer instanceof ModelExplorerPageBookView) {
-							ModelExplorerPageBookView vMEPBView = (ModelExplorerPageBookView) vModelExplorer;
-
-							if (vMEPBView.getCurrentPage() instanceof ModelExplorerPage) {
-								ModelExplorerPage vMEPage = (ModelExplorerPage) vMEPBView.getCurrentPage();
-
-								ModelExplorerView vMEView = (ModelExplorerView) vMEPage.getViewer();
-								List<EObject> vSelectElements = new ArrayList<>();
-								vSelectElements.add(vTargetElement);
-								vMEView.revealSemanticElement(vSelectElements);
-							}
-
-							// Create the new diagram inside the target element
-							vCreationCommand.createDiagram(vModelSet, vTargetElement, null);
-						}
-					}
-				}
-			}
-		} else {
-			// Otherwise, no Chess graphical editor is already opened, ask user to open one
-			ChessPapyrusHelper.INSTANCE.openNoActivePapyrusEditorMessageBox();
-		}
-	}
-
-	/**
-	 * @return The creation command to create a diagram
-	 */
-	protected abstract ICreationCommand getDiagramCreationCommand();
-
-	/**
-	 * Get the target packageable element in which the new diagram will be created.
-	 *
-	 * @param pRootModel
-	 *            The root model
-	 * @return The target package
-	 */
-	protected abstract org.eclipse.uml2.uml.PackageableElement getTargetElement(Model pRootModel);
-}
+/*******************************************************************************
+ * Copyright (c) 2018 ALL4TEC.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   Thanh Liem PHAN (ALL4TEC) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.opencert.infra.dashboard.pages.adapters;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Objects;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.opencert.infra.dashboard.helpers.ChessPapyrusHelper;
+import org.eclipse.opencert.infra.dashboard.helpers.EclipseHelper;
+import org.eclipse.papyrus.commands.Activator;
+import org.eclipse.papyrus.commands.ICreationCommand;
+import org.eclipse.papyrus.infra.core.resource.ModelSet;
+import org.eclipse.papyrus.infra.core.services.ServiceException;
+import org.eclipse.papyrus.infra.core.services.ServicesRegistry;
+import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPage;
+import org.eclipse.papyrus.views.modelexplorer.ModelExplorerPageBookView;
+import org.eclipse.papyrus.views.modelexplorer.ModelExplorerView;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.uml2.uml.Model;
+
+/**
+ * A {@link HyperlinkAdapter} to create a new CHESS diagram.
+ */
+public abstract class AbstractCreateNewChessDiagramHyperLinkAdapter
+		extends AbstractCreateNewChessElementHyperLinkAdapter {
+
+	/**
+	 * {@inheritDoc}
+	 *
+	 * Overridden to create a new diagram.
+	 */
+	@Override
+	protected void createChessElement() {
+		// Create a new diagram command
+		ICreationCommand vCreationCommand = getDiagramCreationCommand();
+
+		// Get the first opened Chess Papyrus editor
+		IMultiDiagramEditor vActivePapyrusEditor = (IMultiDiagramEditor) EclipseHelper.getFirstPapyrusDiagramEditorPart();
+		
+		// If there is one Chess graphical editor is opened,
+		// try to goto the right package and create the new diagram there
+		if (Objects.nonNull(vActivePapyrusEditor)) {
+			ServicesRegistry vRegistry = vActivePapyrusEditor.getServicesRegistry();
+
+			if (Objects.nonNull(vRegistry)) {
+				ModelSet vModelSet = null;
+				try {
+					vModelSet = vRegistry.getService(ModelSet.class);
+				} catch (ServiceException pException) {
+					Activator.log.error(pException);
+				}
+
+				if (Objects.nonNull(vModelSet)) {
+					// Get the root model
+					Model vRootModel = ChessPapyrusHelper.INSTANCE.getUmlModelFromModelSet(vModelSet);
+
+					// Get the target packageable element
+					org.eclipse.uml2.uml.PackageableElement vTargetElement = getTargetElement(vRootModel);
+
+					if (Objects.nonNull(vTargetElement)) {
+						// First goto the active Papyrus editor
+						EclipseHelper.getActiveWorkbenchPage().activate(vActivePapyrusEditor);
+
+						// Then select the target element before creating a new diagram
+						IViewPart vModelExplorer = null;
+						try {
+							vModelExplorer = EclipseHelper.getActiveWorkbenchPage().showView(MODEL_EXPLORER_VIEW_ID);
+						} catch (PartInitException pException) {
+							Activator.log.error(pException);
+						}
+
+						if (vModelExplorer instanceof ModelExplorerPageBookView) {
+							ModelExplorerPageBookView vMEPBView = (ModelExplorerPageBookView) vModelExplorer;
+
+							if (vMEPBView.getCurrentPage() instanceof ModelExplorerPage) {
+								ModelExplorerPage vMEPage = (ModelExplorerPage) vMEPBView.getCurrentPage();
+
+								ModelExplorerView vMEView = (ModelExplorerView) vMEPage.getViewer();
+								List<EObject> vSelectElements = new ArrayList<>();
+								vSelectElements.add(vTargetElement);
+								vMEView.revealSemanticElement(vSelectElements);
+							}
+
+							// Create the new diagram inside the target element
+							vCreationCommand.createDiagram(vModelSet, vTargetElement, null);
+						}
+					}
+				}
+			}
+		} else {
+			// Otherwise, no Chess graphical editor is already opened, ask user to open one
+			ChessPapyrusHelper.INSTANCE.openNoActivePapyrusEditorMessageBox();
+		}
+	}
+
+	/**
+	 * @return The creation command to create a diagram
+	 */
+	protected abstract ICreationCommand getDiagramCreationCommand();
+
+	/**
+	 * Get the target packageable element in which the new diagram will be created.
+	 *
+	 * @param pRootModel
+	 *            The root model
+	 * @return The target package
+	 */
+	protected abstract org.eclipse.uml2.uml.PackageableElement getTargetElement(Model pRootModel);
+}
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessBlockDefinitionDiagram.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessBlockDefinitionDiagram.java
index 18ef5b0..214663d 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessBlockDefinitionDiagram.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessBlockDefinitionDiagram.java
@@ -1,44 +1,44 @@
-/*******************************************************************************
- * Copyright (c) 2018 ALL4TEC.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *   Thanh Liem PHAN (ALL4TEC) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.opencert.infra.dashboard.pages.adapters;
-
-import org.eclipse.opencert.infra.dashboard.helpers.ChessPapyrusHelper;
-import org.eclipse.papyrus.commands.ICreationCommand;
-import org.eclipse.papyrus.sysml.diagram.blockdefinition.BlockDefinitionDiagramCreateCommand;
-import org.eclipse.ui.forms.events.HyperlinkAdapter;
-import org.eclipse.uml2.uml.Model;
-import org.eclipse.uml2.uml.PackageableElement;
-
-/**
- * A {@link HyperlinkAdapter} to create a new CHESS block definition diagram.
- */
-public class CreateNewChessBlockDefinitionDiagram extends AbstractCreateNewChessDiagramHyperLinkAdapter {
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	protected ICreationCommand getDiagramCreationCommand() {
-		return new BlockDefinitionDiagramCreateCommand();
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	protected PackageableElement getTargetElement(final Model pRootModel) {
-		return ChessPapyrusHelper.INSTANCE.getPackageFromModelByName(pRootModel,
-				ChessPapyrusHelper.MODEL_SYSTEM_VIEW_NAME);
-	}
-}
+/*******************************************************************************
+ * Copyright (c) 2018 ALL4TEC.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   Thanh Liem PHAN (ALL4TEC) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.opencert.infra.dashboard.pages.adapters;
+
+import org.eclipse.opencert.infra.dashboard.helpers.ChessPapyrusHelper;
+import org.eclipse.papyrus.commands.ICreationCommand;
+import org.eclipse.papyrus.sysml.diagram.blockdefinition.BlockDefinitionDiagramCreateCommand;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.PackageableElement;
+
+/**
+ * A {@link HyperlinkAdapter} to create a new CHESS block definition diagram.
+ */
+public class CreateNewChessBlockDefinitionDiagram extends AbstractCreateNewChessDiagramHyperLinkAdapter {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected ICreationCommand getDiagramCreationCommand() {
+		return new BlockDefinitionDiagramCreateCommand();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected PackageableElement getTargetElement(final Model pRootModel) {
+		return ChessPapyrusHelper.INSTANCE.getPackageFromModelByName(pRootModel,
+				ChessPapyrusHelper.MODEL_SYSTEM_VIEW_NAME);
+	}
+}
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessRequirementDiagram.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessRequirementDiagram.java
index b8edda5..bfa8a7e 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessRequirementDiagram.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessRequirementDiagram.java
@@ -1,44 +1,44 @@
-/*******************************************************************************
- * Copyright (c) 2018 ALL4TEC.
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
- *
- * SPDX-License-Identifier: EPL-2.0
- *
- * Contributors:
- *   Thanh Liem PHAN (ALL4TEC) - initial API and implementation
- *******************************************************************************/
-package org.eclipse.opencert.infra.dashboard.pages.adapters;
-
-import org.eclipse.opencert.infra.dashboard.helpers.ChessPapyrusHelper;
-import org.eclipse.papyrus.commands.ICreationCommand;
-import org.eclipse.papyrus.sysml.diagram.requirement.RequirementDiagramCreateCommand;
-import org.eclipse.ui.forms.events.HyperlinkAdapter;
-import org.eclipse.uml2.uml.Model;
-import org.eclipse.uml2.uml.PackageableElement;
-
-/**
- * A {@link HyperlinkAdapter} to create a new CHESS requirement diagram.
- */
-public class CreateNewChessRequirementDiagram extends AbstractCreateNewChessDiagramHyperLinkAdapter {
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	protected ICreationCommand getDiagramCreationCommand() {
-		return new RequirementDiagramCreateCommand();
-	}
-
-	/**
-	 * {@inheritDoc}
-	 */
-	@Override
-	protected PackageableElement getTargetElement(final Model pRootModel) {
-		return ChessPapyrusHelper.INSTANCE.getPackageFromModelByName(pRootModel,
-				ChessPapyrusHelper.MODEL_REQUIREMENT_VIEW_NAME);
-	}
-}
+/*******************************************************************************
+ * Copyright (c) 2018 ALL4TEC.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.html
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *   Thanh Liem PHAN (ALL4TEC) - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.opencert.infra.dashboard.pages.adapters;
+
+import org.eclipse.opencert.infra.dashboard.helpers.ChessPapyrusHelper;
+import org.eclipse.papyrus.commands.ICreationCommand;
+import org.eclipse.papyrus.sysml.diagram.requirement.RequirementDiagramCreateCommand;
+import org.eclipse.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.PackageableElement;
+
+/**
+ * A {@link HyperlinkAdapter} to create a new CHESS requirement diagram.
+ */
+public class CreateNewChessRequirementDiagram extends AbstractCreateNewChessDiagramHyperLinkAdapter {
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected ICreationCommand getDiagramCreationCommand() {
+		return new RequirementDiagramCreateCommand();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected PackageableElement getTargetElement(final Model pRootModel) {
+		return ChessPapyrusHelper.INSTANCE.getPackageFromModelByName(pRootModel,
+				ChessPapyrusHelper.MODEL_REQUIREMENT_VIEW_NAME);
+	}
+}
