diff --git a/core/org.eclipse.papyrus.sysml14.validation/plugin.xml b/core/org.eclipse.papyrus.sysml14.validation/plugin.xml
index 00b8a9e..b41e825 100644
--- a/core/org.eclipse.papyrus.sysml14.validation/plugin.xml
+++ b/core/org.eclipse.papyrus.sysml14.validation/plugin.xml
@@ -546,6 +546,15 @@
    </extension>
    <extension name="org.eclipse.papyrus.sysml14.validation.constraintBindings" point="org.eclipse.emf.validation.constraintBindings">
       
+      <!-- UML fake context (should be replaced by filter see Bug 487500)-->
+      <clientContext id="TrueContext">
+         <selector class="org.eclipse.papyrus.sysml14.validation.selectors.TrueSelector"/>
+      </clientContext>
+      <binding context="TrueContext">
+         <constraint ref="org.eclipse.papyrus.sysml14.validation.constraint.block.property.asssociationend"/>
+         <constraint ref="org.eclipse.papyrus.sysml14.validation.constraint.block.associationBlock"/>
+      </binding>  
+       
       <!-- Requirement Context -->
       <clientContext id="CopyClientContext">
          <selector class="org.eclipse.papyrus.sysml14.validation.selectors.CopySelector"/>
@@ -608,12 +617,7 @@
       </binding>           
       
       <!-- Blocks context -->
-      <clientContext id="AssociationContext">
-         <selector class="org.eclipse.papyrus.sysml14.validation.selectors.AssociationSelector"/>
-      </clientContext>
-      <binding context="AssociationContext">
-         <constraint ref="org.eclipse.papyrus.sysml14.validation.constraint.block.associationBlock"/>
-      </binding>     
+  
       <clientContext id="DirectedRelationshipPropertyPathContext">
          <selector class="org.eclipse.papyrus.sysml14.validation.selectors.DirectedRelationshipPropertyPathSelector"/>
       </clientContext>
@@ -636,12 +640,7 @@
          <constraint ref="org.eclipse.papyrus.sysml14.validation.constraint.block.specialization"/>
       </binding>             
  
-      <clientContext id="PropertyContext">
-         <selector class="org.eclipse.papyrus.sysml14.validation.selectors.PropertySelector"/>
-      </clientContext>
-      <binding context="PropertyContext">
-         <constraint ref="org.eclipse.papyrus.sysml14.validation.constraint.block.property.asssociationend"/>
-      </binding>  
+
       
       <clientContext id="ElementPropertyPathContext">
          <selector class="org.eclipse.papyrus.sysml14.validation.selectors.ElementPropertyPathSelector"/>
diff --git a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/AssociationBlockModelConstraint.java b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/AssociationBlockModelConstraint.java
index d6e067c..93e43d5 100644
--- a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/AssociationBlockModelConstraint.java
+++ b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/AssociationBlockModelConstraint.java
@@ -14,6 +14,7 @@
 
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.validation.AbstractModelConstraint;
 import org.eclipse.emf.validation.IValidationContext;
 import org.eclipse.papyrus.sysml14.blocks.Block;
@@ -37,19 +38,22 @@
 	 */
 	@Override
 	public IStatus validate(IValidationContext context) {
-		Association association = (Association) context.getTarget();
-		EList<Property> memberEnds = association.getMemberEnds();
-		if (memberEnds != null && memberEnds.size() >= 2) {
-			Property firstProperty = memberEnds.get(0);
-			Property secondProperty = memberEnds.get(1);
-			if (firstProperty != null && secondProperty != null) {
-				Type firstType = firstProperty.getType();
-				Type secondType = secondProperty.getType();
-				if (firstType != null && secondType != null) {
-					if (UMLUtil.getStereotypeApplication(firstType, Block.class) != null
-							&& UMLUtil.getStereotypeApplication(secondType, Block.class) != null) {
+		EObject target = context.getTarget();
+		if (target instanceof Association) {
+			Association association = (Association) target;
+			EList<Property> memberEnds = association.getMemberEnds();
+			if (memberEnds != null && memberEnds.size() >= 2) {
+				Property firstProperty = memberEnds.get(0);
+				Property secondProperty = memberEnds.get(1);
+				if (firstProperty != null && secondProperty != null) {
+					Type firstType = firstProperty.getType();
+					Type secondType = secondProperty.getType();
+					if (firstType != null && secondType != null) {
 						if (memberEnds.size() != 2) {
-							return context.createFailureStatus(context.getTarget());
+							if (UMLUtil.getStereotypeApplication(firstType, Block.class) != null
+								&& UMLUtil.getStereotypeApplication(secondType, Block.class) != null) {
+								return context.createFailureStatus(target);
+							}
 						}
 					}
 				}
diff --git a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/BlockPropertyAssociationEndModelConstraint.java b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/BlockPropertyAssociationEndModelConstraint.java
index c0278f1..994981c 100644
--- a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/BlockPropertyAssociationEndModelConstraint.java
+++ b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/rules/blocks/BlockPropertyAssociationEndModelConstraint.java
@@ -13,6 +13,7 @@
 package org.eclipse.papyrus.sysml14.validation.rules.blocks;
 
 import org.eclipse.core.runtime.IStatus;
+import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.validation.AbstractModelConstraint;
 import org.eclipse.emf.validation.IValidationContext;
 import org.eclipse.papyrus.sysml14.blocks.Block;
@@ -38,12 +39,15 @@
 	 */
 	@Override
 	public IStatus validate(IValidationContext context) {
-		Property property = (Property) context.getTarget();
-		Type type = property.getType();
-		if (type != null) {
-			if (UMLUtil.getStereotypeApplication(type, Block.class) != null) {
+		EObject target = context.getTarget();
+		if (target instanceof Property){
+			Property property = (Property) target;
+			Type type = property.getType();
+			if (type != null) {
 				if (property.getAssociation() == null) {
-					return context.createFailureStatus(context.getTarget());
+					if (UMLUtil.getStereotypeApplication(type, Block.class) != null) {
+						return context.createFailureStatus(target);
+					}
 				}
 			}
 		}
diff --git a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/AssociationSelector.java b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/AssociationSelector.java
index 7c9da61..a00cacb 100644
--- a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/AssociationSelector.java
+++ b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/AssociationSelector.java
@@ -15,6 +15,11 @@
 import org.eclipse.emf.validation.model.IClientSelector;
 import org.eclipse.uml2.uml.Association;
 
+
+/**
+ *@deprecated
+ */
+@Deprecated // since 0.10.1 to remove in 0.11.0
 public class AssociationSelector implements IClientSelector {
 
 	@Override
diff --git a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/PropertySelector.java b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/PropertySelector.java
index aba58b5..eaa7ce9 100644
--- a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/PropertySelector.java
+++ b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/PropertySelector.java
@@ -15,8 +15,14 @@
 import org.eclipse.emf.validation.model.IClientSelector;
 import org.eclipse.uml2.uml.Property;
 
+
+/**
+ *@deprecated
+ */
+@Deprecated // since 0.10.1 to remove in 0.11.0
 public class PropertySelector implements IClientSelector {
 
+	@Override
 	public boolean selects(Object object) {
 		return object instanceof Property;
 	}
diff --git a/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/TrueSelector.java b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/TrueSelector.java
new file mode 100644
index 0000000..26e0e42
--- /dev/null
+++ b/core/org.eclipse.papyrus.sysml14.validation/src/org/eclipse/papyrus/sysml14/validation/selectors/TrueSelector.java
@@ -0,0 +1,30 @@
+/*****************************************************************************
+ * Copyright (c) 2016 CEA LIST and others.
+ * 
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *  Benoit Maggi (CEA LIST) benoit.maggi@cea.fr - Initial API and implementation
+ *   
+ *****************************************************************************/
+package org.eclipse.papyrus.sysml14.validation.selectors;
+
+import org.eclipse.emf.validation.model.IClientSelector;
+
+
+
+/**
+ * Temporary solution to execute validation on uml context
+ * @deprecated
+ */
+@Deprecated // to remove once Bug 507734 is solved
+public class TrueSelector implements IClientSelector {
+
+	@Override
+	public boolean selects(Object object) {
+		return true;
+	}
+}
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BlockCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BlockCustomImpl.java
index 9fdf346..df94081 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BlockCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BlockCustomImpl.java
@@ -36,7 +36,7 @@
 	 */
 	@Override
 	public EList<Property> getReferences() { 
-		BasicEList<Property> propertyEList = new BasicEList<Property>();
+		BasicEList<Property> propertyEList = new BasicEList<>();
 	
 		if (getBase_Class() != null) {
 			EList<Property> ownedAttributes = getBase_Class().getOwnedAttributes(); 
@@ -51,7 +51,7 @@
 			}
 		}
 
-		return new BasicEList.UnmodifiableEList<Property>(propertyEList.size(), propertyEList.toArray());
+		return new BasicEList.UnmodifiableEList<>(propertyEList.size(), propertyEList.toArray());
 	}
 	
 	/**
@@ -62,7 +62,7 @@
 	 */
 	@Override
 	public EList<Property> getParts() { 
-		BasicEList<Property> propertyEList = new BasicEList<Property>();
+		BasicEList<Property> propertyEList = new BasicEList<>();
 	
 		if (getBase_Class() != null) {
 			EList<Property> ownedAttributes = getBase_Class().getOwnedAttributes(); 
@@ -77,7 +77,7 @@
 			}
 		}
 
-		return new BasicEList.UnmodifiableEList<Property>(propertyEList.size(), propertyEList.toArray());
+		return new BasicEList.UnmodifiableEList<>(propertyEList.size(), propertyEList.toArray());
 	}
 	
 	/**
@@ -89,7 +89,7 @@
 	 */
 	@Override
 	public EList<Property> getFlowProperties() { 
-		BasicEList<Property> propertyEList = new BasicEList<Property>();
+		BasicEList<Property> propertyEList = new BasicEList<>();
 	
 		if (getBase_Class() != null) {
 			EList<Property> ownedAttributes = getBase_Class().getOwnedAttributes(); 
@@ -101,7 +101,7 @@
 			}
 		}
 
-		return new BasicEList.UnmodifiableEList<Property>(propertyEList.size(), propertyEList.toArray());
+		return new BasicEList.UnmodifiableEList<>(propertyEList.size(), propertyEList.toArray());
 	}
 	
 }
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BoundReferenceCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BoundReferenceCustomImpl.java
index 2d4fa44..17b4281 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BoundReferenceCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/blocks/BoundReferenceCustomImpl.java
@@ -40,7 +40,7 @@
 	 */
 	@Override
 	public EList<Property> getBindingPath() { 
-		BasicEList<Property> propertyEList = new BasicEList<Property>();
+		BasicEList<Property> propertyEList = new BasicEList<>();
 		ConnectorEnd connectorEnd = getBoundEnd();
 		if (connectorEnd != null){
 			NestedConnectorEnd nestedConnectorEnd = UMLUtil.getStereotypeApplication(connectorEnd, NestedConnectorEnd.class);
@@ -54,7 +54,7 @@
 				propertyEList.add((Property) role);
 			}
 		}
-		return new UnmodifiableEList<Property>(this, BlocksPackage.eINSTANCE.getBoundReference_BindingPath(), propertyEList.size(), propertyEList.toArray());
+		return new UnmodifiableEList<>(this, BlocksPackage.eINSTANCE.getBoundReference_BindingPath(), propertyEList.size(), propertyEList.toArray());
 	}
 	
 }
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/constraintblocks/ConstraintBlockCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/constraintblocks/ConstraintBlockCustomImpl.java
index 07ed7ef..5062046 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/constraintblocks/ConstraintBlockCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/constraintblocks/ConstraintBlockCustomImpl.java
@@ -35,7 +35,7 @@
 	 */
 	@Override
 	public EList<Property> getParameters() { 
-		BasicEList<Property> propertyEList = new BasicEList<Property>();
+		BasicEList<Property> propertyEList = new BasicEList<>();
 	
 		if (getBase_Class() != null) {
 			EList<Property> ownedAttributes = getBase_Class().getOwnedAttributes(); 
@@ -48,7 +48,7 @@
 			}
 		}
 
-		return new BasicEList.UnmodifiableEList<Property>(propertyEList.size(), propertyEList.toArray());
+		return new BasicEList.UnmodifiableEList<>(propertyEList.size(), propertyEList.toArray());
 	}
 	
 }
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/deprecatedelements/FlowSpecificationCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/deprecatedelements/FlowSpecificationCustomImpl.java
index f68e04a..c2b62c7 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/deprecatedelements/FlowSpecificationCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/deprecatedelements/FlowSpecificationCustomImpl.java
@@ -29,13 +29,12 @@
 	/**
 	 * 
 	 * @see org.eclipse.papyrus.sysml14.blocks.internal.impl.FlowSpecificationImpl#getFlowProperties()
-	 * @pap.req org.eclipse.papyrus.sysml14#REQ-XXX
 	 *
 	 * @return the list of FlowProperties
 	 */
 	@Override
 	public EList<Property> getFlowProperties() { 
-		BasicEList<Property> propertyEList = new BasicEList<Property>();
+		BasicEList<Property> propertyEList = new BasicEList<>();
 	
 		if (getBase_Interface() != null) {
 			EList<Property> ownedAttributes = getBase_Interface().getOwnedAttributes(); 
@@ -47,7 +46,7 @@
 			}
 		}
 
-		return new BasicEList.UnmodifiableEList<Property>(propertyEList.size(), propertyEList.toArray());
+		return new BasicEList.UnmodifiableEList<>(propertyEList.size(), propertyEList.toArray());
 	}
 	
 }
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ElementGroupCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ElementGroupCustomImpl.java
index 4cb185d..2928d00 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ElementGroupCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ElementGroupCustomImpl.java
@@ -37,6 +37,7 @@
 	 *<p> See the requirement <b>{@papyrus.req org.eclipse.papyrus.sysml14#Req014}</b>. 
 	 * @return
 	 */
+	@Override
 	public String getCriterion() {
 		String criterion = ""; //$NON-NLS-1$
 		Comment comment = getBase_Comment();
@@ -72,13 +73,14 @@
 	 *
 	 * @return
 	 */
+	@Override
 	public EList<Element> getMember() {
-		BasicEList<Element> elementEList = new BasicEList<Element>();
+		BasicEList<Element> elementEList = new BasicEList<>();
 		Comment comment = getBase_Comment();
 		if (comment != null){
 			elementEList.addAll( comment.getAnnotatedElements());
 		}	
-		return new UnmodifiableEList<Element>(this, ModelelementsPackage.eINSTANCE.getElementGroup_Member(), elementEList.size(), elementEList.toArray());
+		return new UnmodifiableEList<>(this, ModelelementsPackage.eINSTANCE.getElementGroup_Member(), elementEList.size(), elementEList.toArray());
 	}
 	
 	/**
@@ -87,6 +89,7 @@
 	 *
 	 * @return
 	 */
+	@Override
 	public int getSize() {
 		return getMember().size();
 	}	
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/StakeholderCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/StakeholderCustomImpl.java
index d9bc7e3..b3577ab 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/StakeholderCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/StakeholderCustomImpl.java
@@ -33,9 +33,9 @@
 	 */
 	@Override
 	public EList<String> getConcern() {
-		EList<String> concern = new BasicEList<String>();
+		EList<String> concern = new BasicEList<>();
 		 EList<Comment> commentEList = getConcernList();
-		 if (commentEList!=null && commentEList.size() > 0){ 
+		 if (commentEList!=null && !commentEList.isEmpty()){ 
 			 for (Comment comment : commentEList) {
 				 String body = comment.getBody();
 				 if (body != null){
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewCustomImpl.java
index f5b07ff..01f6adb 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewCustomImpl.java
@@ -80,12 +80,12 @@
 	 */
 	@Override
 	public EList<Stakeholder> getStakeholder() {
-		EList<Stakeholder> stakeholderEList = new BasicEList<Stakeholder>();
+		EList<Stakeholder> stakeholderEList = new BasicEList<>();
 		Viewpoint viewPoint = getViewPoint();
 		if (viewPoint != null){
 			stakeholderEList.addAll(viewPoint.getStakeholder());
 		}
-		return new UnmodifiableEList<Stakeholder>(this, ModelelementsPackage.eINSTANCE.getViewpoint_Stakeholder(), stakeholderEList.size(), stakeholderEList.toArray());
+		return new UnmodifiableEList<>(this, ModelelementsPackage.eINSTANCE.getViewpoint_Stakeholder(), stakeholderEList.size(), stakeholderEList.toArray());
 	}
 	
 	
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewpointCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewpointCustomImpl.java
index 9145bb0..6496f2d 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewpointCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/modelelements/ViewpointCustomImpl.java
@@ -39,8 +39,9 @@
 	 *<p> See the requirement <b>{@papyrus.req org.eclipse.papyrus.sysml14#Req013}</b>. 
 	 * @return
 	 */
+	@Override
 	public EList<Behavior> getMethod() {
-		EList<Behavior> behaviorEList = new BasicEList<Behavior>();
+		EList<Behavior> behaviorEList = new BasicEList<>();
 		Class clazz = getBase_Class();
 		if (clazz != null) {
 			EList<Operation> operations = clazz.getOperations();
@@ -48,7 +49,7 @@
 				Iterator<Operation> it = operations.iterator();
 
 				while (it.hasNext()) {
-					Operation operation = (Operation) it.next();
+					Operation operation = it.next();
 					Create create = UMLUtil.getStereotypeApplication(operation, Create.class);
 					if (create != null) {
 						behaviorEList.addAll(operation.getMethods());
@@ -57,7 +58,7 @@
 				}
 			}
 		}
-		return new UnmodifiableEList<Behavior>(this, ModelelementsPackage.eINSTANCE.getViewpoint_Method(), behaviorEList.size(), behaviorEList.toArray());
+		return new UnmodifiableEList<>(this, ModelelementsPackage.eINSTANCE.getViewpoint_Method(), behaviorEList.size(), behaviorEList.toArray());
 	}
 
 	/**
@@ -69,7 +70,7 @@
 	 */
 	@Override
 	public EList<String> getConcern() {
-		EList<String> concernEList = new BasicEList<String>();
+		EList<String> concernEList = new BasicEList<>();
 		EList<Comment> theConcernList = getConcernList();
 		for (Comment comment : theConcernList) {
 			String body = comment.getBody();
diff --git a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/requirements/RequirementCustomImpl.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/requirements/RequirementCustomImpl.java
index 36591a9..dca83cf 100644
--- a/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/requirements/RequirementCustomImpl.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/requirements/RequirementCustomImpl.java
@@ -51,15 +51,13 @@
 		// current
 		// This should return the TestCase verifying current Requirement
 		Requirement master = null;
-		Copy currentCopy = null;
-
 		if (getBase_Class() != null) {
 			Iterator<Dependency> itDep = getBase_Class().getClientDependencies().iterator();
 
 			// Find Copy link
 			while (itDep.hasNext()) {
 				Dependency currentDep = itDep.next();
-				currentCopy = UMLUtil.getStereotypeApplication(currentDep, Copy.class);
+				Copy currentCopy = UMLUtil.getStereotypeApplication(currentDep, Copy.class);
 
 				if (currentCopy != null) {
 					EList<NamedElement> suppliers = currentCopy.getBase_Abstraction().getSuppliers();
@@ -89,16 +87,14 @@
 	@Override
 	public EList<Requirement> getDerived() {
 		// This should return the Requirement(s) derived from current
-		EList<Requirement> derived = new BasicEList<Requirement>();
-		DeriveReqt currentDeriveReqt = null;
-
+		EList<Requirement> derived = new BasicEList<>();
 		if (getBase_Class() != null) {
 			Iterator<DirectedRelationship> itDep = getBase_Class().getTargetDirectedRelationships().iterator();
 
 			// Find DeriveReqt link
 			while (itDep.hasNext()) {
 				DirectedRelationship currentDirectedRelationship = itDep.next();
-				currentDeriveReqt = UMLUtil.getStereotypeApplication(currentDirectedRelationship, DeriveReqt.class);
+				DeriveReqt currentDeriveReqt = UMLUtil.getStereotypeApplication(currentDirectedRelationship, DeriveReqt.class);
 
 				if (currentDeriveReqt != null) {
 					EList<NamedElement> clients = currentDeriveReqt.getBase_Abstraction().getClients();
@@ -113,7 +109,7 @@
 			}
 		}
 
-		return new UnmodifiableEList<Requirement>(this, RequirementsPackage.eINSTANCE.getRequirement_Derived(), derived.size(), derived.toArray());
+		return new UnmodifiableEList<>(this, RequirementsPackage.eINSTANCE.getRequirement_Derived(), derived.size(), derived.toArray());
 	}
 
 	/**
@@ -128,15 +124,14 @@
 	public EList<Requirement> getDerivedFrom() {
 		// This should return the Requirement(s) this Requirement is derived
 		// from
-		EList<Requirement> derivedFrom = new BasicEList<Requirement>();
-		DeriveReqt currentDeriveReqt = null;
+		EList<Requirement> derivedFrom = new BasicEList<>();
 		if (getBase_Class() != null) {
 			Iterator<DirectedRelationship> itDep = getBase_Class().getSourceDirectedRelationships().iterator();
 
 			// Find DeriveReqt link
 			while (itDep.hasNext()) {
 				DirectedRelationship currentDRelationship = itDep.next();
-				currentDeriveReqt = UMLUtil.getStereotypeApplication(currentDRelationship, DeriveReqt.class);
+				DeriveReqt currentDeriveReqt = UMLUtil.getStereotypeApplication(currentDRelationship, DeriveReqt.class);
 
 				if (currentDeriveReqt != null) {
 					EList<NamedElement> suppliers = currentDeriveReqt.getBase_Abstraction().getSuppliers();
@@ -151,7 +146,7 @@
 			}
 		}
 
-		return new UnmodifiableEList<Requirement>(this, RequirementsPackage.eINSTANCE.getRequirement_DerivedFrom(), derivedFrom.size(), derivedFrom.toArray());
+		return new UnmodifiableEList<>(this, RequirementsPackage.eINSTANCE.getRequirement_DerivedFrom(), derivedFrom.size(), derivedFrom.toArray());
 	}
 
 
@@ -167,16 +162,14 @@
 	public EList<NamedElement> getRefinedBy() {
 		// This should return the NamedElement(s) that refine current
 		// Requirement
-		EList<NamedElement> refinedBy = new BasicEList<NamedElement>();
-		Refine currentRefine = null;
-
+		EList<NamedElement> refinedBy = new BasicEList<>();
 		if (getBase_Class() != null) {
 			Iterator<DirectedRelationship> itDep = getBase_Class().getTargetDirectedRelationships().iterator();
 
 			// Find Refine link
 			while (itDep.hasNext()) {
 				DirectedRelationship currentDRelationship = itDep.next();
-				currentRefine = UMLUtil.getStereotypeApplication(currentDRelationship, Refine.class);
+				Refine currentRefine = UMLUtil.getStereotypeApplication(currentDRelationship, Refine.class);
 
 				if (currentRefine != null) {
 					refinedBy.addAll(currentRefine.getBase_Abstraction().getClients());
@@ -184,7 +177,7 @@
 			}
 		}
 
-		return new UnmodifiableEList<NamedElement>(this, RequirementsPackage.eINSTANCE.getRequirement_RefinedBy(), refinedBy.size(), refinedBy.toArray());
+		return new UnmodifiableEList<>(this, RequirementsPackage.eINSTANCE.getRequirement_RefinedBy(), refinedBy.size(), refinedBy.toArray());
 	}
 
 	
@@ -201,16 +194,14 @@
 	public EList<NamedElement> getSatisfiedBy() {
 		// This should return the NamedElement(s) that satisfy current
 		// Requirement
-		EList<NamedElement> satisfyBy = new BasicEList<NamedElement>();
-		Satisfy currentSatisfy = null;
-
+		EList<NamedElement> satisfyBy = new BasicEList<>();
 		if (getBase_Class() != null) {
 			Iterator<DirectedRelationship> itDep = getBase_Class().getTargetDirectedRelationships().iterator();
 
 			// Find Satisfy link
 			while (itDep.hasNext()) {
 				DirectedRelationship currentDRelationship = itDep.next();
-				currentSatisfy = UMLUtil.getStereotypeApplication(currentDRelationship, Satisfy.class);
+				Satisfy currentSatisfy = UMLUtil.getStereotypeApplication(currentDRelationship, Satisfy.class);
 
 				if (currentSatisfy != null) {
 					satisfyBy.addAll(currentSatisfy.getBase_Abstraction().getClients());
@@ -218,7 +209,7 @@
 			}
 		}
 
-		return new UnmodifiableEList<NamedElement>(this, RequirementsPackage.eINSTANCE.getRequirement_SatisfiedBy(), satisfyBy.size(), satisfyBy.toArray());
+		return new UnmodifiableEList<>(this, RequirementsPackage.eINSTANCE.getRequirement_SatisfiedBy(), satisfyBy.size(), satisfyBy.toArray());
 	}
 
 
@@ -236,16 +227,14 @@
 		// SysML spec. : Derived from all elements that are the client of a
 		// <<trace>> relationship
 		// for which this requirement is a supplier.
-		EList<NamedElement> tracedTo = new BasicEList<NamedElement>();
-		Trace currentTrace = null;
-
+		EList<NamedElement> tracedTo = new BasicEList<>();
 		if (getBase_Class() != null) {
 			Iterator<DirectedRelationship> itDep = getBase_Class().getTargetDirectedRelationships().iterator();
 
 			// Find Trace link
 			while (itDep.hasNext()) {
 				DirectedRelationship currentDR = itDep.next();
-				currentTrace = UMLUtil.getStereotypeApplication(currentDR, Trace.class);
+				Trace currentTrace = UMLUtil.getStereotypeApplication(currentDR, Trace.class);
 
 				// Must be a Trace not a subtype (see bug #352563).
 				if (currentTrace != null && currentTrace.eClass() == RequirementsPackage.eINSTANCE.getTrace()) {
@@ -255,7 +244,7 @@
 			}
 		}
 
-		return new UnmodifiableEList<NamedElement>(this, RequirementsPackage.eINSTANCE.getRequirement_TracedTo(), tracedTo.size(), tracedTo.toArray());
+		return new UnmodifiableEList<>(this, RequirementsPackage.eINSTANCE.getRequirement_TracedTo(), tracedTo.size(), tracedTo.toArray());
 	}
 
 	
@@ -271,23 +260,21 @@
 	public EList<NamedElement> getVerifiedBy() {
 		// This should return the list of NamedElement verifying current
 		// Requirement
-		EList<NamedElement> verifiedBy = new BasicEList<NamedElement>();
-		Verify currentVerify = null;
-
+		EList<NamedElement> verifiedBy = new BasicEList<>();
 		if (getBase_Class() != null) {
 			Iterator<DirectedRelationship> itDep = getBase_Class().getTargetDirectedRelationships().iterator();
 
 			// Find Verify link
 			while (itDep.hasNext()) {
 				DirectedRelationship currentDRelationship = itDep.next();
-				currentVerify = UMLUtil.getStereotypeApplication(currentDRelationship, Verify.class);
+				Verify currentVerify = UMLUtil.getStereotypeApplication(currentDRelationship, Verify.class);
 
 				if (currentVerify != null) {
 					verifiedBy.addAll(currentVerify.getBase_Abstraction().getClients());
 				}
 			}
 		}
-		return new UnmodifiableEList<NamedElement>(this, RequirementsPackage.eINSTANCE.getRequirement_VerifiedBy(), verifiedBy.size(), verifiedBy.toArray());
+		return new UnmodifiableEList<>(this, RequirementsPackage.eINSTANCE.getRequirement_VerifiedBy(), verifiedBy.size(), verifiedBy.toArray());
 	}
 
 } 
diff --git a/diagram/org.eclipse.papyrus.sysml14.diagram.blockdefinition/resources/configuration/blockDefinitionDiagramConfig.expansionmodel b/diagram/org.eclipse.papyrus.sysml14.diagram.blockdefinition/resources/configuration/blockDefinitionDiagramConfig.expansionmodel
index c3e6295..a3635b2 100644
--- a/diagram/org.eclipse.papyrus.sysml14.diagram.blockdefinition/resources/configuration/blockDefinitionDiagramConfig.expansionmodel
+++ b/diagram/org.eclipse.papyrus.sysml14.diagram.blockdefinition/resources/configuration/blockDefinitionDiagramConfig.expansionmodel
@@ -4,7 +4,7 @@
     <gmftRepresentations xmi:id="_rC19oNnoEeSqwOe5_frWm2" editPartQualifiedName="org.eclipse.papyrus.uml.diagram.clazz.edit.parts.ClassEditPart" name="Block based on Class representation of class diagram" viewFactory="org.eclipse.papyrus.sysml14.diagram.blockdefinition.internal.factory.BlockClassifierViewFactory" inducedRepresentations="_rC19oNnoEeSqwOe5_frWm6 _CvPDslVqEeW77p7V_ZuW3Q _rC19oNnoEeSqwOe5_frWm7 _CvPDs1VqEeW77p7V_ZuW3Q _CvPDtFVqEeW77p7V_ZuW3Q _CvPDtVVqEeW77p7V_ZuW3Q _CSMSEGFBEeWbSMDuSXx8SQ _59LCcACiEeabH6-I0dvpUQ" subRepresentations="_CvN1kVVqEeW77p7V_ZuW3Q _CvOcoVVqEeW77p7V_ZuW3Q _CvOcolVqEeW77p7V_ZuW3Q _CvOco1VqEeW77p7V_ZuW3Q" reusedID="Class_Shape"/>
     <gmftRepresentations xmi:id="_dq31kGdDEeW5JrLha2pcnA" editPartQualifiedName="org.eclipse.papyrus.uml.diagram.clazz.edit.parts.InterfaceEditPart" name="FlowSpecification based on Interface representation of class diagram" viewFactory="org.eclipse.papyrus.sysml14.diagram.blockdefinition.internal.factory.FlowSpecificationClassifierViewFactory" graphicalElementType="" inducedRepresentations="_CSMSEGFBEeWbSMDuSXx8SQ" subRepresentations="_CvN1kVVqEeW77p7V_ZuW3Q" reusedID="Interface_Shape"/>
   </usages>
-  <libraries xmi:id="_rC19oNnoEeSqwOe5_frWm3" name="Independant Representations">
+  <libraries xmi:id="_rC19oNnoEeSqwOe5_frWm3" name="Independent Representations">
     <representations xsi:type="expansionmodel:Representation" xmi:id="_rC19oNnoEeSqwOe5_frWm4" editPartQualifiedName="org.eclipse.papyrus.uml.diagram.clazz.edit.parts.PropertyForClassEditPart" name="Flow Port As Label" viewFactory="org.eclipse.gmf.runtime.diagram.ui.view.factories.optimal.ShapeViewFactory" graphicalElementType="org.eclipse.papyrus.sysmldi.FlowPort_Label"/>
     <representations xsi:type="expansionmodel:Representation" xmi:id="_CvN1kFVqEeW77p7V_ZuW3Q" editPartQualifiedName="org.eclipse.papyrus.uml.diagram.clazz.edit.parts.DependencyEditPart" name="Verify Link" viewFactory="org.eclipse.gmf.runtime.diagram.ui.view.factories.optimal.ConnectorViewFactory" graphicalElementType="org.eclipse.papyrus.sysmldi.Verify_Abstraction_Verify_Link"/>
     <representations xsi:type="expansionmodel:Representation" xmi:id="_CvN1kVVqEeW77p7V_ZuW3Q" name="Operation Border Item" viewFactory="org.eclipse.papyrus.sysml14.diagram.blockdefinition.internal.factory.OperationPortViewFactory" graphicalElementType="org.eclipse.papyrus.sysmldi." inducedRepresentations="_CvPDsVVqEeW77p7V_ZuW3Q _CvPDsFVqEeW77p7V_ZuW3Q">
diff --git a/diagram/org.eclipse.papyrus.sysml14.diagram.internalblock/resources/configuration/internaBlockDiagramConfig.expansionmodel b/diagram/org.eclipse.papyrus.sysml14.diagram.internalblock/resources/configuration/internaBlockDiagramConfig.expansionmodel
index a9acc27..6e25707 100644
--- a/diagram/org.eclipse.papyrus.sysml14.diagram.internalblock/resources/configuration/internaBlockDiagramConfig.expansionmodel
+++ b/diagram/org.eclipse.papyrus.sysml14.diagram.internalblock/resources/configuration/internaBlockDiagramConfig.expansionmodel
@@ -5,7 +5,7 @@
     <gmftRepresentations xmi:id="_j7dP0HytEeWustL01XNGSA" editPartQualifiedName="org.eclipse.papyrus.sysml14.diagram.common.edit.parts.SysMLConnectorEditPart" name="SysmlConnector based on Composite Connector @papyrus.req org.eclipse.papyrus.sysml14.diagram.internalblock#Req_004" viewFactory="org.eclipse.papyrus.sysml14.diagram.common.internal.factory.SysMLConnectorViewFactory" subRepresentations="_EDXlcHzEEeWVMv-LGO6tZw" reusedID="Connector_Edge"/>
     <gmftRepresentations xmi:id="_EDXlcHzEEeWVMv-LGO6tZw" editPartQualifiedName="org.eclipse.papyrus.sysml14.diagram.common.edit.parts.SysMLConnectorAppliedStereotypeEditPart" name="Applied Stereotype label for a connector  @papyrus.req org.eclipse.papyrus.sysml14.diagram.internalblock#Req_004" viewFactory="org.eclipse.gmf.runtime.diagram.ui.view.factories.optimal.DecorationNodeViewFactory" reusedID="6025"/>
   </usages>
-  <libraries xmi:id="_rC19oNnoEeSqwOe5_frWm3" name="Independant Representations">
+  <libraries xmi:id="_rC19oNnoEeSqwOe5_frWm3" name="Independent Representations">
     <representations xsi:type="expansionmodel:Representation" xmi:id="_rC19oNnoEeSqwOe5_frWm4" editPartQualifiedName="org.eclipse.papyrus.sysml14.diagram.common.edit.parts.FlowPortEditPart" name="Flow Port As Icon" viewFactory="org.eclipse.papyrus.sysml14.diagram.common.internal.factory.FlowPortViewFactory" graphicalElementType="org.eclipse.papyrus.sysmldi.FlowPort_Icon"/>
   </libraries>
 </expansionmodel:DiagramExpansion>
diff --git a/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/provider/SysMLFlowPortDirectionLabelProvider.java b/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/provider/SysMLFlowPortDirectionLabelProvider.java
index 54a04a1..f754e8e 100644
--- a/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/provider/SysMLFlowPortDirectionLabelProvider.java
+++ b/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/provider/SysMLFlowPortDirectionLabelProvider.java
@@ -62,7 +62,7 @@
 
 	@Override
 	public String getText(Object element) {
-		final ILayerCell cell = ((LabelProviderCellContextElementWrapper) element);
+		final ILayerCell cell = (LabelProviderCellContextElementWrapper) element;
 		final IConfigRegistry configRegistry = ((LabelProviderCellContextElementWrapper) element).getConfigRegistry();
 		final Object rowObject = getRowObject(cell, configRegistry);
 		final Object columObject = getColumnObject(cell, configRegistry);
