diff --git a/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/utils/Constants.java b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/util/SysMLQualifiedName.java
similarity index 67%
rename from table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/utils/Constants.java
rename to core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/util/SysMLQualifiedName.java
index e66635c..7a36d26 100644
--- a/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/utils/Constants.java
+++ b/core/org.eclipse.papyrus.sysml14/src/org/eclipse/papyrus/sysml14/util/SysMLQualifiedName.java
@@ -1,5 +1,5 @@
 /*****************************************************************************
- * Copyright (c) 2013 CEA LIST.
+ * Copyright (c) 2017 CEA LIST.
  *
  *
  * All rights reserved. This program and the accompanying materials
@@ -8,23 +8,22 @@
  * http://www.eclipse.org/legal/epl-v10.html
  *
  * Contributors:
- *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *  Benoit Maggi (CEA LIST) benoit.maggi@cea.fr - Initial API and implementation
  *
  *****************************************************************************/
-package org.eclipse.papyrus.sysml14.nattable.common.utils;
+package org.eclipse.papyrus.sysml14.util;
 
 
-public final class Constants {
+public final class SysMLQualifiedName {
 
-	private Constants() {
+	private SysMLQualifiedName() {
 		// to prevent instantiation
 	}
 
-
 	/**
 	 * The qualified name of the property direction
 	 * @deprecated
 	 */
 	@Deprecated
-	public static final String STEREOTYPE_FLOWPORT_DIRECTION = "SysML::PortsAndFlows::FlowPort::direction"; //$NON-NLS-1$
+	public static final String STEREOTYPE_FLOWPORT_DIRECTION = "SysML::DeprecatedElements::FlowPort::direction"; //$NON-NLS-1$
 }
diff --git a/table/org.eclipse.papyrus.sysml14.nattable.common/META-INF/MANIFEST.MF b/table/org.eclipse.papyrus.sysml14.nattable.common/META-INF/MANIFEST.MF
index bfa975b..a1989f0 100644
--- a/table/org.eclipse.papyrus.sysml14.nattable.common/META-INF/MANIFEST.MF
+++ b/table/org.eclipse.papyrus.sysml14.nattable.common/META-INF/MANIFEST.MF
@@ -2,8 +2,7 @@
 Export-Package: org.eclipse.papyrus.sysml14.nattable.common,
  org.eclipse.papyrus.sysml14.nattable.common.manager.axis,
  org.eclipse.papyrus.sysml14.nattable.common.manager.cell,
- org.eclipse.papyrus.sysml14.nattable.common.provider,
- org.eclipse.papyrus.sysml14.nattable.common.utils
+ org.eclipse.papyrus.sysml14.nattable.common.provider
 Require-Bundle: org.eclipse.ui;bundle-version="[3.107.0,4.0.0)",
  org.eclipse.core.runtime;bundle-version="[3.11.1,4.0.0)",
  org.eclipse.uml2.uml;bundle-version="[5.1.0,6.0.0)",
diff --git a/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/manager/cell/SysMLStereotypePropertyCellManager.java b/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/manager/cell/SysMLStereotypePropertyCellManager.java
index 98c7690..526cb80 100644
--- a/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/manager/cell/SysMLStereotypePropertyCellManager.java
+++ b/table/org.eclipse.papyrus.sysml14.nattable.common/src/org/eclipse/papyrus/sysml14/nattable/common/manager/cell/SysMLStereotypePropertyCellManager.java
@@ -9,78 +9,84 @@
  *
  * Contributors:
  *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *  Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Bug 516997
  *
  *****************************************************************************/
 package org.eclipse.papyrus.sysml14.nattable.common.manager.cell;
 
+import java.util.AbstractMap;
 import java.util.List;
-
+import java.util.Map.Entry;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.papyrus.infra.nattable.manager.table.INattableModelManager;
 import org.eclipse.papyrus.sysml14.service.types.matcher.FlowPortNAMatcher;
+import org.eclipse.papyrus.sysml14.util.SysMLQualifiedName;
 import org.eclipse.papyrus.uml.nattable.manager.cell.StereotypePropertyCellManager;
 import org.eclipse.papyrus.uml.nattable.utils.Constants;
 import org.eclipse.uml2.uml.Port;
 
 /**
- *
  * This cell manager manages the cell displaying the direction of the FlowPort.
  * If the flowport is not atomic, the cell is not editable and the direction is N/A.
- *
  */
 public class SysMLStereotypePropertyCellManager extends StereotypePropertyCellManager {
 
 	/**
 	 * the FlowPort isAtomicMatcher
 	 */
-	private static FlowPortNAMatcher matcher = new FlowPortNAMatcher();
+	private static final FlowPortNAMatcher matcher = new FlowPortNAMatcher();
 
-// FIXME
-	
-//	/**
-//	 *
-//	 * @see org.eclipse.papyrus.uml.nattable.manager.cell.manager.StereotypePropertyCellManager#handles(java.lang.Object, java.lang.Object)
-//	 *
-//	 * @param columnElement
-//	 * @param rowElement
-//	 * @return
-//	 */
-//	@Override
-//	public boolean handles(final Object columnElement, final Object rowElement) {
-//		if (super.handles(columnElement, rowElement)) {
-//			final List<Object> objects = organizeAndResolvedObjects(columnElement, rowElement, null);
-//			if (objects.size() == 2) {
-//				final EObject object = (EObject) objects.get(0);
-//				if (object instanceof Port) {
-//					String propertyQualifiedName = (String) objects.get(1);
-//					propertyQualifiedName = propertyQualifiedName.substring(Constants.PROPERTY_OF_STEREOTYPE_PREFIX.length(), propertyQualifiedName.length());
-//					return propertyQualifiedName.equals(org.eclipse.papyrus.sysml14.nattable.common.utils.Constants.STEREOTYPE_FLOWPORT_DIRECTION);
-//				}
-//			}
-//		}
-//		return false;
-//	}
-//
-//
-//	/**
-//	 *
-//	 * @see org.eclipse.papyrus.uml.nattable.manager.cell.manager.StereotypePropertyCellManager#isCellEditable(java.lang.Object, java.lang.Object)
-//	 *
-//	 * @param columnElement
-//	 * @param rowElement
-//	 * @return
-//	 */
-//	@Override
-//	public boolean isCellEditable(final Object columnElement, final Object rowElement) {
-//		boolean value = super.isCellEditable(columnElement, rowElement);
-//		if (value) {
-//			final List<Object> objects = organizeAndResolvedObjects(columnElement, rowElement, null);
-//			if (objects.size() == 2) {
-//				final EObject object = (EObject) objects.get(0);
-//				if (matcher.matches(object)) {
-//					value = false;
-//				}
-//			}
-//		}
-//		return value;
-//	}
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.papyrus.uml.nattable.manager.cell.manager.StereotypePropertyCellManager#handles(java.lang.Object, java.lang.Object)
+	 */
+	@Override
+	public boolean handles(final Object columnElement, final Object rowElement, final INattableModelManager tableManager) {
+		boolean isHandled = super.handles(columnElement, rowElement, tableManager);
+		if (isHandled) {
+			Entry<EObject, String> cellDefinition = getCellDefinition(columnElement, rowElement);
+			if (cellDefinition.getKey() instanceof Port) {
+				final String propertyQualifiedNameString = cellDefinition.getValue().substring(Constants.PROPERTY_OF_STEREOTYPE_PREFIX.length(), cellDefinition.getValue().length());
+				// We have to use the full name for Constants because of the previous one
+				isHandled = SysMLQualifiedName.STEREOTYPE_FLOWPORT_DIRECTION.equals(propertyQualifiedNameString);
+			}
+		}
+		return isHandled;
+	}
+
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.papyrus.uml.nattable.manager.cell.manager.StereotypePropertyCellManager#isCellEditable(java.lang.Object, java.lang.Object)
+	 */
+	@Override
+	public boolean isCellEditable(final Object columnElement, final Object rowElement, final INattableModelManager tableManager) {
+		boolean isEditable = super.isCellEditable(columnElement, rowElement, tableManager);
+		if (isEditable) {
+			Entry<EObject, String> cellDefinition = getCellDefinition(columnElement, rowElement);
+			if (cellDefinition != null) {
+				isEditable = !matcher.matches(cellDefinition.getKey());
+			}
+		}
+		return isEditable;
+	}
+
+	/**
+	 * @param columnElement
+	 * @param rowElement
+	 * @return Entry<EObject,propertyQualifiedName>
+	 */
+	//FIXME this method should be provided by the core API
+	private Entry<EObject, String> getCellDefinition(final Object columnElement, final Object rowElement) {
+		final List<Object> objects = organizeAndResolvedObjects(columnElement, rowElement, null);
+		// The list must have 2 elements (row and column elements)
+		if (objects != null && 2 == objects.size()) {
+			if (objects.get(0) instanceof EObject && objects.get(1) instanceof String) {
+					return new AbstractMap.SimpleEntry<EObject, String>((EObject) objects.get(0), (String) objects.get(1));
+			}
+		}
+		return null;
+	}
+
 }
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 f754e8e..62f665f 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
@@ -9,6 +9,7 @@
  *
  * Contributors:
  *  Vincent Lorenzo (CEA LIST) vincent.lorenzo@cea.fr - Initial API and implementation
+ *  Nicolas FAUVERGUE (CEA LIST) nicolas.fauvergue@cea.fr - Bug 516997
  *
  *****************************************************************************/
 package org.eclipse.papyrus.sysml14.nattable.common.provider;
@@ -19,6 +20,7 @@
 import org.eclipse.papyrus.infra.nattable.utils.Constants;
 import org.eclipse.papyrus.infra.nattable.utils.LabelProviderCellContextElementWrapper;
 import org.eclipse.papyrus.sysml14.service.types.matcher.FlowPortNAMatcher;
+import org.eclipse.papyrus.sysml14.util.SysMLQualifiedName;
 import org.eclipse.papyrus.uml.nattable.provider.AbstractUMLNattableCellLabelProvider;
 import org.eclipse.uml2.uml.Port;
 
@@ -36,15 +38,13 @@
 	private static final FlowPortNAMatcher matcher = new FlowPortNAMatcher();
 
 	/**
-	 *
+	 * {@inheritDoc}
+	 * 
 	 * @see org.eclipse.papyrus.infra.nattable.provider.GenericCellLabelProvider#accept(java.lang.Object)
-	 *
-	 * @param element
-	 * @return
 	 */
 	@Override
 	public boolean accept(final Object element) {
-		if (element instanceof LabelProviderCellContextElementWrapper) {
+       		if (element instanceof LabelProviderCellContextElementWrapper) {
 			final ILayerCell cell = ((LabelProviderCellContextElementWrapper) element);
 			final IConfigRegistry registry = ((LabelProviderCellContextElementWrapper) element).getConfigRegistry();
 			final Object columnObject = getColumnObject(cell, registry);
@@ -54,18 +54,23 @@
 				str = AxisUtils.getPropertyId(rowObject);
 			}
 			if (str != null) {
-				return str.endsWith(org.eclipse.papyrus.sysml14.nattable.common.utils.Constants.STEREOTYPE_FLOWPORT_DIRECTION);
+				return str.endsWith(SysMLQualifiedName.STEREOTYPE_FLOWPORT_DIRECTION);
 			}
 		}
 		return false;
 	}
 
+	/**
+	 * {@inheritDoc}
+	 * 
+	 * @see org.eclipse.papyrus.infra.nattable.provider.GenericCellLabelProvider#getText(java.lang.Object)
+	 */
 	@Override
 	public String getText(Object element) {
 		final ILayerCell cell = (LabelProviderCellContextElementWrapper) element;
 		final IConfigRegistry configRegistry = ((LabelProviderCellContextElementWrapper) element).getConfigRegistry();
-		final Object rowObject = getRowObject(cell, configRegistry);
-		final Object columObject = getColumnObject(cell, configRegistry);
+		final Object rowObject = AxisUtils.getRepresentedElement(getRowObject(cell, configRegistry));
+		final Object columObject = AxisUtils.getRepresentedElement(getColumnObject(cell, configRegistry));
 		Port port = null;
 		if (rowObject instanceof Port) {
 			port = (Port) rowObject;
