*** empty log message ***
diff --git a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/ProfileOperations.java b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/ProfileOperations.java
index 48f09aa..49fe940 100644
--- a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/ProfileOperations.java
+++ b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/ProfileOperations.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - Initial API and implementation
  *
- * $Id: ProfileOperations.java,v 1.10 2004/11/02 15:30:10 khussey Exp $
+ * $Id: ProfileOperations.java,v 1.11 2004/11/11 17:52:45 khussey Exp $
  */
 package org.eclipse.uml2.internal.operation;
 
@@ -56,6 +56,7 @@
 import org.eclipse.uml2.EnumerationLiteral;
 import org.eclipse.uml2.Extension;
 import org.eclipse.uml2.Generalization;
+import org.eclipse.uml2.Implementation;
 import org.eclipse.uml2.InstanceValue;
 import org.eclipse.uml2.Interface;
 import org.eclipse.uml2.Model;
@@ -71,6 +72,7 @@
 import org.eclipse.uml2.UML2Package;
 import org.eclipse.uml2.VisibilityKind;
 import org.eclipse.uml2.util.UML2Resource;
+import org.eclipse.uml2.util.UML2Switch;
 
 /**
  * A static utility class that provides operations related to profiles.
@@ -214,19 +216,6 @@
 
 		if (null == eClassifier) {
 
-			if (org.eclipse.uml2.Class.class.isInstance(type)) {
-				eClassifier = createEClass(ePackage,
-					(org.eclipse.uml2.Class) type);
-			}
-
-			if (Interface.class.isInstance(type)) {
-				eClassifier = createEClass(ePackage, (Interface) type);
-			}
-
-			if (Enumeration.class.isInstance(type)) {
-				eClassifier = createEEnum(ePackage, (Enumeration) type);
-			}
-
 			if (PrimitiveType.class.isInstance(type)) {
 
 				if ("Boolean".equals(type.getName())) { //$NON-NLS-1$
@@ -261,6 +250,8 @@
 				} else {
 					eClassifier = EcorePackage.eINSTANCE.getEString();
 				}
+			} else {
+				eClassifier = createEClassifier(ePackage, type);
 			}
 		}
 
@@ -282,16 +273,50 @@
 		ePackage.setNsURI("http:///" + EcoreUtil.generateUUID() + "." //$NON-NLS-1$ //$NON-NLS-2$
 			+ UML2Resource.PROFILE_FILE_EXTENSION);
 
-		for (Iterator ownedStereotypes = profile.getOwnedStereotypes()
-			.iterator(); ownedStereotypes.hasNext();) {
+		for (Iterator ownedTypes = profile.getOwnedTypes().iterator(); ownedTypes
+			.hasNext();) {
 
-			createEClass(ePackage, (Stereotype) ownedStereotypes.next());
+			createEClassifier(ePackage, (Type) ownedTypes.next());
 		}
 
 		return ePackage;
 	}
 
 	/**
+	 * Creates an Ecore classifier in the specified Ecore package to represent
+	 * the specified type; if such an Ecore classifier already exists, it is
+	 * returned.
+	 * 
+	 * @param ePackage
+	 *            The Ecore package in which to create the Ecore classifier.
+	 * @param type
+	 *            The type for which to create an Ecore classifier.
+	 * @return The (new) Ecore classifier.
+	 */
+	protected static EClassifier createEClassifier(final EPackage ePackage,
+			Type type) {
+
+		return (EClassifier) new UML2Switch() {
+
+			public Object caseClass(org.eclipse.uml2.Class class_) {
+				return createEClass(ePackage, class_);
+			}
+
+			public Object caseEnumeration(Enumeration enumeration) {
+				return createEEnum(ePackage, enumeration);
+			}
+
+			public Object caseInterface(Interface interface_) {
+				return createEClass(ePackage, interface_);
+			}
+
+			public Object caseStereotype(Stereotype stereotype) {
+				return createEClass(ePackage, stereotype);
+			}
+		}.doSwitch(type);
+	}
+
+	/**
 	 * Creates an Ecore class in the specified Ecore package to represent the
 	 * specified stereotype; if such an Ecore class already exists, it is
 	 * returned.
@@ -338,13 +363,12 @@
 			for (Iterator generalizations = stereotype.getGeneralizations()
 				.iterator(); generalizations.hasNext();) {
 
-				Generalization generalization = (Generalization) generalizations
-					.next();
+				Classifier general = ((Generalization) generalizations.next())
+					.getGeneral();
 
-				if (Stereotype.class.isInstance(generalization.getGeneral())) {
+				if (Stereotype.class.isInstance(general)) {
 					eClass.getESuperTypes().add(
-						createEClass(ePackage, (Stereotype) generalization
-							.getGeneral()));
+						createEClass(ePackage, (Stereotype) general));
 				}
 			}
 		}
@@ -393,16 +417,26 @@
 			for (Iterator generalizations = class_.getGeneralizations()
 				.iterator(); generalizations.hasNext();) {
 
-				Generalization generalization = (Generalization) generalizations
-					.next();
+				Classifier general = ((Generalization) generalizations.next())
+					.getGeneral();
 
-				if (org.eclipse.uml2.Class.class.isInstance(generalization
-					.getGeneral())) {
+				if (org.eclipse.uml2.Class.class.isInstance(general)) {
+					eClass.getESuperTypes()
+						.add(
+							createEClass(ePackage,
+								(org.eclipse.uml2.Class) general));
+				}
+			}
 
+			for (Iterator implementations = class_.getImplementations()
+				.iterator(); implementations.hasNext();) {
+
+				Interface contract = ((Implementation) implementations.next())
+					.getContract();
+
+				if (null != contract) {
 					eClass.getESuperTypes().add(
-						createEClass(ePackage,
-							(org.eclipse.uml2.Class) generalization
-								.getGeneral()));
+						createEClass(ePackage, contract));
 				}
 			}
 		}
@@ -429,6 +463,7 @@
 			eClass = EcoreFactory.eINSTANCE.createEClass();
 
 			eClass.setName(getEClassifierName(interface_));
+			eClass.setAbstract(true);
 			eClass.setInterface(true);
 
 			ePackage.getEClassifiers().add(eClass);
@@ -451,13 +486,12 @@
 			for (Iterator generalizations = interface_.getGeneralizations()
 				.iterator(); generalizations.hasNext();) {
 
-				Generalization generalization = (Generalization) generalizations
-					.next();
+				Classifier general = ((Generalization) generalizations.next())
+					.getGeneral();
 
-				if (Interface.class.isInstance(generalization.getGeneral())) {
+				if (Interface.class.isInstance(general)) {
 					eClass.getESuperTypes().add(
-						createEClass(ePackage, (Interface) generalization
-							.getGeneral()));
+						createEClass(ePackage, (Interface) general));
 				}
 			}
 		}