diff --git a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/NamespaceOperations.java b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/NamespaceOperations.java
index ee4c117..7b523e7 100644
--- a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/NamespaceOperations.java
+++ b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/NamespaceOperations.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - Initial API and implementation
  *
- * $Id: NamespaceOperations.java,v 1.7 2004/05/28 05:13:45 khussey Exp $
+ * $Id: NamespaceOperations.java,v 1.7.2.1 2004/11/01 22:23:50 khussey Exp $
  */
 package org.eclipse.uml2.internal.operation;
 
@@ -117,21 +117,22 @@
 		for (Iterator elementImports = namespace.getElementImports().iterator(); elementImports
 			.hasNext();) {
 
-			ElementImport elementImport = (ElementImport) elementImports.next();
+			PackageableElement importedElement = ((ElementImport) elementImports
+				.next()).getImportedElement();
 
-			if (null != elementImport.getImportedElement()) {
-				importedMember.add(elementImport.getImportedElement());
+			if (null != importedElement) {
+				importedMember.add(importedElement);
 			}
 		}
 
 		for (Iterator packageImports = namespace.getPackageImports().iterator(); packageImports
 			.hasNext();) {
 
-			PackageImport packageImport = (PackageImport) packageImports.next();
+			org.eclipse.uml2.Package importedPackage = ((PackageImport) packageImports
+				.next()).getImportedPackage();
 
-			if (null != packageImport.getImportedPackage()) {
-				importedMember.addAll(packageImport.getImportedPackage()
-					.visibleMembers());
+			if (null != importedPackage) {
+				importedMember.addAll(importedPackage.visibleMembers());
 			}
 		}
 
diff --git a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/PackageOperations.java b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/PackageOperations.java
index ffe2936..906d972 100644
--- a/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/PackageOperations.java
+++ b/deprecated/plugins/org.eclipse.uml2/src/org/eclipse/uml2/internal/operation/PackageOperations.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - Initial API and implementation
  *
- * $Id: PackageOperations.java,v 1.6 2004/05/11 15:24:01 khussey Exp $
+ * $Id: PackageOperations.java,v 1.6.2.1 2004/11/01 22:23:50 khussey Exp $
  */
 package org.eclipse.uml2.internal.operation;
 
@@ -25,9 +25,9 @@
 import org.eclipse.uml2.NamedElement;
 import org.eclipse.uml2.PackageImport;
 import org.eclipse.uml2.PackageableElement;
-import org.eclipse.uml2.util.UML2Validator;
 import org.eclipse.uml2.UML2Plugin;
 import org.eclipse.uml2.VisibilityKind;
+import org.eclipse.uml2.util.UML2Validator;
 
 /**
  * A static utility class that provides operations related to packages.
@@ -72,9 +72,11 @@
 				|| VisibilityKind.PUBLIC_LITERAL.equals(packageImport
 					.getVisibility())) {
 
-				return null != packageImport.getImportedPackage()
-					&& packageImport.getImportedPackage().visibleMembers()
-						.contains(el);
+				org.eclipse.uml2.Package importedPackage = packageImport
+					.getImportedPackage();
+
+				return null != importedPackage
+					&& importedPackage.visibleMembers().contains(el);
 			}
 		}
 
@@ -88,6 +90,21 @@
 	public static Set visibleMembers(org.eclipse.uml2.Package package_) {
 		Set visibleMembers = new HashSet();
 
+		visibleMembersHelper(package_, visibleMembers);
+
+		for (Iterator allImportedPackages = allImportedPackagesHelper(package_,
+			new HashSet()).iterator(); allImportedPackages.hasNext();) {
+
+			visibleMembersHelper((org.eclipse.uml2.Package) allImportedPackages
+				.next(), visibleMembers);
+		}
+
+		return visibleMembers;
+	}
+
+	protected static Set visibleMembersHelper(
+			org.eclipse.uml2.Package package_, Set visibleMembers) {
+
 		for (Iterator ownedMembers = package_.getOwnedMembers().iterator(); ownedMembers
 			.hasNext();) {
 
@@ -111,10 +128,21 @@
 				|| VisibilityKind.PUBLIC_LITERAL.equals(elementImport
 					.getVisibility())) {
 
-				visibleMembers.add(elementImport.getImportedElement());
+				PackageableElement importedElement = elementImport
+					.getImportedElement();
+
+				if (null != importedElement) {
+					visibleMembers.add(importedElement);
+				}
 			}
 		}
 
+		return visibleMembers;
+	}
+
+	protected static Set allImportedPackagesHelper(
+			org.eclipse.uml2.Package package_, Set allImportedPackages) {
+
 		for (Iterator packageImports = package_.getPackageImports().iterator(); packageImports
 			.hasNext();) {
 
@@ -124,12 +152,21 @@
 				|| VisibilityKind.PUBLIC_LITERAL.equals(packageImport
 					.getVisibility())) {
 
-				visibleMembers.addAll(packageImport.getImportedPackage()
-					.visibleMembers());
+				org.eclipse.uml2.Package importedPackage = packageImport
+					.getImportedPackage();
+
+				if (null != importedPackage
+					&& !allImportedPackages.contains(importedPackage)) {
+
+					allImportedPackages.add(importedPackage);
+
+					allImportedPackagesHelper(importedPackage,
+						allImportedPackages);
+				}
 			}
 		}
 
-		return visibleMembers;
+		return allImportedPackages;
 	}
 
 	/**
@@ -162,15 +199,15 @@
 					} else {
 						diagnostics
 							.add(new BasicDiagnostic(
-									Diagnostic.WARNING,
-									UML2Validator.DIAGNOSTIC_SOURCE,
-									UML2Validator.PACKAGE__ELEMENTS_PUBLIC_OR_PRIVATE,
-									UML2Plugin.INSTANCE
-										.getString(
-											"_UI_Package_ElementsPublicOrPrivate_diagnostic", //$NON-NLS-1$
-											getMessageSubstitutions(context,
-												ownedElement, package_)),
-									new Object[] {package_, ownedElement}));
+								Diagnostic.WARNING,
+								UML2Validator.DIAGNOSTIC_SOURCE,
+								UML2Validator.PACKAGE__ELEMENTS_PUBLIC_OR_PRIVATE,
+								UML2Plugin.INSTANCE
+									.getString(
+										"_UI_Package_ElementsPublicOrPrivate_diagnostic", //$NON-NLS-1$
+										getMessageSubstitutions(context,
+											ownedElement, package_)),
+								new Object[]{package_, ownedElement}));
 					}
 				}
 			}
