diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/SampleImageProvider.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/SampleImageProvider.java
index ca90543..33781e7 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/SampleImageProvider.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/SampleImageProvider.java
@@ -27,13 +27,6 @@
 
 	private static final String ROOT_FOLDER_FOR_IMG = "icons/"; //$NON-NLS-1$
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.eclipse.platform.AbstractImageProvider#addAvailableImages
-	 * ()
-	 */
 	@Override
 	protected void addAvailableImages() {
 		// attributes
diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractContainerNode.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractContainerNode.java
index e25baa8..0587c4b 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractContainerNode.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractContainerNode.java
@@ -39,11 +39,6 @@
 	protected AbstractContainerNode() {
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.ui.action.view.nodes.IContainerNode#getText()
-	 */
 	public String getText() {
 		String ret = getContainerName();
 		if (APPEND_FOLDER_SIZE) {
@@ -64,11 +59,6 @@
 	 */
 	abstract protected String getContainerName();
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.ui.action.view.nodes.IContainerNode#hasChildren()
-	 */
 	public boolean hasChildren() {
 		if (OPTIMISTIC_CHILDREN_CHECK) {
 			return true;
diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractInstancesOfTypeContainerNode.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractInstancesOfTypeContainerNode.java
index fe63156..81a39eb 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractInstancesOfTypeContainerNode.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/navigator/nodes/base/AbstractInstancesOfTypeContainerNode.java
@@ -40,20 +40,10 @@
 		this.project = project;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.ui.action.view.nodes.IContainerNode#getParent()
-	 */
 	public Object getParent() {
 		return parent;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.ui.action.view.nodes.IContainerNode#hasChildren()
-	 */
 	@Override
 	public boolean hasChildren() {
 		return super.hasChildren(); // getChildren().length > 0;
diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/CompartmentPattern.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/CompartmentPattern.java
index 0f92d61..bad2136 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/CompartmentPattern.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/CompartmentPattern.java
@@ -66,13 +66,6 @@
 		super(new DefaultCompartmentPatternConfiguration());
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractBasePattern#add(com.sap.tc.emf.gfw
-	 * .features.context.IAddContext)
-	 */
 	@Override
 	public PictogramElement add(IAddContext context) {
 		Object mainBusinessObject = context.getNewObject();
@@ -185,13 +178,6 @@
 		getFeatureProvider().getDirectEditingInfo().setActive(true);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#layout(com.sap.tc.emf.gfw.
-	 * features.context.ILayoutContext)
-	 */
 	@Override
 	public boolean layout(ILayoutContext context) {
 		boolean ret = false;
@@ -282,13 +268,6 @@
 		return ret;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#update(com.sap.tc.emf.gfw.
-	 * features.context.IUpdateContext)
-	 */
 	@Override
 	public boolean update(IUpdateContext context) {
 		boolean ret = false;
@@ -307,13 +286,6 @@
 		return ret;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#updateNeeded(com.sap.tc.emf
-	 * .gfw.features.context.IUpdateContext)
-	 */
 	@Override
 	public IReason updateNeeded(IUpdateContext context) {
 
@@ -492,26 +464,12 @@
 		return ret;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#isPatternControlled(com.sap
-	 * .tc.emf.gfw.mm.pictograms.PictogramElement)
-	 */
 	@Override
 	protected boolean isPatternControlled(PictogramElement pictogramElement) {
 		ContainerShape patternRoot = getPatternRoot(pictogramElement);
 		return patternRoot != null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#isPatternRoot(com.sap.tc.emf
-	 * .gfw.mm.pictograms.PictogramElement)
-	 */
 	@Override
 	protected boolean isPatternRoot(PictogramElement pe) {
 		boolean ret = false;
@@ -647,13 +605,6 @@
 		return (ICompartmentPatternConfiguration) getPatternConfiguration();
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#completeInfo(com.sap.tc.emf
-	 * .gfw.features.IDirectEditingInfo, java.lang.Object)
-	 */
 	@Override
 	public void completeInfo(IDirectEditingInfo info, Object bo) {
 		super.completeInfo(info, bo);
diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/DefaultCompartmentPatternConfiguration.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/DefaultCompartmentPatternConfiguration.java
index 7f03412..e3e884f 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/DefaultCompartmentPatternConfiguration.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/compartment/DefaultCompartmentPatternConfiguration.java
@@ -50,38 +50,18 @@
 
 	private boolean isHeaderImageVisible = false;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getBackgroundColor()
-	 */
 	public IColorConstant getBackgroundColor() {
 		return backgroundColor;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.compartment.ICompartmentPatternConfiguration#getCornerHeight()
-	 */
 	public int getCornerHeight() {
 		return cornerHeight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.compartment.ICompartmentPatternConfiguration#getCornerWidth()
-	 */
 	public int getCornerWidth() {
 		return cornerWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getForegroundColor()
-	 */
 	public IColorConstant getForegroundColor() {
 		return foregroundColor;
 	}
@@ -95,92 +75,42 @@
 		return lineWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#getMinimumHeight()
-	 */
 	public int getMinimumHeight() {
 		return minimumHeight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#getMinimumWidth()
-	 */
 	public int getMinimumWidth() {
 		return minimumWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#getOuterIndentBottom()
-	 */
 	public int getOuterIndentBottom() {
 		return outerIndentBottom;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#getOuterIndentLeft()
-	 */
 	public int getOuterIndentLeft() {
 		return outerIndentLeft;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#getOuterIndentRight()
-	 */
 	public int getOuterIndentRight() {
 		return outerIndentRight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#getOuterIndentTop()
-	 */
 	public int getOuterIndentTop() {
 		return outerIndentTop;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getTextColor()
-	 */
 	public IColorConstant getTextColor() {
 		return textColor;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getTransparency()
-	 */
 	public double getTransparency() {
 		return transparency;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setBackgroundColor(com.sap.tc.emf.gfw.util.IColorConstant)
-	 */
 	public void setBackgroundColor(IColorConstant color) {
 		backgroundColor = color;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setForegroundColor(com.sap.tc.emf.gfw.util.IColorConstant)
-	 */
 	public void setForegroundColor(IColorConstant color) {
 		foregroundColor = color;
 	}
@@ -195,92 +125,42 @@
 		this.lineWidth = lineWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#setMinimumHeight(int)
-	 */
 	public void setMinimumHeight(int minimumHeight) {
 		this.minimumHeight = minimumHeight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#setMinimumWidth(int)
-	 */
 	public void setMinimumWidth(int minimumWidth) {
 		this.minimumWidth = minimumWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#setOuterIndentBottom(int)
-	 */
 	public void setOuterIndentBottom(int outerIndentBottom) {
 		this.outerIndentBottom = outerIndentBottom;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#setOuterIndentLeft(int)
-	 */
 	public void setOuterIndentLeft(int outerIndentLeft) {
 		this.outerIndentLeft = outerIndentLeft;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#setOuterIndentRight(int)
-	 */
 	public void setOuterIndentRight(int outerIndentRight) {
 		this.outerIndentRight = outerIndentRight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IIndentConfiguration#setOuterIndentTop(int)
-	 */
 	public void setOuterIndentTop(int outerIndentTop) {
 		this.outerIndentTop = outerIndentTop;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setTextColor(com.sap.tc.emf.gfw.util.IColorConstant)
-	 */
 	public void setTextColor(IColorConstant color) {
 		textColor = color;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setTransparency(int)
-	 */
 	public void setTransparency(int t) {
 		transparency = t;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.compartment.ICompartmentPatternConfiguration#setCornerHeight(int)
-	 */
 	public void setCornerHeight(int cornerHeight) {
 		this.cornerHeight = cornerHeight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.compartment.ICompartmentPatternConfiguration#setCornerWidth(int)
-	 */
 	public void setCornerWidth(int cornerWidth) {
 		this.cornerWidth = cornerWidth;
 	}
@@ -298,7 +178,8 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.compartment.ICompartmentPatternConfiguration#isHeaderImageVisible()
+	 * @seeorg.eclipse.graphiti.examples.common.pattern.compartment.
+	 * ICompartmentPatternConfiguration#isHeaderImageVisible()
 	 */
 	public boolean isHeaderImageVisible() {
 		return isHeaderImageVisible;
@@ -307,7 +188,8 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.compartment.ICompartmentPatternConfiguration#setHeaderImageVisible(boolean)
+	 * @seeorg.eclipse.graphiti.examples.common.pattern.compartment.
+	 * ICompartmentPatternConfiguration#setHeaderImageVisible(boolean)
 	 */
 	public void setHeaderImageVisible(boolean isHeaderImageVisible) {
 		this.isHeaderImageVisible = isHeaderImageVisible;
diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/DefaultGridPatternConfiguration.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/DefaultGridPatternConfiguration.java
index 183ac01..64a39ee 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/DefaultGridPatternConfiguration.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/DefaultGridPatternConfiguration.java
@@ -44,20 +44,10 @@
 
 	private int majorUnitY = 0;
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getBackgroundColor()
-	 */
 	public IColorConstant getBackgroundColor() {
 		return backgroundColor;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getForegroundColor()
-	 */
 	public IColorConstant getForegroundColor() {
 		return foregroundColor;
 	}
@@ -71,56 +61,26 @@
 		return lineWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#getMinimumHeight()
-	 */
 	public int getMinimumHeight() {
 		return minimumHeight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#getMinimumWidth()
-	 */
 	public int getMinimumWidth() {
 		return minimumWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getTextColor()
-	 */
 	public IColorConstant getTextColor() {
 		return textColor;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#getTransparency()
-	 */
 	public double getTransparency() {
 		return transparency;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setBackgroundColor(com.sap.tc.emf.gfw.util.IColorConstant)
-	 */
 	public void setBackgroundColor(IColorConstant color) {
 		backgroundColor = color;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setForegroundColor(com.sap.tc.emf.gfw.util.IColorConstant)
-	 */
 	public void setForegroundColor(IColorConstant color) {
 		foregroundColor = color;
 	}
@@ -135,38 +95,18 @@
 		this.lineWidth = lineWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#setMinimumHeight(int)
-	 */
 	public void setMinimumHeight(int minimumHeight) {
 		this.minimumHeight = minimumHeight;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IMinimumSizeConfiguration#setMinimumWidth(int)
-	 */
 	public void setMinimumWidth(int minimumWidth) {
 		this.minimumWidth = minimumWidth;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setTextColor(com.sap.tc.emf.gfw.util.IColorConstant)
-	 */
 	public void setTextColor(IColorConstant color) {
 		textColor = color;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see com.sap.tc.emf.gfw.pattern.config.IColorConfiguration#setTransparency(int)
-	 */
 	public void setTransparency(int t) {
 		transparency = t;
 	}
@@ -184,7 +124,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#getMajorUnitSeparatorWidth()
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #getMajorUnitSeparatorWidth()
 	 */
 	public int getMajorUnitSeparatorWidth() {
 		return majorUnitSeparatorWidth;
@@ -193,7 +135,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#getMajorUnitX()
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #getMajorUnitX()
 	 */
 	public int getMajorUnitX() {
 		return majorUnitX;
@@ -202,7 +146,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#getMajorUnitY()
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #getMajorUnitY()
 	 */
 	public int getMajorUnitY() {
 		return majorUnitY;
@@ -211,7 +157,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#getMinorSeparatorWidth()
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #getMinorSeparatorWidth()
 	 */
 	public int getMinorSeparatorWidth() {
 		return minorUnitSeparatorWidth;
@@ -220,7 +168,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#setMajorUnitSeparatorWidth(int)
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #setMajorUnitSeparatorWidth(int)
 	 */
 	public void setMajorUnitSeparatorWidth(int majorUnitSeparatorWidth) {
 		this.majorUnitSeparatorWidth = majorUnitSeparatorWidth;
@@ -229,7 +179,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#setMajorUnitX(int)
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #setMajorUnitX(int)
 	 */
 	public void setMajorUnitX(int majorUnitX) {
 		this.majorUnitX = majorUnitX;
@@ -238,7 +190,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#setMajorUnitY(int)
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #setMajorUnitY(int)
 	 */
 	public void setMajorUnitY(int majorUnitY) {
 		this.majorUnitY = majorUnitY;
@@ -247,7 +201,9 @@
 	/*
 	 * (non-Javadoc)
 	 * 
-	 * @see org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration#setMinorSeparatorWidth(int)
+	 * @see
+	 * org.eclipse.graphiti.examples.common.pattern.grid.IGridPatternConfiguration
+	 * #setMinorSeparatorWidth(int)
 	 */
 	public void setMinorSeparatorWidth(int minorSeparatorWidth) {
 		this.minorUnitSeparatorWidth = minorSeparatorWidth;
diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/GridPattern.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/GridPattern.java
index a767a4d..844a6d9 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/GridPattern.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/pattern/grid/GridPattern.java
@@ -54,13 +54,6 @@
 		super(new DefaultGridPatternConfiguration());
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractBasePattern#add(com.sap.tc.emf.gfw
-	 * .features.context.IAddContext)
-	 */
 	@Override
 	final public PictogramElement add(IAddContext context) {
 		Object mainBusinessObject = context.getNewObject();
@@ -114,13 +107,6 @@
 		}
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#layout(com.sap.tc.emf.gfw.
-	 * features.context.ILayoutContext)
-	 */
 	@Override
 	public boolean layout(ILayoutContext context) {
 		boolean ret = true;
@@ -165,13 +151,6 @@
 		return ret;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#update(com.sap.tc.emf.gfw.
-	 * features.context.IUpdateContext)
-	 */
 	@Override
 	public boolean update(IUpdateContext context) {
 		boolean ret = false;
@@ -190,13 +169,6 @@
 		return ret;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#updateNeeded(com.sap.tc.emf
-	 * .gfw.features.context.IUpdateContext)
-	 */
 	@Override
 	public IReason updateNeeded(IUpdateContext context) {
 
@@ -259,26 +231,12 @@
 		return ret;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#isPatternControlled(com.sap
-	 * .tc.emf.gfw.mm.pictograms.PictogramElement)
-	 */
 	@Override
 	protected boolean isPatternControlled(PictogramElement pictogramElement) {
 		ContainerShape patternRoot = getPatternRoot(pictogramElement);
 		return patternRoot != null;
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @see
-	 * com.sap.tc.emf.gfw.pattern.AbstractPattern#isPatternRoot(com.sap.tc.emf
-	 * .gfw.mm.pictograms.PictogramElement)
-	 */
 	@Override
 	protected boolean isPatternRoot(PictogramElement pe) {
 		boolean ret = false;
diff --git a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/ui/DiagramTypeWizardPage.java b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/ui/DiagramTypeWizardPage.java
index 8e19088..7c2eea0 100644
--- a/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/ui/DiagramTypeWizardPage.java
+++ b/examples/org.eclipse.graphiti.examples.common/src/org/eclipse/graphiti/examples/common/ui/DiagramTypeWizardPage.java
@@ -62,12 +62,6 @@
 		super(pageName);
 	}
 
-	/*
-	 * (non-Javadoc)
-	 * 
-	 * @seecom.sap.tc.emf.gfw.examples.testview.wizard.AbstractWizardPage#
-	 * createWizardContents(org.eclipse.swt.widgets.Composite)
-	 */
 	@Override
 	protected void createWizardContents(Composite parent) {
 		// project specification group
