diff --git a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java
index 300073e..25de988 100644
--- a/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java
+++ b/bundles/org.eclipse.jst.ws.jaxws.core/src/org/eclipse/jst/ws/internal/jaxws/core/annotations/validation/UniqueNamesRule.java
@@ -419,31 +419,35 @@
         }
 
         for (MethodDeclaration methodDeclaration : methods) {
-            List<AnnotationValue> names = new ArrayList<AnnotationValue>();
+        	Map<AnnotationValue, SourcePosition> values = new HashMap<AnnotationValue, SourcePosition>();
+        	List<AnnotationValue> names = new ArrayList<AnnotationValue>();
             List<ParameterDeclaration> parameters = (List<ParameterDeclaration>) methodDeclaration.getParameters();
             for (ParameterDeclaration parameterDeclaration : parameters) {
                 AnnotationMirror webParam = AnnotationUtils.getAnnotation(parameterDeclaration, WebParam.class);
                 if (webParam != null) {
                     AnnotationValue name = AnnotationUtils.getAnnotationValue(webParam, NAME);
                     if (name != null) {
-                        names.add(name);
+                    	values.put(name, name.getPosition());
+                    	names.add(name);
                         testForGeneratedNameClash(name, parameterDeclaration, parameters);
                     }
                 }
             }
-
+            
             for (int i = 0; i < names.size(); i++) {
                 AnnotationValue name = names.get(i);
                 for (int j = i + 1; j < names.size(); j++) {
                     AnnotationValue otherName = names.get(j);
                     if (name.toString().equals(otherName.toString())) {
-                        printError(name.getPosition(), JAXWSCoreMessages.bind(
+                    	printError(values.get(name), JAXWSCoreMessages.bind(
                                 JAXWSCoreMessages.PARAMETER_NAME_CLASH, name.getValue().toString()));
-                        printError(otherName.getPosition(), JAXWSCoreMessages.bind(
+                        printError(values.get(otherName), JAXWSCoreMessages.bind(
                                 JAXWSCoreMessages.PARAMETER_NAME_CLASH, otherName.getValue().toString()));
                     }
                 }
             }
+            values.clear();
+            values = null;
         }
     }
 
diff --git a/tests/org.eclipse.jst.ws.jaxws.dom.runtime.tests/src/org/eclipse/jst/ws/jaxws/dom/runtime/tests/dom/validation/WpValidationTest.java b/tests/org.eclipse.jst.ws.jaxws.dom.runtime.tests/src/org/eclipse/jst/ws/jaxws/dom/runtime/tests/dom/validation/WpValidationTest.java
index a302810..c7fd19d 100755
--- a/tests/org.eclipse.jst.ws.jaxws.dom.runtime.tests/src/org/eclipse/jst/ws/jaxws/dom/runtime/tests/dom/validation/WpValidationTest.java
+++ b/tests/org.eclipse.jst.ws.jaxws.dom.runtime.tests/src/org/eclipse/jst/ws/jaxws/dom/runtime/tests/dom/validation/WpValidationTest.java
@@ -58,7 +58,6 @@
 		validateResourceMarkers(seiType.getResource(), markerData);
 	}
 
-	/*
 	public void testNameIsUniqe() throws CoreException
 	{
 		setContents(seiType.getCompilationUnit(),
@@ -79,7 +78,6 @@
 		final MarkerData marker2_Data = new MarkerData(seiType.getResource(), VALIDATION_PROBLEM_MARKER_ID, marker2_Attributes);
 		validateResourceMarkers(seiType.getResource(), marker2_Data, marker1_Data);
 	}
-	*/
 
 	public void testNameNotRedundant() throws CoreException
 	{
