diff --git a/org.eclipse.opencert.infra.dashboard/META-INF/MANIFEST.MF b/org.eclipse.opencert.infra.dashboard/META-INF/MANIFEST.MF
index 35e8c8d..470cebc 100644
--- a/org.eclipse.opencert.infra.dashboard/META-INF/MANIFEST.MF
+++ b/org.eclipse.opencert.infra.dashboard/META-INF/MANIFEST.MF
@@ -7,16 +7,17 @@
 Bundle-Vendor: Tecnalia
 Require-Bundle: org.eclipse.opencert.pkm.refframework.diagram;bundle-version="1.0.0",
  org.eclipse.amalgam.explorer.activity.ui;bundle-version="1.7.0",
- org.eclipse.ui.navigator;bundle-version="3.6.101",
  org.eclipse.sirius;bundle-version="4.1.4",
  org.apache.commons.lang;bundle-version="2.6.0",
- org.eclipse.ui.ide;bundle-version="3.12.3",
- org.eclipse.emf.common.ui;bundle-version="2.11.0",
- org.eclipse.ui.views.properties.tabbed;bundle-version="3.7.0",
  org.eclipse.papyrus.infra.onefile;bundle-version="2.0.0",
- org.eclipse.emf.cdo;bundle-version="4.5.0",
  org.eclipse.epf.authoring.ui;bundle-version="1.5.0",
  org.eclipse.opencert.apm.assurproj.wizards;bundle-version="1.0.0",
- org.polarsys.chess.wizards;bundle-version="0.9.0"
+ org.polarsys.chess.wizards;bundle-version="0.9.0",
+ org.eclipse.papyrus.sysml.diagram.requirement;bundle-version="2.0.0",
+ org.eclipse.papyrus.views.modelexplorer;bundle-version="2.1.0",
+ org.eclipse.papyrus.editor;bundle-version="1.3.0",
+ org.eclipse.papyrus.sysml.diagram.internalblock;bundle-version="2.0.0",
+ org.eclipse.papyrus.sysml.diagram.blockdefinition;bundle-version="2.0.0",
+ org.eclipse.papyrus.uml.profile;bundle-version="2.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.opencert.infra.dashboard/icons/assurancecasemanagement/assurance_case_management_off.png b/org.eclipse.opencert.infra.dashboard/icons/assurancecasemanagement/assurance_case_management_off.png
new file mode 100644
index 0000000..c2909f7
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/assurancecasemanagement/assurance_case_management_off.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/assurancecasemanagement/assurance_case_management_on.png b/org.eclipse.opencert.infra.dashboard/icons/assurancecasemanagement/assurance_case_management_on.png
new file mode 100644
index 0000000..0b4964c
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/assurancecasemanagement/assurance_case_management_on.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/evidencemanagement/evidence_management_off.png b/org.eclipse.opencert.infra.dashboard/icons/evidencemanagement/evidence_management_off.png
new file mode 100644
index 0000000..de83923
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/evidencemanagement/evidence_management_off.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/evidencemanagement/evidence_management_on.png b/org.eclipse.opencert.infra.dashboard/icons/evidencemanagement/evidence_management_on.png
new file mode 100644
index 0000000..d2d6a3e
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/evidencemanagement/evidence_management_on.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/processcompliance/process_compliance_def_off.png b/org.eclipse.opencert.infra.dashboard/icons/processcompliance/process_compliance_def_off.png
new file mode 100644
index 0000000..d722da2
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/processcompliance/process_compliance_def_off.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/processcompliance/process_compliance_def_on.png b/org.eclipse.opencert.infra.dashboard/icons/processcompliance/process_compliance_def_on.png
new file mode 100644
index 0000000..c7fe3c5
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/processcompliance/process_compliance_def_on.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/processreusability/processreusability_off.png b/org.eclipse.opencert.infra.dashboard/icons/processreusability/processreusability_off.png
deleted file mode 100644
index 36601ab..0000000
--- a/org.eclipse.opencert.infra.dashboard/icons/processreusability/processreusability_off.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/processreusability/processreusability_on.png b/org.eclipse.opencert.infra.dashboard/icons/processreusability/processreusability_on.png
deleted file mode 100644
index 7a89f1b..0000000
--- a/org.eclipse.opencert.infra.dashboard/icons/processreusability/processreusability_on.png
+++ /dev/null
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/block_definition_diagram.png b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/block_definition_diagram.png
new file mode 100644
index 0000000..c4ce74b
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/block_definition_diagram.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/requirement_diagram.png b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/requirement_diagram.png
new file mode 100644
index 0000000..077f896
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/requirement_diagram.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/system_design_analysis_vv_off.png b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/system_design_analysis_vv_off.png
new file mode 100644
index 0000000..b9c1d94
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/system_design_analysis_vv_off.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/system_design_analysis_vv_on.png b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/system_design_analysis_vv_on.png
new file mode 100644
index 0000000..d5bfd8d
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/icons/systemdesignanalysis/system_design_analysis_vv_on.png
Binary files differ
diff --git a/org.eclipse.opencert.infra.dashboard/plugin.xml b/org.eclipse.opencert.infra.dashboard/plugin.xml
index 7a6306d..61a60ad 100644
--- a/org.eclipse.opencert.infra.dashboard/plugin.xml
+++ b/org.eclipse.opencert.infra.dashboard/plugin.xml
@@ -29,7 +29,7 @@
             title="Standard Compliance Definition"
             viewer="true">
          <Description>
-            Standard Compliance Definition in OpenCert
+            Project independent activities capture, digitalize, store and retrieve standard compliance knowledge. Specify reusable compliant process associated with a specific standard.
          </Description>
          <Predicate
                class="org.eclipse.opencert.infra.dashboard.predicates.DashboardPredicate">
@@ -85,7 +85,7 @@
                   index="0"
                   name="Modelling of reusable process elements">
                <Description>
-                  Description body text
+                  Modelling of reusable process elements.
                </Description>
             </Activity>
             <Activity
@@ -93,7 +93,7 @@
                   index="1"
                   name="Modelling of reusable process patterns">
                <Description>
-                  Description body text
+                  Modelling of reusable process patterns.
                </Description>
             </Activity>
             <Activity
@@ -118,7 +118,7 @@
             title="Assurance Project Definition"
             viewer="true">
          <Description>
-            Assurance Project Definition in OpenCert
+            Define the scope of compliance for a project, project compliance lifecycle, reuse possibilities and compliance means.
          </Description>
          <Predicate
                class="org.eclipse.opencert.infra.dashboard.predicates.DashboardPredicate">
@@ -192,7 +192,7 @@
                   index="0"
                   name="Cross system reuse">
                <Description>
-                  Description body text
+                  Cross system reuse.
                </Description>
             </Activity>
             <Activity
@@ -200,48 +200,751 @@
                   index="1"
                   name="Cross standard reuse">
                <Description>
-                  Description body text
+                  Cross standard reuse.
                </Description>
             </Activity>
          </Section>
       </Page>
       <Page
-            class="org.eclipse.opencert.infra.dashboard.pages.ProcessReusabilityDefinitionPage"
-            id="org.eclipse.opencert.infra.dashboard.pages.process.reusability.definition.page"
-            imageOff="icons/processreusability/processreusability_off.png"
-            imageOn="icons/processreusability/processreusability_on.png"
+            class="org.eclipse.opencert.infra.dashboard.pages.ProcessComplianceDefinitionPage"
+            id="org.eclipse.opencert.infra.dashboard.pages.process.compliance.definition.page"
+            imageOff="icons/processcompliance/process_compliance_def_off.png"
+            imageOn="icons/processcompliance/process_compliance_def_on.png"
             index="3"
-            tabName="Process Reusability Definition"
-            title="Process Reusability Definition"
+            tabName="Process Compliance Definition"
+            title="Process Compliance Definition"
             viewer="true">
          <Description>
-            Process Reusability Definition in OpenCert
+            Validate process reusability, deploy executable process.
          </Description>
          <Predicate
                class="org.eclipse.opencert.infra.dashboard.predicates.DashboardPredicate">
          </Predicate>
          <Overview
-               imageOff="icons/processreusability/processreusability_off.png"
-               imageOn="icons/processreusability/processreusability_on.png">
+               imageOff="icons/processcompliance/process_compliance_def_off.png"
+               imageOn="icons/processcompliance/process_compliance_def_on.png">
             <Description>
-               Define the process reusability.
+               Define the process compliance.
             </Description>
          </Overview>
          <Section
                expanded="true"
                filtering="true"
-               id="org.eclipse.opencert.infra.dashboard.section.process.reusability.definition"
+               id="org.eclipse.opencert.infra.dashboard.section.specify.compliance.process"
                index="0"
-               name="Process Reusability Definition">
+               name="Specify Compliance Process">
             <Description>
-               Define the process reuseabitlity.
+               The Process Engineer can import existing processes and resolve the variability due to safety/security appliance.
             </Description>
             <Activity
-                  id="org.eclipse.opencert.infra.dashboard.activity.define.process.reuseability"
+                  id="org.eclipse.opencert.infra.dashboard.activity.export.definition.planning"
                   index="0"
-                  name="Define process reuseability">
+                  name="Export the definition and planning of processes modelled ">
                <Description>
-                  Define the process reuseability.
+                  Export the definition and planning of processes modelled.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.import.definition.planning"
+                  index="1"
+                  name="Import the definition and planning of processes modelled into an assurance project">
+               <Description>
+                  Import the definition and planning of processes modelled into an assurance project.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.reuse.process.development"
+               index="1"
+               name="Reuse Process Development">
+            <Description>
+               The Process Engineer instantiate the reusable generic base process developed to a project specific process. A check is necessary to be sure that the assumptions for the reused activities are valid for the new project.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.derivate.project.specific.process"
+                  index="0"
+                  name="Derivate project specific process">
+               <Description>
+                  Derivate project specific process.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.check.process.reusability"
+                  index="1"
+                  name="Check process reusability">
+               <Description>
+                  Check process reusability.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.coassessment"
+               index="2"
+               name="Co-Assessment">
+            <Description>
+               The Process Engineer takes the modelling the definition and planning of processes already defined in EPF and import it into OpenCert in order to look at post-planning phases.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.coassessment.cross.system.reuse."
+                  index="0"
+                  name="Cross system reuse">
+               <Description>
+                  Cross system reuse.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.coassessment.cross.standard.reuse"
+                  index="1"
+                  name="Cross standard reuse">
+               <Description>
+                  Cross standard reuse.
+               </Description>
+            </Activity>
+         </Section>
+      </Page>
+      <Page
+            class="org.eclipse.opencert.infra.dashboard.pages.SystemDesignAnalysisVVPage"
+            id="org.eclipse.opencert.infra.dashboard.pages.system.design.analysis.vv"
+            imageOff="icons/systemdesignanalysis/system_design_analysis_vv_off.png"
+            imageOn="icons/systemdesignanalysis/system_design_analysis_vv_on.png"
+            index="4"
+            tabName="System Design Analysis and V&amp;V"
+            title="System Design Analysis and V&amp;V"
+            viewer="true">
+         <Description>
+            Define the system architecture, elicit system requirements, define and validate component contracts and execute Safety/Security analyses.
+         </Description>
+         <Predicate
+               class="org.eclipse.opencert.infra.dashboard.predicates.DashboardPredicate">
+         </Predicate>
+         <Overview
+               imageOff="icons/systemdesignanalysis/system_design_analysis_vv_off.png"
+               imageOn="icons/systemdesignanalysis/system_design_analysis_vv_on.png">
+            <Description>
+               System design, analysis, validation and verification
+            </Description>
+         </Overview>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.system.definition"
+               index="0"
+               name="System Definition">
+            <Description>
+               The development engineer uses SysML BDD, IBD and Requirements Diagrams, possibility to import requirements from external tools, formalization of requirements supported with syntax-driven editors.
+            </Description>
+            <Activity
+                  class="org.eclipse.opencert.infra.dashboard.pages.adapters.OpenNewChessProjectWizard"
+                  id="org.eclipse.opencert.infra.dashboard.activity.create.chess.project"
+                  image="icons/assuranceproject/chess_project_icon.png"
+                  index="0"
+                  name="Create a Papyrus CHESS project">
+               <Description>
+                  Create a Papyrus CHESS project.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.create.savona.project"
+                  index="1"
+                  name="Create a SAVONA project">
+               <Description>
+                  Create a SAVONA project.
+               </Description>
+            </Activity>
+            <Activity
+                  class="org.eclipse.opencert.infra.dashboard.pages.adapters.CreateNewChessRequirementDiagram"
+                  id="org.eclipse.opencert.infra.dashboard.activity.specify.requirements.chess"
+                  image="icons/systemdesignanalysis/requirement_diagram.png"
+                  index="2"
+                  name="Specify requirements in Papyrus CHESS">
+               <Description>
+                  Specify requirements in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  class="org.eclipse.opencert.infra.dashboard.pages.adapters.OpenImportUserModelDialogHyperLinkAdapter"
+                  id="org.eclipse.opencert.infra.dashboard.activity.import.requirements.chess"
+                  image="icons/systemdesignanalysis/requirement_diagram.png"
+                  index="3"
+                  name="Import system entities/requirements from a Papyrus CHESS model">
+               <Description>
+                  Import requirements in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  class="org.eclipse.opencert.infra.dashboard.pages.adapters.CreateNewChessBlockDefinitionDiagram"
+                  id="org.eclipse.opencert.infra.dashboard.activity.create.system.components.chess"
+                  image="icons/systemdesignanalysis/block_definition_diagram.png"
+                  index="4"
+                  name="Create system components in Papyrus CHESS">
+               <Description>
+                  Create system components in Papyrus CHESS
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.import.savona.model"
+                  index="5"
+                  name="Import a SAVONA model in Papyrus CHESS">
+               <Description>
+                  Import a SAVONA model in Papyrus CHESS.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.requirements.formalization.early.validation"
+               index="1"
+               name="Requirements Formalization and Early Validation">
+            <Description>
+               Formal semantic analysis of formal properties, analysis of requirements quality with machine learning techniques and requirements quality metrics editors.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.analysis.requirements.metric"
+                  index="0"
+                  name="Analysis of requirements based on quality metrics">
+               <Description>
+                  Analysis of requirements based on quality metrics.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.formalize.requirements.temporal.logic"
+                  index="1"
+                  name="Formalize a requirement into temporal logics in Papyrus CHESS">
+               <Description>
+                  Formalize a requirements into temporal logics in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.formalize.requirements.savona"
+                  index="2"
+                  name="Formalize a requirement in SAVONA">
+               <Description>
+                  Formalize a requirement in SAVONA.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.define.contract.component.chess"
+                  index="3"
+                  name="Define a contract for a component in Papyrus CHESS">
+               <Description>
+                  Define a contract for a component in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.analysis.requirements.semantics"
+                  index="4"
+                  name="Analysis of requirements’ semantics based on their formalisation into temporal logics">
+               <Description>
+                  Analysis of requirements’ semantics based on their formalisation into temporal logics.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.functional.refinement"
+               index="2"
+               name="Functional Refinement">
+            <Description>
+               Using SysML IBD extended with contracts.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.decompose.component.chess"
+                  index="0"
+                  name="Decompose a component in Papyrus CHESS">
+               <Description>
+                  Decompose a component in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.decompose.component.savona"
+                  index="1"
+                  name="Decompose a component in SAVONA">
+               <Description>
+                  Decompose a component in SAVONA.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.model.contracts.refinement.chess"
+                  index="2"
+                  name="Model contracts refinement in Papyrus CHESS">
+               <Description>
+                  Model contracts refinement in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.model.contracts.refinement.savona"
+                  index="3"
+                  name="Model contracts refinement in SAVONA">
+               <Description>
+                  Model contracts refinement in SAVONA.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.apply.architectural.patterns.chess"
+                  index="4"
+                  name="Apply architectural patterns in Papyrus CHESS">
+               <Description>
+                  Apply architectural patterns in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.specify.parameters.chess"
+                  index="5"
+                  name="Specify parameters of the parameterized architecture in Papyrus CHESS">
+               <Description>
+                  Specify parameters of the parameterized architecture in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.instantiate.parameterized.architecture.chess"
+                  index="6"
+                  name="Instantiate a parameterized architecture in Papyrus CHESS">
+               <Description>
+                  Instantiate a parameterized architecture in Papyrus CHESS.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.components.nominal.faulty.behaviour.definition"
+               index="3"
+               name="Component&apos;s Nominal and Faulty Behaviour Definition">
+            <Description>
+               Using State Machines or Simulink models extended with fault injection.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.define.nominal.statemachine.chess"
+                  index="0"
+                  name="Define a nominal state machine for a component in Papyrus CHESS">
+               <Description>
+                  Define a nominal state machine for a component in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.define.error.statemachine.chess"
+                  index="1"
+                  name="Define an error state machine for a component in Papyrus CHESS">
+               <Description>
+                  Define an error state machine for a component in Papyrus CHESS.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.define.failure.progation.rule.chess"
+                  index="2"
+                  name="Define a failure propagation rule for a component in Papyrus CHESS">
+               <Description>
+                  Define a failure propagation rule for a component in Papyrus CHESS.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.functional.early.verification"
+               index="4"
+               name="Functional Early Verification">
+            <Description>
+               Contract-based Verification of refinement and state-machines, Model Checking, Contract-based Monitoring of Simulink models, Contract-based Verification of Refinement with Strong and Weak Contracts.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.contractbased.verification.refinement"
+                  index="0"
+                  name="Contract-based verification of refinement">
+               <Description>
+                  Contract-based verification of refinement.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.contractbased.verification.statemachines"
+                  index="1"
+                  name="Contract-based verification of state machines">
+               <Description>
+                  Contract-based verification of state machines.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.model.checking"
+                  index="2"
+                  name="Model checking">
+               <Description>
+                  Model checking.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.contractbased.monitoring.simulink"
+                  index="3"
+                  name="Contract-based monitoring with Simulink">
+               <Description>
+                  Contract-based monitoring with Simulink.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.contractbased.verification.refinement.strong.weak"
+                  index="4"
+                  name="Contract-based verification of refinement for strong and weak contracts">
+               <Description>
+                  Contract-based verification of refinement for strong and weak contracts.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.contractbased.tradeoff.analysis"
+                  index="5"
+                  name="Contract-based trade-off analysis in parameterized architectures">
+               <Description>
+                  Contract-based trade-off analysis in parameterized architectures.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.coanalysis"
+               index="5"
+               name="Co-Analysis">
+            <Description>
+               The Development Engineer executes safety and security analysis using: Simulation-based Fault Injection, Model-Based Safety Analysis, Contract-Based Safety Analysis.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.simulationbased.fault.injection"
+                  index="0"
+                  name="Simulation-based fault injection">
+               <Description>
+                  Simulation-based fault injection.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.modelbased.fta"
+                  index="1"
+                  name="Model-based FTA">
+               <Description>
+                  Model-based FTA.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.modelbased.fmea"
+                  index="2"
+                  name="Model-based FMEA">
+               <Description>
+                  Model-based FMEA.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.contractbased.safety.analysis"
+                  index="3"
+                  name="Contract-based safety analysis">
+               <Description>
+                  Contract-based safety analysis.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.concerto.fla.coanalysis"
+                  index="4"
+                  name="Concerto FLA co-analysis">
+               <Description>
+                  Concerto FLA co-analysis.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.model.fmvea"
+                  index="5"
+                  name="Model failures modes vulnerability &amp; effects analysis">
+               <Description>
+                  Model failures modes vulnerability&amp; effects analysis.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.safetysecurity.coanalysis.sa"
+                  index="6"
+                  name="Safety &amp; Security co-analysis in Safety Architect">
+               <Description>
+                  Safety &amp; Security co-analysis in Safety Architect.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.dependability.coanalysis.papyrus.sse"
+                  index="7"
+                  name="System dependability co-analysis via Papyrus SSE">
+               <Description>
+                  System dependability co-analysis via Papyrus SSE.
+               </Description>
+            </Activity>
+         </Section>
+      </Page>
+      <Page
+            class="org.eclipse.opencert.infra.dashboard.pages.AssuranceCaseManagementPage"
+            id="org.eclipse.opencert.infra.dashboard.pages.assurance.case.management"
+            imageOff="icons/assurancecasemanagement/assurance_case_management_off.png"
+            imageOn="icons/assurancecasemanagement/assurance_case_management_on.png"
+            index="5"
+            tabName="Assurance Case Management"
+            title="Assurance Case Management"
+            viewer="true">
+         <Description>
+            Define argumentation using compliance arguments, product arguments. Resolve Safety/Security trade off, link to architecture.
+         </Description>
+         <Predicate
+               class="org.eclipse.opencert.infra.dashboard.predicates.DashboardPredicate">
+         </Predicate>
+         <Overview
+               imageOff="icons/assurancecasemanagement/assurance_case_management_off.png"
+               imageOn="icons/assurancecasemanagement/assurance_case_management_on.png">
+            <Description>
+               Assurance case management.
+            </Description>
+         </Overview>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.create.assurance.case.structure"
+               index="0"
+               name="Create Assurance Case Structure">
+            <Description>
+               The assurance engineer creates and manages assurance cases and link them to the assurance project asset package.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.create.assurance.case"
+                  index="0"
+                  name="Create a new assurance case">
+               <Description>
+                  Create a new assurance case.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.develop.claims.links.evidence"
+               index="1"
+               name="Develop Claims and Links to Evidence">
+            <Description>
+               The assurance engineer defines the argumentation structure, develops claims and links to evidences. The assurance engineer can take advantage of the arguments generation to complete the assurance case arguments.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.import.argumentation.model"
+                  index="0"
+                  name="Import argumentation model">
+               <Description>
+                  Import argumentation model.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.generate.arguments.fragments"
+                  index="1"
+                  name="Generate arguments fragments from system contracts">
+               <Description>
+                  Generate arguments fragments from system contracts.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.generate.process.based.arguments"
+                  index="2"
+                  name="Generate process based arguments">
+               <Description>
+                  Generate process based arguments.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.manage.architecture.assurance.links"
+               index="2"
+               name="Manage Architecture - Assurance Links">
+            <Description>
+               The assurance engineer or the development engineer can explicitly indicate the links between the system architecture components and the assurance cases elements such as argument modules.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.link.architecture.components"
+                  index="0"
+                  name="Link your architecture components to the assurance case elements">
+               <Description>
+                  Link your architecture components to the assurance case elements.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.assurance.case.reuse"
+               index="3"
+               name="Reuse">
+            <Description>
+               The assurance engineer can either create a reusable argument element such as argument patterns or arguments modules or use those elements in the actual argumentation. Assurance engineer can also reuse arguments based on the variability points specified.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.create.argument.pattern.module"
+                  index="0"
+                  name="Create an argument pattern or argument module">
+               <Description>
+                  Create an argument pattern or argument module.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.reuse.assurance.case.patterns.modules"
+                  index="1"
+                  name="Reuse from assurance case patterns and modules">
+               <Description>
+                  Reuse from assurance case patterns and modules.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.assurance.case.related.reuse"
+                  index="2"
+                  name="Assurance case-related reuse via management of assurance case lines">
+               <Description>
+                  Assurance case-related reuse via management of assurance case lines.
+               </Description>
+            </Activity>
+         </Section>
+      </Page>
+      <Page
+            class="org.eclipse.opencert.infra.dashboard.pages.EvidenceManagementPage"
+            id="org.eclipse.opencert.infra.dashboard.pages.evidence.management"
+            imageOff="icons/evidencemanagement/evidence_management_off.png"
+            imageOn="icons/evidencemanagement/evidence_management_on.png"
+            index="6"
+            tabName="Evidence Management"
+            title="Evidence Management"
+            viewer="true">
+         <Description>
+            Define the project evidences, define the traceability between artefacts, execute the process to generate evidence and map them to the compliance needs.
+         </Description>
+         <Predicate
+               class="org.eclipse.opencert.infra.dashboard.predicates.DashboardPredicate">
+         </Predicate>
+         <Overview
+               imageOff="icons/evidencemanagement/evidence_management_off.png"
+               imageOn="icons/evidencemanagement/evidence_management_on.png">
+            <Description>
+               Evidence management.
+            </Description>
+         </Overview>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.create.evidence.specification"
+               index="0"
+               name="Create Evidence Specification">
+            <Description>
+               The assurance engineer can create an evidence model and link it to the assurance project asset package.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.create.evidence.model"
+                  index="0"
+                  name="Create a new evidence model">
+               <Description>
+                  Create a new evidence model.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.create.artiface.traceability"
+               index="1"
+               name="Create Artefact Traceability">
+            <Description>
+               The assurance engineer can specify the traceability between the artefacts and other elements in the models.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.define.traceability.evidences"
+                  index="0"
+                  name="Define the traceability of your evidences">
+               <Description>
+                  Define the traceability of your evidences.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.execute.process.generate.artefacts"
+               index="2"
+               name="Execute Process and Generate Artefacts">
+            <Description>
+               The assurance engineer import evidences either from processes modelled in EPF, from external tools or in a process management tool such as WEFACT execute the processes and retrieve the generated evidences.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.import.process.evidences.epf"
+                  index="0"
+                  name="Import process and evidences from EPF">
+               <Description>
+                  Import process and evidences from EPF.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.import.evidences.external.tool"
+                  index="1"
+                  name="Import evidences from external tool">
+               <Description>
+                  Import evidences from external tool.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.execute.processes.generate.evidences"
+                  index="2"
+                  name="Execute processes to generate evidences">
+               <Description>
+                  Execute processes to generate evidences.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.manage.compliance.process.artefacts"
+               index="3"
+               name="Manage Compliance of Process and Artefacts">
+            <Description>
+               The assurance engineer should create and manage the mapping between what has been done and the needs of compliance from a standard/regulation… The assurance manager or the project manager can show the status of compliance of a project at any time.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.create.new.compliance.maps"
+                  index="0"
+                  name="Create a new compliance maps">
+               <Description>
+                  Create a new compliance maps.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.update.compliance.project"
+                  index="1"
+                  name="Update the compliance of a project">
+               <Description>
+                  Update the compliance of a project.
+               </Description>
+            </Activity>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.show.compliance.status.project"
+                  index="2"
+                  name="Show the compliance status of a project">
+               <Description>
+                  Show the compliance status of a project.
+               </Description>
+            </Activity>
+         </Section>
+         <Section
+               expanded="true"
+               filtering="true"
+               id="org.eclipse.opencert.infra.dashboard.section.evidence.management.reuse"
+               index="4"
+               name="Reuse">
+            <Description>
+               Evidence management reuse.
+            </Description>
+            <Activity
+                  id="org.eclipse.opencert.infra.dashboard.activity.manage.evidence.reuse.variability"
+                  index="0"
+                  name="Manage the evidence reuse variability">
+               <Description>
+                  Manage the evidence reuse variability.
                </Description>
             </Activity>
          </Section>
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/dialogs/PackageImportDialog.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/dialogs/PackageImportDialog.java
new file mode 100644
index 0000000..96b73be
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/dialogs/PackageImportDialog.java
@@ -0,0 +1,112 @@
+package org.eclipse.opencert.infra.dashboard.dialogs;
+
+import java.util.Collection;
+
+import org.eclipse.papyrus.uml.profile.ui.dialogs.PackageImportTreeSelectionDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.layout.RowLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Package;
+
+/**
+ * This class is cloned from org.eclipse.papyrus.uml.importt.ui as it could not be imported directly.
+ */
+public class PackageImportDialog extends PackageImportTreeSelectionDialog {
+
+	/**
+	 * Default constructor.
+	 * 
+	 * @param pShell The parent shell
+	 * @param pPackage The package to import
+	 */
+	public PackageImportDialog(Shell pShell, Package pPackage) {
+		super(pShell, pPackage);
+	}
+
+	/**
+	 * Constructor with a collection of packages to import.
+	 *
+	 * @param pShell The parent shell
+	 * @param pPackages The packages to import
+	 */
+	public PackageImportDialog(Shell pShell, Collection<? extends Package> pPackages) {
+		super(pShell, pPackages);
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public Composite createDialogArea(Composite pParent) {
+		Composite vResult = (Composite) super.createDialogArea(pParent);
+
+		Composite vButtons = new Composite(vResult, SWT.NONE);
+		vButtons.setLayout(new RowLayout());
+
+		Button vBtnLoadAll = new Button(vButtons, SWT.PUSH);
+		vBtnLoadAll.setText("Load All"); //$NON-NLS-1$
+		vBtnLoadAll.addSelectionListener(new SelectionAdapter() {
+
+			/**
+			 * {@inheritDoc}
+			 */
+			@Override
+			public void widgetSelected(SelectionEvent pEvent) {
+				selectAll(ImportAction.LOAD);
+			}
+		});
+
+		Button vBtnImportAll = new Button(vButtons, SWT.PUSH);
+		vBtnImportAll.setText("Import All");//$NON-NLS-1$
+		vBtnImportAll.addSelectionListener(new SelectionAdapter() {
+
+			/**
+			 * {@inheritDoc}
+			 */
+			@Override
+			public void widgetSelected(SelectionEvent pEvent) {
+				selectAll(ImportAction.IMPORT);
+			}
+		});
+
+		Button vBtnCopyAll = new Button(vButtons, SWT.PUSH);
+		vBtnCopyAll.setText("Copy All"); //$NON-NLS-1$
+		vBtnCopyAll.addSelectionListener(new SelectionAdapter() {
+
+			/**
+			 * {@inheritDoc}
+			 */
+			@Override
+			public void widgetSelected(SelectionEvent pEvent) {
+				selectAll(ImportAction.COPY);
+			}
+		});
+
+		Button vBtnDeselectAll = new Button(vButtons, SWT.PUSH);
+		vBtnDeselectAll.setText("Deselect All"); //$NON-NLS-1$
+		vBtnDeselectAll.addSelectionListener(new SelectionAdapter() {
+
+			/**
+			 * {@inheritDoc}
+			 */
+			@Override
+			public void widgetSelected(SelectionEvent pEvent) {
+				selectAll(ImportAction.NONE);
+			}
+		});
+
+		return vResult;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	protected boolean isResizable() {
+		return true;
+	}
+}
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java
index 072910e..6b4ba60 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/handlers/OpenDashboardHandler.java
@@ -43,8 +43,11 @@
 import org.eclipse.ui.handlers.HandlerUtil;
 
 /**
- * Concrete implementation for command part in Command pattern. Open the
- * dashboard for the current active project.
+ * Concrete implementation for command part in Command pattern. Open the dashboard for the current active project.
+ *
+ * TODO:
+ * - handle the opened diagram editor for CDO project
+ * - handle multiple graphical editors opened from different CHESS models
  */
 public final class OpenDashboardHandler extends AbstractHandler {
 
@@ -97,15 +100,15 @@
 			}
 		} else {
 			// Otherwise, the selected element could be a CDOResource (for OpenCert project)
-			Object selectedObject = getFirstSelectionObject(pEvent);
-			if (selectedObject instanceof CDOResource) {
+			Object vSelectedObject = getFirstSelectionObject(pEvent);
+			if (vSelectedObject instanceof CDOResource) {
 				// TODO: handle the CDO resource
 			}
 		}
 
 		// Finally, if a session is found or created, open the corresponding activity explorer
 		if (Objects.nonNull(vSession)) {
-				OpenSessionAction.openActivityExplorer(vSession);
+			OpenSessionAction.openActivityExplorer(vSession);
 		} else {
 			// Otherwise, open the dashboard for a null session
 			IWorkbenchPage vActivePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ChessPapyrusHelper.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ChessPapyrusHelper.java
new file mode 100644
index 0000000..c9af856
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/ChessPapyrusHelper.java
@@ -0,0 +1,149 @@
+/*******************************************************************************
+ * 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.helpers;
+
+import java.util.Objects;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.papyrus.commands.Activator;
+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.swt.SWT;
+import org.eclipse.swt.widgets.MessageBox;
+import org.eclipse.uml2.uml.Model;
+
+/**
+ * Helper methods to work with Papyrus CHESS Uml model elements.
+ */
+public final class ChessPapyrusHelper {
+
+	/** Singleton instance of this class. */
+	public static final ChessPapyrusHelper INSTANCE = new ChessPapyrusHelper();
+
+	/** Text for warning there is no active Chess editor. */
+	private final String NO_ACTIVE_CHESS_EDITOR_WARNING_TEXT = "Active Papyrus CHESS editor not found"; //$NON-NLS-1$
+
+	/** Message for warning there is no active Chess editor. */
+	private final String NO_ACTIVE_CHESS_EDITOR_WARNING_MESSAGE = "At least one Papyrus CHESS editor must be active to create a new diagram. Please open a Papyrus CHESS model."; //$NON-NLS-1$
+
+	/** Name of the model requirement view. */
+	public static final String MODEL_REQUIREMENT_VIEW_NAME = "modelRequirementView"; //$NON-NLS-1$
+
+	/** Name of the model system view. */
+	public static final String MODEL_SYSTEM_VIEW_NAME = "modelSystemView"; //$NON-NLS-1$
+
+	/**
+	 * Default constructor, private to avoid instantiation.
+	 */
+	private ChessPapyrusHelper() {
+		super();
+	}
+
+	/**
+	 * @return The root UML model element, which is the first node in the resource content
+	 */
+	public Model getUmlModelFromResource(final Resource pResource) {
+		Model vModel = null;
+
+		// Get the current Model from the resource content
+		if (!pResource.getContents().isEmpty()) {
+			// Get the root object of the resource
+			EObject vObject = pResource.getContents().get(0);
+
+			if (vObject instanceof Model) {
+				vModel = (Model) vObject;
+			}
+		}
+
+		return vModel;
+	}
+
+	/**
+	 * @return The root UML model element, which is the first node in the resource content, or {@code null} if not found
+	 */
+	public Model getUmlModelFromModelSet(final ModelSet pModelSet) {
+		Objects.requireNonNull(pModelSet);
+
+		Model vModel = null;
+
+		// Retrieve the Uml URI from the model set
+		URI vUmlURI = pModelSet.getURIWithoutExtension().appendFileExtension("uml"); //$NON-NLS-1$
+		Resource vResource = pModelSet.getResource(vUmlURI, false);
+
+		// Get the current model from the resource content
+		if (Objects.nonNull(vResource) && !vResource.getContents().isEmpty()) {
+			// Get the root object of the resource
+			EObject vObject = vResource.getContents().get(0);
+
+			if (vObject instanceof Model) {
+				vModel = (Model) vObject;
+			}
+		}
+
+		return vModel;
+	}
+
+	/**
+	 * Get the root UML model from the diagram editor.
+	 *
+	 * @return The found UML {@link Model}, otherwise {@code null}
+	 */
+	public Model getUmlModelFromDiagramEditor(final IMultiDiagramEditor vPapyrusDiagramEditor) {
+		Model vRootModel = null;
+
+		// Try to goto the right package and create the new diagram there
+		if (Objects.nonNull(vPapyrusDiagramEditor)) {
+			ServicesRegistry vRegistry = vPapyrusDiagramEditor.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
+					vRootModel = ChessPapyrusHelper.INSTANCE.getUmlModelFromModelSet(vModelSet);
+				}
+			}
+		}
+
+		return vRootModel;
+	}
+
+	/**
+	 * @return The root UML model element, which is the first node in the resource content
+	 */
+	public org.eclipse.uml2.uml.Package getPackageFromModelByName(final Model pModel, final String pPackageName) {
+		Objects.requireNonNull(pModel);
+		return pModel.getNestedPackage(pPackageName);
+	}
+
+	/**
+	 * Open the message box to warn user that no active Papyrus editor is opened.
+	 */
+	public void openNoActivePapyrusEditorMessageBox() {
+		MessageBox vMessageBox = new MessageBox(EclipseHelper.getActiveShell(), SWT.OK | SWT.ICON_WARNING);
+
+		vMessageBox.setText(NO_ACTIVE_CHESS_EDITOR_WARNING_TEXT);
+		vMessageBox.setMessage(NO_ACTIVE_CHESS_EDITOR_WARNING_MESSAGE);
+		vMessageBox.open();
+	}
+}
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/EclipseHelper.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/EclipseHelper.java
index 860db70..454e652 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/EclipseHelper.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/helpers/EclipseHelper.java
@@ -5,11 +5,17 @@
  */
 package org.eclipse.opencert.infra.dashboard.helpers;
 
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Objects;
+import java.util.Set;
 
 import org.apache.commons.lang.ArrayUtils;
+import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IEditorReference;
 import org.eclipse.ui.IWorkbench;
 import org.eclipse.ui.IWorkbenchPage;
 import org.eclipse.ui.IWorkbenchPart;
@@ -30,7 +36,7 @@
 	}
 
 	/**
-	 * Return the current active workbench window, or if none is active, the first workbench window known by eclipse.
+	 * Return the current active workbench window, or if none is active, the first workbench window known by Eclipse.
 	 *
 	 * @return The current workbench window
 	 */
@@ -138,4 +144,41 @@
 
 		return vActiveShell;
 	}
+
+	/**
+	 * Get all the editor references in all pages of all workbench windows.
+	 *
+	 * @return A set of all the editor references
+	 */
+	public static Set<IEditorReference> getAllEditorReferences() {
+		Set<IEditorReference> vAllEditorReferencesSet = new HashSet<>();
+
+		IWorkbench vWorkbench = PlatformUI.getWorkbench();
+
+		for (IWorkbenchWindow vWindow : vWorkbench.getWorkbenchWindows()) {
+			for (IWorkbenchPage vPage : vWindow.getPages()) {
+				vAllEditorReferencesSet.addAll(Arrays.asList(vPage.getEditorReferences()));
+			}
+		}
+
+		return vAllEditorReferencesSet;
+	}
+
+	/**
+	 * @return The first Papyrus diagram editor part from all editors, or {@code null} if not found
+	 */
+	public static IMultiDiagramEditor getFirstPapyrusDiagramEditorPart() {
+		IMultiDiagramEditor vEditorPart = null;
+		Iterator<IEditorReference> vIter = EclipseHelper.getAllEditorReferences().iterator();
+
+		while (vIter.hasNext() && Objects.isNull(vEditorPart)) {
+			IEditorReference vEditorReference = vIter.next();
+
+			if (vEditorReference.getEditor(false) instanceof IMultiDiagramEditor) {
+				vEditorPart = (IMultiDiagramEditor) vEditorReference.getEditor(false);
+			}
+		}
+
+		return vEditorPart;
+	}
 }
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AssuranceCaseManagementPage.java
similarity index 75%
rename from org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
rename to org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AssuranceCaseManagementPage.java
index 32f10db..7d96d6f 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/AssuranceCaseManagementPage.java
@@ -14,14 +14,14 @@
 package org.eclipse.opencert.infra.dashboard.pages;
 
 /**
- * Page describing the activities related to the process reusability definition.
+ * Page describing the activities related to the assurance case management.
  */
-public class ProcessReusabilityDefinitionPage extends AbstractActivityPage {
+public class AssuranceCaseManagementPage extends AbstractActivityPage {
 
 	/**
 	 * Default constructor.
 	 */
-	public ProcessReusabilityDefinitionPage() {
+	public AssuranceCaseManagementPage() {
 		super();
 	}
 
@@ -30,6 +30,6 @@
 	 */
 	@Override
 	protected String getHeaderTitle() {
-		return "Process Reusability Definition";
+		return "Assurance Case Management";
 	}
 }
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/EvidenceManagementPage.java
similarity index 75%
copy from org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
copy to org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/EvidenceManagementPage.java
index 32f10db..983dbf4 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/EvidenceManagementPage.java
@@ -14,14 +14,14 @@
 package org.eclipse.opencert.infra.dashboard.pages;
 
 /**
- * Page describing the activities related to the process reusability definition.
+ * Page describing the activities related to the evidence management.
  */
-public class ProcessReusabilityDefinitionPage extends AbstractActivityPage {
+public class EvidenceManagementPage extends AbstractActivityPage {
 
 	/**
 	 * Default constructor.
 	 */
-	public ProcessReusabilityDefinitionPage() {
+	public EvidenceManagementPage() {
 		super();
 	}
 
@@ -30,6 +30,6 @@
 	 */
 	@Override
 	protected String getHeaderTitle() {
-		return "Process Reusability Definition";
+		return "Evidence Management";
 	}
 }
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessComplianceDefinitionPage.java
similarity index 75%
copy from org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
copy to org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessComplianceDefinitionPage.java
index 32f10db..dd9953c 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessComplianceDefinitionPage.java
@@ -14,14 +14,14 @@
 package org.eclipse.opencert.infra.dashboard.pages;
 
 /**
- * Page describing the activities related to the process reusability definition.
+ * Page describing the activities related to the process compliance definition.
  */
-public class ProcessReusabilityDefinitionPage extends AbstractActivityPage {
+public class ProcessComplianceDefinitionPage extends AbstractActivityPage {
 
 	/**
 	 * Default constructor.
 	 */
-	public ProcessReusabilityDefinitionPage() {
+	public ProcessComplianceDefinitionPage() {
 		super();
 	}
 
@@ -30,6 +30,6 @@
 	 */
 	@Override
 	protected String getHeaderTitle() {
-		return "Process Reusability Definition";
+		return "Process Compliance Definition";
 	}
 }
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/SystemDesignAnalysisVVPage.java
similarity index 75%
copy from org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
copy to org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/SystemDesignAnalysisVVPage.java
index 32f10db..f86c04e 100644
--- a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/ProcessReusabilityDefinitionPage.java
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/SystemDesignAnalysisVVPage.java
@@ -14,14 +14,14 @@
 package org.eclipse.opencert.infra.dashboard.pages;
 
 /**
- * Page describing the activities related to the process reusability definition.
+ * Page describing the activities related to the system design analysis, validation and verification.
  */
-public class ProcessReusabilityDefinitionPage extends AbstractActivityPage {
+public class SystemDesignAnalysisVVPage extends AbstractActivityPage {
 
 	/**
 	 * Default constructor.
 	 */
-	public ProcessReusabilityDefinitionPage() {
+	public SystemDesignAnalysisVVPage() {
 		super();
 	}
 
@@ -30,6 +30,6 @@
 	 */
 	@Override
 	protected String getHeaderTitle() {
-		return "Process Reusability Definition";
+		return "System Design Analysis and V&V";
 	}
 }
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
new file mode 100644
index 0000000..abe1926
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessDiagramHyperLinkAdapter.java
@@ -0,0 +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);
+}
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessElementHyperLinkAdapter.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessElementHyperLinkAdapter.java
new file mode 100644
index 0000000..6b05e35
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/AbstractCreateNewChessElementHyperLinkAdapter.java
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * 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.ui.forms.events.HyperlinkAdapter;
+import org.eclipse.ui.forms.events.HyperlinkEvent;
+
+/**
+ * A {@link HyperlinkAdapter} to create a new CHESS element.
+ */
+public abstract class AbstractCreateNewChessElementHyperLinkAdapter extends HyperlinkAdapter {
+
+	/** ID of the model explorer view. */
+	protected static final String MODEL_EXPLORER_VIEW_ID = "org.eclipse.papyrus.views.modelexplorer.modelexplorer"; //$NON-NLS-1$
+
+	/**
+	 * Default constructor.
+	 */
+	public AbstractCreateNewChessElementHyperLinkAdapter() {
+		super();
+	}
+
+	/**
+	 * {@inheritDoc}
+	 */
+	@Override
+	public void linkActivated(final HyperlinkEvent pEvent) {
+		createChessElement();
+	}
+
+	/**
+	 * Create a CHESS element when the link is pressed.
+	 */
+	protected abstract void createChessElement();
+}
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
new file mode 100644
index 0000000..18ef5b0
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessBlockDefinitionDiagram.java
@@ -0,0 +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);
+	}
+}
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
new file mode 100644
index 0000000..b8edda5
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/CreateNewChessRequirementDiagram.java
@@ -0,0 +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);
+	}
+}
diff --git a/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenImportUserModelDialogHyperLinkAdapter.java b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenImportUserModelDialogHyperLinkAdapter.java
new file mode 100644
index 0000000..c3b38db
--- /dev/null
+++ b/org.eclipse.opencert.infra.dashboard/src/org/eclipse/opencert/infra/dashboard/pages/adapters/OpenImportUserModelDialogHyperLinkAdapter.java
@@ -0,0 +1,142 @@
+/*******************************************************************************
+ * 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.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.Objects;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.window.Window;
+import org.eclipse.opencert.infra.dashboard.dialogs.PackageImportDialog;
+import org.eclipse.opencert.infra.dashboard.helpers.ChessPapyrusHelper;
+import org.eclipse.opencert.infra.dashboard.helpers.EclipseHelper;
+import org.eclipse.papyrus.infra.emf.utils.EMFHelper;
+import org.eclipse.papyrus.infra.ui.editor.IMultiDiagramEditor;
+import org.eclipse.papyrus.uml.profile.ui.dialogs.ElementImportTreeSelectionDialog.ImportSpec;
+import org.eclipse.papyrus.uml.tools.importsources.PackageImportSourceDialog;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.uml2.uml.Model;
+import org.eclipse.uml2.uml.Package;
+import org.eclipse.uml2.uml.PackageImport;
+import org.eclipse.uml2.uml.UMLFactory;
+
+/**
+ * A {@link HyperLinkAdapter} to open the {@link PackageImportDialog} dialog.
+ */
+public class OpenImportUserModelDialogHyperLinkAdapter extends AbstractOpenDialogHyperLinkAdapter {
+
+	/**
+	 * Default constructor.
+	 */
+	public OpenImportUserModelDialogHyperLinkAdapter() {
+		super();
+	}
+
+	/**
+	 * Open a dialog when the link is pressed.
+	 */
+	@Override
+	protected void openDialog() {
+		// Retrieve shell instance
+		Shell vShell = EclipseHelper.getActiveShell();
+
+		// Get the first Papyrus diagram editor
+		IMultiDiagramEditor vPapyrusEditor = EclipseHelper.getFirstPapyrusDiagramEditorPart();
+
+		// Get the root model
+		Model vRootModel = ChessPapyrusHelper.INSTANCE.getUmlModelFromDiagramEditor(vPapyrusEditor);
+
+		if (Objects.nonNull(vRootModel)) {
+			Map<String, String> vExtensionFilters = new LinkedHashMap<String, String>();
+			vExtensionFilters.put("*.uml", "UML (*.uml)"); //$NON-NLS-1$
+			vExtensionFilters.put("*.profile.uml", "UML Profiles (*.profile.uml)"); //$NON-NLS-1$ //$NON-NLS-2$
+			vExtensionFilters.put("*", "All (*)"); //$NON-NLS-1$ //$NON-NLS-2$
+
+			Collection<EObject> vSelections = new ArrayList<>();
+			vSelections.add(vRootModel);
+
+			Collection<Package> vPackages = PackageImportSourceDialog.open(vShell, "Select the models to import", //$NON-NLS-1$
+					vSelections, vExtensionFilters);
+
+			if (Objects.nonNull(vPackages) && !vPackages.isEmpty()) {
+				PackageImportDialog vPackageImportDialog = new PackageImportDialog(vShell, vPackages);
+
+				if (Window.OK == vPackageImportDialog.open()) {
+					Collection<ImportSpec<Package>> vResult = vPackageImportDialog.getResult();
+
+					for (ImportSpec<Package> vResultElement : vResult) {
+						Package vSelectedPackage = vResultElement.getElement();
+						switch (vResultElement.getAction()) {
+						case COPY:
+							handleCopyPackage(vSelectedPackage, vRootModel);
+							break;
+						case IMPORT:
+							handleImportPackage(vSelectedPackage, vRootModel);
+							break;
+						default:
+							handleLoadPackage(vSelectedPackage, vRootModel);
+							break;
+						}
+					}
+
+					// Then goto the active Papyrus editor
+					EclipseHelper.getActiveWorkbenchPage().activate(vPapyrusEditor);
+				}
+			}
+		} else {
+			// Otherwise, no Chess graphical editor is already opened, ask user to open one
+			ChessPapyrusHelper.INSTANCE.openNoActivePapyrusEditorMessageBox();
+		}
+	}
+
+	/**
+	 * Load the Package resource into the target package.
+	 *
+	 * @param pPackage The selected package to import
+	 * @param pTargetPackage The target package
+	 */
+	protected void handleLoadPackage(final Package pPackage, final EObject pTargetPackage) {
+		EMFHelper.reloadIntoContext(pPackage, pTargetPackage);
+	}
+
+	/**
+	 * Create a PackageImport in the target package, which refers to the selected package.
+	 *
+	 * @param pSelectedPackage The selected package
+	 * @param pTargetPackage The target package
+	 */
+	protected void handleImportPackage(final Package pSelectedPackage, final EObject pTargetPackage) {
+		PackageImport vPackageImport = UMLFactory.eINSTANCE.createPackageImport();
+
+		Package vImportedPackage = EMFHelper.reloadIntoContext(pSelectedPackage, pTargetPackage);
+
+		((Package) pTargetPackage).getPackageImports().add(vPackageImport);
+		vPackageImport.setImportedPackage(vImportedPackage);
+	}
+
+	/**
+	 * Create a copy of the selected package in the target package.
+	 *
+	 * @param pSelectedPackage The selected package
+	 * @param pTargetPackage The target package
+	 */
+	protected void handleCopyPackage(Package pSelectedPackage, final EObject pTargetPackage) {
+		// FIXME: Stereotype applications are not copied
+		((Package) pTargetPackage).getNestedPackages().add(EcoreUtil.copy(pSelectedPackage));
+	}
+}
