diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityGroupTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityGroupTest.java
index eaf6c75..835245b 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityGroupTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityGroupTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ActivityGroupTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ActivityGroupTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -36,7 +36,7 @@
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getContainedEdges() <em>Get Contained Edges</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getContainedNodes() <em>Get Contained Nodes</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getActivity() <em>Get Activity</em>}</li>
- *   <li>{@link org.eclipse.uml2.ActivityGroup#setActivity(Activity) <em>Set Activity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.ActivityGroup#setActivity(org.eclipse.uml2.Activity) <em>Set Activity</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getOwner() <em>Get Owner</em>}</li>
  * </ul>
@@ -117,10 +117,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(Activity) <em>Activity Group activity</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(org.eclipse.uml2.Activity) <em>Activity Group activity</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(Activity)
+	 * @see org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(org.eclipse.uml2.Activity)
 	 * @generated
 	 */
 	public void testSetActivityGroup_activityGen() {
@@ -227,10 +227,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivity(Activity) <em>Set Activity</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivity(org.eclipse.uml2.Activity) <em>Set Activity</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ActivityGroup#setActivity(Activity)
+	 * @see org.eclipse.uml2.ActivityGroup#setActivity(org.eclipse.uml2.Activity)
 	 * @generated
 	 */
 	public void testSetActivityGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityNodeTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityNodeTest.java
index 9a2ebeb..d61e000 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityNodeTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityNodeTest.java
@@ -8,11 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ActivityNodeTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ActivityNodeTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import org.eclipse.uml2.Activity;
 import java.util.Iterator;
 
 import org.eclipse.emf.ecore.EClass;
@@ -112,10 +111,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ActivityNode#setActivity(Activity) <em>Activity</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ActivityNode#setActivity(org.eclipse.uml2.Activity) <em>Activity</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ActivityNode#setActivity(Activity)
+	 * @see org.eclipse.uml2.ActivityNode#setActivity(org.eclipse.uml2.Activity)
 	 * @generated
 	 */
 	public void testSetActivity() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityPartitionTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityPartitionTest.java
index 2c24418..1d370a8 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityPartitionTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ActivityPartitionTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ActivityPartitionTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ActivityPartitionTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -41,7 +41,7 @@
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getContainedEdges() <em>Get Contained Edges</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getContainedNodes() <em>Get Contained Nodes</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getActivity() <em>Get Activity</em>}</li>
- *   <li>{@link org.eclipse.uml2.ActivityGroup#setActivity(Activity) <em>Set Activity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.ActivityGroup#setActivity(org.eclipse.uml2.Activity) <em>Set Activity</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityPartition#getSuperGroup() <em>Get Super Group</em>}</li>
@@ -134,10 +134,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(Activity) <em>Activity Group activity</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(org.eclipse.uml2.Activity) <em>Activity Group activity</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(Activity)
+	 * @see org.eclipse.uml2.ActivityGroup#setActivityGroup_activity(org.eclipse.uml2.Activity)
 	 * @generated
 	 */
 	public void testSetActivityGroup_activityGen() {
@@ -188,10 +188,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivity(Activity) <em>Set Activity</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.ActivityGroup#setActivity(org.eclipse.uml2.Activity) <em>Set Activity</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ActivityGroup#setActivity(Activity)
+	 * @see org.eclipse.uml2.ActivityGroup#setActivity(org.eclipse.uml2.Activity)
 	 * @generated
 	 */
 	public void testSetActivityGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehaviorTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehaviorTest.java
index a86c7ba..e62561a 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehaviorTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehaviorTest.java
@@ -8,12 +8,11 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: BehaviorTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: BehaviorTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import org.eclipse.uml2.Behavior;
-import org.eclipse.uml2.BehavioredClassifier;
 
 import org.eclipse.uml2.Parameter;
 import org.eclipse.uml2.ParameterDirectionKind;
@@ -85,10 +84,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Behavior#setContext(BehavioredClassifier) <em>Context</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Behavior#setContext(org.eclipse.uml2.BehavioredClassifier) <em>Context</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Behavior#setContext(BehavioredClassifier)
+	 * @see org.eclipse.uml2.Behavior#setContext(org.eclipse.uml2.BehavioredClassifier)
 	 * @generated
 	 */
 	public void testSetContext() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioralFeatureTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioralFeatureTest.java
index 15a50ff..3a2ac4d 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioralFeatureTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioralFeatureTest.java
@@ -8,17 +8,11 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: BehavioralFeatureTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: BehavioralFeatureTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.uml2.BehavioralFeature;
-import org.eclipse.uml2.NamedElement;
-import org.eclipse.uml2.Namespace;
 import java.util.Iterator;
 
 import org.eclipse.uml2.Classifier;
@@ -42,12 +36,12 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
  *   <li>{@link org.eclipse.uml2.RedefinableElement#getRedefinedElements() <em>Get Redefined Elements</em>}</li>
- *   <li>{@link org.eclipse.uml2.BehavioralFeature#isDistinguishableFrom(NamedElement, Namespace) <em>Is Distinguishable From</em>}</li>
+ *   <li>{@link org.eclipse.uml2.BehavioralFeature#isDistinguishableFrom(org.eclipse.uml2.NamedElement, org.eclipse.uml2.Namespace) <em>Is Distinguishable From</em>}</li>
  *   <li>{@link org.eclipse.uml2.BehavioralFeature#getMembers() <em>Get Members</em>}</li>
  *   <li>{@link org.eclipse.uml2.BehavioralFeature#getOwnedMembers() <em>Get Owned Members</em>}</li>
  * </ul>
@@ -177,10 +171,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionContextValid__DiagnosticChain_Map() {
@@ -189,10 +183,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionConsistent__DiagnosticChain_Map() {
@@ -201,10 +195,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsConsistentWith__RedefinableElement() {
@@ -213,10 +207,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsRedefinitionContextValid__RedefinableElement() {
@@ -247,10 +241,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.BehavioralFeature#isDistinguishableFrom(NamedElement, Namespace) <em>Is Distinguishable From</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.BehavioralFeature#isDistinguishableFrom(org.eclipse.uml2.NamedElement, org.eclipse.uml2.Namespace) <em>Is Distinguishable From</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.BehavioralFeature#isDistinguishableFrom(NamedElement, Namespace)
+	 * @see org.eclipse.uml2.BehavioralFeature#isDistinguishableFrom(org.eclipse.uml2.NamedElement, org.eclipse.uml2.Namespace)
 	 * @generated
 	 */
 	public void testIsDistinguishableFrom__NamedElement_Namespace() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioredClassifierTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioredClassifierTest.java
index fabdd5d..093aab9 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioredClassifierTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/BehavioredClassifierTest.java
@@ -8,11 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: BehavioredClassifierTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: BehavioredClassifierTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import org.eclipse.uml2.Behavior;
 import org.eclipse.uml2.BehavioredClassifier;
 
 import org.eclipse.uml2.UML2Factory;
@@ -94,10 +93,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.BehavioredClassifier#setClassifierBehavior(Behavior) <em>Classifier Behavior</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.BehavioredClassifier#setClassifierBehavior(org.eclipse.uml2.Behavior) <em>Classifier Behavior</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.BehavioredClassifier#setClassifierBehavior(Behavior)
+	 * @see org.eclipse.uml2.BehavioredClassifier#setClassifierBehavior(org.eclipse.uml2.Behavior)
 	 * @generated
 	 */
 	public void testSetClassifierBehavior() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassTest.java
index 5b7cafe..588a5ec 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassTest.java
@@ -8,12 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ClassTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ClassTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Set;
-
 import java.util.Iterator;
 
 import junit.textui.TestRunner;
@@ -46,7 +44,7 @@
  *   <li>{@link org.eclipse.uml2.StructuredClassifier#getFeatures() <em>Get Features</em>}</li>
  *   <li>{@link org.eclipse.uml2.EncapsulatedClassifier#getFeatures() <em>Get Features</em>}</li>
  *   <li>{@link org.eclipse.uml2.EncapsulatedClassifier#getOwnedMembers() <em>Get Owned Members</em>}</li>
- *   <li>{@link org.eclipse.uml2.Class#inherit(Set) <em>Inherit</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Class#inherit(java.util.Set) <em>Inherit</em>}</li>
  *   <li>{@link org.eclipse.uml2.Class#isAbstract() <em>Is Abstract</em>}</li>
  *   <li>{@link org.eclipse.uml2.Class#setIsAbstract(boolean) <em>Set Is Abstract</em>}</li>
  *   <li>{@link org.eclipse.uml2.Class#getOwnedAttributes() <em>Get Owned Attributes</em>}</li>
@@ -193,10 +191,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Class#inherit(Set) <em>Inherit</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Class#inherit(java.util.Set) <em>Inherit</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Class#inherit(Set)
+	 * @see org.eclipse.uml2.Class#inherit(java.util.Set)
 	 * @generated
 	 */
 	public void testInherit__Set() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassifierTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassifierTest.java
index 0bd0cd8..0e5bf74 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassifierTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ClassifierTest.java
@@ -8,26 +8,18 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ClassifierTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ClassifierTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import java.util.Iterator;
 
 import org.eclipse.uml2.Classifier;
-import org.eclipse.uml2.CollaborationOccurrence;
 import org.eclipse.uml2.Feature;
 import org.eclipse.uml2.Generalization;
 import org.eclipse.uml2.NamedElement;
 import org.eclipse.uml2.Property;
 import org.eclipse.uml2.RedefinableElement;
-import org.eclipse.uml2.TemplateParameter;
-import org.eclipse.uml2.Type;
 import org.eclipse.uml2.UML2Factory;
 import org.eclipse.uml2.VisibilityKind;
 
@@ -58,28 +50,28 @@
  * <ul>
  *   <li>{@link org.eclipse.uml2.ParameterableElement#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.PackageableElement#getVisibility() <em>Get Visibility</em>}</li>
- *   <li>{@link org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind) <em>Set Visibility</em>}</li>
- *   <li>{@link org.eclipse.uml2.Type#conformsTo(Type) <em>Conforms To</em>}</li>
+ *   <li>{@link org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind) <em>Set Visibility</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Type#conformsTo(org.eclipse.uml2.Type) <em>Conforms To</em>}</li>
  *   <li>{@link org.eclipse.uml2.Type#getNamespace() <em>Get Namespace</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
  *   <li>{@link org.eclipse.uml2.RedefinableElement#getRedefinedElements() <em>Get Redefined Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#allFeatures() <em>All Features</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#validateNoCyclesInGeneralization(DiagnosticChain, Map) <em>Validate No Cycles In Generalization</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#validateSpecializeType(DiagnosticChain, Map) <em>Validate Specialize Type</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#validateInheritedMember(DiagnosticChain, Map) <em>Validate Inherited Member</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#validateNoCyclesInGeneralization(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate No Cycles In Generalization</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#validateSpecializeType(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Specialize Type</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#validateInheritedMember(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Inherited Member</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#inheritedMember() <em>Inherited Member</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#parents() <em>Parents</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#allParents() <em>All Parents</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#inheritableMembers(Classifier) <em>Inheritable Members</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#hasVisibilityOf(NamedElement) <em>Has Visibility Of</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#inherit(Set) <em>Inherit</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#maySpecializeType(Classifier) <em>May Specialize Type</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#inheritableMembers(org.eclipse.uml2.Classifier) <em>Inheritable Members</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#hasVisibilityOf(org.eclipse.uml2.NamedElement) <em>Has Visibility Of</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#inherit(java.util.Set) <em>Inherit</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#maySpecializeType(org.eclipse.uml2.Classifier) <em>May Specialize Type</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#general() <em>General</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#validateGeneralEqualsParents(DiagnosticChain, Map) <em>Validate General Equals Parents</em>}</li>
- *   <li>{@link org.eclipse.uml2.Classifier#conformsTo(Classifier) <em>Conforms To</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#validateGeneralEqualsParents(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate General Equals Parents</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Classifier#conformsTo(org.eclipse.uml2.Classifier) <em>Conforms To</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#getMembers() <em>Get Members</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.Classifier#getRedefinedElements() <em>Get Redefined Elements</em>}</li>
@@ -131,10 +123,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameter() {
@@ -155,10 +147,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameter() {
@@ -179,10 +171,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(VisibilityKind) <em>Packageable Element visibility</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(org.eclipse.uml2.VisibilityKind) <em>Packageable Element visibility</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(VisibilityKind)
+	 * @see org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(org.eclipse.uml2.VisibilityKind)
 	 * @generated
 	 */
 	public void testSetPackageableElement_visibility() {
@@ -364,10 +356,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#setRepresentation(CollaborationOccurrence) <em>Representation</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#setRepresentation(org.eclipse.uml2.CollaborationOccurrence) <em>Representation</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#setRepresentation(CollaborationOccurrence)
+	 * @see org.eclipse.uml2.Classifier#setRepresentation(org.eclipse.uml2.CollaborationOccurrence)
 	 * @generated
 	 */
 	public void testSetRepresentation() {
@@ -430,10 +422,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind) <em>Set Visibility</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind) <em>Set Visibility</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind)
+	 * @see org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind)
 	 * @generated
 	 */
 	public void testSetVisibilityGen() {
@@ -450,10 +442,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Type#conformsTo(Type) <em>Conforms To</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Type#conformsTo(org.eclipse.uml2.Type) <em>Conforms To</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Type#conformsTo(Type)
+	 * @see org.eclipse.uml2.Type#conformsTo(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testConformsTo__Type() {
@@ -484,10 +476,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionContextValid__DiagnosticChain_Map() {
@@ -496,10 +488,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionConsistent__DiagnosticChain_Map() {
@@ -508,10 +500,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsConsistentWith__RedefinableElement() {
@@ -520,10 +512,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsRedefinitionContextValid__RedefinableElement() {
@@ -562,10 +554,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#validateNoCyclesInGeneralization(DiagnosticChain, Map) <em>Validate No Cycles In Generalization</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#validateNoCyclesInGeneralization(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate No Cycles In Generalization</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#validateNoCyclesInGeneralization(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Classifier#validateNoCyclesInGeneralization(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateNoCyclesInGeneralization__DiagnosticChain_Map() {
@@ -574,10 +566,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#validateSpecializeType(DiagnosticChain, Map) <em>Validate Specialize Type</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#validateSpecializeType(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Specialize Type</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#validateSpecializeType(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Classifier#validateSpecializeType(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateSpecializeType__DiagnosticChain_Map() {
@@ -586,10 +578,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#validateInheritedMember(DiagnosticChain, Map) <em>Validate Inherited Member</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#validateInheritedMember(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Inherited Member</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#validateInheritedMember(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Classifier#validateInheritedMember(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateInheritedMember__DiagnosticChain_Map() {
@@ -663,10 +655,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#inheritableMembers(Classifier) <em>Inheritable Members</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#inheritableMembers(org.eclipse.uml2.Classifier) <em>Inheritable Members</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#inheritableMembers(Classifier)
+	 * @see org.eclipse.uml2.Classifier#inheritableMembers(org.eclipse.uml2.Classifier)
 	 * @generated
 	 */
 	public void testInheritableMembers__Classifier() {
@@ -675,10 +667,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#hasVisibilityOf(NamedElement) <em>Has Visibility Of</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#hasVisibilityOf(org.eclipse.uml2.NamedElement) <em>Has Visibility Of</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#hasVisibilityOf(NamedElement)
+	 * @see org.eclipse.uml2.Classifier#hasVisibilityOf(org.eclipse.uml2.NamedElement)
 	 * @generated
 	 */
 	public void testHasVisibilityOf__NamedElement() {
@@ -687,10 +679,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#inherit(Set) <em>Inherit</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#inherit(java.util.Set) <em>Inherit</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#inherit(Set)
+	 * @see org.eclipse.uml2.Classifier#inherit(java.util.Set)
 	 * @generated
 	 */
 	public void testInherit__Set() {
@@ -699,10 +691,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#maySpecializeType(Classifier) <em>May Specialize Type</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#maySpecializeType(org.eclipse.uml2.Classifier) <em>May Specialize Type</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#maySpecializeType(Classifier)
+	 * @see org.eclipse.uml2.Classifier#maySpecializeType(org.eclipse.uml2.Classifier)
 	 * @generated
 	 */
 	public void testMaySpecializeType__Classifier() {
@@ -731,10 +723,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#validateGeneralEqualsParents(DiagnosticChain, Map) <em>Validate General Equals Parents</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#validateGeneralEqualsParents(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate General Equals Parents</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#validateGeneralEqualsParents(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Classifier#validateGeneralEqualsParents(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateGeneralEqualsParents__DiagnosticChain_Map() {
@@ -743,10 +735,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Classifier#conformsTo(Classifier) <em>Conforms To</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Classifier#conformsTo(org.eclipse.uml2.Classifier) <em>Conforms To</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Classifier#conformsTo(Classifier)
+	 * @see org.eclipse.uml2.Classifier#conformsTo(org.eclipse.uml2.Classifier)
 	 * @generated
 	 */
 	public void testConformsTo__Classifier() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConnectableElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConnectableElementTest.java
index 34d11c5..e26a474 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConnectableElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConnectableElementTest.java
@@ -8,14 +8,12 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ConnectableElementTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ConnectableElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import org.eclipse.uml2.ConnectableElement;
 
-import org.eclipse.uml2.TemplateParameter;
-
 /**
  * <!-- begin-user-doc -->
  * A test case for the model object '<em><b>Connectable Element</b></em>'.
@@ -77,10 +75,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameter() {
@@ -101,10 +99,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameter() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConstraintTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConstraintTest.java
index a56efac..4e808d3 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConstraintTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ConstraintTest.java
@@ -8,22 +8,15 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ConstraintTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ConstraintTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.uml2.Constraint;
-import org.eclipse.uml2.Namespace;
 import org.eclipse.uml2.UML2Factory;
 
-import org.eclipse.uml2.ValueSpecification;
-
 /**
  * <!-- begin-user-doc -->
  * A test case for the model object '<em><b>Constraint</b></em>'.
@@ -39,7 +32,7 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.Constraint#validateNotApplyToSelf(DiagnosticChain, Map) <em>Validate Not Apply To Self</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Constraint#validateNotApplyToSelf(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Not Apply To Self</em>}</li>
  *   <li>{@link org.eclipse.uml2.Constraint#getOwnedElements() <em>Get Owned Elements</em>}</li>
  * </ul>
  * </p>
@@ -136,10 +129,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Constraint#setNamespace(Namespace) <em>Namespace</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Constraint#setNamespace(org.eclipse.uml2.Namespace) <em>Namespace</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Constraint#setNamespace(Namespace)
+	 * @see org.eclipse.uml2.Constraint#setNamespace(org.eclipse.uml2.Namespace)
 	 * @generated
 	 */
 	public void testSetNamespace() {
@@ -160,10 +153,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Constraint#setSpecification(ValueSpecification) <em>Specification</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Constraint#setSpecification(org.eclipse.uml2.ValueSpecification) <em>Specification</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Constraint#setSpecification(ValueSpecification)
+	 * @see org.eclipse.uml2.Constraint#setSpecification(org.eclipse.uml2.ValueSpecification)
 	 * @generated
 	 */
 	public void testSetSpecification() {
@@ -172,10 +165,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Constraint#validateNotApplyToSelf(DiagnosticChain, Map) <em>Validate Not Apply To Self</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Constraint#validateNotApplyToSelf(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Not Apply To Self</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Constraint#validateNotApplyToSelf(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Constraint#validateNotApplyToSelf(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateNotApplyToSelf__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DataTypeTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DataTypeTest.java
index a9f12b5..1a46f9a 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DataTypeTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DataTypeTest.java
@@ -8,12 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: DataTypeTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: DataTypeTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Set;
-
 import junit.textui.TestRunner;
 
 import org.eclipse.uml2.DataType;
@@ -26,7 +24,7 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.DataType#inherit(Set) <em>Inherit</em>}</li>
+ *   <li>{@link org.eclipse.uml2.DataType#inherit(java.util.Set) <em>Inherit</em>}</li>
  *   <li>{@link org.eclipse.uml2.DataType#getOwnedMembers() <em>Get Owned Members</em>}</li>
  *   <li>{@link org.eclipse.uml2.DataType#getAttributes() <em>Get Attributes</em>}</li>
  *   <li>{@link org.eclipse.uml2.DataType#getFeatures() <em>Get Features</em>}</li>
@@ -93,10 +91,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.DataType#inherit(Set) <em>Inherit</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.DataType#inherit(java.util.Set) <em>Inherit</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.DataType#inherit(Set)
+	 * @see org.eclipse.uml2.DataType#inherit(java.util.Set)
 	 * @generated
 	 */
 	public void testInherit__Set() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DeploymentTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DeploymentTest.java
index 43e52ef..9d7fbb6 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DeploymentTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DeploymentTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: DeploymentTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: DeploymentTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -163,10 +163,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Deployment#setLocation(DeploymentTarget) <em>Location</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Deployment#setLocation(org.eclipse.uml2.DeploymentTarget) <em>Location</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Deployment#setLocation(DeploymentTarget)
+	 * @see org.eclipse.uml2.Deployment#setLocation(org.eclipse.uml2.DeploymentTarget)
 	 * @generated
 	 */
 	public void testSetLocationGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationConstraintTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationConstraintTest.java
index aec022d..183364b 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationConstraintTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationConstraintTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: DurationConstraintTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: DurationConstraintTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -17,8 +17,6 @@
 import org.eclipse.uml2.DurationConstraint;
 import org.eclipse.uml2.UML2Factory;
 
-import org.eclipse.uml2.ValueSpecification;
-
 /**
  * <!-- begin-user-doc -->
  * A test case for the model object '<em><b>Duration Constraint</b></em>'.
@@ -27,7 +25,7 @@
  * The following operations are tested:
  * <ul>
  *   <li>{@link org.eclipse.uml2.DurationConstraint#getSpecification() <em>Get Specification</em>}</li>
- *   <li>{@link org.eclipse.uml2.DurationConstraint#setSpecification(ValueSpecification) <em>Set Specification</em>}</li>
+ *   <li>{@link org.eclipse.uml2.DurationConstraint#setSpecification(org.eclipse.uml2.ValueSpecification) <em>Set Specification</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -109,10 +107,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.DurationConstraint#setSpecification(ValueSpecification) <em>Set Specification</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.DurationConstraint#setSpecification(org.eclipse.uml2.ValueSpecification) <em>Set Specification</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.DurationConstraint#setSpecification(ValueSpecification)
+	 * @see org.eclipse.uml2.DurationConstraint#setSpecification(org.eclipse.uml2.ValueSpecification)
 	 * @generated
 	 */
 	public void testSetSpecificationGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationObservationActionTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationObservationActionTest.java
index 8eba569..6c6d5e3 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationObservationActionTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/DurationObservationActionTest.java
@@ -8,14 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: DurationObservationActionTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: DurationObservationActionTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import junit.textui.TestRunner;
 
 import org.eclipse.uml2.DurationObservationAction;
-import org.eclipse.uml2.InputPin;
 import org.eclipse.uml2.UML2Factory;
 
 /**
@@ -26,7 +25,7 @@
  * The following operations are tested:
  * <ul>
  *   <li>{@link org.eclipse.uml2.DurationObservationAction#getValue() <em>Get Value</em>}</li>
- *   <li>{@link org.eclipse.uml2.DurationObservationAction#setValue(InputPin) <em>Set Value</em>}</li>
+ *   <li>{@link org.eclipse.uml2.DurationObservationAction#setValue(org.eclipse.uml2.InputPin) <em>Set Value</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -108,10 +107,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.DurationObservationAction#setValue(InputPin) <em>Set Value</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.DurationObservationAction#setValue(org.eclipse.uml2.InputPin) <em>Set Value</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.DurationObservationAction#setValue(InputPin)
+	 * @see org.eclipse.uml2.DurationObservationAction#setValue(org.eclipse.uml2.InputPin)
 	 * @generated
 	 */
 	public void testSetValueGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementImportTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementImportTest.java
index 08164bc..f8aeed6 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementImportTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementImportTest.java
@@ -8,18 +8,14 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ElementImportTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ElementImportTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.Iterator;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.uml2.ElementImport;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.Namespace;
@@ -39,8 +35,8 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.ElementImport#validateVisibilityPublicOrPrivate(DiagnosticChain, Map) <em>Validate Visibility Public Or Private</em>}</li>
- *   <li>{@link org.eclipse.uml2.ElementImport#validateImportedElementIsPublic(DiagnosticChain, Map) <em>Validate Imported Element Is Public</em>}</li>
+ *   <li>{@link org.eclipse.uml2.ElementImport#validateVisibilityPublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Visibility Public Or Private</em>}</li>
+ *   <li>{@link org.eclipse.uml2.ElementImport#validateImportedElementIsPublic(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Imported Element Is Public</em>}</li>
  *   <li>{@link org.eclipse.uml2.ElementImport#getName() <em>Get Name</em>}</li>
  *   <li>{@link org.eclipse.uml2.ElementImport#getTargets() <em>Get Targets</em>}</li>
  *   <li>{@link org.eclipse.uml2.ElementImport#getSources() <em>Get Sources</em>}</li>
@@ -136,10 +132,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ElementImport#setImportingNamespace(Namespace) <em>Importing Namespace</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ElementImport#setImportingNamespace(org.eclipse.uml2.Namespace) <em>Importing Namespace</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ElementImport#setImportingNamespace(Namespace)
+	 * @see org.eclipse.uml2.ElementImport#setImportingNamespace(org.eclipse.uml2.Namespace)
 	 * @generated
 	 */
 	public void testSetImportingNamespaceGen() {
@@ -166,10 +162,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ElementImport#validateVisibilityPublicOrPrivate(DiagnosticChain, Map) <em>Validate Visibility Public Or Private</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.ElementImport#validateVisibilityPublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Visibility Public Or Private</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ElementImport#validateVisibilityPublicOrPrivate(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.ElementImport#validateVisibilityPublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateVisibilityPublicOrPrivate__DiagnosticChain_Map() {
@@ -178,10 +174,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ElementImport#validateImportedElementIsPublic(DiagnosticChain, Map) <em>Validate Imported Element Is Public</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.ElementImport#validateImportedElementIsPublic(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Imported Element Is Public</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ElementImport#validateImportedElementIsPublic(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.ElementImport#validateImportedElementIsPublic(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateImportedElementIsPublic__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementTest.java
index 55144f4..81391fa 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ElementTest.java
@@ -8,20 +8,16 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ElementTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 import junit.framework.TestCase;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EClassifier;
 import org.eclipse.uml2.Element;
@@ -42,8 +38,8 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.Element#validateNotOwnSelf(DiagnosticChain, Map) <em>Validate Not Own Self</em>}</li>
- *   <li>{@link org.eclipse.uml2.Element#validateHasOwner(DiagnosticChain, Map) <em>Validate Has Owner</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Element#validateNotOwnSelf(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Not Own Self</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Element#validateHasOwner(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Has Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.Element#allOwnedElements() <em>All Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.Element#mustBeOwned() <em>Must Be Owned</em>}</li>
  * </ul>
@@ -144,10 +140,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Element#validateNotOwnSelf(DiagnosticChain, Map) <em>Validate Not Own Self</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Element#validateNotOwnSelf(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Not Own Self</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Element#validateNotOwnSelf(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Element#validateNotOwnSelf(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateNotOwnSelf__DiagnosticChain_Map() {
@@ -156,10 +152,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Element#validateHasOwner(DiagnosticChain, Map) <em>Validate Has Owner</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Element#validateHasOwner(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Has Owner</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Element#validateHasOwner(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Element#validateHasOwner(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateHasOwner__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ExtensionEndTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ExtensionEndTest.java
index 9b82a88..c191076 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ExtensionEndTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ExtensionEndTest.java
@@ -8,14 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ExtensionEndTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ExtensionEndTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import junit.textui.TestRunner;
 
 import org.eclipse.uml2.ExtensionEnd;
-import org.eclipse.uml2.Type;
 import org.eclipse.uml2.UML2Factory;
 
 /**
@@ -26,7 +25,7 @@
  * The following operations are tested:
  * <ul>
  *   <li>{@link org.eclipse.uml2.ExtensionEnd#getType() <em>Get Type</em>}</li>
- *   <li>{@link org.eclipse.uml2.ExtensionEnd#setType(Type) <em>Set Type</em>}</li>
+ *   <li>{@link org.eclipse.uml2.ExtensionEnd#setType(org.eclipse.uml2.Type) <em>Set Type</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -102,10 +101,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ExtensionEnd#setType(Type) <em>Set Type</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.ExtensionEnd#setType(org.eclipse.uml2.Type) <em>Set Type</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ExtensionEnd#setType(Type)
+	 * @see org.eclipse.uml2.ExtensionEnd#setType(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testSetType() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ImplementationTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ImplementationTest.java
index 329ad77..1f2a1b4 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ImplementationTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ImplementationTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ImplementationTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ImplementationTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -130,10 +130,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Implementation#setContract(Interface) <em>Contract</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Implementation#setContract(org.eclipse.uml2.Interface) <em>Contract</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Implementation#setContract(Interface)
+	 * @see org.eclipse.uml2.Implementation#setContract(org.eclipse.uml2.Interface)
 	 * @generated
 	 */
 	public void testSetContractGen() {
@@ -186,10 +186,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Implementation#setImplementingClassifier(BehavioredClassifier) <em>Implementing Classifier</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Implementation#setImplementingClassifier(org.eclipse.uml2.BehavioredClassifier) <em>Implementing Classifier</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Implementation#setImplementingClassifier(BehavioredClassifier)
+	 * @see org.eclipse.uml2.Implementation#setImplementingClassifier(org.eclipse.uml2.BehavioredClassifier)
 	 * @generated
 	 */
 	public void testSetImplementingClassifierGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/InstanceSpecificationTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/InstanceSpecificationTest.java
index 06851c9..6d000a1 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/InstanceSpecificationTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/InstanceSpecificationTest.java
@@ -8,20 +8,16 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: InstanceSpecificationTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: InstanceSpecificationTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.uml2.InstanceSpecification;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.Artifact;
@@ -47,8 +43,8 @@
  * <ul>
  *   <li>{@link org.eclipse.uml2.DeploymentTarget#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.DeploymentTarget#getClientDependencies() <em>Get Client Dependencies</em>}</li>
- *   <li>{@link org.eclipse.uml2.InstanceSpecification#validateSlotsAreDefined(DiagnosticChain, Map) <em>Validate Slots Are Defined</em>}</li>
- *   <li>{@link org.eclipse.uml2.InstanceSpecification#validateNoDuplicateSlots(DiagnosticChain, Map) <em>Validate No Duplicate Slots</em>}</li>
+ *   <li>{@link org.eclipse.uml2.InstanceSpecification#validateSlotsAreDefined(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Slots Are Defined</em>}</li>
+ *   <li>{@link org.eclipse.uml2.InstanceSpecification#validateNoDuplicateSlots(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate No Duplicate Slots</em>}</li>
  *   <li>{@link org.eclipse.uml2.InstanceSpecification#getOwnedElements() <em>Get Owned Elements</em>}</li>
  * </ul>
  * </p>
@@ -179,10 +175,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.InstanceSpecification#validateSlotsAreDefined(DiagnosticChain, Map) <em>Validate Slots Are Defined</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.InstanceSpecification#validateSlotsAreDefined(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Slots Are Defined</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.InstanceSpecification#validateSlotsAreDefined(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.InstanceSpecification#validateSlotsAreDefined(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateSlotsAreDefined__DiagnosticChain_Map() {
@@ -191,10 +187,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.InstanceSpecification#validateNoDuplicateSlots(DiagnosticChain, Map) <em>Validate No Duplicate Slots</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.InstanceSpecification#validateNoDuplicateSlots(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate No Duplicate Slots</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.InstanceSpecification#validateNoDuplicateSlots(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.InstanceSpecification#validateNoDuplicateSlots(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateNoDuplicateSlots__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/IntervalConstraintTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/IntervalConstraintTest.java
index 3351bf6..f5b4b02 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/IntervalConstraintTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/IntervalConstraintTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: IntervalConstraintTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: IntervalConstraintTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -16,7 +16,6 @@
 
 import org.eclipse.uml2.IntervalConstraint;
 import org.eclipse.uml2.UML2Factory;
-import org.eclipse.uml2.ValueSpecification;
 
 /**
  * <!-- begin-user-doc -->
@@ -26,7 +25,7 @@
  * The following operations are tested:
  * <ul>
  *   <li>{@link org.eclipse.uml2.IntervalConstraint#getSpecification() <em>Get Specification</em>}</li>
- *   <li>{@link org.eclipse.uml2.IntervalConstraint#setSpecification(ValueSpecification) <em>Set Specification</em>}</li>
+ *   <li>{@link org.eclipse.uml2.IntervalConstraint#setSpecification(org.eclipse.uml2.ValueSpecification) <em>Set Specification</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -108,10 +107,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.IntervalConstraint#setSpecification(ValueSpecification) <em>Set Specification</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.IntervalConstraint#setSpecification(org.eclipse.uml2.ValueSpecification) <em>Set Specification</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.IntervalConstraint#setSpecification(ValueSpecification)
+	 * @see org.eclipse.uml2.IntervalConstraint#setSpecification(org.eclipse.uml2.ValueSpecification)
 	 * @generated
 	 */
 	public void testSetSpecificationGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ManifestationTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ManifestationTest.java
index f39be9a..c51ee86 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ManifestationTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ManifestationTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ManifestationTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ManifestationTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -128,10 +128,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Manifestation#setUtilizedElement(PackageableElement) <em>Utilized Element</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Manifestation#setUtilizedElement(org.eclipse.uml2.PackageableElement) <em>Utilized Element</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Manifestation#setUtilizedElement(PackageableElement)
+	 * @see org.eclipse.uml2.Manifestation#setUtilizedElement(org.eclipse.uml2.PackageableElement)
 	 * @generated
 	 */
 	public void testSetUtilizedElementGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/MultiplicityElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/MultiplicityElementTest.java
index c6fe6eb..aa72dd8 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/MultiplicityElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/MultiplicityElementTest.java
@@ -8,14 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: MultiplicityElementTest.java,v 1.1 2005/04/04 20:06:05 khussey Exp $
+ * $Id: MultiplicityElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.uml2.LiteralInteger;
 import org.eclipse.uml2.LiteralUnlimitedNatural;
 import org.eclipse.uml2.MultiplicityElement;
@@ -41,12 +37,12 @@
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upperBound() <em>Upper Bound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#isMultivalued() <em>Is Multivalued</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesCardinality(int) <em>Includes Cardinality</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#lower() <em>Lower</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upper() <em>Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#getOwnedElements() <em>Get Owned Elements</em>}</li>
@@ -397,10 +393,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement)
+	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement)
 	 * @generated
 	 */
 	public void testIncludesMultiplicity__MultiplicityElementGen() {
@@ -467,10 +463,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGt0__DiagnosticChain_Map() {
@@ -479,10 +475,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerGe0__DiagnosticChain_Map() {
@@ -491,10 +487,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGeLower__DiagnosticChain_Map() {
@@ -503,10 +499,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerEqLowerbound__DiagnosticChain_Map() {
@@ -515,10 +511,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperEqUpperbound__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamedElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamedElementTest.java
index 3a50a8f..67672f8 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamedElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamedElementTest.java
@@ -8,20 +8,15 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: NamedElementTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: NamedElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import java.util.Iterator;
 
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.Dependency;
 import org.eclipse.uml2.NamedElement;
-import org.eclipse.uml2.Namespace;
 
 import org.eclipse.uml2.UML2Factory;
 import org.eclipse.uml2.UML2Package;
@@ -40,13 +35,13 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.NamedElement#validateNoName(DiagnosticChain, Map) <em>Validate No Name</em>}</li>
- *   <li>{@link org.eclipse.uml2.NamedElement#validateQualifiedName(DiagnosticChain, Map) <em>Validate Qualified Name</em>}</li>
+ *   <li>{@link org.eclipse.uml2.NamedElement#validateNoName(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate No Name</em>}</li>
+ *   <li>{@link org.eclipse.uml2.NamedElement#validateQualifiedName(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Qualified Name</em>}</li>
  *   <li>{@link org.eclipse.uml2.NamedElement#allNamespaces() <em>All Namespaces</em>}</li>
- *   <li>{@link org.eclipse.uml2.NamedElement#isDistinguishableFrom(NamedElement, Namespace) <em>Is Distinguishable From</em>}</li>
+ *   <li>{@link org.eclipse.uml2.NamedElement#isDistinguishableFrom(org.eclipse.uml2.NamedElement, org.eclipse.uml2.Namespace) <em>Is Distinguishable From</em>}</li>
  *   <li>{@link org.eclipse.uml2.NamedElement#separator() <em>Separator</em>}</li>
  *   <li>{@link org.eclipse.uml2.NamedElement#qualifiedName() <em>Qualified Name</em>}</li>
- *   <li>{@link org.eclipse.uml2.NamedElement#validateVisibilityNeedsOwnership(DiagnosticChain, Map) <em>Validate Visibility Needs Ownership</em>}</li>
+ *   <li>{@link org.eclipse.uml2.NamedElement#validateVisibilityNeedsOwnership(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Visibility Needs Ownership</em>}</li>
  *   <li>{@link org.eclipse.uml2.NamedElement#getNamespace() <em>Get Namespace</em>}</li>
  *   <li>{@link org.eclipse.uml2.NamedElement#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.NamedElement#getOwnedElements() <em>Get Owned Elements</em>}</li>
@@ -145,10 +140,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.NamedElement#validateNoName(DiagnosticChain, Map) <em>Validate No Name</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.NamedElement#validateNoName(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate No Name</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.NamedElement#validateNoName(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.NamedElement#validateNoName(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateNoName__DiagnosticChain_Map() {
@@ -157,10 +152,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.NamedElement#validateQualifiedName(DiagnosticChain, Map) <em>Validate Qualified Name</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.NamedElement#validateQualifiedName(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Qualified Name</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.NamedElement#validateQualifiedName(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.NamedElement#validateQualifiedName(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateQualifiedName__DiagnosticChain_Map() {
@@ -191,10 +186,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.NamedElement#isDistinguishableFrom(NamedElement, Namespace) <em>Is Distinguishable From</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.NamedElement#isDistinguishableFrom(org.eclipse.uml2.NamedElement, org.eclipse.uml2.Namespace) <em>Is Distinguishable From</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.NamedElement#isDistinguishableFrom(NamedElement, Namespace)
+	 * @see org.eclipse.uml2.NamedElement#isDistinguishableFrom(org.eclipse.uml2.NamedElement, org.eclipse.uml2.Namespace)
 	 * @generated
 	 */
 	public void testIsDistinguishableFrom__NamedElement_Namespace() {
@@ -262,10 +257,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.NamedElement#validateVisibilityNeedsOwnership(DiagnosticChain, Map) <em>Validate Visibility Needs Ownership</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.NamedElement#validateVisibilityNeedsOwnership(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Visibility Needs Ownership</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.NamedElement#validateVisibilityNeedsOwnership(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.NamedElement#validateVisibilityNeedsOwnership(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateVisibilityNeedsOwnership__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamespaceTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamespaceTest.java
index 68e6699..6d5f18c 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamespaceTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/NamespaceTest.java
@@ -8,15 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: NamespaceTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: NamespaceTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-import java.util.Set;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import java.util.Iterator;
 
 import org.eclipse.uml2.ElementImport;
@@ -45,13 +40,13 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(DiagnosticChain, Map) <em>Validate Members Are Distinguishable</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#getNamesOfMember(NamedElement) <em>Get Names Of Member</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Members Are Distinguishable</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#getNamesOfMember(org.eclipse.uml2.NamedElement) <em>Get Names Of Member</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#membersAreDistinguishable() <em>Members Are Distinguishable</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(DiagnosticChain, Map) <em>Validate Imported Member Derived</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Imported Member Derived</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#importedMember() <em>Imported Member</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#importMembers(Set) <em>Import Members</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#excludeCollisions(Set) <em>Exclude Collisions</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#importMembers(java.util.Set) <em>Import Members</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#excludeCollisions(java.util.Set) <em>Exclude Collisions</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#getOwnedMembers() <em>Get Owned Members</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#getOwnedElements() <em>Get Owned Elements</em>}</li>
  * </ul>
@@ -168,10 +163,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(DiagnosticChain, Map) <em>Validate Members Are Distinguishable</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Members Are Distinguishable</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateMembersAreDistinguishable__DiagnosticChain_Map() {
@@ -180,10 +175,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#getNamesOfMember(NamedElement) <em>Get Names Of Member</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#getNamesOfMember(org.eclipse.uml2.NamedElement) <em>Get Names Of Member</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#getNamesOfMember(NamedElement)
+	 * @see org.eclipse.uml2.Namespace#getNamesOfMember(org.eclipse.uml2.NamedElement)
 	 * @generated
 	 */
 	public void testGetNamesOfMember__NamedElement() {
@@ -204,10 +199,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(DiagnosticChain, Map) <em>Validate Imported Member Derived</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Imported Member Derived</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#validateImportedMemberDerived(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Namespace#validateImportedMemberDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateImportedMemberDerived__DiagnosticChain_Map() {
@@ -242,10 +237,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#importMembers(Set) <em>Import Members</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#importMembers(java.util.Set) <em>Import Members</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#importMembers(Set)
+	 * @see org.eclipse.uml2.Namespace#importMembers(java.util.Set)
 	 * @generated
 	 */
 	public void testImportMembers__Set() {
@@ -254,10 +249,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#excludeCollisions(Set) <em>Exclude Collisions</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#excludeCollisions(java.util.Set) <em>Exclude Collisions</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#excludeCollisions(Set)
+	 * @see org.eclipse.uml2.Namespace#excludeCollisions(java.util.Set)
 	 * @generated
 	 */
 	public void testExcludeCollisions__Set() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ObjectNodeTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ObjectNodeTest.java
index f909be7..d69b72a 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ObjectNodeTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ObjectNodeTest.java
@@ -8,12 +8,11 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ObjectNodeTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ObjectNodeTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import org.eclipse.uml2.ObjectNode;
-import org.eclipse.uml2.Type;
 
 import org.eclipse.uml2.UML2Factory;
 
@@ -77,10 +76,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(Type) <em>Type</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type) <em>Type</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TypedElement#setType(Type)
+	 * @see org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testSetType() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/OperationTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/OperationTest.java
index 8df7f43..ce1e99e 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/OperationTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/OperationTest.java
@@ -8,27 +8,20 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: OperationTest.java,v 1.1 2005/04/04 20:06:05 khussey Exp $
+ * $Id: OperationTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.Iterator;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
-import org.eclipse.uml2.Constraint;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.DataType;
 import org.eclipse.uml2.LiteralInteger;
 import org.eclipse.uml2.LiteralUnlimitedNatural;
 import org.eclipse.uml2.MultiplicityElement;
 import org.eclipse.uml2.Operation;
-import org.eclipse.uml2.RedefinableElement;
-import org.eclipse.uml2.TemplateParameter;
 import org.eclipse.uml2.Parameter;
 import org.eclipse.uml2.Type;
 import org.eclipse.uml2.UML2Factory;
@@ -60,24 +53,24 @@
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upperBound() <em>Upper Bound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#isMultivalued() <em>Is Multivalued</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesCardinality(int) <em>Includes Cardinality</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#lower() <em>Lower</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upper() <em>Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.ParameterableElement#getOwner() <em>Get Owner</em>}</li>
- *   <li>{@link org.eclipse.uml2.Operation#validateTypeOfResult(DiagnosticChain, Map) <em>Validate Type Of Result</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Operation#validateTypeOfResult(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Type Of Result</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#isOrdered() <em>Is Ordered</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#isUnique() <em>Is Unique</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#lower() <em>Lower</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#upper() <em>Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#type() <em>Type</em>}</li>
- *   <li>{@link org.eclipse.uml2.Operation#validateOnlyBodyForQuery(DiagnosticChain, Map) <em>Validate Only Body For Query</em>}</li>
- *   <li>{@link org.eclipse.uml2.Operation#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Operation#validateOnlyBodyForQuery(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Only Body For Query</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Operation#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#getRaisedExceptions() <em>Get Raised Exceptions</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#setIsOrdered(boolean) <em>Set Is Ordered</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#setIsUnique(boolean) <em>Set Is Unique</em>}</li>
@@ -85,7 +78,7 @@
  *   <li>{@link org.eclipse.uml2.Operation#getUpper() <em>Get Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#getFormalParameters() <em>Get Formal Parameters</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#getType() <em>Get Type</em>}</li>
- *   <li>{@link org.eclipse.uml2.Operation#setType(Type) <em>Set Type</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Operation#setType(org.eclipse.uml2.Type) <em>Set Type</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#getRedefinitionContexts() <em>Get Redefinition Contexts</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#getNamespace() <em>Get Namespace</em>}</li>
  *   <li>{@link org.eclipse.uml2.Operation#getFeaturingClassifiers() <em>Get Featuring Classifiers</em>}</li>
@@ -167,10 +160,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameter() {
@@ -191,10 +184,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameter() {
@@ -239,10 +232,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Operation#setBodyCondition(Constraint) <em>Body Condition</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Operation#setBodyCondition(org.eclipse.uml2.Constraint) <em>Body Condition</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Operation#setBodyCondition(Constraint)
+	 * @see org.eclipse.uml2.Operation#setBodyCondition(org.eclipse.uml2.Constraint)
 	 * @generated
 	 */
 	public void testSetBodyCondition() {
@@ -406,10 +399,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement)
+	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement)
 	 * @generated
 	 */
 	public void testIncludesMultiplicity__MultiplicityElementGen() {
@@ -476,10 +469,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGt0__DiagnosticChain_Map() {
@@ -488,10 +481,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerGe0__DiagnosticChain_Map() {
@@ -500,10 +493,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGeLower__DiagnosticChain_Map() {
@@ -512,10 +505,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerEqLowerbound__DiagnosticChain_Map() {
@@ -524,10 +517,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperEqUpperbound__DiagnosticChain_Map() {
@@ -577,10 +570,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Operation#validateTypeOfResult(DiagnosticChain, Map) <em>Validate Type Of Result</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Operation#validateTypeOfResult(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Type Of Result</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Operation#validateTypeOfResult(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Operation#validateTypeOfResult(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateTypeOfResult__DiagnosticChain_Map() {
@@ -689,10 +682,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Operation#validateOnlyBodyForQuery(DiagnosticChain, Map) <em>Validate Only Body For Query</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Operation#validateOnlyBodyForQuery(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Only Body For Query</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Operation#validateOnlyBodyForQuery(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Operation#validateOnlyBodyForQuery(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateOnlyBodyForQuery__DiagnosticChain_Map() {
@@ -701,10 +694,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Operation#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Operation#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Operation#isConsistentWith(RedefinableElement)
+	 * @see org.eclipse.uml2.Operation#isConsistentWith(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsConsistentWith__RedefinableElement() {
@@ -988,10 +981,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Operation#setType(Type) <em>Set Type</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.Operation#setType(org.eclipse.uml2.Type) <em>Set Type</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Operation#setType(Type)
+	 * @see org.eclipse.uml2.Operation#setType(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testSetTypeGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageImportTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageImportTest.java
index 762683f..cf04fc5 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageImportTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageImportTest.java
@@ -8,18 +8,14 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: PackageImportTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: PackageImportTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.Iterator;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.Namespace;
 import org.eclipse.uml2.PackageImport;
@@ -40,7 +36,7 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.PackageImport#validatePublicOrPrivate(DiagnosticChain, Map) <em>Validate Public Or Private</em>}</li>
+ *   <li>{@link org.eclipse.uml2.PackageImport#validatePublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Public Or Private</em>}</li>
  *   <li>{@link org.eclipse.uml2.PackageImport#getTargets() <em>Get Targets</em>}</li>
  *   <li>{@link org.eclipse.uml2.PackageImport#getSources() <em>Get Sources</em>}</li>
  *   <li>{@link org.eclipse.uml2.PackageImport#getOwner() <em>Get Owner</em>}</li>
@@ -187,10 +183,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageImport#setImportingNamespace(Namespace) <em>Importing Namespace</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.PackageImport#setImportingNamespace(org.eclipse.uml2.Namespace) <em>Importing Namespace</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageImport#setImportingNamespace(Namespace)
+	 * @see org.eclipse.uml2.PackageImport#setImportingNamespace(org.eclipse.uml2.Namespace)
 	 * @generated
 	 */
 	public void testSetImportingNamespaceGen() {
@@ -217,10 +213,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageImport#validatePublicOrPrivate(DiagnosticChain, Map) <em>Validate Public Or Private</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.PackageImport#validatePublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Public Or Private</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageImport#validatePublicOrPrivate(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.PackageImport#validatePublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidatePublicOrPrivate__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageTest.java
index c20e4b0..798a734 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageTest.java
@@ -8,24 +8,19 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: PackageTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: PackageTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.Arrays;
 import java.util.Iterator;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.Actor;
 import org.eclipse.uml2.ElementImport;
 import org.eclipse.uml2.NamedElement;
-import org.eclipse.uml2.TemplateParameter;
 import org.eclipse.uml2.Package;
 import org.eclipse.uml2.PackageImport;
 import org.eclipse.uml2.PackageableElement;
@@ -55,11 +50,11 @@
  * <ul>
  *   <li>{@link org.eclipse.uml2.ParameterableElement#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.PackageableElement#getVisibility() <em>Get Visibility</em>}</li>
- *   <li>{@link org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind) <em>Set Visibility</em>}</li>
- *   <li>{@link org.eclipse.uml2.Package#validateElementsPublicOrPrivate(DiagnosticChain, Map) <em>Validate Elements Public Or Private</em>}</li>
+ *   <li>{@link org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind) <em>Set Visibility</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Package#validateElementsPublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Elements Public Or Private</em>}</li>
  *   <li>{@link org.eclipse.uml2.Package#mustBeOwned() <em>Must Be Owned</em>}</li>
  *   <li>{@link org.eclipse.uml2.Package#visibleMembers() <em>Visible Members</em>}</li>
- *   <li>{@link org.eclipse.uml2.Package#makesVisible(NamedElement) <em>Makes Visible</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Package#makesVisible(org.eclipse.uml2.NamedElement) <em>Makes Visible</em>}</li>
  *   <li>{@link org.eclipse.uml2.Package#getNamespace() <em>Get Namespace</em>}</li>
  *   <li>{@link org.eclipse.uml2.Package#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.Package#getPackageImports() <em>Get Package Imports</em>}</li>
@@ -138,10 +133,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameter() {
@@ -162,10 +157,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameter() {
@@ -186,10 +181,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(VisibilityKind) <em>Packageable Element visibility</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(org.eclipse.uml2.VisibilityKind) <em>Packageable Element visibility</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(VisibilityKind)
+	 * @see org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(org.eclipse.uml2.VisibilityKind)
 	 * @generated
 	 */
 	public void testSetPackageableElement_visibility() {
@@ -311,10 +306,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind) <em>Set Visibility</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind) <em>Set Visibility</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind)
+	 * @see org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind)
 	 * @generated
 	 */
 	public void testSetVisibilityGen() {
@@ -331,10 +326,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Package#validateElementsPublicOrPrivate(DiagnosticChain, Map) <em>Validate Elements Public Or Private</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Package#validateElementsPublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Elements Public Or Private</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Package#validateElementsPublicOrPrivate(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Package#validateElementsPublicOrPrivate(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateElementsPublicOrPrivate__DiagnosticChain_Map() {
@@ -425,10 +420,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Package#makesVisible(NamedElement) <em>Makes Visible</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Package#makesVisible(org.eclipse.uml2.NamedElement) <em>Makes Visible</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Package#makesVisible(NamedElement)
+	 * @see org.eclipse.uml2.Package#makesVisible(org.eclipse.uml2.NamedElement)
 	 * @generated
 	 */
 	public void testMakesVisible__NamedElementGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageableElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageableElementTest.java
index 15b28a7..0eb008e 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageableElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PackageableElementTest.java
@@ -8,13 +8,11 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: PackageableElementTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: PackageableElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import org.eclipse.uml2.PackageableElement;
-import org.eclipse.uml2.TemplateParameter;
-import org.eclipse.uml2.VisibilityKind;
 
 /**
  * <!-- begin-user-doc -->
@@ -33,7 +31,7 @@
  * <ul>
  *   <li>{@link org.eclipse.uml2.ParameterableElement#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.PackageableElement#getVisibility() <em>Get Visibility</em>}</li>
- *   <li>{@link org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind) <em>Set Visibility</em>}</li>
+ *   <li>{@link org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind) <em>Set Visibility</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -80,10 +78,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameter() {
@@ -104,10 +102,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameter() {
@@ -128,10 +126,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(VisibilityKind) <em>Packageable Element visibility</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(org.eclipse.uml2.VisibilityKind) <em>Packageable Element visibility</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(VisibilityKind)
+	 * @see org.eclipse.uml2.PackageableElement#setPackageableElement_visibility(org.eclipse.uml2.VisibilityKind)
 	 * @generated
 	 */
 	public void testSetPackageableElement_visibility() {
@@ -174,10 +172,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind) <em>Set Visibility</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind) <em>Set Visibility</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.PackageableElement#setVisibility(VisibilityKind)
+	 * @see org.eclipse.uml2.PackageableElement#setVisibility(org.eclipse.uml2.VisibilityKind)
 	 * @generated
 	 */
 	public void testSetVisibility() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterTest.java
index 649eec0..59ed04c 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterTest.java
@@ -8,24 +8,19 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ParameterTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ParameterTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.Iterator;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.LiteralInteger;
 import org.eclipse.uml2.LiteralUnlimitedNatural;
 import org.eclipse.uml2.MultiplicityElement;
 import org.eclipse.uml2.Parameter;
-import org.eclipse.uml2.Type;
 import org.eclipse.uml2.UML2Factory;
 import org.eclipse.uml2.UML2Package;
 import org.eclipse.uml2.ValueSpecification;
@@ -52,12 +47,12 @@
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upperBound() <em>Upper Bound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#isMultivalued() <em>Is Multivalued</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesCardinality(int) <em>Includes Cardinality</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#lower() <em>Lower</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upper() <em>Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#getOwnedElements() <em>Get Owned Elements</em>}</li>
@@ -138,10 +133,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(Type) <em>Type</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type) <em>Type</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TypedElement#setType(Type)
+	 * @see org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testSetType() {
@@ -443,10 +438,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement)
+	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement)
 	 * @generated
 	 */
 	public void testIncludesMultiplicity__MultiplicityElementGen() {
@@ -513,10 +508,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGt0__DiagnosticChain_Map() {
@@ -525,10 +520,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerGe0__DiagnosticChain_Map() {
@@ -537,10 +532,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGeLower__DiagnosticChain_Map() {
@@ -549,10 +544,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerEqLowerbound__DiagnosticChain_Map() {
@@ -561,10 +556,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperEqUpperbound__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterableElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterableElementTest.java
index e1e07c4..d5c473b 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterableElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ParameterableElementTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ParameterableElementTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ParameterableElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -91,10 +91,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameterGen() {
@@ -145,10 +145,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameterGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PinTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PinTest.java
index 5112431..9cdf246 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PinTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PinTest.java
@@ -8,15 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: PinTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: PinTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
-import org.eclipse.uml2.MultiplicityElement;
 import org.eclipse.uml2.Pin;
 
 /**
@@ -39,12 +34,12 @@
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upperBound() <em>Upper Bound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#isMultivalued() <em>Is Multivalued</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesCardinality(int) <em>Includes Cardinality</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#lower() <em>Lower</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upper() <em>Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#getOwnedElements() <em>Get Owned Elements</em>}</li>
@@ -202,10 +197,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement)
+	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement)
 	 * @generated
 	 */
 	public void testIncludesMultiplicity__MultiplicityElement() {
@@ -214,10 +209,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGt0__DiagnosticChain_Map() {
@@ -226,10 +221,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerGe0__DiagnosticChain_Map() {
@@ -238,10 +233,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGeLower__DiagnosticChain_Map() {
@@ -250,10 +245,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerEqLowerbound__DiagnosticChain_Map() {
@@ -262,10 +257,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperEqUpperbound__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProfileApplicationTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProfileApplicationTest.java
index d0b0803..f1ff6f2 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProfileApplicationTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProfileApplicationTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ProfileApplicationTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: ProfileApplicationTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -121,10 +121,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ProfileApplication#setImportedProfile(Profile) <em>Imported Profile</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ProfileApplication#setImportedProfile(org.eclipse.uml2.Profile) <em>Imported Profile</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ProfileApplication#setImportedProfile(Profile)
+	 * @see org.eclipse.uml2.ProfileApplication#setImportedProfile(org.eclipse.uml2.Profile)
 	 * @generated
 	 */
 	public void testSetImportedProfileGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PropertyTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PropertyTest.java
index baf43ce..e54b956 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PropertyTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/PropertyTest.java
@@ -8,24 +8,17 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: PropertyTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: PropertyTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
-import org.eclipse.uml2.Association;
 import org.eclipse.uml2.Property;
-import org.eclipse.uml2.RedefinableElement;
-import org.eclipse.uml2.TemplateParameter;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.AggregationKind;
 import org.eclipse.uml2.Artifact;
@@ -63,15 +56,15 @@
  *   <li>{@link org.eclipse.uml2.ParameterableElement#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.DeploymentTarget#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.DeploymentTarget#getClientDependencies() <em>Get Client Dependencies</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#validateOppositeIsOtherEnd(DiagnosticChain, Map) <em>Validate Opposite Is Other End</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#validateOppositeIsOtherEnd(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Opposite Is Other End</em>}</li>
  *   <li>{@link org.eclipse.uml2.Property#opposite() <em>Opposite</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#validateMultiplicityOfComposite(DiagnosticChain, Map) <em>Validate Multiplicity Of Composite</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#validateSubsettingContext(DiagnosticChain, Map) <em>Validate Subsetting Context</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#validateNavigablePropertyRedefinition(DiagnosticChain, Map) <em>Validate Navigable Property Redefinition</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#validateSubsettingRules(DiagnosticChain, Map) <em>Validate Subsetting Rules</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#validateNavigableReadonly(DiagnosticChain, Map) <em>Validate Navigable Readonly</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#validateDerivedUnionIsDerived(DiagnosticChain, Map) <em>Validate Derived Union Is Derived</em>}</li>
- *   <li>{@link org.eclipse.uml2.Property#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#validateMultiplicityOfComposite(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Multiplicity Of Composite</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#validateSubsettingContext(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Subsetting Context</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#validateNavigablePropertyRedefinition(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Navigable Property Redefinition</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#validateSubsettingRules(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Subsetting Rules</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#validateNavigableReadonly(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Navigable Readonly</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#validateDerivedUnionIsDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Derived Union Is Derived</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Property#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}</li>
  *   <li>{@link org.eclipse.uml2.Property#subsettingContext() <em>Subsetting Context</em>}</li>
  *   <li>{@link org.eclipse.uml2.Property#isReadOnly() <em>Is Read Only</em>}</li>
  *   <li>{@link org.eclipse.uml2.Property#setIsReadOnly(boolean) <em>Set Is Read Only</em>}</li>
@@ -155,10 +148,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameter() {
@@ -179,10 +172,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameter() {
@@ -348,10 +341,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#setOwningAssociation(Association) <em>Owning Association</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Property#setOwningAssociation(org.eclipse.uml2.Association) <em>Owning Association</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#setOwningAssociation(Association)
+	 * @see org.eclipse.uml2.Property#setOwningAssociation(org.eclipse.uml2.Association)
 	 * @generated
 	 */
 	public void testSetOwningAssociation() {
@@ -372,10 +365,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#setAssociation(Association) <em>Association</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Property#setAssociation(org.eclipse.uml2.Association) <em>Association</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#setAssociation(Association)
+	 * @see org.eclipse.uml2.Property#setAssociation(org.eclipse.uml2.Association)
 	 * @generated
 	 */
 	public void testSetAssociation() {
@@ -396,10 +389,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#validateOppositeIsOtherEnd(DiagnosticChain, Map) <em>Validate Opposite Is Other End</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#validateOppositeIsOtherEnd(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Opposite Is Other End</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#validateOppositeIsOtherEnd(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Property#validateOppositeIsOtherEnd(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateOppositeIsOtherEnd__DiagnosticChain_Map() {
@@ -420,10 +413,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#validateMultiplicityOfComposite(DiagnosticChain, Map) <em>Validate Multiplicity Of Composite</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#validateMultiplicityOfComposite(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Multiplicity Of Composite</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#validateMultiplicityOfComposite(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Property#validateMultiplicityOfComposite(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateMultiplicityOfComposite__DiagnosticChain_Map() {
@@ -432,10 +425,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#validateSubsettingContext(DiagnosticChain, Map) <em>Validate Subsetting Context</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#validateSubsettingContext(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Subsetting Context</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#validateSubsettingContext(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Property#validateSubsettingContext(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateSubsettingContext__DiagnosticChain_Map() {
@@ -444,10 +437,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#validateNavigablePropertyRedefinition(DiagnosticChain, Map) <em>Validate Navigable Property Redefinition</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#validateNavigablePropertyRedefinition(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Navigable Property Redefinition</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#validateNavigablePropertyRedefinition(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Property#validateNavigablePropertyRedefinition(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateNavigablePropertyRedefinition__DiagnosticChain_Map() {
@@ -456,10 +449,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#validateSubsettingRules(DiagnosticChain, Map) <em>Validate Subsetting Rules</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#validateSubsettingRules(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Subsetting Rules</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#validateSubsettingRules(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Property#validateSubsettingRules(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateSubsettingRules__DiagnosticChain_Map() {
@@ -468,10 +461,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#validateNavigableReadonly(DiagnosticChain, Map) <em>Validate Navigable Readonly</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#validateNavigableReadonly(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Navigable Readonly</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#validateNavigableReadonly(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Property#validateNavigableReadonly(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateNavigableReadonly__DiagnosticChain_Map() {
@@ -480,10 +473,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#validateDerivedUnionIsDerived(DiagnosticChain, Map) <em>Validate Derived Union Is Derived</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#validateDerivedUnionIsDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Derived Union Is Derived</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#validateDerivedUnionIsDerived(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Property#validateDerivedUnionIsDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateDerivedUnionIsDerived__DiagnosticChain_Map() {
@@ -492,10 +485,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Property#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Property#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Property#isConsistentWith(RedefinableElement)
+	 * @see org.eclipse.uml2.Property#isConsistentWith(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsConsistentWith__RedefinableElement() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProtocolTransitionTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProtocolTransitionTest.java
index 0ca9066..ca8c1f7 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProtocolTransitionTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ProtocolTransitionTest.java
@@ -8,13 +8,12 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ProtocolTransitionTest.java,v 1.1 2005/04/04 20:06:05 khussey Exp $
+ * $Id: ProtocolTransitionTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.uml2.Constraint;
 import org.eclipse.uml2.ProtocolTransition;
 import org.eclipse.uml2.UML2Factory;
 
@@ -33,7 +32,7 @@
  * The following operations are tested:
  * <ul>
  *   <li>{@link org.eclipse.uml2.ProtocolTransition#getOwnedElements() <em>Get Owned Elements</em>}</li>
- *   <li>{@link org.eclipse.uml2.ProtocolTransition#setGuard(Constraint) <em>Set Guard</em>}</li>
+ *   <li>{@link org.eclipse.uml2.ProtocolTransition#setGuard(org.eclipse.uml2.Constraint) <em>Set Guard</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -121,10 +120,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ProtocolTransition#setPreCondition(Constraint) <em>Pre Condition</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ProtocolTransition#setPreCondition(org.eclipse.uml2.Constraint) <em>Pre Condition</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ProtocolTransition#setPreCondition(Constraint)
+	 * @see org.eclipse.uml2.ProtocolTransition#setPreCondition(org.eclipse.uml2.Constraint)
 	 * @generated
 	 */
 	public void testSetPreCondition() {
@@ -153,10 +152,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ProtocolTransition#setGuard(Constraint) <em>Set Guard</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.ProtocolTransition#setGuard(org.eclipse.uml2.Constraint) <em>Set Guard</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ProtocolTransition#setGuard(Constraint)
+	 * @see org.eclipse.uml2.ProtocolTransition#setGuard(org.eclipse.uml2.Constraint)
 	 * @generated
 	 */
 	public void testSetGuard() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RealizationTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RealizationTest.java
index 5c4878f..7a56322 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RealizationTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RealizationTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: RealizationTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: RealizationTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -131,10 +131,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Realization#setAbstraction(Component) <em>Abstraction</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Realization#setAbstraction(org.eclipse.uml2.Component) <em>Abstraction</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Realization#setAbstraction(Component)
+	 * @see org.eclipse.uml2.Realization#setAbstraction(org.eclipse.uml2.Component)
 	 * @generated
 	 */
 	public void testSetAbstractionGen() {
@@ -189,10 +189,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Realization#setRealizingClassifier(Classifier) <em>Realizing Classifier</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Realization#setRealizingClassifier(org.eclipse.uml2.Classifier) <em>Realizing Classifier</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Realization#setRealizingClassifier(Classifier)
+	 * @see org.eclipse.uml2.Realization#setRealizingClassifier(org.eclipse.uml2.Classifier)
 	 * @generated
 	 */
 	public void testSetRealizingClassifierGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RedefinableElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RedefinableElementTest.java
index 3c7b552..d1346a6 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RedefinableElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RedefinableElementTest.java
@@ -8,14 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: RedefinableElementTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: RedefinableElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import java.util.Iterator;
 
 import org.eclipse.uml2.Classifier;
@@ -34,10 +30,10 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
  *   <li>{@link org.eclipse.uml2.RedefinableElement#getRedefinedElements() <em>Get Redefined Elements</em>}</li>
  * </ul>
  * </p>
@@ -95,10 +91,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionContextValid__DiagnosticChain_Map() {
@@ -107,10 +103,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionConsistent__DiagnosticChain_Map() {
@@ -119,10 +115,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsConsistentWith__RedefinableElement() {
@@ -131,10 +127,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsRedefinitionContextValid__RedefinableElement() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RegionTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RegionTest.java
index 593e701..5c06c9f 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RegionTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/RegionTest.java
@@ -8,19 +8,14 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: RegionTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: RegionTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import java.util.Iterator;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
-import org.eclipse.uml2.RedefinableElement;
 import org.eclipse.uml2.Region;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.uml2.UML2Factory;
@@ -39,10 +34,10 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
  *   <li>{@link org.eclipse.uml2.RedefinableElement#getRedefinedElements() <em>Get Redefined Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.Region#getRedefinitionContexts() <em>Get Redefinition Contexts</em>}</li>
  *   <li>{@link org.eclipse.uml2.Region#getRedefinedElements() <em>Get Redefined Elements</em>}</li>
@@ -111,10 +106,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionContextValid__DiagnosticChain_Map() {
@@ -123,10 +118,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionConsistent__DiagnosticChain_Map() {
@@ -135,10 +130,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsConsistentWith__RedefinableElement() {
@@ -147,10 +142,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsRedefinitionContextValid__RedefinableElement() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateMachineTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateMachineTest.java
index 3d78313..b697369 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateMachineTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateMachineTest.java
@@ -8,13 +8,12 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: StateMachineTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: StateMachineTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.uml2.BehavioredClassifier;
 import org.eclipse.uml2.StateMachine;
 import org.eclipse.uml2.UML2Factory;
 
@@ -109,10 +108,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.StateMachine#setStateMachine_redefinitionContext(BehavioredClassifier) <em>State Machine redefinition Context</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.StateMachine#setStateMachine_redefinitionContext(org.eclipse.uml2.BehavioredClassifier) <em>State Machine redefinition Context</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.StateMachine#setStateMachine_redefinitionContext(BehavioredClassifier)
+	 * @see org.eclipse.uml2.StateMachine#setStateMachine_redefinitionContext(org.eclipse.uml2.BehavioredClassifier)
 	 * @generated
 	 */
 	public void testSetStateMachine_redefinitionContext() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateTest.java
index f660757..99de898 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StateTest.java
@@ -8,17 +8,12 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: StateTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: StateTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
-import org.eclipse.uml2.RedefinableElement;
 import org.eclipse.uml2.State;
 import org.eclipse.uml2.UML2Factory;
 
@@ -39,10 +34,10 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}</li>
- *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}</li>
+ *   <li>{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}</li>
  *   <li>{@link org.eclipse.uml2.RedefinableElement#getRedefinedElements() <em>Get Redefined Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.Vertex#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.State#getRedefinitionContexts() <em>Get Redefinition Contexts</em>}</li>
@@ -212,10 +207,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map) <em>Validate Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionContextValid(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionContextValid__DiagnosticChain_Map() {
@@ -224,10 +219,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map) <em>Validate Redefinition Consistent</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Redefinition Consistent</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.RedefinableElement#validateRedefinitionConsistent(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateRedefinitionConsistent__DiagnosticChain_Map() {
@@ -236,10 +231,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement) <em>Is Consistent With</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement) <em>Is Consistent With</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isConsistentWith(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsConsistentWith__RedefinableElement() {
@@ -248,10 +243,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement) <em>Is Redefinition Context Valid</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(RedefinableElement)
+	 * @see org.eclipse.uml2.RedefinableElement#isRedefinitionContextValid(org.eclipse.uml2.RedefinableElement)
 	 * @generated
 	 */
 	public void testIsRedefinitionContextValid__RedefinableElement() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuralFeatureTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuralFeatureTest.java
index 32fad2b..4fc039b 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuralFeatureTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuralFeatureTest.java
@@ -8,19 +8,14 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: StructuralFeatureTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: StructuralFeatureTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.uml2.LiteralInteger;
 import org.eclipse.uml2.LiteralUnlimitedNatural;
 import org.eclipse.uml2.MultiplicityElement;
 import org.eclipse.uml2.StructuralFeature;
-import org.eclipse.uml2.Type;
 
 import org.eclipse.uml2.UML2Factory;
 
@@ -46,12 +41,12 @@
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upperBound() <em>Upper Bound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#isMultivalued() <em>Is Multivalued</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesCardinality(int) <em>Includes Cardinality</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#lower() <em>Lower</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upper() <em>Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#getOwnedElements() <em>Get Owned Elements</em>}</li>
@@ -101,10 +96,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(Type) <em>Type</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type) <em>Type</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TypedElement#setType(Type)
+	 * @see org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testSetType() {
@@ -402,10 +397,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement)
+	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement)
 	 * @generated
 	 */
 	public void testIncludesMultiplicity__MultiplicityElementGen() {
@@ -472,10 +467,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGt0__DiagnosticChain_Map() {
@@ -484,10 +479,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerGe0__DiagnosticChain_Map() {
@@ -496,10 +491,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGeLower__DiagnosticChain_Map() {
@@ -508,10 +503,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerEqLowerbound__DiagnosticChain_Map() {
@@ -520,10 +515,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperEqUpperbound__DiagnosticChain_Map() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuredActivityNodeTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuredActivityNodeTest.java
index 53dd0e5..cec8d3a 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuredActivityNodeTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/StructuredActivityNodeTest.java
@@ -8,19 +8,13 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: StructuredActivityNodeTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: StructuredActivityNodeTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-import java.util.Set;
-
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
 import org.eclipse.uml2.Activity;
-import org.eclipse.uml2.NamedElement;
 import org.eclipse.uml2.StructuredActivityNode;
 import org.eclipse.uml2.ElementImport;
 import org.eclipse.uml2.PackageImport;
@@ -45,26 +39,26 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(DiagnosticChain, Map) <em>Validate Members Are Distinguishable</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#getNamesOfMember(NamedElement) <em>Get Names Of Member</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Members Are Distinguishable</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#getNamesOfMember(org.eclipse.uml2.NamedElement) <em>Get Names Of Member</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#membersAreDistinguishable() <em>Members Are Distinguishable</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(DiagnosticChain, Map) <em>Validate Imported Member Derived</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Imported Member Derived</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#importedMember() <em>Imported Member</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#importMembers(Set) <em>Import Members</em>}</li>
- *   <li>{@link org.eclipse.uml2.Namespace#excludeCollisions(Set) <em>Exclude Collisions</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#importMembers(java.util.Set) <em>Import Members</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Namespace#excludeCollisions(java.util.Set) <em>Exclude Collisions</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#getOwnedMembers() <em>Get Owned Members</em>}</li>
  *   <li>{@link org.eclipse.uml2.Namespace#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getSubgroups() <em>Get Subgroups</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getContainedEdges() <em>Get Contained Edges</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getContainedNodes() <em>Get Contained Nodes</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getActivity() <em>Get Activity</em>}</li>
- *   <li>{@link org.eclipse.uml2.ActivityGroup#setActivity(Activity) <em>Set Activity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.ActivityGroup#setActivity(org.eclipse.uml2.Activity) <em>Set Activity</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getOwnedElements() <em>Get Owned Elements</em>}</li>
  *   <li>{@link org.eclipse.uml2.ActivityGroup#getOwner() <em>Get Owner</em>}</li>
  *   <li>{@link org.eclipse.uml2.StructuredActivityNode#getActivity() <em>Get Activity</em>}</li>
- *   <li>{@link org.eclipse.uml2.StructuredActivityNode#setActivity(Activity) <em>Set Activity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.StructuredActivityNode#setActivity(org.eclipse.uml2.Activity) <em>Set Activity</em>}</li>
  *   <li>{@link org.eclipse.uml2.StructuredActivityNode#getActivityGroup_activity() <em>Get Activity Group activity</em>}</li>
- *   <li>{@link org.eclipse.uml2.StructuredActivityNode#setActivityGroup_activity(Activity) <em>Set Activity Group activity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.StructuredActivityNode#setActivityGroup_activity(org.eclipse.uml2.Activity) <em>Set Activity Group activity</em>}</li>
  *   <li>{@link org.eclipse.uml2.StructuredActivityNode#getOwnedMembers() <em>Get Owned Members</em>}</li>
  * </ul>
  * </p>
@@ -218,10 +212,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(DiagnosticChain, Map) <em>Validate Members Are Distinguishable</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Members Are Distinguishable</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Namespace#validateMembersAreDistinguishable(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateMembersAreDistinguishable__DiagnosticChain_Map() {
@@ -230,10 +224,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#getNamesOfMember(NamedElement) <em>Get Names Of Member</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#getNamesOfMember(org.eclipse.uml2.NamedElement) <em>Get Names Of Member</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#getNamesOfMember(NamedElement)
+	 * @see org.eclipse.uml2.Namespace#getNamesOfMember(org.eclipse.uml2.NamedElement)
 	 * @generated
 	 */
 	public void testGetNamesOfMember__NamedElement() {
@@ -254,10 +248,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(DiagnosticChain, Map) <em>Validate Imported Member Derived</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#validateImportedMemberDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Imported Member Derived</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#validateImportedMemberDerived(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.Namespace#validateImportedMemberDerived(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateImportedMemberDerived__DiagnosticChain_Map() {
@@ -278,10 +272,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#importMembers(Set) <em>Import Members</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#importMembers(java.util.Set) <em>Import Members</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#importMembers(Set)
+	 * @see org.eclipse.uml2.Namespace#importMembers(java.util.Set)
 	 * @generated
 	 */
 	public void testImportMembers__Set() {
@@ -290,10 +284,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Namespace#excludeCollisions(Set) <em>Exclude Collisions</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Namespace#excludeCollisions(java.util.Set) <em>Exclude Collisions</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Namespace#excludeCollisions(Set)
+	 * @see org.eclipse.uml2.Namespace#excludeCollisions(java.util.Set)
 	 * @generated
 	 */
 	public void testExcludeCollisions__Set() {
@@ -383,10 +377,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.StructuredActivityNode#setActivity(Activity) <em>Set Activity</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.StructuredActivityNode#setActivity(org.eclipse.uml2.Activity) <em>Set Activity</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.StructuredActivityNode#setActivity(Activity)
+	 * @see org.eclipse.uml2.StructuredActivityNode#setActivity(org.eclipse.uml2.Activity)
 	 * @generated
 	 */
 	public void testSetActivityGen() {
@@ -431,10 +425,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.StructuredActivityNode#setActivityGroup_activity(Activity) <em>Set Activity Group activity</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.StructuredActivityNode#setActivityGroup_activity(org.eclipse.uml2.Activity) <em>Set Activity Group activity</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.StructuredActivityNode#setActivityGroup_activity(Activity)
+	 * @see org.eclipse.uml2.StructuredActivityNode#setActivityGroup_activity(org.eclipse.uml2.Activity)
 	 * @generated
 	 */
 	public void testSetActivityGroup_activityGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/SubstitutionTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/SubstitutionTest.java
index c7814d7..51e6894 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/SubstitutionTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/SubstitutionTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: SubstitutionTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: SubstitutionTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -131,10 +131,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Substitution#setContract(Classifier) <em>Contract</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Substitution#setContract(org.eclipse.uml2.Classifier) <em>Contract</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Substitution#setContract(Classifier)
+	 * @see org.eclipse.uml2.Substitution#setContract(org.eclipse.uml2.Classifier)
 	 * @generated
 	 */
 	public void testSetContractGen() {
@@ -189,10 +189,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Substitution#setSubstitutingClassifier(Classifier) <em>Substituting Classifier</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Substitution#setSubstitutingClassifier(org.eclipse.uml2.Classifier) <em>Substituting Classifier</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Substitution#setSubstitutingClassifier(Classifier)
+	 * @see org.eclipse.uml2.Substitution#setSubstitutingClassifier(org.eclipse.uml2.Classifier)
 	 * @generated
 	 */
 	public void testSetSubstitutingClassifierGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TemplateParameterTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TemplateParameterTest.java
index 6254a97..50c875a 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TemplateParameterTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TemplateParameterTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: TemplateParameterTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: TemplateParameterTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -131,10 +131,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setSignature(TemplateSignature) <em>Signature</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setSignature(org.eclipse.uml2.TemplateSignature) <em>Signature</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TemplateParameter#setSignature(TemplateSignature)
+	 * @see org.eclipse.uml2.TemplateParameter#setSignature(org.eclipse.uml2.TemplateSignature)
 	 * @generated
 	 */
 	public void testSetSignatureGen() {
@@ -187,10 +187,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setParameteredElement(ParameterableElement) <em>Parametered Element</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setParameteredElement(org.eclipse.uml2.ParameterableElement) <em>Parametered Element</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TemplateParameter#setParameteredElement(ParameterableElement)
+	 * @see org.eclipse.uml2.TemplateParameter#setParameteredElement(org.eclipse.uml2.ParameterableElement)
 	 * @generated
 	 */
 	public void testSetParameteredElementGen() {
@@ -251,10 +251,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setOwnedParameteredElement(ParameterableElement) <em>Owned Parametered Element</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setOwnedParameteredElement(org.eclipse.uml2.ParameterableElement) <em>Owned Parametered Element</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TemplateParameter#setOwnedParameteredElement(ParameterableElement)
+	 * @see org.eclipse.uml2.TemplateParameter#setOwnedParameteredElement(org.eclipse.uml2.ParameterableElement)
 	 * @generated
 	 */
 	public void testSetOwnedParameteredElementGen() {
@@ -311,10 +311,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setDefault(ParameterableElement) <em>Default</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setDefault(org.eclipse.uml2.ParameterableElement) <em>Default</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TemplateParameter#setDefault(ParameterableElement)
+	 * @see org.eclipse.uml2.TemplateParameter#setDefault(org.eclipse.uml2.ParameterableElement)
 	 * @generated
 	 */
 	public void testSetDefaultGen() {
@@ -373,10 +373,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setOwnedDefault(ParameterableElement) <em>Owned Default</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TemplateParameter#setOwnedDefault(org.eclipse.uml2.ParameterableElement) <em>Owned Default</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TemplateParameter#setOwnedDefault(ParameterableElement)
+	 * @see org.eclipse.uml2.TemplateParameter#setOwnedDefault(org.eclipse.uml2.ParameterableElement)
 	 * @generated
 	 */
 	public void testSetOwnedDefaultGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeConstraintTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeConstraintTest.java
index 2782091..fe9d120 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeConstraintTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeConstraintTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: TimeConstraintTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: TimeConstraintTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -16,7 +16,6 @@
 
 import org.eclipse.uml2.TimeConstraint;
 import org.eclipse.uml2.UML2Factory;
-import org.eclipse.uml2.ValueSpecification;
 
 /**
  * <!-- begin-user-doc -->
@@ -26,7 +25,7 @@
  * The following operations are tested:
  * <ul>
  *   <li>{@link org.eclipse.uml2.TimeConstraint#getSpecification() <em>Get Specification</em>}</li>
- *   <li>{@link org.eclipse.uml2.TimeConstraint#setSpecification(ValueSpecification) <em>Set Specification</em>}</li>
+ *   <li>{@link org.eclipse.uml2.TimeConstraint#setSpecification(org.eclipse.uml2.ValueSpecification) <em>Set Specification</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -108,10 +107,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TimeConstraint#setSpecification(ValueSpecification) <em>Set Specification</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.TimeConstraint#setSpecification(org.eclipse.uml2.ValueSpecification) <em>Set Specification</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TimeConstraint#setSpecification(ValueSpecification)
+	 * @see org.eclipse.uml2.TimeConstraint#setSpecification(org.eclipse.uml2.ValueSpecification)
 	 * @generated
 	 */
 	public void testSetSpecificationGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeObservationActionTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeObservationActionTest.java
index 9c210f1..c91870d 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeObservationActionTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TimeObservationActionTest.java
@@ -8,13 +8,12 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: TimeObservationActionTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: TimeObservationActionTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.uml2.InputPin;
 import org.eclipse.uml2.TimeObservationAction;
 import org.eclipse.uml2.UML2Factory;
 
@@ -26,7 +25,7 @@
  * The following operations are tested:
  * <ul>
  *   <li>{@link org.eclipse.uml2.TimeObservationAction#getValue() <em>Get Value</em>}</li>
- *   <li>{@link org.eclipse.uml2.TimeObservationAction#setValue(InputPin) <em>Set Value</em>}</li>
+ *   <li>{@link org.eclipse.uml2.TimeObservationAction#setValue(org.eclipse.uml2.InputPin) <em>Set Value</em>}</li>
  * </ul>
  * </p>
  * @generated
@@ -108,10 +107,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TimeObservationAction#setValue(InputPin) <em>Set Value</em>}' setter operation.
+	 * Tests the '{@link org.eclipse.uml2.TimeObservationAction#setValue(org.eclipse.uml2.InputPin) <em>Set Value</em>}' setter operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TimeObservationAction#setValue(InputPin)
+	 * @see org.eclipse.uml2.TimeObservationAction#setValue(org.eclipse.uml2.InputPin)
 	 * @generated
 	 */
 	public void testSetValueGen() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TransitionTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TransitionTest.java
index 63d362f..4f29fef 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TransitionTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TransitionTest.java
@@ -8,13 +8,12 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: TransitionTest.java,v 1.1 2005/04/04 20:06:08 khussey Exp $
+ * $Id: TransitionTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
 import junit.textui.TestRunner;
 
-import org.eclipse.uml2.Constraint;
 import org.eclipse.uml2.Transition;
 import org.eclipse.uml2.UML2Factory;
 
@@ -110,10 +109,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Transition#setGuard(Constraint) <em>Guard</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.Transition#setGuard(org.eclipse.uml2.Constraint) <em>Guard</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Transition#setGuard(Constraint)
+	 * @see org.eclipse.uml2.Transition#setGuard(org.eclipse.uml2.Constraint)
 	 * @generated
 	 */
 	public void testSetGuard() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypeTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypeTest.java
index 767047f..c648875 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypeTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypeTest.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: TypeTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: TypeTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
@@ -29,7 +29,7 @@
  * <p>
  * The following operations are tested:
  * <ul>
- *   <li>{@link org.eclipse.uml2.Type#conformsTo(Type) <em>Conforms To</em>}</li>
+ *   <li>{@link org.eclipse.uml2.Type#conformsTo(org.eclipse.uml2.Type) <em>Conforms To</em>}</li>
  *   <li>{@link org.eclipse.uml2.Type#getNamespace() <em>Get Namespace</em>}</li>
  * </ul>
  * </p>
@@ -89,10 +89,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.Type#conformsTo(Type) <em>Conforms To</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.Type#conformsTo(org.eclipse.uml2.Type) <em>Conforms To</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.Type#conformsTo(Type)
+	 * @see org.eclipse.uml2.Type#conformsTo(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testConformsTo__Type() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypedElementTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypedElementTest.java
index 95d36f2..f487646 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypedElementTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/TypedElementTest.java
@@ -8,11 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: TypedElementTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: TypedElementTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import org.eclipse.uml2.Type;
 import org.eclipse.uml2.TypedElement;
 
 /**
@@ -69,10 +68,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(Type) <em>Type</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type) <em>Type</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TypedElement#setType(Type)
+	 * @see org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testSetType() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ValueSpecificationTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ValueSpecificationTest.java
index c82854f..1948799 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ValueSpecificationTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/ValueSpecificationTest.java
@@ -8,11 +8,10 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: ValueSpecificationTest.java,v 1.1 2005/04/04 20:06:06 khussey Exp $
+ * $Id: ValueSpecificationTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import org.eclipse.uml2.TemplateParameter;
 import org.eclipse.uml2.ValueSpecification;
 
 /**
@@ -82,10 +81,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter) <em>Template Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter) <em>Template Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setTemplateParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetTemplateParameter() {
@@ -106,10 +105,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter) <em>Owning Parameter</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter) <em>Owning Parameter</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(TemplateParameter)
+	 * @see org.eclipse.uml2.ParameterableElement#setOwningParameter(org.eclipse.uml2.TemplateParameter)
 	 * @generated
 	 */
 	public void testSetOwningParameter() {
diff --git a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/VariableTest.java b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/VariableTest.java
index 6bc4ca2..2a504fe 100644
--- a/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/VariableTest.java
+++ b/deprecated/tests/org.eclipse.uml2.tests/src/org/eclipse/uml2/tests/VariableTest.java
@@ -8,18 +8,12 @@
  * Contributors:
  *   IBM - initial API and implementation
  *
- * $Id: VariableTest.java,v 1.1 2005/04/04 20:06:07 khussey Exp $
+ * $Id: VariableTest.java,v 1.2 2005/04/20 19:00:46 khussey Exp $
  */
 package org.eclipse.uml2.tests;
 
-import java.util.Map;
-
 import junit.textui.TestRunner;
 
-import org.eclipse.emf.common.util.DiagnosticChain;
-
-import org.eclipse.uml2.MultiplicityElement;
-import org.eclipse.uml2.Type;
 import org.eclipse.uml2.UML2Factory;
 import org.eclipse.uml2.Variable;
 
@@ -44,12 +38,12 @@
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upperBound() <em>Upper Bound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#isMultivalued() <em>Is Multivalued</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesCardinality(int) <em>Includes Cardinality</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}</li>
- *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}</li>
+ *   <li>{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#lower() <em>Lower</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#upper() <em>Upper</em>}</li>
  *   <li>{@link org.eclipse.uml2.MultiplicityElement#getOwnedElements() <em>Get Owned Elements</em>}</li>
@@ -129,10 +123,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(Type) <em>Type</em>}' feature setter.
+	 * Tests the '{@link org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type) <em>Type</em>}' feature setter.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.TypedElement#setType(Type)
+	 * @see org.eclipse.uml2.TypedElement#setType(org.eclipse.uml2.Type)
 	 * @generated
 	 */
 	public void testSetType() {
@@ -261,10 +255,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement) <em>Includes Multiplicity</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(MultiplicityElement)
+	 * @see org.eclipse.uml2.MultiplicityElement#includesMultiplicity(org.eclipse.uml2.MultiplicityElement)
 	 * @generated
 	 */
 	public void testIncludesMultiplicity__MultiplicityElement() {
@@ -273,10 +267,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map) <em>Validate Upper Gt0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Gt0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGt0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGt0__DiagnosticChain_Map() {
@@ -285,10 +279,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map) <em>Validate Lower Ge0</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Ge0</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerGe0(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerGe0__DiagnosticChain_Map() {
@@ -297,10 +291,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map) <em>Validate Upper Ge Lower</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Ge Lower</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperGeLower(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperGeLower__DiagnosticChain_Map() {
@@ -309,10 +303,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Lower Eq Lowerbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateLowerEqLowerbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateLowerEqLowerbound__DiagnosticChain_Map() {
@@ -321,10 +315,10 @@
 	}
 
 	/**
-	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map) <em>Validate Upper Eq Upperbound</em>}' operation.
+	 * Tests the '{@link org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map) <em>Validate Upper Eq Upperbound</em>}' operation.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
-	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(DiagnosticChain, Map)
+	 * @see org.eclipse.uml2.MultiplicityElement#validateUpperEqUpperbound(org.eclipse.emf.common.util.DiagnosticChain, java.util.Map)
 	 * @generated
 	 */
 	public void testValidateUpperEqUpperbound__DiagnosticChain_Map() {
