diff --git a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java
index f7861d1..7b442db 100644
--- a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java
+++ b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/internal/osgi/services/remoteserviceadmin/Activator.java
@@ -57,6 +57,9 @@
 
 	public static final String PLUGIN_ID = "org.eclipse.ecf.osgi.services.remoteserviceadmin"; //$NON-NLS-1$
 
+	private static final String RSA_PROXY_PREFIX = "ECF RSA PROXY for ED="; //$NON-NLS-1$
+	private static final String RSA_PROXY_BUNDLE_SYMBOLIC_ID = "org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy"; //$NON-NLS-1$
+
 	private static BundleContext context;
 	private static Activator instance;
 
@@ -87,8 +90,6 @@
 	private Object saxParserFactoryTrackerLock = new Object();
 	private ServiceTracker saxParserFactoryTracker;
 
-	private static final String RSA_PROXY_BUNDLE_SYMBOLIC_ID = "org.eclipse.ecf.osgi.services.remoteserviceadmin.proxy"; //$NON-NLS-1$
-
 	private BundleContext proxyServiceFactoryBundleContext;
 
 	private Collection<ExportRegistration> exportedRegistrations;
@@ -178,8 +179,6 @@
 		return (proxyBundle != null)?proxyBundle.getBundleContext():proxyServiceFactoryBundleContext;
 	}
 
-	private static final String RSA_PROXY_PREFIX = "ECF RSA PROXY for "; //$NON-NLS-1$
-
 	static Bundle findExistingProxyBundle(String bundleSymbolicName) {
 		BundleContext bc = getContext();
 		if (bc != null) 
diff --git a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java
index 37cf353..2b6d0d7 100644
--- a/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java
+++ b/osgi/bundles/org.eclipse.ecf.osgi.services.remoteserviceadmin/src/org/eclipse/ecf/osgi/services/remoteserviceadmin/RemoteServiceAdmin.java
@@ -43,9 +43,9 @@
 import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.DebugOptions;
 import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.LogUtility;
 import org.eclipse.ecf.internal.osgi.services.remoteserviceadmin.PropertiesUtil;
-import org.eclipse.ecf.remoteservice.IRSAConsumerContainerAdapter;
 import org.eclipse.ecf.remoteservice.IExtendedRemoteServiceRegistration;
 import org.eclipse.ecf.remoteservice.IOSGiRemoteServiceContainerAdapter;
+import org.eclipse.ecf.remoteservice.IRSAConsumerContainerAdapter;
 import org.eclipse.ecf.remoteservice.IRemoteService;
 import org.eclipse.ecf.remoteservice.IRemoteServiceContainer;
 import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter;
@@ -929,11 +929,10 @@
 
 	class ImportEndpoint {
 
-		private ID importContainerID;
+		private IRemoteServiceContainer rsContainer;
 		private IRemoteService rs;
-		private IRemoteServiceContainerAdapter rsContainerAdapter;
-		private EndpointDescription endpointDescription;
 		private IRemoteServiceListener rsListener;
+		private EndpointDescription endpointDescription;
 		private IRemoteServiceReference rsReference;
 		private ServiceRegistration proxyRegistration;
 		private Set<ImportRegistration> activeImportRegistrations = new HashSet<ImportRegistration>();
@@ -945,25 +944,22 @@
 			return buf.toString();
 		}
 		
-		ImportEndpoint(ID importContainerID, IRemoteServiceContainerAdapter rsContainerAdapter,
+		ImportEndpoint(IRemoteServiceContainer rsContainer,
 				IRemoteServiceReference rsReference,
 				IRemoteService rs,
-				IRemoteServiceListener rsListener,
 				ServiceRegistration proxyRegistration,
 				EndpointDescription endpointDescription) {
-			this.importContainerID = importContainerID;
-			this.rsContainerAdapter = rsContainerAdapter;
-			this.endpointDescription = endpointDescription;
+			this.rsContainer = rsContainer;
 			this.rsReference = rsReference;
+			this.endpointDescription = endpointDescription;
 			this.rs = rs;
-			this.rsListener = rsListener;
 			this.proxyRegistration = proxyRegistration;
+			this.rsListener = new RemoteServiceListener();
 			// Add the remoteservice listener to the container adapter, so that
 			// the rsListener notified asynchronously if our underlying remote
-			// service
-			// reference is unregistered locally due to disconnect or remote
+			// service reference is unregistered locally due to disconnect or remote
 			// ejection
-			this.rsContainerAdapter.addRemoteServiceListener(this.rsListener);
+			this.rsContainer.getContainerAdapter().addRemoteServiceListener(this.rsListener);
 		}
 
 		synchronized EndpointDescription getEndpointDescription() {
@@ -988,24 +984,28 @@
 					.remove(importRegistration);
 			if (removed && activeImportRegistrations.size() == 0) {
 				if (proxyRegistration != null) {
-					proxyRegistration.unregister();
+					try {
+						proxyRegistration.unregister();
+					} catch (Throwable t) {
+						// do nothing
+					}
 					proxyRegistration = null;
 				}
+				IRemoteServiceContainerAdapter rsContainerAdapter = rsContainer.getContainerAdapter();
 				if (rsContainerAdapter != null) {
 					if (rsReference != null) {
 						rsContainerAdapter.ungetRemoteService(rsReference);
 						rsReference = null;
 					}
-					// remove remote service listener
 					if (rsListener != null) {
 						rsContainerAdapter
 								.removeRemoteServiceListener(rsListener);
 						rsListener = null;
 					}
-					rs = null;
-					rsContainerAdapter = null;
 				}
+				rs = null;
 				endpointDescription = null;
+				rsContainer = null;
 			}
 			return removed;
 		}
@@ -1030,7 +1030,7 @@
 			EndpointDescription updatedEndpoint = (endpoint instanceof EndpointDescription) ? ((EndpointDescription) endpoint)
 					: new EndpointDescription(endpoint.getProperties());
 			// Create new proxy properties from updatedEndpoint and rsReference and rs
-			Map newProxyProperties = createProxyProperties(importContainerID, updatedEndpoint,
+			Map newProxyProperties = createProxyProperties(rsContainer.getContainer().getID(), updatedEndpoint,
 					rsReference, rs);
 			// set the endpoint description with the proxy properties
 			updatedEndpoint.setPropertiesOverrides(newProxyProperties);
@@ -1855,9 +1855,7 @@
 					}
 				});
 
-		return new ImportEndpoint(rsContainerID, containerAdapter, selectedRsReference, rs,
-				new RemoteServiceListener(), proxyRegistration,
-				endpointDescription);
+		return new ImportEndpoint(rsContainer, selectedRsReference, rs, proxyRegistration, endpointDescription);
 	}
 
 	private BundleContext getProxyServiceFactoryContext(
