### Eclipse Workspace Patch 1.0
#P org.jboss.tools.openshift.express.ui
Index: src/org/jboss/tools/openshift/express/internal/ui/viewer/property/PropertySourceAdapterFactory.java
===================================================================
--- src/org/jboss/tools/openshift/express/internal/ui/viewer/property/PropertySourceAdapterFactory.java	(revision 39429)
+++ src/org/jboss/tools/openshift/express/internal/ui/viewer/property/PropertySourceAdapterFactory.java	(working copy)
@@ -10,6 +10,8 @@
  ******************************************************************************/
 package org.jboss.tools.openshift.express.internal.ui.viewer.property;
 
+import java.util.HashMap;
+
 import org.eclipse.core.runtime.IAdapterFactory;
 import org.eclipse.ui.views.properties.IPropertySource;
 import org.jboss.tools.openshift.express.internal.core.console.UserDelegate;
@@ -22,12 +24,17 @@
  * 
  */
 public class PropertySourceAdapterFactory implements IAdapterFactory {
-
+	private HashMap<UserDelegate, UserPropertySource> userMap = new HashMap<UserDelegate, UserPropertySource>();
 	@Override
 	public Object getAdapter(Object adaptableObject, @SuppressWarnings("rawtypes") Class adapterType) {
 		if(adapterType == IPropertySource.class) {
 			if(adaptableObject instanceof UserDelegate) {
-				return new UserPropertySource((UserDelegate)adaptableObject);
+				UserPropertySource u = userMap.get((UserDelegate)adaptableObject);
+				if( u == null ) {
+						u = new UserPropertySource((UserDelegate)adaptableObject);
+						userMap.put((UserDelegate)adaptableObject, u);
+				}
+				return u;
 			}
 			if(adaptableObject instanceof IApplication) {
 				return new ApplicationPropertySource((IApplication)adaptableObject);
Index: src/org/jboss/tools/openshift/express/internal/ui/action/ShowPropertiesAction.java
===================================================================
--- src/org/jboss/tools/openshift/express/internal/ui/action/ShowPropertiesAction.java	(revision 39429)
+++ src/org/jboss/tools/openshift/express/internal/ui/action/ShowPropertiesAction.java	(working copy)
@@ -32,9 +32,8 @@
 	public void run() {
 		try {
 			PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView("org.eclipse.ui.views.PropertySheet");
-		} catch (PartInitException e) {
-			Logger.error("Failed to show properties view", e);
+		} catch (PartInitException e2) {
+			Logger.error("Failed to show properties view", e2);
 		} 
 	}
-
 }
Index: src/org/jboss/tools/openshift/express/internal/ui/viewer/property/UserPropertySource.java
===================================================================
--- src/org/jboss/tools/openshift/express/internal/ui/viewer/property/UserPropertySource.java	(revision 39429)
+++ src/org/jboss/tools/openshift/express/internal/ui/viewer/property/UserPropertySource.java	(working copy)
@@ -10,6 +10,10 @@
  ******************************************************************************/
 package org.jboss.tools.openshift.express.internal.ui.viewer.property;
 
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.ui.views.properties.IPropertyDescriptor;
 import org.eclipse.ui.views.properties.IPropertySource;
 import org.eclipse.ui.views.properties.PropertyDescriptor;
@@ -17,6 +21,7 @@
 import org.jboss.tools.openshift.express.internal.ui.messages.OpenShiftExpressUIMessages;
 import org.jboss.tools.openshift.express.internal.ui.utils.Logger;
 
+import com.openshift.express.client.IDomain;
 import com.openshift.express.client.OpenShiftException;
 
 /**
@@ -27,7 +32,12 @@
 	private static final String PROPERTY_DOMAIN = "Domain";
 	private static final String PROPERTY_USERNAME = "Username";
 	private final UserDelegate user;
-
+	private boolean loaded = false;
+	private boolean loading = false;
+	private IDomain domain = null;
+	private OpenShiftException loadError = null;
+	private Object lock = new Object();
+	
 	public UserPropertySource(UserDelegate user) {
 		this.user = user;
 	}
@@ -57,8 +67,22 @@
 			if (id.equals(PROPERTY_USERNAME)) {
 				return user.getRhlogin();
 			}
-			if (id.equals(PROPERTY_DOMAIN) && user.hasDomain()) {
-				return user.getDomain().getNamespace() + "." + user.getDomain().getRhcDomain();
+			
+			if( user.getCachedDomain() != null )
+				domain = user.getCachedDomain();
+
+			synchronized(lock) {
+				// Everythign below here may have remote calls
+				if( domain == null && !loading && !loaded) {
+					launchLoadingJob();
+					return "Loading...";
+				}
+				if( domain == null && loaded ) {
+					return "Error Connecting to remote server: ";
+				}
+			}
+			if (id.equals(PROPERTY_DOMAIN) && domain != null ) {
+				return domain.getNamespace() + "." + domain.getRhcDomain();
 			}
 		} catch (OpenShiftException e) {
 			Logger.error("Could not get selected object's property '" + id + "'.", e);
@@ -66,6 +90,33 @@
 		return null;
 	}
 
+	private void launchLoadingJob() {
+		synchronized(lock) {
+			loading = true;
+		}
+		
+		new Job("Loading user information...") {
+			protected IStatus run(IProgressMonitor monitor) {
+				monitor.beginTask("Loading user information...", 100);
+				try {
+					domain = user.getDomain();
+				} catch( OpenShiftException ose ) {
+					loadError = ose;
+				}
+				synchronized(lock) {
+					loaded = true;
+					loading = false;
+				}
+				// TODO is there a way to refresh the properties view now? Force a refresh??
+				monitor.done();
+				return Status.OK_STATUS;
+			}
+			
+		}.schedule();
+	}
+
+	
+	
 	@Override
 	public void resetPropertyValue(Object id) {
 		// TODO Auto-generated method stub
Index: src/org/jboss/tools/openshift/express/internal/core/console/UserDelegate.java
===================================================================
--- src/org/jboss/tools/openshift/express/internal/core/console/UserDelegate.java	(revision 39429)
+++ src/org/jboss/tools/openshift/express/internal/core/console/UserDelegate.java	(working copy)
@@ -36,6 +36,8 @@
 	private boolean connected;
 	private boolean alreadyPromptedForPassword;
 	
+	private IDomain cachedDomain;
+	
 	public UserDelegate(IUser user, boolean rememberPassword, boolean connected) {
 		this.delegate = user;
 		this.rememberPassword = rememberPassword;
@@ -172,10 +174,16 @@
 	}
 	public IDomain getDomain() throws OpenShiftException {
 		if(checkForPassword()) {
-			return delegate.getDomain();
+			cachedDomain = delegate.getDomain();
+			return cachedDomain;
 		} 
 		return null;
 	}
+	
+	public IDomain getCachedDomain()  {
+		return cachedDomain;
+	}
+	
 	public List<IEmbeddableCartridge> getEmbeddableCartridges()
 			throws OpenShiftException {
 		if(checkForPassword()) {
@@ -221,6 +229,8 @@
 		return false;
 	}
 	public void refresh() throws OpenShiftException {
+		cachedDomain = null;
+		
 		if(checkForPassword()) {
 			delegate.refresh();
 		} 
