### Eclipse Workspace Patch 1.0
#P org.jboss.tools.deltacloud.core
Index: src/org/jboss/tools/deltacloud/core/ICloudElementFilter.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/ICloudElementFilter.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/ICloudElementFilter.java	(working copy)
@@ -12,9 +12,9 @@
 
 import java.util.Collection;
 
-
 /**
- * A filter interface that may be applied on IDeltaCloudElement. Known implementors are IImageFilter and IInstanceFilter
+ * A filter interface that may be applied on IDeltaCloudElement. Known
+ * implementors are IImageFilter and IInstanceFilter
  * 
  * @see IDeltaCloudElement
  * @see IImageFilter
@@ -29,17 +29,11 @@
 
 	public static final String ALL_MATCHER_EXPRESSION = "*"; //$NON-NLS-1$
 
-	public static final String ALL_STRING =
-			ALL_MATCHER_EXPRESSION + EXPRESSION_DELIMITER // name
-					+ ALL_MATCHER_EXPRESSION + EXPRESSION_DELIMITER // id
-					+ ALL_MATCHER_EXPRESSION + EXPRESSION_DELIMITER // arch
-					+ ALL_MATCHER_EXPRESSION; // desc
-
 	public Collection<CLOUDELEMENT> filter(CLOUDELEMENT[] cloudElements) throws DeltaCloudException;
 
-	public void setRules(String ruleString);
-
 	public IFieldMatcher getNameRule();
 
 	public IFieldMatcher getIdRule();
+
+	public boolean isFiltering();
 }
Index: src/org/jboss/tools/deltacloud/core/job/LoadCloudInstancesJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/job/LoadCloudInstancesJob.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/job/LoadCloudInstancesJob.java	(revision 0)
@@ -0,0 +1,29 @@
+package org.jboss.tools.deltacloud.core.job;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+
+public class LoadCloudInstancesJob extends AbstractCloudElementJob {
+
+	private DeltaCloud cloud;
+	private Runnable post = null;
+	public LoadCloudInstancesJob(DeltaCloud cloud) {
+		super("Loading Cloud Instances for cloud " + cloud.getName(), 
+				cloud, CLOUDELEMENT.INSTANCES);
+		this.cloud = cloud;
+	}
+	public LoadCloudInstancesJob(DeltaCloud cloud, Runnable post) {
+		this(cloud);
+		this.post = post;
+	}
+
+	@Override
+	protected IStatus doRun(IProgressMonitor monitor) throws Exception {
+		cloud.loadInstances();
+		if( post != null ) 
+			post.run();
+		return Status.OK_STATUS;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/client/unmarshal/InstanceUnmarshaller.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/unmarshal/InstanceUnmarshaller.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/unmarshal/InstanceUnmarshaller.java	(working copy)
@@ -13,10 +13,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.AddressList;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.Instance;
-import org.jboss.tools.deltacloud.core.client.InstanceAction;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
@@ -24,7 +24,7 @@
 /**
  * @author André Dietisheim
  */
-public class InstanceUnmarshaller extends AbstractActionAwareUnmarshaller<Instance, InstanceAction> {
+public class InstanceUnmarshaller extends AbstractActionAwareUnmarshaller<Instance> {
 
 	public InstanceUnmarshaller() {
 		super("instance", Instance.class, "link");
@@ -79,9 +79,9 @@
 	}
 
 	@Override
-	protected InstanceAction unmarshallAction(Element element) throws DeltaCloudClientException {
-		InstanceAction action = new InstanceAction();
-		new InstanceActionUnmarshaller().unmarshall(element, action);
+	protected Action<Instance> unmarshallAction(Element element) throws DeltaCloudClientException {
+		Action<Instance> action = new Action<Instance>();
+		new ActionUnmarshaller<Instance>().unmarshall(element, action);
 		return action;
 	}
 }
Index: src/org/jboss/tools/deltacloud/core/FieldMatcher.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/FieldMatcher.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/core/FieldMatcher.java	(working copy)
@@ -1,59 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is made available under the terms of the
- * Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.deltacloud.core;
-
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.regex.PatternSyntaxException;
-
-/**
- * @author Jeff Johnston
- * @author André Dietisheim
- */
-public class FieldMatcher implements IFieldMatcher {
-
-	private String rule;
-	private Pattern pattern;
-
-	public FieldMatcher(String rule) throws PatternSyntaxException {
-		this.rule = rule;
-		String regexRule = transform(rule);
-		pattern = Pattern.compile(regexRule, Pattern.CASE_INSENSITIVE);
-	}
-
-	private String transform(String rule) {
-		StringBuffer buffer = new StringBuffer();
-		for (int i = 0; i < rule.length(); ++i) {
-			char ch = rule.charAt(i);
-			if (Character.isLetterOrDigit(ch))
-				buffer.append(ch);
-			else if (ch == '*') {
-				buffer.append(".*?");
-			} else {
-				buffer.append('\\');
-				buffer.append(ch);
-			}
-		}
-		return buffer.toString();
-	}
-
-	@Override
-	public boolean matches(String input) {
-		Matcher m = pattern.matcher(input);
-		return m.matches();
-	}
-
-	@Override
-	public String toString() {
-		return rule;
-	}
-
-}
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29286)
+++ ChangeLog	(working copy)
@@ -1,3 +1,47 @@
+2011-02-18  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/core/DeltaCloudManager.java 
+	(loadCloud): 
+	(printCloud): 
+	* src/org/jboss/tools/deltacloud/core/DeltaCloud.java 
+	(lastRealmName): 
+	(lastProfileId): 
+	(setLastProfileId): 
+	(getLastProfileId): 
+	(getLastRealmName): 
+	(setLastRealmName): 
+	[JBIDE-8333]
+
+2011-02-15  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/core/DeltaCloud.java (update): 
+	[JBIDE-8420] storing credentials before loading children 
+	(was: loaded children and stored afterwards. storing was skipped since loading threw an exception)
+
+2011-02-07  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/core/DeltaCloud.java (waitForState): 
+	[JBIDE-8343] increased wait delay for refreshing instance, waiting before refreshing (was: refreshed first and waited afterwards)
+
+2011-02-03  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/core/ImageFilter.java: 
+	* src/org/jboss/tools/deltacloud/core/InstanceFilter.java: 
+	* src/org/jboss/tools/deltacloud/core/AbstractCloudElementFilter.java:
+	[JBIDE-8187] added capability to filter for instance alias 
+
+2011-01-27  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/core/client/DeltaCloudClientImpl.java (getServerType): 
+	* src/org/jboss/tools/deltacloud/core/DeltaCloud.java (getDriver): 
+	[JBIDE-8250] 
+	- renamed Driver to DeltaCloudDriver, renamed ServerType to Driver
+	- moved driver unmarshalling to APIUnmarshaller
+	- added tests for APIUnmarshaller
+	* src/org/jboss/tools/deltacloud/core/client/HttpStatusCode.java (UNAUTHORIZED): 
+	* src/org/jboss/tools/deltacloud/core/client/DeltaCloudClientImpl.java (throwOnHttpErrors): 
+	[JBIDE-8250] authorization error is status code 401 (was: 403)
+	
 2011-01-11  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
 
 	* src/org/jboss/tools/deltacloud/core/client/DeltaCloudClientImpl.java 
Index: src/org/jboss/tools/deltacloud/core/client/Instance.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/Instance.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/Instance.java	(working copy)
@@ -10,27 +10,18 @@
  *******************************************************************************/
 package org.jboss.tools.deltacloud.core.client;
 
-import java.util.ArrayList;
 import java.util.List;
 
-import javax.xml.bind.annotation.XmlElement;
-
 /**
  * @author Martyn Taylor
  * @author Andre Dietisheim
  */
-public class Instance extends AbstractDeltaCloudActionAwareObject<InstanceAction> {
+public class Instance extends StateAware<Instance> {
 
 	private static final long serialVersionUID = 1L;
 
-	public static enum InstanceState {
-		RUNNING, STOPPED, PENDING, TERMINATED, BOGUS
-	};
-
-	@XmlElement(name = "owner_id")
 	private String ownerId;
 
-	@XmlElement
 	private String name;
 
 	private String imageId;
@@ -47,13 +38,8 @@
 
 	private String keyId;
 
-	@XmlElement
-	private InstanceState state;
-
-	@XmlElement(name = "public_addresses")
 	private AddressList publicAddresses;
 
-	@XmlElement(name = "private_addresses")
 	private AddressList privateAddresses;
 
 	public Instance() {
@@ -91,14 +77,6 @@
 		this.realmId = realmId;
 	}
 
-	public void setState(String state) {
-		try {
-			this.state = InstanceState.valueOf(state);
-		} catch (Exception e) {
-			this.state = InstanceState.BOGUS;
-		}
-	}
-
 	public void setKeyId(String keyId) {
 		this.keyId = keyId;
 	}
@@ -147,51 +125,6 @@
 		return realmId;
 	}
 
-	public InstanceState getState() {
-		return state;
-	}
-
-	public List<String> getActionNames() {
-		ArrayList<String> names = new ArrayList<String>();
-		for (InstanceAction action : getActions()) {
-			names.add(action.getName());
-		}
-		return names;
-	}
-
-	public InstanceAction getAction(String name) {
-		if (name == null) {
-			return null;
-		}
-
-		for (InstanceAction action : getActions()) {
-			if (name.equals(action.getName())) {
-				return action;
-			}
-		}
-		return null;
-	}
-
-	public boolean canStart() {
-		return getAction(IInstanceAction.START) != null;
-	}
-
-	public boolean canStop() {
-		return getAction(IInstanceAction.STOP) != null;
-	}
-
-	public boolean canReboot() {
-		return getAction(IInstanceAction.REBOOT) != null;
-	}
-
-	public boolean canDestroy() {
-		return getAction(InstanceAction.DESTROY) != null;
-	}
-
-	public boolean isRunning() {
-		return getState() == InstanceState.RUNNING;
-	}
-
 	public List<String> getPublicAddresses() {
 		return publicAddresses.getAddress();
 	}
@@ -200,22 +133,6 @@
 		return privateAddresses.getAddress();
 	}
 
-	public boolean start(DeltaCloudClient client) throws DeltaCloudClientException {
-		return ((InternalDeltaCloudClient) client).performInstanceAction(getAction(IInstanceAction.START));
-	}
-
-	public boolean stop(DeltaCloudClient client) throws DeltaCloudClientException {
-		return ((InternalDeltaCloudClient) client).performInstanceAction(getAction(IInstanceAction.STOP));
-	}
-
-	public boolean destroy(DeltaCloudClient client) throws DeltaCloudClientException {
-		return ((InternalDeltaCloudClient) client).performInstanceAction(getAction(InstanceAction.DESTROY));
-	}
-
-	public boolean reboot(DeltaCloudClient client) throws DeltaCloudClientException {
-		return ((InternalDeltaCloudClient) client).performInstanceAction(getAction(IInstanceAction.REBOOT));
-	}
-
 	@Override
 	public String toString() {
 		String s = "";
@@ -234,7 +151,7 @@
 		}
 		s += "State:\t\t" + getState() + "\n";
 
-		List<InstanceAction> actions = getActions();
+		List<Action<Instance>> actions = getActions();
 		if (actions != null) {
 			for (int i = 0; i < actions.size(); i++) {
 				if (i == 0) {
Index: src/org/jboss/tools/deltacloud/core/client/request/PerformActionRequest.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/request/PerformActionRequest.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/request/PerformActionRequest.java	(revision 0)
@@ -0,0 +1,47 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core.client.request;
+
+import org.jboss.tools.deltacloud.core.client.Action;
+import org.jboss.tools.deltacloud.core.client.HttpMethod;
+import org.jboss.tools.deltacloud.core.client.utils.UrlBuilder;
+
+/**
+ * Performs an action on a resource of the deltacloud server. The typical
+ * actions are
+ * <ul>
+ * <li>START</li>
+ * <li>STOP</li>
+ * <li>DESTROY</li>
+ * <li>REBOOT</li>
+ * </ul>
+ * 
+ * @author André Dietisheim
+ * 
+ * @see Action
+ */
+public class PerformActionRequest extends AbstractDeltaCloudRequest {
+
+	public PerformActionRequest(String url, HttpMethod httpMethod) {
+		super(url, httpMethod);
+	}
+
+	@Override
+	protected String doCreateUrl(UrlBuilder urlBuilder) {
+		return urlBuilder.toString();
+	}
+
+	@Override
+	protected UrlBuilder createUrlBuilder(String baseURL) {
+		return new UrlBuilder(baseURL);
+	}
+
+}
Index: src/org/jboss/tools/deltacloud/core/client/DeltaCloudClient.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/DeltaCloudClient.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/DeltaCloudClient.java	(working copy)
@@ -12,7 +12,7 @@
 
 import java.util.List;
 
-import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl.DeltaCloudServerType;
+import org.jboss.tools.deltacloud.core.client.API.Driver;
 
 /**
  * @author Martyn Taylor
@@ -27,7 +27,7 @@
 	 * 
 	 * @see DeltaCloudServerType
 	 */
-	public DeltaCloudServerType getServerType();
+	public Driver getServerType();
 
 	/**
 	 * Returns a list of Delta Cloud Realms
@@ -134,14 +134,6 @@
 	public Key createKey(String keyname) throws DeltaCloudClientException;
 
 	/**
-	 * Deletes the key with the given name on the deltacloud server
-	 * 
-	 * @param keyname
-	 * @throws DeltaCloudClientException
-	 */
-	public void deleteKey(String keyname) throws DeltaCloudClientException;
-
-	/**
 	 * Lists all keys available on the deltacloud server this client is
 	 * connected to.
 	 * 
@@ -156,4 +148,14 @@
 	 * Throws a DeltaCloudException if it is not available.
 	 */
 	public Key listKey(String id) throws DeltaCloudClientException;
+	
+	/**
+	 * Performs the given action.
+	 *
+	 * @param action the action to execute
+	 * @return true, if successful
+	 * 
+	 * @see Action
+	 */
+	public boolean performAction(Action<?> action) throws DeltaCloudClientException;
 }
Index: src/org/jboss/tools/deltacloud/core/AllFieldMatcher.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/AllFieldMatcher.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/core/AllFieldMatcher.java	(working copy)
@@ -1,15 +0,0 @@
-package org.jboss.tools.deltacloud.core;
-
-public class AllFieldMatcher implements IFieldMatcher {
-
-	@Override
-	public boolean matches(String input) {
-		return true;
-	}
-	
-	@Override
-	public String toString() {
-		return "*"; //$NON-NLS-1$
-	}
-
-}
Index: src/org/jboss/tools/deltacloud/core/IInstanceFilter.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/IInstanceFilter.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/IInstanceFilter.java	(working copy)
@@ -16,6 +16,7 @@
  */
 public interface IInstanceFilter extends ICloudElementFilter<DeltaCloudInstance> {
 	
+	public IFieldMatcher getAliasRule();
 	public IFieldMatcher getImageIdRule();
 	public IFieldMatcher getOwnerIdRule();
 	public IFieldMatcher getKeyNameRule();
Index: src/org/jboss/tools/deltacloud/core/client/unmarshal/AbstractDOMUnmarshaller.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/unmarshal/AbstractDOMUnmarshaller.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/unmarshal/AbstractDOMUnmarshaller.java	(working copy)
@@ -19,6 +19,7 @@
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
Index: src/org/jboss/tools/deltacloud/core/StringMatcher.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/StringMatcher.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/StringMatcher.java	(revision 0)
@@ -0,0 +1,65 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core;
+
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.regex.PatternSyntaxException;
+
+/**
+ * @author Jeff Johnston
+ * @author André Dietisheim
+ */
+public class StringMatcher implements IFieldMatcher {
+
+	private String rule;
+	private Pattern pattern;
+
+	public StringMatcher(String rule) throws PatternSyntaxException {
+		this.rule = rule;
+		String regexRule = transform(rule);
+		pattern = Pattern.compile(regexRule, Pattern.CASE_INSENSITIVE);
+	}
+
+	private String transform(String rule) {
+		StringBuffer buffer = new StringBuffer();
+		for (int i = 0; i < rule.length(); ++i) {
+			char ch = rule.charAt(i);
+			if (Character.isLetterOrDigit(ch))
+				buffer.append(ch);
+			else if (ch == '*') {
+				buffer.append(".*?");
+			} else {
+				buffer.append('\\');
+				buffer.append(ch);
+			}
+		}
+		return buffer.toString();
+	}
+
+	@Override
+	public boolean matches(String input) {
+		if (input == null) {
+			return false;
+		}
+		Matcher m = pattern.matcher(input);
+		return m.matches();
+	}
+
+	@Override
+	public String toString() {
+		return rule;
+	}
+
+	public boolean isMatchesAll() {
+		return false;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/job/LoadCloudImagesJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/job/LoadCloudImagesJob.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/job/LoadCloudImagesJob.java	(revision 0)
@@ -0,0 +1,29 @@
+package org.jboss.tools.deltacloud.core.job;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+
+public class LoadCloudImagesJob extends AbstractCloudElementJob {
+
+	private DeltaCloud cloud;
+	private Runnable post = null;
+	public LoadCloudImagesJob(DeltaCloud cloud) {
+		super("Loading Cloud Images for cloud " + cloud.getName(), 
+				cloud, CLOUDELEMENT.INSTANCES);
+		this.cloud = cloud;
+	}
+	public LoadCloudImagesJob(DeltaCloud cloud, Runnable post) {
+		this(cloud);
+		this.post = post;
+	}
+
+	@Override
+	protected IStatus doRun(IProgressMonitor monitor) throws Exception {
+		cloud.loadImages();
+		if( post != null ) 
+			post.run();
+		return Status.OK_STATUS;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/IFieldMatcher.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/IFieldMatcher.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/IFieldMatcher.java	(working copy)
@@ -16,5 +16,5 @@
 public interface IFieldMatcher {
 	
 	public boolean matches(String input);
-
+	public boolean isMatchesAll();
 }
Index: src/org/jboss/tools/deltacloud/core/client/ResourceAction.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/ResourceAction.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/ResourceAction.java	(revision 0)
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core.client;
+
+
+/**
+ * @author André Dietisheim
+ */
+public interface ResourceAction<OWNER> {
+
+	public static final String DESTROY = "destroy";
+
+	public String getName();
+
+	public String getUrl();
+
+	public HttpMethod getMethod();
+	
+	public OWNER getOwner();
+
+	public boolean isDestroy();
+}
\ No newline at end of file
Index: src/org/jboss/tools/deltacloud/core/AbstractCloudElementFilter.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/AbstractCloudElementFilter.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/AbstractCloudElementFilter.java	(working copy)
@@ -15,9 +15,6 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-import java.util.regex.PatternSyntaxException;
-
-import org.eclipse.core.runtime.Assert;
 
 /**
  * @author Jeff Johnston
@@ -30,10 +27,40 @@
 	private IFieldMatcher nameRule;
 	private IFieldMatcher idRule;
 
+
 	public AbstractCloudElementFilter(DeltaCloud cloud) {
+		setRules(new AllMatcher(), new AllMatcher());
+		this.cloud = cloud;
+	}
+
+	public AbstractCloudElementFilter(String nameRule, String idRule, DeltaCloud cloud) {
+		setRules(nameRule, idRule);
+		this.cloud = cloud;
+	}
+
+	public AbstractCloudElementFilter(IFieldMatcher nameRule, IFieldMatcher idRule, DeltaCloud cloud) {
+		setRules(nameRule, idRule);
 		this.cloud = cloud;
 	}
 
+	protected Iterator<String> setRules(String rules) {
+		if (rules == null) {
+			return emptyRulesIterator();
+		}
+		Iterator<String> rulesIterator = Arrays.asList(rules.split(EXPRESSION_DELIMITER)).iterator();
+		setRules(createRule(rulesIterator), createRule(rulesIterator));
+		return rulesIterator;
+	}
+
+	private void setRules(String nameRule, String idRule) {
+		setRules(createRule(nameRule), createRule(idRule));
+	}
+
+	private void setRules(IFieldMatcher nameMatcher, IFieldMatcher idMatcher) {
+		this.nameRule = nameMatcher;
+		this.idRule = idMatcher;
+	}
+
 	public Collection<CLOUDELEMENT> filter(CLOUDELEMENT[] cloudElements) throws DeltaCloudException {
 		List<CLOUDELEMENT> filteredElements = new ArrayList<CLOUDELEMENT>();
 		for (CLOUDELEMENT cloudElement : cloudElements) {
@@ -49,37 +76,29 @@
 				&& idRule.matches(cloudElement.getId());
 	}
 
-	public abstract void setRules(String rulesString) throws PatternSyntaxException;
-
-	protected Iterator<String> setRules(String ruleString, Iterator<String> rulesIterator)
-			throws PatternSyntaxException {
-		this.nameRule = createRule(rulesIterator);
-		this.idRule = createRule(rulesIterator);
-		return rulesIterator;
-	}
-
-	protected Iterator<String> getRulesIterator(String ruleString) {
-		return Arrays.asList(ruleString.split(";")).iterator();
+	protected IFieldMatcher createRule(Iterator<String> rulesIterator) {
+		if (!rulesIterator.hasNext()) {
+			return new AllMatcher();
+		}
+		return createRule(rulesIterator.next());
 	}
 
-	protected IFieldMatcher createRule(Iterator<String> rulesIterator) {
-		Assert.isLegal(rulesIterator.hasNext());
-		String expression = rulesIterator.next();
-		if (expression.equals(ALL_MATCHER_EXPRESSION)) { 
-			return new AllFieldMatcher();
+	protected IFieldMatcher createRule(String rule) {
+		if (rule == null || rule.equals(ALL_MATCHER_EXPRESSION)) {
+			return new AllMatcher();
 		} else {
-			return new FieldMatcher(expression);
+			return new StringMatcher(rule);
 		}
 	}
 
 	protected DeltaCloud getCloud() {
 		return cloud;
 	}
-
+	
 	@Override
 	public String toString() {
-		return nameRule + ";" //$NON-NLS-1$ 
-				+ idRule + ";"; //$NON-NLS-1$
+		return nameRule + EXPRESSION_DELIMITER 
+				+ idRule + EXPRESSION_DELIMITER;
 	}
 
 	@Override
@@ -91,4 +110,14 @@
 	public IFieldMatcher getIdRule() {
 		return idRule;
 	}
+
+	protected Iterator<String> emptyRulesIterator() {
+		return new ArrayList<String>().iterator();
+	}
+
+	public boolean isFiltering() {
+		return !idRule.isMatchesAll()
+		|| !nameRule.isMatchesAll();
+	}
+
 }
Index: src/org/jboss/tools/deltacloud/core/job/InstanceActionJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/job/InstanceActionJob.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/job/InstanceActionJob.java	(working copy)
@@ -14,18 +14,18 @@
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
-import org.jboss.tools.deltacloud.core.DeltaCloudInstance.Action;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance.State;
+import org.jboss.tools.deltacloud.core.DeltaCloudResourceAction;
 
 /**
  * @author André Dietisheim
  */
 public class InstanceActionJob extends InstanceStateJob {
 
-	private Action action;
+	private DeltaCloudResourceAction action;
 
 	public InstanceActionJob(String name, DeltaCloudInstance instance, 
-			Action action, State expectedState) {
+			DeltaCloudResourceAction action, State expectedState) {
 		super(name, instance, expectedState);
 		this.action = action;
 	}
@@ -38,7 +38,7 @@
 		return Status.OK_STATUS;
 	}
 
-	protected Action getAction() {
+	protected DeltaCloudResourceAction getAction() {
 		return action;
 	}
 
Index: src/org/jboss/tools/deltacloud/core/job/DestroyCloudInstanceJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/job/DestroyCloudInstanceJob.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/job/DestroyCloudInstanceJob.java	(working copy)
@@ -15,6 +15,7 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.jobs.ISchedulingRule;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
+import org.jboss.tools.deltacloud.core.DeltaCloudResourceAction;
 
 /**
  * @author André Dietisheim
@@ -22,7 +23,7 @@
 public class DestroyCloudInstanceJob extends InstanceActionJob {
 
 	public DestroyCloudInstanceJob(String name, DeltaCloudInstance instance) {
-		super(name, instance, DeltaCloudInstance.Action.DESTROY, DeltaCloudInstance.State.TERMINATED);
+		super(name, instance, DeltaCloudResourceAction.DESTROY, DeltaCloudInstance.State.TERMINATED);
 	}
 
 	@Override
Index: src/org/jboss/tools/deltacloud/core/client/unmarshal/KeyUnmarshaller.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/unmarshal/KeyUnmarshaller.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/unmarshal/KeyUnmarshaller.java	(working copy)
@@ -14,15 +14,15 @@
 import java.io.IOException;
 import java.io.StringReader;
 
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.Key;
-import org.jboss.tools.deltacloud.core.client.KeyAction;
 import org.w3c.dom.Element;
 
 /**
  * @author André Dietisheim
  */
-public class KeyUnmarshaller extends AbstractActionAwareUnmarshaller<Key, KeyAction> {
+public class KeyUnmarshaller extends AbstractActionAwareUnmarshaller<Key> {
 
 	public KeyUnmarshaller() {
 		super("key", Key.class, "link");
@@ -68,9 +68,9 @@
 	}
 
 	@Override
-	protected KeyAction unmarshallAction(Element element) throws DeltaCloudClientException {
-		KeyAction keyAction = new KeyAction();
-		new KeyActionUnmarshaller().unmarshall(element, keyAction);
+	protected Action<Key> unmarshallAction(Element element) throws DeltaCloudClientException {
+		Action<Key> keyAction = new Action<Key>();
+		new ActionUnmarshaller<Key>().unmarshall(element, keyAction);
 		return keyAction;
 	}
 }
Index: src/org/jboss/tools/deltacloud/core/client/unmarshal/ActionUnmarshaller.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/unmarshal/ActionUnmarshaller.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/unmarshal/ActionUnmarshaller.java	(revision 0)
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core.client.unmarshal;
+
+import org.jboss.tools.deltacloud.core.client.Action;
+import org.w3c.dom.Element;
+
+/**
+ * @author André Dietisheim
+ */
+public class ActionUnmarshaller<OWNER> extends AbstractDOMUnmarshaller<Action<OWNER>> {
+
+	@SuppressWarnings({ "unchecked", "rawtypes" })
+	public ActionUnmarshaller() {
+		super("link", (Class) Action.class);
+	}
+
+	@Override
+	protected Action<OWNER> doUnmarshall(Element element, Action<OWNER> action) throws Exception {
+		if (element != null) {
+			action.setMethod(getAttributeText("method", element));
+			action.setName(getAttributeText("rel", element));
+			action.setUrl(getAttributeText("href", element));
+		}
+		return action;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/client/ActionAware.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/ActionAware.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/ActionAware.java	(revision 0)
@@ -0,0 +1,84 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat Inc..
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat Incorporated - initial API and implementation
+ *******************************************************************************/
+package org.jboss.tools.deltacloud.core.client;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author Martyn Taylor
+ * @author André Dietisheim
+ */
+public abstract class ActionAware<OWNER> extends IdAware {
+
+	private List<Action<OWNER>> actions;
+
+	public Action<OWNER> getAction(String name) {
+		if (name == null) {
+			return null;
+		}
+
+		for (Action<OWNER> action : getActions()) {
+			if (name.equals(action.getName())) {
+				return action;
+			}
+		}
+		return null;
+	}
+
+	public List<String> getActionNames() {
+		ArrayList<String> names = new ArrayList<String>();
+		for (Action<OWNER> action : getActions()) {
+			names.add(action.getName());
+		}
+		return names;
+	}
+
+	public boolean start(DeltaCloudClient client) throws DeltaCloudClientException {
+		return client.performAction(getAction(Action.START_NAME));
+	}
+
+	public boolean stop(DeltaCloudClient client) throws DeltaCloudClientException {
+		return client.performAction(getAction(Action.STOP_NAME));
+	}
+
+	public boolean destroy(DeltaCloudClient client) throws DeltaCloudClientException {
+		return client.performAction(getAction(Action.DESTROY_NAME));
+	}
+
+	public boolean reboot(DeltaCloudClient client) throws DeltaCloudClientException {
+		return client.performAction(getAction(Action.REBOOT_NAME));
+	}
+
+	public boolean canStart() {
+		return getAction(Action.START_NAME) != null;
+	}
+
+	public boolean canStop() {
+		return getAction(Action.STOP_NAME) != null;
+	}
+
+	public boolean canReboot() {
+		return getAction(Action.REBOOT_NAME) != null;
+	}
+
+	public boolean canDestroy() {
+		return getAction(Action.DESTROY_NAME) != null;
+	}
+
+	public void setActions(List<Action<OWNER>> actions) {
+		this.actions = actions;
+	}
+
+	public List<Action<OWNER>> getActions() {
+		return actions;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/client/HardwareProfile.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/HardwareProfile.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/HardwareProfile.java	(working copy)
@@ -19,7 +19,7 @@
  * @author Martyn Taylor
  * @author André Dietisheim
  */
-public class HardwareProfile extends AbstractDeltaCloudObject {
+public class HardwareProfile extends IdAware {
 	private static final long serialVersionUID = 1L;
 
 	private List<Property> properties;
Index: src/org/jboss/tools/deltacloud/core/job/RefreshCloudJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/job/RefreshCloudJob.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/job/RefreshCloudJob.java	(revision 0)
@@ -0,0 +1,25 @@
+package org.jboss.tools.deltacloud.core.job;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.jboss.tools.deltacloud.core.Activator;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.deltacloud.core.DeltaCloudMultiException;
+
+public class RefreshCloudJob extends AbstractCloudJob {
+
+	public RefreshCloudJob(DeltaCloud cloud) {
+		super("Refreshing images and instances on " + cloud.getName(), cloud);
+	}
+
+	protected IStatus doRun(IProgressMonitor monitor) throws Exception {
+		try {
+			getCloud().loadChildren();
+		} catch (DeltaCloudMultiException e) {
+			return Activator.createMultiStatus(e);
+		}
+		return Status.OK_STATUS;
+	}
+
+}
Index: src/org/jboss/tools/deltacloud/core/DeltaCloudDriver.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/DeltaCloudDriver.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/DeltaCloudDriver.java	(revision 0)
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core;
+
+import org.jboss.tools.deltacloud.core.client.API.Driver;
+
+
+/**
+ * @author André Dietisheim
+ */
+public enum DeltaCloudDriver {
+
+	MOCK(Driver.MOCK), EC2(Driver.EC2), UNKNOWN(Driver.UNKNOWN);
+
+	private Driver driver;
+
+	private DeltaCloudDriver(Driver driver) {
+		this.driver = driver;
+	}
+	
+	public static DeltaCloudDriver valueOf(Driver driver) {
+		for(DeltaCloudDriver deltaCloudDriver : values()) {
+			if (deltaCloudDriver.driver.equals(driver)) {
+				return deltaCloudDriver;
+			}
+		}
+		return UNKNOWN;
+	}
+
+	public static DeltaCloudDriver checkedValueOf(String name) {
+		for (DeltaCloudDriver driver : values()) {
+			if (driver.name().equals(name)) {
+				return driver;
+			}
+		}
+		return UNKNOWN;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/DeltaCloudKey.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/DeltaCloudKey.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/DeltaCloudKey.java	(working copy)
@@ -17,6 +17,7 @@
  */
 public class DeltaCloudKey extends AbstractDeltaCloudElement {
 
+	
 	private Key key;
 
 	public DeltaCloudKey(Key key, DeltaCloud cloud) {
@@ -41,10 +42,13 @@
 	public String getPem() {
 		return key.getPem();
 	}
-
+	
 	@Override
 	public String toString() {
 		return "DeltaCloudKey [key=" + key + "]";
 	}
 
+	protected Key getKey() {
+		return key;
+	}
 }
Index: src/org/jboss/tools/deltacloud/core/client/Key.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/Key.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/Key.java	(working copy)
@@ -16,7 +16,7 @@
 /**
  * @author Andre Dietisheim
  */
-public class Key extends AbstractDeltaCloudActionAwareObject<KeyAction> {
+public class Key extends StateAware<Key> {
 
 	private static final long serialVersionUID = 1L;
 
@@ -44,10 +44,6 @@
 		this.fingerprint = fingerprint;
 	}
 
-	public void setState(String state) {
-		this.state = state;
-	}
-
 	public URL getUrl() {
 		return url;
 	}
@@ -60,10 +56,6 @@
 		return pem;
 	}
 
-	public String getState() {
-		return state;
-	}
-
 	@Override
 	public String toString() {
 		return "Key [url=" + url + ", pem=" + pem + ", fingerprint=" + fingerprint + ", state=" + state + ", actions="
Index: src/org/jboss/tools/deltacloud/core/client/StateAware.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/StateAware.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/StateAware.java	(revision 0)
@@ -0,0 +1,46 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core.client;
+
+
+/**
+ * @author André Dietisheim
+ *
+ * @param <OWNER>
+ */
+public class StateAware<OWNER> extends ActionAware<OWNER> {
+
+	public static enum State {
+		RUNNING, STOPPED, PENDING, TERMINATED, BOGUS
+	};
+
+	private State state;
+
+	public void setState(String state) {
+		try {
+			this.state = State.valueOf(state);
+		} catch (Exception e) {
+			this.state = State.BOGUS;
+		}
+	}
+
+	public State getState() {
+		return state;
+	}
+
+	public boolean isRunning() {
+		return getState() == State.RUNNING;
+	}
+
+	public boolean isStopped() {
+		return getState() == State.STOPPED;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/AllMatcher.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/AllMatcher.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/AllMatcher.java	(revision 0)
@@ -0,0 +1,32 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core;
+
+/**
+ * @author Jeff Johnston
+ * @author André Dietisheim
+ */
+public class AllMatcher implements IFieldMatcher {
+
+	@Override
+	public boolean matches(String input) {
+		return true;
+	}
+	
+	@Override
+	public String toString() {
+		return ICloudElementFilter.ALL_MATCHER_EXPRESSION;
+	}
+
+	public boolean isMatchesAll() {
+		return true;
+	}
+}
Index: pom.xml
===================================================================
--- pom.xml	(revision 29286)
+++ pom.xml	(working copy)
@@ -1,13 +1,13 @@
-<project
- xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 	<modelVersion>4.0.0</modelVersion> 
 	<parent>
 	  <groupId>org.jboss.tools</groupId>
 	  <artifactId>org.jboss.tools.parent.pom</artifactId>
-	  <version>0.0.1-SNAPSHOT</version>
+	  <version>0.0.2-SNAPSHOT</version>
 	</parent>
 	<groupId>org.jboss.tools.deltacloud</groupId>
 	<artifactId>org.jboss.tools.deltacloud.core</artifactId> 
 	<version>0.1.0-SNAPSHOT</version>
 	<packaging>eclipse-plugin</packaging>
-</project>
+</project>
\ No newline at end of file
Index: src/org/jboss/tools/deltacloud/core/AllInstanceFilter.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/AllInstanceFilter.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/core/AllInstanceFilter.java	(working copy)
@@ -1,70 +0,0 @@
-package org.jboss.tools.deltacloud.core;
-
-/**
- * A filter for instances that matches on all elements (no criteria checked)
- * 
- * @see IInstanceFilter
- * @see DeltaCloud#getInstanceFilter()
- * 
- * @author Jeff Johnston
- * @author André Dietisheim
- */
-public class AllInstanceFilter extends AbstractCloudElementFilter<DeltaCloudInstance> implements IInstanceFilter {
-
-	public AllInstanceFilter(DeltaCloud cloud) {
-		super(cloud);
-	}
-
-	private IFieldMatcher matcher = new AllFieldMatcher();
-
-	@Override
-	public boolean matches(DeltaCloudInstance instance) {
-		return true;
-	}
-
-	@Override
-	public void setRules(String ruleString) {
-		// ignore, never set the rules for this filter
-	}
-
-	
-	@Override
-	public IFieldMatcher getNameRule() {
-		return matcher;
-	}
-
-	@Override
-	public IFieldMatcher getIdRule() {
-		return matcher;
-	}
-
-	@Override
-	public IFieldMatcher getImageIdRule() {
-		return matcher;
-	}
-
-	@Override
-	public IFieldMatcher getKeyNameRule() {
-		return matcher;
-	}
-
-	@Override
-	public IFieldMatcher getOwnerIdRule() {
-		return matcher;
-	}
-
-	@Override
-	public IFieldMatcher getProfileRule() {
-		return matcher;
-	}
-
-	@Override
-	public IFieldMatcher getRealmRule() {
-		return matcher;
-	}
-
-	@Override
-	public String toString() {
-		return ALL_STRING;
-	}
-}
Index: src/org/jboss/tools/deltacloud/core/DeltaCloudXMLBuilder.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/DeltaCloudXMLBuilder.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/DeltaCloudXMLBuilder.java	(working copy)
@@ -29,6 +29,8 @@
 	public static final String ATTR_INSTANCEFILTER = "instancefilter";
 	public static final String ATTR_LASTKEYNAME = "lastkeyname";
 	public static final String ATTR_LASTIMAGE = "lastimage";
+	public static final String ATTR_LASTPROFILE = "lastprofile";
+	public static final String ATTR_LASTREALM = "lastrealm";
 	
 	public static final void xmlHeader(PrintWriter printWriter) {
 		printWriter.print("<?xml version=\"1.0\" encoding=\"");
Index: src/org/jboss/tools/deltacloud/core/client/Property.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/Property.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/Property.java	(working copy)
@@ -15,7 +15,7 @@
 /**
  * @author Martyn Taylor
  */
-public class Property extends AbstractDeltaCloudObject {
+public class Property extends IdAware {
 
 	private static final long serialVersionUID = 1L;
 
Index: src/org/jboss/tools/deltacloud/core/DeltaCloud.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/DeltaCloud.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/DeltaCloud.java	(working copy)
@@ -15,18 +15,18 @@
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
-import java.util.regex.PatternSyntaxException;
 
 import org.eclipse.core.runtime.IProgressMonitor;
+import org.jboss.tools.deltacloud.core.DeltaCloudInstance.State;
+import org.jboss.tools.deltacloud.core.client.API.Driver;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudAuthClientException;
+import org.jboss.tools.deltacloud.core.client.DeltaCloudClient;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl;
-import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl.DeltaCloudServerType;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudNotFoundClientException;
 import org.jboss.tools.deltacloud.core.client.HardwareProfile;
 import org.jboss.tools.deltacloud.core.client.Image;
 import org.jboss.tools.deltacloud.core.client.Instance;
-import org.jboss.tools.deltacloud.core.client.InternalDeltaCloudClient;
 import org.jboss.tools.deltacloud.core.client.Key;
 import org.jboss.tools.deltacloud.core.client.Realm;
 import org.jboss.tools.internal.deltacloud.core.observable.ObservablePojo;
@@ -37,6 +37,8 @@
  */
 public class DeltaCloud extends ObservablePojo {
 
+	private static final int WAIT_FOR_STATE_DELAY = 4000;
+
 	public static final String PROP_INSTANCES = "instances";
 	public static final String PROP_INSTANCES_REMOVED = "instancesRemoved";
 	public static final String PROP_IMAGES = "images";
@@ -45,13 +47,15 @@
 	private String name;
 	private String username;
 	private String url;
-	private Driver driver;
+	private DeltaCloudDriver driver;
 	private String lastKeyname = "";
 	private String lastImageId = "";
-
-	private InternalDeltaCloudClient client;
+	private String lastRealmName = "";
+	private String lastProfileId = "";
+	
+	private DeltaCloudClient client;
 
-	private DeltaCloudImagesRepository images;
+	private DeltaCloudImagesRepository imagesRepo;
 	private DeltaCloudInstancesRepository instanceRepo;
 
 	private IImageFilter imageFilter;
@@ -60,26 +64,22 @@
 	private SecurePasswordStore passwordStore;
 	private Collection<IInstanceAliasMapping> instanceAliasMappings;
 
-	public static interface IInstanceStateMatcher {
-		public boolean matchesState(DeltaCloudInstance instance, DeltaCloudInstance.State instanceState);
-	}
-
 	public DeltaCloud(String name, String url, String username, String passwd) throws DeltaCloudException {
 		this(name, url, username, passwd, null);
 	}
 
-	public DeltaCloud(String name, String url, String username, String password, Driver driver)
+	public DeltaCloud(String name, String url, String username, String password, DeltaCloudDriver driver)
 			throws DeltaCloudException {
-		this(name, url, username, password, driver, IImageFilter.ALL_STRING, IInstanceFilter.ALL_STRING, new ArrayList<IInstanceAliasMapping>());
+		this(name, url, username, password, driver, null, null, new ArrayList<IInstanceAliasMapping>());
 	}
 
-	public DeltaCloud(String name, String url, String username, Driver driver, String imageFilterRules,
+	public DeltaCloud(String name, String url, String username, DeltaCloudDriver driver, String imageFilterRules,
 			String instanceFilterRules, Collection<IInstanceAliasMapping> instanceAliasMappings)
 			throws DeltaCloudException {
 		this(name, url, username, null, driver, imageFilterRules, instanceFilterRules, instanceAliasMappings);
 	}
 
-	public DeltaCloud(String name, String url, String username, String password, Driver driver,
+	public DeltaCloud(String name, String url, String username, String password, DeltaCloudDriver driver,
 			String imageFilterRules, String instanceFilterRules, Collection<IInstanceAliasMapping> instanceAliasMappings)
 			throws DeltaCloudException {
 		this.url = url;
@@ -88,29 +88,28 @@
 		this.driver = driver;
 		this.passwordStore = createSecurePasswordStore(name, username, password);
 		this.client = createClient(url, username, passwordStore.getPassword());
-		this.imageFilter = createImageFilter(imageFilterRules);
-		this.instanceFilter = createInstanceFilter(instanceFilterRules);
+		this.imageFilter = new ImageFilter(imageFilterRules, this);
+		this.instanceFilter = new InstanceFilter(instanceFilterRules, this);
 		this.instanceAliasMappings = instanceAliasMappings;
 	}
 
-	public void update(String name, String url, String username, String password, Driver driver)
+	public void update(String name, String url, String username, String password, DeltaCloudDriver driver)
 			throws DeltaCloudException {
 		this.driver = driver;
 
-		boolean nameChanged = updateName(name);
+		boolean nameChanged = updateName(name); 
 		boolean connectionPropertiesChanged = updateConnectionProperties(url, username, password);
 
-		if (connectionPropertiesChanged) {
-			client = createClient(url, username, password);
-			loadChildren();
-		}
-
 		if (nameChanged || connectionPropertiesChanged) {
 			this.passwordStore.update(new DeltaCloudPasswordStorageKey(name, username), password);
 			// TODO: move to notification based approach
 			DeltaCloudManager.getDefault().saveClouds();
 		}
 
+		if (connectionPropertiesChanged) {
+			client = createClient(url, username, password);
+			loadChildren();
+		}
 	}
 
 	private boolean updateName(String name) {
@@ -149,7 +148,7 @@
 		return new SecurePasswordStore(new DeltaCloudPasswordStorageKey(name, username), password);
 	}
 
-	protected InternalDeltaCloudClient createClient(String url, String username, String password)
+	protected DeltaCloudClient createClient(String url, String username, String password)
 			throws DeltaCloudException {
 		try {
 			return new DeltaCloudClientImpl(url, username, password);
@@ -174,13 +173,13 @@
 		return passwordStore.getPassword();
 	}
 
-	public Driver getDriver() {
+	public DeltaCloudDriver getDriver() {
 		return driver;
 	}
 
 	public boolean isValid() {
 		return driver != null
-				&& driver != Driver.UNKNOWN;
+				&& driver != DeltaCloudDriver.UNKNOWN;
 	}
 
 	public String getLastImageId() {
@@ -195,6 +194,22 @@
 		this.lastImageId = lastImageId;
 	}
 
+	public void setLastRealmName(String lastRealmName) {
+		this.lastRealmName = lastRealmName;
+	}
+
+	public String getLastRealmName() {
+		return lastRealmName;
+	}
+
+	public void setLastProfileId(String lastProfileId) {
+		this.lastProfileId = lastProfileId;
+	}
+
+	public String getLastProfileId() {
+		return lastProfileId;
+	}
+
 	private void setName(String name) {
 		firePropertyChange(PROP_NAME, this.name, this.name = name);
 	}
@@ -211,62 +226,27 @@
 		return instanceFilter;
 	}
 
-	public void updateInstanceFilter(String ruleString) throws Exception {
-		String rules = getInstanceFilter().toString();
-		instanceFilter = createInstanceFilter(ruleString);
-		if (!rules.equals(ruleString)) {
-			// TODO: remove notification with all instanceRepo, replace by
-			// notifying the changed instance
-			firePropertyChange(
+	public void updateInstanceFilter(String nameRule, String idRule, String aliasRule, String imageIdRule,
+			String ownerIdRule, String keyNameRule, String realmRule, String profileRule) throws Exception {
+		instanceFilter =
+				new InstanceFilter(nameRule, idRule, aliasRule, imageIdRule, ownerIdRule, keyNameRule, realmRule,
+						profileRule, this);
+		firePropertyChange(
 					PROP_INSTANCES, getInstancesRepository().get(), getInstancesRepository().get());
-			DeltaCloudManager.getDefault().saveClouds();
-		}
-	}
-
-	private IInstanceFilter createInstanceFilter(String ruleString) {
-		IInstanceFilter instanceFilter = null;
-		if (IInstanceFilter.ALL_STRING.equals(ruleString)) {
-			instanceFilter = new AllInstanceFilter(this);
-		} else {
-			try {
-				instanceFilter = new InstanceFilter(this);
-				instanceFilter.setRules(ruleString);
-			} catch (PatternSyntaxException e) {
-				instanceFilter.setRules(IInstanceFilter.ALL_STRING);
-			}
-		}
-		return instanceFilter;
+		DeltaCloudManager.getDefault().saveClouds();
 	}
 
 	public IImageFilter getImageFilter() {
 		return imageFilter;
 	}
 
-	public void updateImageFilter(String ruleString) throws Exception {
-		String rules = getImageFilter().toString();
-		this.imageFilter = createImageFilter(ruleString);
-		if (!rules.equals(ruleString)) {
-			// TODO: remove notification with all instanceRepo, replace by
-			// notifying the changed instance
-			firePropertyChange(PROP_IMAGES, getImagesRepository().get(), getImagesRepository().get());
-			// TODO: move to notification based approach
-			DeltaCloudManager.getDefault().saveClouds();
-		}
-	}
-
-	private IImageFilter createImageFilter(String ruleString) {
-		IImageFilter imageFilter = null;
-		if (IImageFilter.ALL_STRING.equals(ruleString)) {
-			imageFilter = new AllImageFilter(this);
-		} else {
-			try {
-				imageFilter = new ImageFilter(this);
-				imageFilter.setRules(ruleString);
-			} catch (PatternSyntaxException e) {
-				imageFilter.setRules(IImageFilter.ALL_STRING);
-			}
-		}
-		return imageFilter;
+	public void updateImageFilter(String nameRule, String idRule, String archRule, String descRule) throws Exception {
+		this.imageFilter = new ImageFilter(nameRule, idRule, archRule, descRule, this);
+		// TODO: remove notification with all instanceRepo, replace by
+		// notifying the changed instance
+		firePropertyChange(PROP_IMAGES, getImagesRepository().get(), getImagesRepository().get());
+		// TODO: move to notification based approach
+		DeltaCloudManager.getDefault().saveClouds();
 	}
 
 	/**
@@ -297,30 +277,18 @@
 		}
 	}
 
-	public DeltaCloudInstance waitForState(String instanceId, final DeltaCloudInstance.State expectedState,
+	public DeltaCloudInstance waitForState(String instanceId, DeltaCloudInstance.State expectedState,
 			IProgressMonitor pm)
 			throws InterruptedException, DeltaCloudException {
-		IInstanceStateMatcher stateMatcher = new IInstanceStateMatcher() {
-
-			@Override
-			public boolean matchesState(DeltaCloudInstance instance, DeltaCloudInstance.State instanceState) {
-				return expectedState != null
-						&& expectedState.equals(instanceState);
-			}
-		};
-		return waitForState(instanceId, stateMatcher, pm);
-	}
-
-	public DeltaCloudInstance waitForState(String instanceId, IInstanceStateMatcher stateMatcher, IProgressMonitor pm)
-			throws InterruptedException, DeltaCloudException {
 		DeltaCloudInstance instance = getInstancesRepository().getById(instanceId);
 		if (instance != null) {
 			while (!pm.isCanceled()) {
-				if (stateMatcher.matchesState(instance, instance.getState())
-						|| instance.getState().equals(DeltaCloudInstance.State.TERMINATED)) {
+				State state = instance.getState();
+				if (state == expectedState
+						|| instance.isInState(DeltaCloudInstance.State.TERMINATED)) {
 					return instance;
 				}
-				Thread.sleep(400);
+				Thread.sleep(WAIT_FOR_STATE_DELAY);
 				instance = refreshInstance(instance);
 			}
 		}
@@ -350,18 +318,26 @@
 			firePropertyChange(PROP_INSTANCES, oldInstances, repo.get());
 		} catch (DeltaCloudClientException e) {
 			throw new DeltaCloudException(MessageFormat.format(
-					"Could not load instanceRepo of cloud {0}: {1}", getName(), e.getMessage()), e);
+					"Could not load instances of cloud {0}: {1}", getName(), e.getMessage()), e);
 		}
 	}
 
 	private void clearImages() {
-		if (images != null) {
+		if (imagesRepo != null) {
 			// TODO: remove notification with all instanceRepo, replace by
 			// notifying the changed instance
-			firePropertyChange(PROP_IMAGES, images.get(), images.clear());
+			firePropertyChange(PROP_IMAGES, imagesRepo.get(), imagesRepo.clear());
 		}
 	}
 
+	public boolean imagesLoaded() {
+		return imagesRepo == null ? false : true;
+	}
+
+	public boolean instancesLoaded() {
+		return instanceRepo == null ? false : true;
+	}
+
 	private void clearInstances() {
 		// TODO: remove notification with all instanceRepo, replace by
 		// notifying the changed instance
@@ -389,17 +365,17 @@
 	}
 
 	private DeltaCloudImagesRepository getImagesRepository() {
-		if (images == null) {
-			images = new DeltaCloudImagesRepository();
+		if (imagesRepo == null) {
+			imagesRepo = new DeltaCloudImagesRepository();
 		}
-		return images;
+		return imagesRepo;
 	}
 
 	public DeltaCloudImage[] getImages() throws DeltaCloudException {
-		if (images == null) {
+		if (imagesRepo == null) {
 			loadImages();
 		}
-		return images.get();
+		return imagesRepo.get();
 	}
 
 	/**
@@ -417,7 +393,7 @@
 			try {
 				Image image = client.listImages(id);
 				deltaCloudImage = DeltaCloudImageFactory.create(image, this);
-				images.add(deltaCloudImage);
+				imagesRepo.add(deltaCloudImage);
 			} catch (DeltaCloudClientException e) {
 				throw new DeltaCloudException(MessageFormat.format("Cloud not find image with id \"{0}\"", id), e);
 			}
@@ -462,11 +438,12 @@
 		}
 	}
 
-	public void deleteKey(String keyname) throws DeltaCloudException {
+	public boolean delete(DeltaCloudKey deltaCloudKey) throws DeltaCloudException {
+		Key key = deltaCloudKey.getKey();
 		try {
-			client.deleteKey(keyname);
+			return key.destroy(client);
 		} catch (DeltaCloudClientException e) {
-			throw new DeltaCloudException(e);
+			throw new DeltaCloudException(MessageFormat.format("Could not delete key \"{0}\"", key.getId()), e);
 		}
 	}
 
@@ -479,17 +456,17 @@
 			return deltaCloudInstance;
 		} catch (DeltaCloudClientException e) {
 			// TODO : internationalize strings
-			throw new DeltaCloudException(MessageFormat.format("Coud not refresh instance \"{0}\"",
+			throw new DeltaCloudException(MessageFormat.format("Could not refresh instance \"{0}\"",
 					deltaCloudInstance.getId()), e);
 		}
 	}
 
-	public boolean performInstanceAction(String instanceId, DeltaCloudInstance.Action action)
+	public boolean performInstanceAction(String instanceId, DeltaCloudResourceAction action)
 			throws DeltaCloudException {
-		return performInstanceAction(getInstancesRepository().getById(instanceId), action);
+		return performAction(getInstancesRepository().getById(instanceId), action);
 	}
 
-	protected boolean performInstanceAction(DeltaCloudInstance instance, DeltaCloudInstance.Action action)
+	protected boolean performAction(DeltaCloudInstance instance, DeltaCloudResourceAction action)
 			throws DeltaCloudException {
 		try {
 			if (instance == null) {
@@ -497,9 +474,9 @@
 			}
 			DeltaCloudInstancesRepository repo = getInstancesRepository();
 			DeltaCloudInstance[] instances = repo.get();
-			boolean result = instance.performInstanceAction(action, client);
+			boolean result = instance.performAction(action, client);
 			if (result) {
-				if (DeltaCloudInstance.Action.DESTROY.equals(action)) {
+				if (DeltaCloudResourceAction.DESTROY.equals(action)) {
 					repo.remove(instance);
 					firePropertyChange(PROP_INSTANCES_REMOVED, null, instance);
 				}
@@ -604,10 +581,10 @@
 		return name;
 	}
 
-	public static Driver getServerDriver(String url) throws DeltaCloudException {
+	public static DeltaCloudDriver getServerDriver(String url) throws DeltaCloudException {
 		try {
-			DeltaCloudServerType serverType = new DeltaCloudClientImpl(url).getServerType();
-			return Driver.valueOf(serverType);
+			Driver driver = new DeltaCloudClientImpl(url).getServerType();
+			return DeltaCloudDriver.valueOf(driver);
 		} catch (Exception e) {
 			// TODO internationalize strings
 			throw new DeltaCloudException(
Index: src/org/jboss/tools/deltacloud/core/client/API.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/API.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/API.java	(revision 0)
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat Inc..
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat Incorporated - initial API and implementation
+ *******************************************************************************/
+package org.jboss.tools.deltacloud.core.client;
+
+/**
+ * @author Andre Dietisheim
+ */
+public class API extends IdAware {
+
+	private static final long serialVersionUID = 1L;
+
+	public static enum Driver {
+		UNKNOWN, MOCK, EC2;
+
+		public static Driver checkedValueOf(String name) {
+			for (Driver driver : values()) {
+				if (driver.name().equals(name)) {
+					return driver;
+				}
+			}
+			return UNKNOWN;
+		}
+
+	}
+
+	private Driver driver;
+
+	public API() {
+	}
+
+	public void setDriver(Driver driver) {
+		this.driver = driver;
+	}
+
+	public void setDriver(String driver) {
+		setDriver(Driver.checkedValueOf(driver.toUpperCase()));
+	}
+
+	public Driver getDriver() {
+		return driver;
+	}
+
+	@Override
+	public String toString() {
+		return "API [driver=" + driver.name() + super.toString() + "]";
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/InstanceFilter.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/InstanceFilter.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/InstanceFilter.java	(working copy)
@@ -11,7 +11,6 @@
 package org.jboss.tools.deltacloud.core;
 
 import java.util.Iterator;
-import java.util.regex.PatternSyntaxException;
 
 /**
  * A filter that may be applied on DeltaCloudInstances
@@ -23,44 +22,80 @@
  */
 public class InstanceFilter extends AbstractCloudElementFilter<DeltaCloudInstance> implements IInstanceFilter {
 
+	private IFieldMatcher aliasRule;
 	private IFieldMatcher imageIdRule;
-	private IFieldMatcher realmRule;
-	private IFieldMatcher profileRule;
 	private IFieldMatcher ownerIdRule;
 	private IFieldMatcher keyNameRule;
+	private IFieldMatcher realmRule;
+	private IFieldMatcher profileRule;
 
 	public InstanceFilter(DeltaCloud cloud) {
+		this(new AllMatcher(), new AllMatcher(), new AllMatcher(), new AllMatcher(), new AllMatcher(),
+				new AllMatcher(), new AllMatcher(), new AllMatcher(), cloud);
+	}
+
+	public InstanceFilter(IFieldMatcher nameMatcher, IFieldMatcher idMatcher, IFieldMatcher aliasMatcher,
+			IFieldMatcher imageIdMatcher, IFieldMatcher ownerIdMatcher, IFieldMatcher keyMatcher,
+			IFieldMatcher realmMatcher, IFieldMatcher profileMatcher, DeltaCloud cloud) {
+		super(nameMatcher, idMatcher, cloud);
+		setRules(aliasMatcher, imageIdMatcher, ownerIdMatcher, keyMatcher, realmMatcher, profileMatcher);
+	}
+
+	public InstanceFilter(String rulesString, DeltaCloud cloud) {
 		super(cloud);
+		setRules(rulesString);
+	}
+
+	public InstanceFilter(String nameRule, String idRule, String aliasRule, String imageIdRule,
+			String ownerIdRule, String keyNameRule, String realmRule, String profileRule, DeltaCloud cloud) {
+		super(nameRule, idRule, cloud);
+		setRules(aliasRule, imageIdRule, ownerIdRule, keyNameRule, realmRule, profileRule);
 	}
-	
+
 	@Override
-	public boolean matches(DeltaCloudInstance instance) {
-		return super.matches(instance) &&
-		imageIdRule.matches(instance.getImageId()) &&
-		ownerIdRule.matches(instance.getOwnerId()) &&
-		keyNameRule.matches(instance.getKeyId()) &&
-		realmRule.matches(instance.getRealmId()) &&
-		profileRule.matches(instance.getProfileId());
+	protected Iterator<String> setRules(String rules) {
+		Iterator<String> rulesIterator = super.setRules(rules);
+		setRules(createRule(rulesIterator), createRule(rulesIterator), createRule(rulesIterator),
+				createRule(rulesIterator), createRule(rulesIterator), createRule(rulesIterator));
+		return rulesIterator;
+	}
+
+	private void setRules(String aliasRule, String imageIdRule, String ownerIdRule, String keyNameRule,
+			String realmRule, String profileRule) {
+		setRules(createRule(aliasRule), createRule(imageIdRule), createRule(ownerIdRule), createRule(keyNameRule),
+				createRule(realmRule), createRule(profileRule));
+	}
+
+	private void setRules(IFieldMatcher aliasMatcher, IFieldMatcher imageIdMatcher, IFieldMatcher ownerIdMatcher,
+			IFieldMatcher keyNameMatcher, IFieldMatcher realmMatcher, IFieldMatcher profileMatcher) {
+		this.aliasRule = aliasMatcher;
+		this.imageIdRule = imageIdMatcher;
+		this.keyNameRule = keyNameMatcher;
+		this.ownerIdRule = ownerIdMatcher;
+		this.realmRule = realmMatcher;
+		this.profileRule = profileMatcher;
 	}
 
 	@Override
-	public void setRules(String ruleString) throws PatternSyntaxException {
-		Iterator<String> rulesIterator = super.setRules(ruleString, getRulesIterator(ruleString));
-		this.imageIdRule = createRule(rulesIterator);
-		this.ownerIdRule = createRule(rulesIterator);
-		this.keyNameRule = createRule(rulesIterator);
-		this.realmRule = createRule(rulesIterator);
-		this.profileRule = createRule(rulesIterator);
+	public boolean matches(DeltaCloudInstance instance) {
+		return super.matches(instance) &&
+				aliasRule.matches(instance.getAlias()) &&
+				imageIdRule.matches(instance.getImageId()) &&
+				ownerIdRule.matches(instance.getOwnerId()) &&
+				keyNameRule.matches(instance.getKeyId()) &&
+				realmRule.matches(instance.getRealmId()) &&
+				profileRule.matches(instance.getProfileId());
 	}
-	
+
 	@Override
 	public String toString() {
 		return super.toString()
-		+ imageIdRule + ";" //$NON-NLS-1$
-		+ ownerIdRule + ";" //$NON-NLS-1$
-		+ keyNameRule + ";" //$NON-NLS-1$
-		+ realmRule + ";" //$NON-NLS-1$
-		+ profileRule; //$NON-NLS-1$
+				+ aliasRule + EXPRESSION_DELIMITER
+				+ imageIdRule + EXPRESSION_DELIMITER
+				+ ownerIdRule + EXPRESSION_DELIMITER
+				+ keyNameRule + EXPRESSION_DELIMITER
+				+ realmRule + EXPRESSION_DELIMITER
+				+ profileRule; //$NON-NLS-1$
 	}
 
 	@Override
@@ -69,6 +104,11 @@
 	}
 
 	@Override
+	public IFieldMatcher getAliasRule() {
+		return aliasRule;
+	}
+
+	@Override
 	public IFieldMatcher getKeyNameRule() {
 		return keyNameRule;
 	}
@@ -87,4 +127,14 @@
 	public IFieldMatcher getRealmRule() {
 		return realmRule;
 	}
+
+	public boolean isFiltering() {
+		return super.isFiltering()
+				|| !aliasRule.isMatchesAll()
+				|| !imageIdRule.isMatchesAll()
+				|| !keyNameRule.isMatchesAll()
+				|| !ownerIdRule.isMatchesAll()
+				|| !profileRule.isMatchesAll()
+				|| !realmRule.isMatchesAll();
+	}
 }
Index: src/org/jboss/tools/deltacloud/core/DeltaCloudManager.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/DeltaCloudManager.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/DeltaCloudManager.java	(working copy)
@@ -103,16 +103,20 @@
 			String username = URLEncoder.encode(
 					attrs.getNamedItem(DeltaCloudXMLBuilder.ATTR_USERNAME).getNodeValue(),
 					DeltaCloudXMLBuilder.ENCODING); // $NON-NLS-1$
-			Driver driver = Driver.checkedValueOf(attrs.getNamedItem(DeltaCloudXMLBuilder.ATTR_TYPE).getNodeValue()); // $NON-NLS-1$
+			DeltaCloudDriver driver = DeltaCloudDriver.checkedValueOf(attrs.getNamedItem(DeltaCloudXMLBuilder.ATTR_TYPE).getNodeValue()); // $NON-NLS-1$
 			String imageFilterRules = getImageFilterRules(attrs.getNamedItem("imagefilter")); // $NON-NLS-1$
-			String instanceFilterRules = getInstanceFilterRules(attrs.getNamedItem("instancefilter")); // $NON-NLS-1$
+			String instanceFilterRules = getNodeValue(attrs.getNamedItem("instancefilter")); // $NON-NLS-1$
 			String lastKeyName = getNodeValue(attrs.getNamedItem(DeltaCloudXMLBuilder.ATTR_LASTKEYNAME)); // $NON-NLS-1$
 			String lastImageId = getNodeValue(attrs.getNamedItem(DeltaCloudXMLBuilder.ATTR_LASTIMAGE)); // $NON-NLS-1$
+			String lastRealmName = getNodeValue(attrs.getNamedItem(DeltaCloudXMLBuilder.ATTR_LASTREALM)); // $NON-NLS-1$
+			String lastProfileId = getNodeValue(attrs.getNamedItem(DeltaCloudXMLBuilder.ATTR_LASTPROFILE)); // $NON-NLS-1$
 			Collection<IInstanceAliasMapping> aliasMappings = getInstanceMappings(n);
 			cloud = new DeltaCloud(name, url, username, driver, imageFilterRules, instanceFilterRules, aliasMappings);
 			clouds.add(cloud);
 			cloud.setLastImageId(lastImageId);
 			cloud.setLastKeyname(lastKeyName);
+			cloud.setLastRealmName(lastRealmName);
+			cloud.setLastProfileId(lastProfileId);
 			return cloud;
 		} catch (DeltaCloudException e) {
 			throw e;
@@ -162,16 +166,8 @@
 		return null;
 	}
 
-	private String getInstanceFilterRules(Node instanceFilterNode) {
-		String instanceFilterRules = IInstanceFilter.ALL_STRING;
-		if (instanceFilterNode != null) {
-			instanceFilterRules = instanceFilterNode.getNodeValue();
-		}
-		return instanceFilterRules;
-	}
-
 	private String getImageFilterRules(Node imageFilterNode) {
-		String imageFilterRules = IImageFilter.ALL_STRING;
+		String imageFilterRules = null;
 		if (imageFilterNode != null) {
 			imageFilterRules = imageFilterNode.getNodeValue();
 		}
@@ -216,6 +212,8 @@
 				DeltaCloudXMLBuilder.ATTR_INSTANCEFILTER, d.getInstanceFilter().toString(), printWriter);
 		DeltaCloudXMLBuilder.attribute(DeltaCloudXMLBuilder.ATTR_LASTKEYNAME, d.getLastKeyname(), printWriter);
 		DeltaCloudXMLBuilder.attribute(DeltaCloudXMLBuilder.ATTR_LASTIMAGE, d.getLastImageId(), printWriter);
+		DeltaCloudXMLBuilder.attribute(DeltaCloudXMLBuilder.ATTR_LASTREALM, d.getLastRealmName(), printWriter);
+		DeltaCloudXMLBuilder.attribute(DeltaCloudXMLBuilder.ATTR_LASTPROFILE, d.getLastProfileId(), printWriter);
 		DeltaCloudXMLBuilder.closeTag(printWriter);
 		printInstances(d, printWriter);
 		DeltaCloudXMLBuilder.endTag(DeltaCloudXMLBuilder.TAG_CLOUD, printWriter);
Index: src/org/jboss/tools/deltacloud/core/client/Realm.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/Realm.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/Realm.java	(working copy)
@@ -14,7 +14,7 @@
  * @author Martyn Taylor
  * @author André Dietisheim
  */
-public class Realm extends AbstractDeltaCloudObject {
+public class Realm extends IdAware {
 	private static final long serialVersionUID = 1L;
 
 	public static final int LIMIT_DEFAULT = -1;
Index: src/org/jboss/tools/deltacloud/core/ImageFilter.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/ImageFilter.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/ImageFilter.java	(working copy)
@@ -11,7 +11,6 @@
 package org.jboss.tools.deltacloud.core;
 
 import java.util.Iterator;
-import java.util.regex.PatternSyntaxException;
 
 /**
  * A filter that may be applied on DeltaCloudImages
@@ -24,40 +23,64 @@
 public class ImageFilter extends AbstractCloudElementFilter<DeltaCloudImage> implements IImageFilter {
 
 	private IFieldMatcher archRule;
+	private IFieldMatcher descRule;
 
 	public ImageFilter(DeltaCloud cloud) {
+		super(new AllMatcher(), new AllMatcher(), cloud);
+		setRules(new AllMatcher(), new AllMatcher());
+	}
+
+	public ImageFilter(String rules, DeltaCloud cloud) {
 		super(cloud);
+		setRules(rules);
 	}
 
-	private IFieldMatcher descRule;
-	
+	public ImageFilter(String nameRule, String idRule, String archRule, String descRule, DeltaCloud cloud) {
+		super(nameRule, idRule, cloud);
+		setRules(archRule, descRule);
+	}
+
 	@Override
-	public boolean matches(DeltaCloudImage image) {
-		return super.matches(image) &&
-		archRule.matches(image.getArchitecture()) &&
-		descRule.matches(image.getDescription());
+	protected Iterator<String> setRules(String rules) {
+		Iterator<String> rulesIterator = super.setRules(rules);
+		setRules(createRule(rulesIterator), createRule(rulesIterator));
+		return rulesIterator;
+	}
+
+	private void setRules(String archRule, String descRule) {
+		setRules(createRule(archRule), createRule(descRule));
+	}
+
+	private void setRules(IFieldMatcher archMatcher, IFieldMatcher descMatcher) {
+		this.archRule = archMatcher;
+		this.descRule = descMatcher;
 	}
 
 	@Override
-	public void setRules(String ruleString) throws PatternSyntaxException {
-		// TODO: replace filter passing (;-delimited string) by list
-		Iterator<String> rulesIterator = super.setRules(ruleString, getRulesIterator(ruleString));		
-		this.archRule = createRule(rulesIterator);
-		this.descRule = createRule(rulesIterator);
+	public boolean matches(DeltaCloudImage image) {
+		return super.matches(image) &&
+				archRule.matches(image.getArchitecture()) &&
+				descRule.matches(image.getDescription());
 	}
-	
+
 	@Override
 	public String toString() {
-		return super.toString()  //$NON-NLS-1$
-		+ archRule + ";"  //$NON-NLS-1$
-		+ descRule; //$NON-NLS-1$
+		return super.toString() //$NON-NLS-1$
+				+ archRule + EXPRESSION_DELIMITER //$NON-NLS-1$
+				+ descRule; //$NON-NLS-1$
 	}
-	
+
 	public IFieldMatcher getArchRule() {
 		return archRule;
 	}
-	
+
 	public IFieldMatcher getDescRule() {
 		return descRule;
 	}
+
+	public boolean isFiltering() {
+		return super.isFiltering()
+				|| !archRule.isMatchesAll()
+				|| !descRule.isMatchesAll();
+	}
 }
Index: src/org/jboss/tools/deltacloud/core/job/InstanceStateJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/job/InstanceStateJob.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/job/InstanceStateJob.java	(working copy)
@@ -32,6 +32,8 @@
 	protected IStatus doRun(IProgressMonitor monitor) throws Exception {
 		String id = getInstance().getId();
 		getCloud().waitForState(id, expectedState, monitor);
+		if( monitor.isCanceled())
+			return Status.CANCEL_STATUS;
 		return Status.OK_STATUS;
 	}
 
Index: src/org/jboss/tools/deltacloud/core/Activator.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/Activator.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/Activator.java	(working copy)
@@ -11,11 +11,14 @@
 package org.jboss.tools.deltacloud.core;
 
 import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.List;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Status;
+import org.jboss.tools.common.log.StatusFactory;
 import org.osgi.framework.BundleContext;
 
 /**
@@ -81,5 +84,14 @@
 			status = new Status(IStatus.ERROR, PLUGIN_ID, IStatus.OK, e.getMessage(), e);
 		log(status);
 	}
-
+	public static IStatus createMultiStatus(DeltaCloudMultiException throwable) {
+		List<IStatus> states = new ArrayList<IStatus>(throwable.getThrowables().size());
+		for (Throwable childThrowable : throwable.getThrowables()) {
+			IStatus status = StatusFactory.getInstance(IStatus.ERROR, Activator.PLUGIN_ID, childThrowable.getMessage(),
+					childThrowable);
+			states.add(status);
+		}
+		return StatusFactory.getInstance(IStatus.ERROR, Activator.PLUGIN_ID, throwable.getMessage(), throwable,
+				states.toArray(new IStatus[states.size()]));
+	}
 }
Index: src/org/jboss/tools/deltacloud/core/client/IdAware.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/IdAware.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/IdAware.java	(revision 0)
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat Inc..
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat Incorporated - initial API and implementation
+ *******************************************************************************/
+package org.jboss.tools.deltacloud.core.client;
+
+import javax.xml.bind.annotation.XmlAttribute;
+
+/**
+ * @author Martyn Taylor
+ * @author André Dietisheim
+ */
+public abstract class IdAware {
+
+	protected String id;
+
+	public void setId(String id) {
+		this.id = id;
+	}
+
+	@XmlAttribute
+	public String getId() {
+		return id;
+	}
+
+	@Override
+	public String toString() {
+		return "IdAware [id=" + id + "]";
+	}
+
+}
Index: src/org/jboss/tools/deltacloud/core/DeltaCloudInstance.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/DeltaCloudInstance.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/DeltaCloudInstance.java	(working copy)
@@ -13,12 +13,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.jboss.tools.deltacloud.core.client.Action;
+import org.jboss.tools.deltacloud.core.client.DeltaCloudClient;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
-import org.jboss.tools.deltacloud.core.client.IInstanceAction;
 import org.jboss.tools.deltacloud.core.client.Instance;
-import org.jboss.tools.deltacloud.core.client.Instance.InstanceState;
-import org.jboss.tools.deltacloud.core.client.InstanceAction;
-import org.jboss.tools.deltacloud.core.client.InternalDeltaCloudClient;
 
 /**
  * An instance that may be reached on a DeltaCloud instance. Wraps Instance from
@@ -34,14 +32,14 @@
 
 	public enum State {
 
-		PENDING(Instance.InstanceState.PENDING.name()),
-		RUNNING(Instance.InstanceState.RUNNING.name()),
-		STOPPED(Instance.InstanceState.STOPPED.name()),
-		TERMINATED(Instance.InstanceState.TERMINATED.name()),
-		BOGUS(Instance.InstanceState.BOGUS.name());
+		PENDING(Instance.State.PENDING.name()),
+		RUNNING(Instance.State.RUNNING.name()),
+		STOPPED(Instance.State.STOPPED.name()),
+		TERMINATED(Instance.State.TERMINATED.name()),
+		BOGUS(Instance.State.BOGUS.name());
 
 		private String name;
-
+		
 		private State(String name) {
 			this.name = name;
 		}
@@ -55,24 +53,6 @@
 		}
 	}
 
-	public enum Action {
-
-		START(IInstanceAction.START),
-		STOP(IInstanceAction.STOP),
-		REBOOT(IInstanceAction.REBOOT),
-		DESTROY(InstanceAction.DESTROY);
-
-		private String name;
-
-		private Action(String name) {
-			this.name = name;
-		}
-
-		public String getName() {
-			return name;
-		}
-	}
-
 	private Instance instance;
 	private String alias;
 
@@ -115,10 +95,10 @@
 		return instance.getKeyId();
 	}
 	
-	public List<Action> getActions() {
-		List<Action> actions = new ArrayList<Action>();
-		for (InstanceAction action : instance.getActions()) {
-			actions.add(Action.valueOf(action.getName()));
+	public List<DeltaCloudResourceAction> getActions() {
+		List<DeltaCloudResourceAction> actions = new ArrayList<DeltaCloudResourceAction>();
+		for (Action<Instance> action : instance.getActions()) {
+			actions.add(DeltaCloudResourceAction.valueOf(action.getName()));
 		}
 		return actions;
 	}
@@ -140,7 +120,7 @@
 	}
 
 	public boolean isStopped() {
-		return instance.getState() == InstanceState.STOPPED;
+		return instance.isStopped();
 	}
 
 	public boolean canStart() {
@@ -176,13 +156,13 @@
 		return hostName;
 	}
 
-	protected boolean performInstanceAction(Action action, InternalDeltaCloudClient client)
+	protected boolean performAction(DeltaCloudResourceAction action, DeltaCloudClient client)
 			throws DeltaCloudClientException {
-		InstanceAction instanceAction = instance.getAction(action.getName());
+		Action<Instance> instanceAction = instance.getAction(action.getName());
 		if (instanceAction == null) {
 			return false;
 		}
-		return client.performInstanceAction(instanceAction);
+		return client.performAction(instanceAction);
 	}
 
 	@Override
@@ -206,11 +186,15 @@
 
 	private StringBuilder appendActions(StringBuilder builder) {
 		builder.append(" actions: [");
-		for (Action action : getActions()) {
+		for (DeltaCloudResourceAction action : getActions()) {
 			builder.append("action: ")
 					.append(action.getName());
 		}
 		builder.append("] ");
 		return builder;
 	}
+
+	public boolean isInState(State state) {
+		return getState() == state;
+	}
 }
Index: src/org/jboss/tools/deltacloud/core/client/unmarshal/AbstractActionAwareUnmarshaller.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/unmarshal/AbstractActionAwareUnmarshaller.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/unmarshal/AbstractActionAwareUnmarshaller.java	(working copy)
@@ -14,7 +14,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import org.jboss.tools.deltacloud.core.client.AbstractDeltaCloudResourceAction;
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
@@ -25,7 +25,7 @@
  *
  * @param <DELTACLOUDOBJECT>
  */
-public abstract class AbstractActionAwareUnmarshaller<DELTACLOUDOBJECT, ACTION extends AbstractDeltaCloudResourceAction<DELTACLOUDOBJECT>> extends AbstractDOMUnmarshaller<DELTACLOUDOBJECT>{
+public abstract class AbstractActionAwareUnmarshaller<DELTACLOUDOBJECT> extends AbstractDOMUnmarshaller<DELTACLOUDOBJECT>{
 
 	private String actionElementName;
 	public AbstractActionAwareUnmarshaller(String tagName, Class<DELTACLOUDOBJECT> type, String actionElementName) {
@@ -33,15 +33,15 @@
 		this.actionElementName = actionElementName;
 	}
 
-	protected List<ACTION> getActions(Element element, DELTACLOUDOBJECT owner) throws DeltaCloudClientException {
+	protected List<Action<DELTACLOUDOBJECT>> getActions(Element element, DELTACLOUDOBJECT owner) throws DeltaCloudClientException {
 		if (element == null) {
 			return null;
 		}
-		List<ACTION> actions = new ArrayList<ACTION>();
+		List<Action<DELTACLOUDOBJECT>> actions = new ArrayList<Action<DELTACLOUDOBJECT>>();
 		NodeList nodeList = element.getElementsByTagName(actionElementName);
 		for (int i = 0; i < nodeList.getLength(); i++) {
 			Node linkNode = nodeList.item(i);
-			ACTION action = createAction(linkNode);
+			Action<DELTACLOUDOBJECT> action = createAction(linkNode);
 			if (action != null) {
 				action.setOwner(owner);
 				actions.add(action);
@@ -50,12 +50,12 @@
 		return actions;
 	}
 
-	protected ACTION createAction(Node node) throws DeltaCloudClientException {
+	protected Action<DELTACLOUDOBJECT> createAction(Node node) throws DeltaCloudClientException {
 		if (!(node instanceof Element)) {
 			return null;
 		}
 		return unmarshallAction((Element) node);
 	}
 	
-	protected abstract ACTION unmarshallAction(Element element) throws DeltaCloudClientException;
+	protected abstract Action<DELTACLOUDOBJECT> unmarshallAction(Element element) throws DeltaCloudClientException;
 }
Index: src/org/jboss/tools/deltacloud/core/client/Action.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/Action.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/Action.java	(revision 0)
@@ -0,0 +1,85 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core.client;
+
+/**
+ * An action that may be performed on a resource
+ * 
+ * @author André Dietisheim
+ */
+public class Action<OWNER> {
+
+	public static final String START_NAME = "start";
+	public static final String STOP_NAME = "stop";
+	public static final String REBOOT_NAME = "reboot";
+	public static final String DESTROY_NAME = "destroy";
+
+	private String name;
+	private String url;
+	private HttpMethod method;
+	private OWNER owner;
+
+	public HttpMethod getMethod() {
+		return method;
+	}
+
+	public void setMethodString(String method) {
+		this.method = HttpMethod.valueOf(method.toUpperCase());
+	}
+
+	public void setMethod(HttpMethod method) {
+		this.method = method;
+	}
+
+	public void setMethod(String method) {
+		this.method = HttpMethod.valueOf(method.toUpperCase());
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+	public void setUrl(String url) {
+		this.url = url;
+	}
+
+	public String getUrl() {
+		return url;
+	}
+
+	public void setOwner(OWNER owner) {
+		this.owner = owner;
+	}
+
+	public OWNER getOwner() {
+		return owner;
+	}
+
+	public boolean isStart() {
+		return START_NAME.equals(getName());
+	}
+
+	public boolean isStop() {
+		return STOP_NAME.equals(getName());
+	}
+
+	public boolean isReboot() {
+		return REBOOT_NAME.equals(getName());
+	}
+
+	public boolean isDestroy() {
+		return DESTROY_NAME.equals(getName());
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/DeltaCloudResourceAction.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/DeltaCloudResourceAction.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/DeltaCloudResourceAction.java	(revision 0)
@@ -0,0 +1,37 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core;
+
+import org.jboss.tools.deltacloud.core.client.Action;
+
+
+/**
+ * @author Jeff Johnston
+ * @author André Dietisheim
+ */
+public enum DeltaCloudResourceAction {
+
+	START(Action.START_NAME),
+	STOP(Action.STOP_NAME),
+	REBOOT(Action.REBOOT_NAME),
+	DESTROY(Action.DESTROY_NAME);
+
+	private String name;
+
+	private DeltaCloudResourceAction(String name) {
+		this.name = name;
+	}
+
+	public String getName() {
+		return name;
+	}
+
+}
Index: src/org/jboss/tools/deltacloud/core/client/unmarshal/APIUnmarshaller.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/unmarshal/APIUnmarshaller.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/core/client/unmarshal/APIUnmarshaller.java	(revision 0)
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.core.client.unmarshal;
+
+import org.jboss.tools.deltacloud.core.client.API;
+import org.w3c.dom.Element;
+
+/**
+ * @author André Dietisheim
+ */
+public class APIUnmarshaller extends AbstractDOMUnmarshaller<API> {
+
+	public APIUnmarshaller() {
+		super("api", API.class);
+	}
+
+	protected API doUnmarshall(Element element, API server) throws Exception {
+		if (element != null) {
+			server.setDriver(getAttributeText("driver", element));
+		}
+		return server;
+	}
+}
Index: src/org/jboss/tools/deltacloud/core/client/Image.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/Image.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/Image.java	(working copy)
@@ -14,7 +14,7 @@
 /**
  * @author Martyn Taylor
  */
-public class Image extends AbstractDeltaCloudObject
+public class Image extends IdAware
 {	
 	private static final long serialVersionUID = 1L;
 
Index: src/org/jboss/tools/deltacloud/core/Driver.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/Driver.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/core/Driver.java	(working copy)
@@ -1,45 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is made available under the terms of the
- * Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.deltacloud.core;
-
-import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl.DeltaCloudServerType;
-
-/**
- * @author André Dietisheim
- */
-public enum Driver {
-
-	MOCK(DeltaCloudServerType.MOCK), EC2(DeltaCloudServerType.EC2), UNKNOWN(DeltaCloudServerType.UNKNOWN);
-
-	private DeltaCloudServerType deltaCloudServerType;
-
-	private Driver(DeltaCloudServerType deltaCloudServerType) {
-		this.deltaCloudServerType = deltaCloudServerType;
-	}
-	
-	public static Driver valueOf(DeltaCloudServerType deltaCloudServerType) {
-		for(Driver type : values()) {
-			if (type.deltaCloudServerType.equals(deltaCloudServerType)) {
-				return type;
-			}
-		}
-		return UNKNOWN;
-	}
-
-	public static Driver checkedValueOf(String name) {
-		for (Driver type : values()) {
-			if (type.name().equals(name)) {
-				return type;
-			}
-		}
-		return UNKNOWN;
-	}
-}
Index: src/org/jboss/tools/deltacloud/core/IDeltaCloudManagerListener.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/IDeltaCloudManagerListener.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/IDeltaCloudManagerListener.java	(working copy)
@@ -12,8 +12,8 @@
 
 public interface IDeltaCloudManagerListener {
 	
-	public static int ADD_EVENT = 1;
-	public static int REMOVE_EVENT = 2;
+	public final static int ADD_EVENT = 1;
+	public final static int REMOVE_EVENT = 2;
 	
 	void cloudsChanged(int type, DeltaCloud cloud);
 }
Index: src/org/jboss/tools/deltacloud/core/client/DeltaCloudClientImpl.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/client/DeltaCloudClientImpl.java	(revision 29286)
+++ src/org/jboss/tools/deltacloud/core/client/DeltaCloudClientImpl.java	(working copy)
@@ -10,11 +10,8 @@
  *******************************************************************************/
 package org.jboss.tools.deltacloud.core.client;
 
-import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.UnknownHostException;
@@ -22,10 +19,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
 import org.apache.http.HttpResponse;
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.UsernamePasswordCredentials;
@@ -34,9 +27,9 @@
 import org.apache.http.client.methods.HttpPost;
 import org.apache.http.client.methods.HttpUriRequest;
 import org.apache.http.impl.client.DefaultHttpClient;
+import org.jboss.tools.deltacloud.core.client.API.Driver;
 import org.jboss.tools.deltacloud.core.client.request.CreateInstanceRequest;
 import org.jboss.tools.deltacloud.core.client.request.CreateKeyRequest;
-import org.jboss.tools.deltacloud.core.client.request.DeleteKeyRequest;
 import org.jboss.tools.deltacloud.core.client.request.DeltaCloudRequest;
 import org.jboss.tools.deltacloud.core.client.request.ListHardwareProfileRequest;
 import org.jboss.tools.deltacloud.core.client.request.ListHardwareProfilesRequest;
@@ -48,8 +41,9 @@
 import org.jboss.tools.deltacloud.core.client.request.ListKeysRequest;
 import org.jboss.tools.deltacloud.core.client.request.ListRealmRequest;
 import org.jboss.tools.deltacloud.core.client.request.ListRealmsRequest;
-import org.jboss.tools.deltacloud.core.client.request.PerformInstanceActionRequest;
+import org.jboss.tools.deltacloud.core.client.request.PerformActionRequest;
 import org.jboss.tools.deltacloud.core.client.request.TypeRequest;
+import org.jboss.tools.deltacloud.core.client.unmarshal.APIUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.HardwareProfileUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.HardwareProfilesUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.ImageUnmarshaller;
@@ -60,28 +54,15 @@
 import org.jboss.tools.deltacloud.core.client.unmarshal.KeysUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.RealmUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.RealmsUnmarshaller;
-import org.w3c.dom.Document;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
 
 /**
  * @author Andre Dietisheim (based on prior implementation by Martyn Taylor)
  */
-public class DeltaCloudClientImpl implements InternalDeltaCloudClient {
-
-	private static final String DOCUMENT_ELEMENT_DRIVER = "driver";
-	private static final String DOCUMENT_ELEMENT_API = "api";
+public class DeltaCloudClientImpl implements DeltaCloudClient {
 
 	private String baseUrl;
 	private String username;
 	private String password;
-	private DocumentBuilderFactory documentBuilderFactory;
-
-	public static enum DeltaCloudServerType {
-		UNKNOWN, MOCK, EC2
-	}
 
 	public DeltaCloudClientImpl(String url) throws MalformedURLException,
 			DeltaCloudClientException {
@@ -92,7 +73,6 @@
 		this.baseUrl = url;
 		this.username = username;
 		this.password = password;
-		this.documentBuilderFactory = DocumentBuilderFactory.newInstance();
 	}
 
 	protected InputStream request(DeltaCloudRequest deltaCloudRequest)
@@ -120,19 +100,6 @@
 		}
 	}
 
-	protected String requestStringResponse(DeltaCloudRequest deltaCloudRequest)
-			throws DeltaCloudClientException {
-		try {
-			InputStream inputStream = request(deltaCloudRequest);
-			if (inputStream == null) {
-				return null;
-			}
-			return getResponse(inputStream);
-		} catch (IOException e) {
-			throw new DeltaCloudClientException(e);
-		}
-	}
-
 	private void throwOnHttpErrors(URL requestUrl, HttpResponse httpResponse)
 			throws DeltaCloudClientException {
 		int statusCode = httpResponse.getStatusLine().getStatusCode();
@@ -158,15 +125,6 @@
 		}
 	}
 
-	private String getResponse(InputStream inputStream) throws IOException,
-			DeltaCloudClientException {
-		if (inputStream == null) {
-			return null;
-		}
-		String xml = readInputStreamToString(inputStream);
-		return xml;
-	}
-
 	/**
 	 * Returns a request instance for the given request type and url.
 	 * 
@@ -216,48 +174,14 @@
 		return httpClient;
 	}
 
-	private static String readInputStreamToString(InputStream is)
-			throws DeltaCloudClientException {
+	public Driver getServerType() {
 		try {
-			try {
-				if (is != null) {
-					StringBuilder sb = new StringBuilder();
-					String line = null;
-
-					BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
-					while ((line = reader.readLine()) != null) {
-						sb.append(line).append("\n");
-					}
-					return sb.toString();
-				}
-			} finally {
-				is.close();
-			}
-		} catch (Exception e) {
-			throw new DeltaCloudClientException(
-					"Error converting Response to String", e);
-		}
-		return "";
-	}
-
-	public DeltaCloudServerType getServerType() {
-		DeltaCloudServerType serverType = DeltaCloudServerType.UNKNOWN;
-		try {
-			String apiResponse = requestStringResponse(new TypeRequest(baseUrl));
-			Document document = getDocument(apiResponse);
-			NodeList elements = document.getElementsByTagName(DOCUMENT_ELEMENT_API);
-			if (elements.getLength() > 0) {
-				Node n = elements.item(0);
-				Node driver = n.getAttributes().getNamedItem(DOCUMENT_ELEMENT_DRIVER);
-				if (driver != null) {
-					String driverValue = driver.getNodeValue();
-					serverType = DeltaCloudServerType.valueOf(driverValue.toUpperCase());
-				}
-			}
-		} catch (Exception e) {
-			serverType = DeltaCloudServerType.UNKNOWN;
+			InputStream response = request(new TypeRequest(baseUrl));
+			API api = new APIUnmarshaller().unmarshall(response, new API());
+			return api.getDriver();
+		} catch (DeltaCloudClientException e) {
+			return Driver.UNKNOWN;
 		}
-		return serverType;
 	}
 
 	@Override
@@ -395,10 +319,6 @@
 		}
 	}
 
-	public void deleteKey(String keyname) throws DeltaCloudClientException {
-		request(new DeleteKeyRequest(baseUrl, keyname));
-	}
-
 	public List<Key> listKeys() throws DeltaCloudClientException {
 		InputStream inputStream = request(new ListKeysRequest(baseUrl));
 		List<Key> keys = new ArrayList<Key>();
@@ -412,21 +332,10 @@
 		return key;
 	}
 
-	private Document getDocument(String response) throws ParserConfigurationException, SAXException, IOException {
-		InputSource is = new InputSource(new StringReader(response));
-		DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder();
-		Document document = documentBuilder.parse(is);
-		return document;
-	}
-
-	public boolean performInstanceAction(InstanceAction action) throws DeltaCloudClientException {
+	public boolean performAction(Action<?> action) throws DeltaCloudClientException {
 		if (action != null) {
 			try {
-				InputStream inputStream = request(
-						new PerformInstanceActionRequest(action.getUrl(), action.getMethod()));
-				if (!InstanceAction.DESTROY.equals(action.getName())) {
-					new InstanceUnmarshaller().unmarshall(inputStream, action.getOwner());
-				}
+				request(new PerformActionRequest(action.getUrl(), action.getMethod()));
 			} catch (DeltaCloudClientException e) {
 				throw e;
 			} catch (Exception e) {
Index: src/org/jboss/tools/deltacloud/core/AllImageFilter.java
===================================================================
--- src/org/jboss/tools/deltacloud/core/AllImageFilter.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/core/AllImageFilter.java	(working copy)
@@ -1,62 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2010 Red Hat, Inc.
- * Distributed under license by Red Hat, Inc. All rights reserved.
- * This program is made available under the terms of the
- * Eclipse Public License v1.0 which accompanies this distribution,
- * and is available at http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     Red Hat, Inc. - initial API and implementation
- ******************************************************************************/
-package org.jboss.tools.deltacloud.core;
-
-/**
- * A filter for images that matches on all elements (no criteria checked)
- * 
- * @see IImageFilter
- * @see DeltaCloud#getImageFilter()
- * 
- * @author Jeff Johnston
- * @author André Dietisheim
- */
-public class AllImageFilter extends AbstractCloudElementFilter<DeltaCloudImage> implements IImageFilter {
-
-	private IFieldMatcher matcher = new AllFieldMatcher();
-	
-	public AllImageFilter(DeltaCloud cloud) {
-		super(cloud);
-	}
-	
-	@Override
-	public boolean matches(DeltaCloudImage image) {
-		return true;
-	}
-
-	@Override
-	public void setRules(String ruleString) {
-		// ignore, never set the rules for this filter
-	}
-
-	@Override
-	public IFieldMatcher getNameRule() {
-		return matcher;
-	}
-
-	@Override
-	public IFieldMatcher getIdRule() {
-		return matcher;
-	}
-
-	public IFieldMatcher getArchRule() {
-		return matcher; 
-	}
-	
-	public IFieldMatcher getDescRule() {
-		return matcher;
-	}
-
-	@Override
-	public String toString() {
-		return ALL_STRING;
-	}
-}
#P org.jboss.tools.deltacloud.integration
Index: src/org/jboss/tools/deltacloud/integration/wizard/RSEandASWizardPage.java
===================================================================
--- src/org/jboss/tools/deltacloud/integration/wizard/RSEandASWizardPage.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/integration/wizard/RSEandASWizardPage.java	(working copy)
@@ -11,14 +11,17 @@
 package org.jboss.tools.deltacloud.integration.wizard;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import org.eclipse.core.runtime.preferences.IEclipsePreferences;
 import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.fieldassist.ControlDecoration;
 import org.eclipse.jface.wizard.WizardPage;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
 import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.events.SelectionListener;
 import org.eclipse.swt.layout.FormLayout;
@@ -36,28 +39,49 @@
 import org.jboss.tools.common.jobs.ChainedJob;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
 import org.jboss.tools.deltacloud.integration.DeltaCloudIntegrationPlugin;
+import org.jboss.tools.deltacloud.ui.preferences.StringPreferenceValue;
 import org.jboss.tools.deltacloud.ui.wizard.INewInstanceWizardPage;
+import org.jboss.tools.internal.deltacloud.ui.utils.LayoutUtils;
 import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
 import org.osgi.service.prefs.BackingStoreException;
 
 /**
  * @author Rob Stryker
+ * @author André Dietisheim
  */
 public class RSEandASWizardPage extends WizardPage implements INewInstanceWizardPage {
-	private static final boolean DEFALUT_CREATE_RSE = true;
-	private static final boolean DETAULT_CREATE_SERVERADAPTER = false;
-	
+	private static final String SERVER_DETAILS_PROPOSAL_KEY = "server_details";
+	private static final String SERVER_HOME_PROPOSAL_KEY = "server_home";
+	private static final String SERVER_CONFIG_PROPOSAL_KEY = "server_config";
+	private static final String SERVER_DEPLOY_PROPOSAL_KEY = "server_deploy";
+
+	private static final String SELECTED_AUTO_LOCAL_RUNTIME_KEY = "autoruntime_selected";
+	private static final String SELECTED_MANUAL_LOCAL_RUNTIME_KEY = "manualruntime_selected";
+
+	private static final String SELECT_RUNTIME_ERROR = "Please select a local runtime. The created server will be of the same version as the local runtime.";
+	private static final String DEPLOY_FOLDER_NOT_EMPTY = "The deploy folder must not be empty";
+	private final static String REMOTE_DETAILS_LOC_ERROR = "You must fill in a path to fetch the server configuration from";
+	private static final String SERVER_CONFIG_ERROR = "You must select a server configuration";
+	private static final String SERVER_HOME_ERROR = "You must set a server home directory";
+
 	private final static String CREATE_RSE_PREF_KEY = "org.jboss.tools.deltacloud.integration.wizard.RSEandASWizard.CREATE_RSE_PREF_KEY";
 	private final static String CREATE_SERVER_PREF_KEY = "org.jboss.tools.deltacloud.integration.wizard.RSEandASWizard.CREATE_SERVER_PREF_KEY";
 
+	private static final boolean DEFALUT_CREATE_RSE = true;
+	private static final boolean DETAULT_CREATE_SERVERADAPTER = false;
+
 	private Button createRSE, createServer;
 	private Group serverDetailsGroup;
-	private Button autoScanCheck, hardCodeServerDetails, deployOnlyRadio, 
+	private Button autoScanCheck, hardCodeServerDetails, deployOnlyRadio,
 					addLocalRuntimeButton, autoAddLocalRuntimeButton;
+	private ControlDecoration deployFolderDeco, autoLocalRuntimeDeco, serverHomeDeco, remoteDetailsLocDeco,
+			localRuntimeDeco, serverConfigDeco;
 	private Text remoteDetailsLoc, serverHomeText, serverConfigText, deployFolderText;
 	private Label serverHome, serverConfig, localRuntimeLabel, autoLocalRuntimeLabel, deployFolder;
-	private Combo autoLocalRuntimeCombo,localRuntimeCombo;
-
+	private Combo autoLocalRuntimeCombo, localRuntimeCombo;
+	private StringPreferenceValue selectedAutoRuntimePref = new StringPreferenceValue(SELECTED_AUTO_LOCAL_RUNTIME_KEY, DeltaCloudIntegrationPlugin.PLUGIN_ID);
+	private StringPreferenceValue selectedManualRuntimePref = new StringPreferenceValue(SELECTED_MANUAL_LOCAL_RUNTIME_KEY, DeltaCloudIntegrationPlugin.PLUGIN_ID);
+	
 	private IHost initialHost;
 	private ArrayList<IRuntime> localRuntimes = new ArrayList<IRuntime>();
 
@@ -66,7 +90,7 @@
 		setTitle("Create RSE Connection and Server");
 		setDescription("Here you can choose to create a matching RSE connection and a Server adapter");
 	}
-	
+
 	public RSEandASWizardPage(IHost host) {
 		this();
 		this.initialHost = host;
@@ -77,93 +101,102 @@
 		c2.setLayout(new FormLayout());
 		createRSE = new Button(c2, SWT.CHECK);
 		createRSE.setText("Create RSE Connection");
-		createRSE.setLayoutData(UIUtils.createFormData(0, 5, null, 0, 0, 5, 100, -5));
+		createRSE.setLayoutData(LayoutUtils.createFormData(0, 5, null, 0, 0, 5, 100, -5));
 		createServer = new Button(c2, SWT.CHECK);
 		createServer.setText("Create Server Adapter");
-		createServer.setLayoutData(UIUtils.createFormData(createRSE, 5, null, 0, 0, 5, 100, -5));
+		createServer.setLayoutData(LayoutUtils.createFormData(createRSE, 5, null, 0, 0, 5, 100, -5));
 
 		Group g = new Group(c2, SWT.SHADOW_IN);
 		serverDetailsGroup = g;
 		g.setLayout(new FormLayout());
-		g.setLayoutData(UIUtils.createFormData(createServer,5,null,0,0,5,100,-5));
+		g.setLayoutData(LayoutUtils.createFormData(createServer, 5, null, 0, 0, 5, 100, -5));
 		g.setText("Server Details");
-		
+
 		final int INDENTATION = 40;
-		
+
 		autoScanCheck = new Button(g, SWT.RADIO);
 		autoScanCheck.setText("Determine server details from this remote file:");
-		autoScanCheck.setLayoutData(UIUtils.createFormData(0,5,null,0,0,5,null,0));
+		autoScanCheck.setLayoutData(LayoutUtils.createFormData(0, 5, null, 0, 0, 5, null, 0));
 		autoScanCheck.setSelection(true);
-		
+
 		remoteDetailsLoc = new Text(g, SWT.BORDER);
-		remoteDetailsLoc.setLayoutData(UIUtils.createFormData(autoScanCheck,5,null,0,0,INDENTATION,100,-5));
+		remoteDetailsLoc.setLayoutData(LayoutUtils.createFormData(autoScanCheck, 5, null, 0, 0, INDENTATION, 100, -5));
 		remoteDetailsLoc.setText("./.jboss");
-		
+		this.remoteDetailsLocDeco = UIUtils.createErrorDecoration(REMOTE_DETAILS_LOC_ERROR, remoteDetailsLoc);
+		UIUtils.createPreferencesProposalAdapter(remoteDetailsLoc, SERVER_DETAILS_PROPOSAL_KEY);
+
 		autoLocalRuntimeLabel = new Label(g, SWT.NONE);
 		autoLocalRuntimeLabel.setText("Local Runtime: ");
-		autoLocalRuntimeLabel.setLayoutData(UIUtils.createFormData(remoteDetailsLoc, 7, null, 0, 0, INDENTATION, null, 0 ));
-		
+		autoLocalRuntimeLabel.setLayoutData(
+				LayoutUtils.createFormData(remoteDetailsLoc, 7, null, 0, 0, INDENTATION, null,0));
+
 		autoAddLocalRuntimeButton = new Button(g, SWT.DEFAULT);
 		autoAddLocalRuntimeButton.setText("Configure Runtimes...");
-		autoAddLocalRuntimeButton.setLayoutData(UIUtils.createFormData(remoteDetailsLoc, 7, null, 0, null, 0, 100, -5));
-		autoAddLocalRuntimeButton.addSelectionListener(new SelectionListener() {
+		autoAddLocalRuntimeButton.setLayoutData(LayoutUtils.createFormData(remoteDetailsLoc, 7, null, 0, null, 0, 100, -5));
+		autoAddLocalRuntimeButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				configureRuntimesPressed();
 			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
 		});
 		autoLocalRuntimeCombo = new Combo(g, SWT.READ_ONLY);
-		autoLocalRuntimeCombo.setLayoutData(UIUtils.createFormData(remoteDetailsLoc, 5, null, 0, autoLocalRuntimeLabel, 5, autoAddLocalRuntimeButton, -5));
-		
-		
+		autoLocalRuntimeCombo.setLayoutData(LayoutUtils.createFormData(remoteDetailsLoc, 5, null, 0, autoLocalRuntimeLabel,
+				10, autoAddLocalRuntimeButton, -5));
+		this.autoLocalRuntimeDeco = UIUtils.createErrorDecoration(SELECT_RUNTIME_ERROR, autoLocalRuntimeCombo);
+
 		hardCodeServerDetails = new Button(g, SWT.RADIO);
 		hardCodeServerDetails.setText("Set remote server details manually");
-		hardCodeServerDetails.setLayoutData(UIUtils.createFormData(autoLocalRuntimeCombo,5,null,0,0,5,null,0));
+		hardCodeServerDetails.setLayoutData(LayoutUtils.createFormData(autoLocalRuntimeCombo, 5, null, 0, 0, 10, null, 0));
 
 		serverHome = new Label(g, SWT.NONE);
 		serverHome.setText("JBoss Server Home: ");
-		serverHome.setLayoutData(UIUtils.createFormData(hardCodeServerDetails, 7, null, 0, 0, INDENTATION, null, 0 ));
+		serverHome.setLayoutData(LayoutUtils.createFormData(hardCodeServerDetails, 7, null, 0, 0, INDENTATION, null, 0));
 		serverHomeText = new Text(g, SWT.BORDER);
-		serverHomeText.setLayoutData(UIUtils.createFormData(hardCodeServerDetails, 5, null, 0, serverHome, 5, 100, -5));
+		serverHomeText.setLayoutData(LayoutUtils.createFormData(hardCodeServerDetails, 5, null, 0, serverHome, 10, 100, -5));
 		serverHomeText.setText("/etc/jboss/jboss-as");
+		this.serverHomeDeco = UIUtils.createErrorDecoration(SERVER_HOME_ERROR, serverHomeText);
+		UIUtils.createPreferencesProposalAdapter(serverHomeText, SERVER_HOME_PROPOSAL_KEY);
 
 		serverConfig = new Label(g, SWT.NONE);
 		serverConfig.setText("Configuration: ");
-		serverConfig.setLayoutData(UIUtils.createFormData(serverHomeText, 7, null, 0, 0, INDENTATION, null, 0 ));
+		serverConfig.setLayoutData(LayoutUtils.createFormData(serverHomeText, 7, null, 0, 0, INDENTATION, null, 0));
 		serverConfigText = new Text(g, SWT.BORDER);
-		serverConfigText.setLayoutData(UIUtils.createFormData(serverHomeText, 5, null, 0, serverHome, 5, 100, -5));
+		serverConfigText.setLayoutData(LayoutUtils.createFormData(serverHomeText, 5, null, 0, serverHome, 10, 100, -5));
 		serverConfigText.setText("default");
-		
+		this.serverConfigDeco = UIUtils.createErrorDecoration(SERVER_CONFIG_ERROR, serverConfigText);
+		UIUtils.createPreferencesProposalAdapter(serverConfigText, SERVER_CONFIG_PROPOSAL_KEY);
+
 		localRuntimeLabel = new Label(g, SWT.NONE);
 		localRuntimeLabel.setText("Local Runtime: ");
-		localRuntimeLabel.setLayoutData(UIUtils.createFormData(serverConfigText, 7, null, 0, 0, INDENTATION, null, 0 ));
-		
+		localRuntimeLabel.setLayoutData(LayoutUtils.createFormData(serverConfigText, 7, null, 0, 0, INDENTATION, null, 0));
+
 		addLocalRuntimeButton = new Button(g, SWT.DEFAULT);
 		addLocalRuntimeButton.setText("Configure Runtimes...");
-		addLocalRuntimeButton.setLayoutData(UIUtils.createFormData(serverConfigText, 7, null, 0, null, 0, 100, -5));
-		addLocalRuntimeButton.addSelectionListener(new SelectionListener() {
+		addLocalRuntimeButton.setLayoutData(LayoutUtils.createFormData(serverConfigText, 7, null, 0, null, 0, 100, -5));
+		addLocalRuntimeButton.addSelectionListener(new SelectionAdapter() {
 			public void widgetSelected(SelectionEvent e) {
 				configureRuntimesPressed();
 			}
-			public void widgetDefaultSelected(SelectionEvent e) {
-			}
 		});
 		localRuntimeCombo = new Combo(g, SWT.READ_ONLY);
-		localRuntimeCombo.setLayoutData(UIUtils.createFormData(serverConfigText, 5, null, 0, serverHome, 5, addLocalRuntimeButton, -5));
-		
-		
+		localRuntimeCombo.setLayoutData(LayoutUtils.createFormData(serverConfigText, 5, null, 0, serverHome, 10,
+				addLocalRuntimeButton, -5));
+		this.localRuntimeDeco = UIUtils.createErrorDecoration(SELECT_RUNTIME_ERROR, localRuntimeCombo);
+
 		deployOnlyRadio = new Button(g, SWT.RADIO);
 		deployOnlyRadio.setText("Use a deploy-only server adapter");
-		deployOnlyRadio.setLayoutData(UIUtils.createFormData(localRuntimeCombo,5,null,0,0,5,null,0));
-		
+		deployOnlyRadio.setLayoutData(LayoutUtils.createFormData(localRuntimeCombo, 5, null, 0, 0, 5, null, 0));
+
 		deployFolder = new Label(g, SWT.NONE);
 		deployFolder.setText("Deploy Folder: ");
-		deployFolder.setLayoutData(UIUtils.createFormData(deployOnlyRadio, 7, null, 0, 0, INDENTATION, null, 0 ));
+		deployFolder.setLayoutData(LayoutUtils.createFormData(deployOnlyRadio, 7, null, 0, 0, INDENTATION, null, 0));
 		deployFolderText = new Text(g, SWT.BORDER);
 		deployFolderText.setText("/path/to/deploy");
-		deployFolderText.setLayoutData(UIUtils.createFormData(deployOnlyRadio, 5, null, 0, deployFolder, 5, 100, -5));
-		
+		deployFolderText.setLayoutData(LayoutUtils.createFormData(deployOnlyRadio, 5, null, 0, deployFolder, 10, 100, -5));
+		this.deployFolderDeco = UIUtils.createErrorDecoration(DEPLOY_FOLDER_NOT_EMPTY, deployFolderText);
+		UIUtils.createPreferencesProposalAdapter(deployFolderText, SERVER_DEPLOY_PROPOSAL_KEY);
+
+		Label dummyLabel = new Label(g, SWT.NONE);
+		dummyLabel.setLayoutData(LayoutUtils.createFormData(deployOnlyRadio, 5, null, 0, deployFolderText, 10, 100, -5));
 		
 		IEclipsePreferences prefs = new InstanceScope().getNode(DeltaCloudIntegrationPlugin.PLUGIN_ID);
 		boolean initRSE, initServer;
@@ -171,7 +204,7 @@
 		initServer = prefs.getBoolean(CREATE_SERVER_PREF_KEY, DETAULT_CREATE_SERVERADAPTER);
 		createRSE.setSelection(initRSE);
 		createServer.setSelection(initServer);
-		if( initialHost != null ) {
+		if (initialHost != null) {
 			createRSE.setEnabled(false);
 			createRSE.setSelection(true);
 			createServer.setSelection(true);
@@ -201,7 +234,7 @@
 		deployOnlyRadio.addSelectionListener(listener);
 		remoteDetailsLoc.addModifyListener(modListener);
 		serverHomeText.addModifyListener(modListener);
-		serverConfigText.addModifyListener(modListener); 
+		serverConfigText.addModifyListener(modListener);
 		deployFolderText.addModifyListener(modListener);
 		autoLocalRuntimeCombo.addModifyListener(modListener);
 		localRuntimeCombo.addModifyListener(modListener);
@@ -211,25 +244,36 @@
 	private void fillRuntimeTypeCombo() {
 		localRuntimes.clear();
 		IRuntime[] rts = ServerCore.getRuntimes();
-		ArrayList<String> names = new ArrayList<String>();
-		for( int i = 0; i < rts.length; i++ ) {
-			if( rts[i].getRuntimeType() == null )
+		List<String> names = new ArrayList<String>();
+		for (int i = 0; i < rts.length; i++) {
+			if (rts[i].getRuntimeType() == null)
 				continue;
-			if( rts[i].getRuntimeType().getId().startsWith("org.jboss.") 
+			if (rts[i].getRuntimeType().getId().startsWith("org.jboss.")
 					&& !rts[i].getRuntimeType().getId().equals(IJBossToolingConstants.DEPLOY_ONLY_RUNTIME)) {
 				localRuntimes.add(rts[i]);
 				names.add(rts[i].getName());
 			}
 		}
 		localRuntimeCombo.setItems((String[]) names.toArray(new String[names.size()]));
+		localRuntimeCombo.select(getSelectionIndex(selectedManualRuntimePref.get(), names));
 		autoLocalRuntimeCombo.setItems((String[]) names.toArray(new String[names.size()]));
+		autoLocalRuntimeCombo.select(getSelectionIndex(selectedAutoRuntimePref.get(), names));
+	}
+	
+	private int getSelectionIndex(String item, List<String> items) {
+		int selectionIndex = 0;
+		int listIndex = items.indexOf(item);
+		if (listIndex >= 0) {
+			selectionIndex = listIndex;
+		}
+		return selectionIndex;
 	}
 	
 	protected void configureRuntimesPressed() {
 		ServerUIUtil.showNewRuntimeWizard(addLocalRuntimeButton.getShell(), null, null);
 		fillRuntimeTypeCombo();
 	}
-	
+
 	private void handleSelection(Widget w) {
 		if (w == createRSE) {
 			if (!createRSE.getSelection()) {
@@ -240,33 +284,72 @@
 				createServer.setEnabled(true);
 			}
 		}
-		if( w == createServer ) {
+		if (w == createServer) {
 			refreshServerWidgets();
 		}
 		verifyPageComplete();
 	}
 
 	private void verifyPageComplete() {
-		boolean complete = true;
-		if( createServer.getSelection()) {
-			if( deployOnlyRadio.getSelection()) {
-				complete = !deployFolderText.getText().equals("");
-			} else if( autoScanCheck.getSelection()) {
-				int index = autoLocalRuntimeCombo.getSelectionIndex();
-				complete = index != -1 && !remoteDetailsLoc.getText().equals("");
-			} else if( hardCodeServerDetails.getSelection()) {
-				int index = localRuntimeCombo.getSelectionIndex();
-				complete = index != -1 && !serverHomeText.getText().equals("") && !serverConfigText.getText().equals("");
+		String error = null;
+		deployFolderDeco.hide();
+		autoLocalRuntimeDeco.hide();
+		remoteDetailsLocDeco.hide();
+		localRuntimeDeco.hide();
+		serverHomeDeco.hide();
+		serverConfigDeco.hide();
+		
+		if (createServer.getSelection()) {
+			if (deployOnlyRadio.getSelection()) {
+				if (deployFolderText.getText().equals("")) {
+					error = DEPLOY_FOLDER_NOT_EMPTY;
+					deployFolderDeco.show();
+				}
+			} else if (autoScanCheck.getSelection()) {
+				if (remoteDetailsLoc.getText().equals("")) {
+					remoteDetailsLocDeco.show();
+					error = REMOTE_DETAILS_LOC_ERROR;
+				}
+				if (autoLocalRuntimeCombo.getSelectionIndex() < 0) {
+					autoLocalRuntimeDeco.show();
+					error = SELECT_RUNTIME_ERROR;
+				}
+			} else if (hardCodeServerDetails.getSelection()) {
+				if (serverHomeText.getText().equals("")) {
+					serverHomeDeco.show();
+					error = SERVER_HOME_ERROR;
+				}
+				if (serverConfigText.getText().equals("")) {
+					serverConfigDeco.show();
+					error = SERVER_CONFIG_ERROR;
+				}
+				if (localRuntimeCombo.getSelectionIndex() < 0) {
+					localRuntimeDeco.show();
+					error = SELECT_RUNTIME_ERROR;
+				}
 			}
 		}
-		setPageComplete(complete);
+		storeSelection(autoLocalRuntimeCombo.getSelectionIndex(), autoLocalRuntimeCombo.getItems(), selectedAutoRuntimePref);
+		storeSelection(localRuntimeCombo.getSelectionIndex(), localRuntimeCombo.getItems(), selectedManualRuntimePref);
+
+		setErrorMessage(error);
+		setPageComplete(error == null);
 	}
-	
+
+	private void storeSelection(int selectionIndex, String[] items, StringPreferenceValue preferenceValue) {
+		if (selectionIndex < 0 || items == null || items.length == 0) {
+			return;
+		}
+
+		String value = items[selectionIndex];
+		preferenceValue.store(value);
+	}
+
 	private void refreshServerWidgets() {
-		if( initialHost != null ) {
+		if (initialHost != null) {
 			createRSE.setEnabled(false);
 		}
-		
+
 		boolean enabled = createServer.getSelection();
 		serverDetailsGroup.setEnabled(enabled);
 		autoScanCheck.setEnabled(enabled);
@@ -284,8 +367,8 @@
 		localRuntimeLabel.setEnabled(enabled);
 		localRuntimeCombo.setEnabled(enabled);
 	}
-	
-	public ChainedJob getPerformFinishJob(final DeltaCloudInstance instance) {
+
+	public ChainedJob createPerformFinishJob(final DeltaCloudInstance instance) {
 		IEclipsePreferences prefs = new InstanceScope().getNode(DeltaCloudIntegrationPlugin.PLUGIN_ID);
 		prefs.putBoolean(CREATE_RSE_PREF_KEY, createRSE.getSelection());
 		prefs.putBoolean(CREATE_SERVER_PREF_KEY, createServer.getSelection());
@@ -295,32 +378,32 @@
 			// ignore
 		}
 
-		if( !createRSE.getSelection())
+		if (!createRSE.getSelection())
 			return null;
-		
-		CreateRSEFromInstanceJob j = 
-			new CreateRSEFromInstanceJob(instance, INewInstanceWizardPage.NEW_INSTANCE_FAMILY);
+
+		CreateRSEFromInstanceJob j =
+				new CreateRSEFromInstanceJob(instance, INewInstanceWizardPage.NEW_INSTANCE_FAMILY);
 
-		if( createServer.getSelection()) {
+		if (createServer.getSelection()) {
 			String[] data = null;
 			String type = null;
-			if( deployOnlyRadio.getSelection()) {
+			if (deployOnlyRadio.getSelection()) {
 				type = CreateServerFromRSEJob.CREATE_DEPLOY_ONLY_SERVER;
-				data = new String[]{deployFolderText.getText()};
-			} else if( autoScanCheck.getSelection()) {
+				data = new String[] { deployFolderText.getText() };
+			} else if (autoScanCheck.getSelection()) {
 				type = CreateServerFromRSEJob.CHECK_SERVER_FOR_DETAILS;
 				int index = autoLocalRuntimeCombo.getSelectionIndex();
 				String rtId = localRuntimes.get(index).getId();
-				data = new String[]{remoteDetailsLoc.getText(), rtId};
-			} else if( hardCodeServerDetails.getSelection()) {
+				data = new String[] { remoteDetailsLoc.getText(), rtId };
+			} else if (hardCodeServerDetails.getSelection()) {
 				type = CreateServerFromRSEJob.SET_DETAILS_NOW;
 				int index = localRuntimeCombo.getSelectionIndex();
 				String rtId = localRuntimes.get(index).getId();
-				data = new String[]{serverHomeText.getText(), serverConfigText.getText(), rtId};
+				data = new String[] { serverHomeText.getText(), serverConfigText.getText(), rtId };
 			}
-			if( type != null && data != null ) {
+			if (type != null && data != null) {
 				CreateServerFromRSEJob job2 = new CreateServerFromRSEJob(type, data, instance);
-				if( initialHost != null ) {
+				if (initialHost != null) {
 					job2.setHost(initialHost);
 					return job2;
 				}
@@ -329,5 +412,5 @@
 		}
 		return j;
 	}
-	
+
 }
Index: META-INF/MANIFEST.MF
===================================================================
--- META-INF/MANIFEST.MF	(revision 29286)
+++ META-INF/MANIFEST.MF	(working copy)
@@ -30,4 +30,5 @@
  org.jboss.ide.eclipse.as.rse.core;bundle-version="[0.9.0,2.0.0)",
  org.eclipse.wst.server.core;bundle-version="[1.1.204,2.0.0)",
  org.eclipse.wst.server.ui;bundle-version="[1.1.205,2.0.0)",
- org.eclipse.jsch.core;bundle-version="1.1.200"
+ org.eclipse.jsch.core;bundle-version="1.1.200",
+ com.jcraft.jsch;bundle-version="0.1.41"
Index: src/org/jboss/tools/deltacloud/integration/wizard/CreateRSEFromInstanceJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/integration/wizard/CreateRSEFromInstanceJob.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/integration/wizard/CreateRSEFromInstanceJob.java	(working copy)
@@ -10,78 +10,112 @@
  *******************************************************************************/
 package org.jboss.tools.deltacloud.integration.wizard;
 
+import java.text.MessageFormat;
+
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubProgressMonitor;
 import org.eclipse.core.runtime.jobs.Job;
 import org.eclipse.core.runtime.preferences.InstanceScope;
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.rse.core.model.IHost;
-import org.eclipse.rse.core.subsystems.IConnectorService;
-import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
+import org.eclipse.rse.services.clientserver.messages.SystemOperationFailedException;
 import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
-import org.eclipse.swt.widgets.Display;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
 import org.jboss.tools.deltacloud.core.job.AbstractInstanceJob;
+import org.jboss.tools.deltacloud.integration.DeltaCloudIntegrationPlugin;
 import org.jboss.tools.deltacloud.integration.Messages;
+import org.jboss.tools.deltacloud.integration.rse.util.DeltaCloudRSEConstants;
 import org.jboss.tools.deltacloud.integration.rse.util.RSEUtils;
 import org.jboss.tools.deltacloud.ui.Activator;
-import org.jboss.tools.deltacloud.ui.ErrorUtils;
 import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
 import org.osgi.service.prefs.Preferences;
 
+import com.jcraft.jsch.JSchException;
+
 public class CreateRSEFromInstanceJob extends AbstractInstanceJob {
+	/** the timeout for trying to connect to the new instance */
+	private static final long CONNECT_TIMEOUT = 3 * 60 * 1000;
+
 	private Job nextJob2 = null;
+
 	public CreateRSEFromInstanceJob(DeltaCloudInstance instance, String family) {
 		super("Create RSE Host from DeltaCloud Instance", instance, family);
 	}
-	public IStatus doRun(IProgressMonitor monitor) {
+
+	public IStatus doRun(IProgressMonitor monitor) throws CoreException {
 		return runRSEJob(getInstance(), monitor);
 	}
-	
+
 	public void setNextJob(Job job) {
 		super.setNextJob(job);
 		this.nextJob2 = job;
 	}
-	
-	private IStatus runRSEJob(DeltaCloudInstance instance, IProgressMonitor monitor) {
-		String hostname = RSEUtils.createHostName(instance);
-		if (hostname != null && hostname.length() > 0 && isAutoconnect()) {
+
+	private IStatus runRSEJob(DeltaCloudInstance instance, IProgressMonitor monitor) throws CoreException {
+		if (monitor.isCanceled()) {
+			return Status.CANCEL_STATUS;
+		}
+
+		String hostname = RSEUtils.createRSEHostName(instance);
+		if (hostname == null || hostname.length() <= 0) {
+			return Status.CANCEL_STATUS;
+		}
+
+		if (isAutoconnect()) {
 			try {
-				monitor.beginTask("Create RSE Server", 100);
+				monitor.beginTask(MessageFormat.format("Create RSE to server {0}", hostname), 100);
 				String connectionName = RSEUtils.createConnectionName(instance);
-				IHost host = RSEUtils.createHost(connectionName,
-						RSEUtils.createHostName(instance),
+				IHost host = RSEUtils.createHost(
+						DeltaCloudRSEConstants.USERNAME,
+						connectionName,
+						RSEUtils.createRSEHostName(instance),
 						RSEUtils.getSSHOnlySystemType(),
 						RSEUtils.getSystemRegistry());
-				if( nextJob2 != null && nextJob2 instanceof CreateServerFromRSEJob) {
-					((CreateServerFromRSEJob)nextJob2).setHost(host);
+				if (nextJob2 != null && nextJob2 instanceof CreateServerFromRSEJob) {
+					((CreateServerFromRSEJob) nextJob2).setHost(host);
 				}
 				monitor.worked(10);
-				
-				SubProgressMonitor submon = new SubProgressMonitor(monitor, 90);
-				initialConnect(host);
-				return RSEUtils.connect(RSEUtils.getConnectorService(host), 90000, submon);
+				IStatus credentials =
+						triggerCredentialsDialog(host, new SubProgressMonitor(monitor, 10));
+				if (credentials.isOK())
+					return RSEUtils.connect(RSEUtils.getConnectorService(host), CONNECT_TIMEOUT,
+							new SubProgressMonitor(monitor, 80));
+				return credentials;
 			} catch (Exception e) {
-				return ErrorUtils.handleError(Messages.ERROR,
-						NLS.bind(Messages.COULD_NOT_LAUNCH_RSE_EXPLORER2, instance.getName()),
-						e, Display.getDefault().getActiveShell());
+				throw new CoreException(
+						new Status(IStatus.ERROR, DeltaCloudIntegrationPlugin.PLUGIN_ID,
+								NLS.bind(Messages.COULD_NOT_LAUNCH_RSE_EXPLORER2, instance.getName())));
 			}
 		}
 		return Status.OK_STATUS;
 	}
-	
-	private void initialConnect(IHost host) {
+
+	private IStatus triggerCredentialsDialog(IHost host, IProgressMonitor monitor) {
 		try {
+			monitor.setTaskName(MessageFormat.format("Initiating connection to {0}...", host.getName()));
 			IRemoteFileSubSystem system = RSEUtils.findRemoteFileSubSystem(host);
-			system.connect(new NullProgressMonitor(), true);
-		} catch(Exception e) {
-			// ignore, expected, the server probably isn't up yet. 
+			system.connect(monitor, true /* force credentials dialog */);
+		} catch (Exception e) {
+			if (e instanceof OperationCanceledException)
+				return Status.CANCEL_STATUS;
+			if (e instanceof SystemOperationFailedException) {
+				Exception f = ((SystemOperationFailedException) e).getRemoteException();
+				if (f != null && f instanceof JSchException) {
+					// User selected No on accept hostkey
+					if (f.getMessage().contains("reject HostKey:"))
+						return Status.CANCEL_STATUS;
+				}
+			}
+		} finally {
+			monitor.done();
 		}
+		return Status.OK_STATUS;
 	}
-	
+
 	private boolean isAutoconnect() {
 		Preferences prefs = new InstanceScope().getNode(Activator.PLUGIN_ID);
 		boolean autoConnect = prefs.getBoolean(IDeltaCloudPreferenceConstants.AUTO_CONNECT_INSTANCE, true);
Index: src/org/jboss/tools/deltacloud/integration/rse/util/RSEUtils.java
===================================================================
--- src/org/jboss/tools/deltacloud/integration/rse/util/RSEUtils.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/integration/rse/util/RSEUtils.java	(working copy)
@@ -29,20 +29,25 @@
 import org.eclipse.rse.core.model.ISystemRegistry;
 import org.eclipse.rse.core.model.SystemStartHere;
 import org.eclipse.rse.core.subsystems.IConnectorService;
+import org.eclipse.rse.core.subsystems.ISubSystem;
+import org.eclipse.rse.services.clientserver.messages.SystemOperationFailedException;
 import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.ui.PartInitException;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
 import org.jboss.tools.deltacloud.integration.DeltaCloudIntegrationPlugin;
 import org.jboss.tools.deltacloud.integration.Messages;
-import org.jboss.tools.deltacloud.integration.wizard.CreateServerFromRSEJob;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
+
+import com.jcraft.jsch.JSchException;
 
 /**
  * @author André Dietisheim
+ * @author Rob Stryker
  */
 public class RSEUtils {
 
+	private static final int RECONNECT_WAIT = 5000;
 	private static final String VIEW_REMOTESYSEXPLORER_ID = "org.eclipse.rse.ui.view.systemView";
 
 	public static IRSESystemType getSSHOnlySystemType() {
@@ -68,26 +73,32 @@
 		return instance.getAlias();
 	}
 
-	public static String createHostName(DeltaCloudInstance instance) {
-		Assert.isLegal(instance != null, "Cannot get hostname: instance is not defined");
-
-		String hostName = instance.getHostName();
-		Assert.isTrue(hostName != null && hostName.length() > 0,
-				MessageFormat.format("Cannot get host name: not defined for instance {0}", instance.getName()));
-		return hostName;
+	/**
+	 * Returns the RSE host name for the given instance. Returns
+	 * <code>null</code> if the instance is <code>null</null>.
+	 * 
+	 * @param instance
+	 *            the instance to use to determine the host name for RSE
+	 * @return the hostname
+	 */
+	public static String createRSEHostName(DeltaCloudInstance instance) {
+		if (instance == null) {
+			return null;
+		}
+		return instance.getHostName();
 	}
 
-	public static IHost createHost(String connectionName, String hostname, IRSESystemType systemType,
+	public static IHost createHost(String username, String connectionName, String hostname, IRSESystemType systemType,
 			ISystemRegistry systemRegistry) throws Exception {
 		// TODO: Internationalize strings
 		Assert.isLegal(connectionName != null && connectionName.length() > 0,
 				"Cannot create Host: connectionName is not defined");
 		Assert.isLegal(hostname != null && hostname.length() > 0, "Cannot create Host: hostname is not defined");
-		Assert.isLegal(systemType != null, "Cannot create Host: system type is not defined");
-		Assert.isLegal(systemRegistry != null, "Cannot create Host: system registry is not defined");
+		Assert.isNotNull(systemType, "Cannot create Host: system type is not defined");
+		Assert.isNotNull(systemRegistry, "Cannot create Host: system registry is not defined");
 
 		IHost host = systemRegistry.createHost(systemType, connectionName, hostname, null);
-		host.setDefaultUserId("jboss"); //$NON-NLS-1$
+		host.setDefaultUserId(username); //$NON-NLS-1$
 		return host;
 	}
 
@@ -99,45 +110,106 @@
 		return services[0];
 	}
 
-	public static void verifySystemConnected(IRemoteFileSubSystem system) {
-		CreateServerFromRSEJob.verifySystemConnected(system);
-	}
-
 	public static IStatus connect(IConnectorService service, IProgressMonitor monitor) throws Exception {
-		monitor.worked(1);
+		monitor.setTaskName(MessageFormat.format("Connecting to {0}...", getHostName(service)));
 		service.connect(monitor);
-		monitor.done();
+		monitor.setTaskName(MessageFormat.format("Connected to {0}.", getHostName(service)));
 		return Status.OK_STATUS;
 	}
-	
-	public static IStatus connect(IConnectorService service, int timeout, IProgressMonitor monitor)  {
-		monitor.beginTask("Connecting to remote server", timeout);
-		monitor.setTaskName("Connecting to remote server");
-		IStatus status = null;
-		int count = 0;
-		while( status == null && count < timeout && !monitor.isCanceled()) {
+
+	public static IStatus connect(IRemoteFileSubSystem service, IProgressMonitor monitor) throws Exception {
+		Assert.isNotNull(service, "No service defined to connect to");
+
+		String hostName = getHostName(service);
+		monitor.setTaskName(MessageFormat.format("Connecting to {0}...", hostName));
+		service.connect(monitor, false);
+		monitor.setTaskName(MessageFormat.format("Connected to server {0}.", hostName));
+		return Status.OK_STATUS;
+	}
+
+	public static String getHostName(IRemoteFileSubSystem service) {
+		String hostName = "";
+		if (service.getHost() != null) {
+			hostName = service.getHost().getName();
+		}
+		return hostName;
+	}
+
+	public static String getHostName(IConnectorService service) {
+		String hostName = "";
+		if (service.getHost() != null) {
+			hostName = service.getHost().getName();
+		}
+		return hostName;
+	}
+
+	/**
+	 * Tries to connects to the given service for the given time. Progress will
+	 * be reported on the given monitor.
+	 * 
+	 * @param service
+	 *            the service to connect to
+	 * @param timeout
+	 *            the timeout to apply
+	 * @param monitor
+	 *            the monitor
+	 * @return the restult of the connection attempt
+	 * @throws Exception
+	 */
+	public static IStatus connect(IConnectorService service, long timeout, IProgressMonitor monitor) throws Exception {
+		long start = System.currentTimeMillis();
+		double scale = (double) 100 / timeout;
+		long current = start;
+		long last = start;
+		monitor.beginTask(MessageFormat.format("Connecting to {0}...", getHostName(service)), 100);
+		while (!monitor.isCanceled()) {
+			current = System.currentTimeMillis();
 			try {
-				status = connect(service, monitor);
-				monitor.done();
-				return status;
-			} catch(OperationCanceledException oce) {
+				return connect(service, monitor);
+			} catch (OperationCanceledException oce) {
 				monitor.done();
 				return Status.CANCEL_STATUS;
-			} catch(Exception e) {
-				count += 1000;
-				monitor.worked(1000);
-				try {
-					Thread.sleep(1000);
-				} catch(InterruptedException ie) {
+			} catch (Exception e) {
+				if (didUserNotAcceptKey(e)) {
+					return Status.CANCEL_STATUS;
 				}
+
+				monitor.setTaskName(
+						MessageFormat.format("Could not connect to {0}. Trying again...", getHostName(service)));
+				monitor.worked(getProgress(current, last, scale));
+				last = current;
+				if (current < start + timeout) {
+					try {
+						Thread.sleep(RECONNECT_WAIT);
+					} catch (InterruptedException ie) {
+						break;
+					}
+				} else {
+					monitor.done();
+					throw e;
+				}
+			}
+		}
+		return Status.CANCEL_STATUS;
+	}
+
+	private static boolean didUserNotAcceptKey(Exception e) {
+		if (e instanceof SystemOperationFailedException) {
+			Throwable t = ((SystemOperationFailedException) e).getRemoteException();
+			if (t instanceof JSchException) {
+				return t.getMessage() != null
+						&& t.getMessage().contains("reject HostKey:");
 			}
 		}
-		monitor.done();
-		return status;
+		return false;
+	}
+
+	private static int getProgress(long current, long last, double scale) {
+		double progress = (current - last) * scale;
+		return (int) Math.ceil(progress);
 	}
-		
-	
-	public static Job connect(String connectionName, final IConnectorService service)
+
+	public static Job connect(final String connectionName, final IConnectorService service)
 			throws Exception {
 		// TODO: internationalize strings
 		Assert.isLegal(connectionName != null,
@@ -148,10 +220,16 @@
 			@Override
 			protected IStatus run(IProgressMonitor monitor) {
 				try {
-					return connect(service, monitor);
-				} catch(Exception e) {
+					monitor.beginTask(NLS.bind(Messages.RSE_CONNECTING_MESSAGE, connectionName),
+							IProgressMonitor.UNKNOWN);
+					IStatus status = connect(service, monitor);
+					monitor.setTaskName(MessageFormat.format("Connected to {0}", getHostName(service)));
+					monitor.done();
+					return status;
+				} catch (Exception e) {
 					e.printStackTrace();
-					// odd behavior: service reports connection failure even if things seem to work (view opens up with connection in it)
+					// odd behavior: service reports connection failure even if
+					// things seem to work (view opens up with connection in it)
 					// ignore errors since things work
 					//
 					// return StatusFactory.getInstance(IStatus.ERROR,
@@ -182,14 +260,15 @@
 			@Override
 			public void run() {
 				try {
-					UIUtils.showView(VIEW_REMOTESYSEXPLORER_ID);
+					WorkbenchUtils.showView(VIEW_REMOTESYSEXPLORER_ID);
 				} catch (PartInitException e) {
 					// I have no idea wtf is wrong here
 					// but my dev environment will not let me use common classes
-//					IStatus status = StatusFactory.getInstance(IStatus.ERROR, 
-//							DeltaCloudIntegrationPlugin.PLUGIN_ID, e.getMessage(), e);
+					// IStatus status = StatusFactory.getInstance(IStatus.ERROR,
+					// DeltaCloudIntegrationPlugin.PLUGIN_ID, e.getMessage(),
+					// e);
 					Status status = new Status(IStatus.ERROR, DeltaCloudIntegrationPlugin.PLUGIN_ID, e.getMessage(), e);
-					ErrorDialog.openError(UIUtils.getActiveShell(),
+					ErrorDialog.openError(WorkbenchUtils.getActiveShell(),
 								Messages.ERROR,
 								Messages.COULD_NOT_LAUNCH_RSE_EXPLORER,
 							status);
@@ -197,9 +276,17 @@
 			}
 		});
 	}
-	
+
 	public static IRemoteFileSubSystem findRemoteFileSubSystem(IHost host) {
-		return CreateServerFromRSEJob.findRemoteFileSubSystem(host);
+		if (host == null) {
+			return null;
+		}
+		ISubSystem[] systems = RSECorePlugin.getTheSystemRegistry().getSubSystems(host);
+		for (int i = 0; i < systems.length; i++) {
+			if (systems[i] instanceof IRemoteFileSubSystem) {
+				return (IRemoteFileSubSystem) systems[i];
+			}
+		}
+		return null;
 	}
-
 }
Index: src/org/jboss/tools/deltacloud/integration/wizard/ConvertRSEToServerWizard.java
===================================================================
--- src/org/jboss/tools/deltacloud/integration/wizard/ConvertRSEToServerWizard.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/integration/wizard/ConvertRSEToServerWizard.java	(working copy)
@@ -22,7 +22,7 @@
 	
 	@Override
 	public boolean performFinish() {
-		Job j = page1.getPerformFinishJob(instance);
+		Job j = page1.createPerformFinishJob(instance);
 		if( j != null ) {
 			j.schedule();
 		}
Index: src/org/jboss/tools/deltacloud/integration/wizard/CreateServerFromRSEJob.java
===================================================================
--- src/org/jboss/tools/deltacloud/integration/wizard/CreateServerFromRSEJob.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/integration/wizard/CreateServerFromRSEJob.java	(working copy)
@@ -17,6 +17,7 @@
 import java.io.Reader;
 import java.io.StringWriter;
 import java.io.Writer;
+import java.text.MessageFormat;
 import java.util.Iterator;
 import java.util.Properties;
 
@@ -28,9 +29,7 @@
 import org.eclipse.core.runtime.Path;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.rse.core.RSECorePlugin;
 import org.eclipse.rse.core.model.IHost;
-import org.eclipse.rse.core.subsystems.ISubSystem;
 import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
 import org.eclipse.rse.subsystems.files.core.subsystems.IRemoteFileSubSystem;
 import org.eclipse.swt.SWT;
@@ -53,6 +52,7 @@
 
 /**
  * @author Rob Stryker
+ * @author André Dietisheim
  */
 public class CreateServerFromRSEJob extends ChainedJob {
 	public static final String JBOSS_HOME_KEY = "JBOSS_HOME";
@@ -60,18 +60,18 @@
 	public static final String CREATE_DEPLOY_ONLY_SERVER = "CREATE_DEPLOY_ONLY_SERVER";
 	public static final String CHECK_SERVER_FOR_DETAILS = "CHECK_SERVER_FOR_DETAILS";
 	public static final String SET_DETAILS_NOW = "SET_DETAILS_NOW";
-	
+
 	private String type;
 	private String[] data;
 	private IHost host;
 	private String imageId;
 	private DeltaCloudInstance instance;
-	
+
 	public CreateServerFromRSEJob(String type, String[] data, DeltaCloudInstance instance) {
 		this(type, data, instance.getImageId());
 		this.instance = instance;
 	}
-	
+
 	public CreateServerFromRSEJob(String type, String[] data, String imageId) {
 		super("Create Server From RSE Host");
 		this.data = data;
@@ -82,55 +82,40 @@
 	public void setHost(IHost host) {
 		this.host = host;
 	}
-	
+
 	protected IStatus run(IProgressMonitor monitor) {
 		try {
-			IServer result = null;
-			if( type.equals(CREATE_DEPLOY_ONLY_SERVER) ) {
-				result = createDeployOnlyServer();
-			} else if( type.equals(CHECK_SERVER_FOR_DETAILS )) {
-				result = createServerCheckRemoteDetails();
-			} else if( type.equals(SET_DETAILS_NOW)) {
-				result = createServerSetDetailsNow();
+			monitor.setTaskName(MessageFormat.format("Creating server adapter for {0}...", getHostName()));
+			if (type.equals(CREATE_DEPLOY_ONLY_SERVER)) {
+				createDeployOnlyServer();
+			} else if (type.equals(CHECK_SERVER_FOR_DETAILS)) {
+				createServerCheckRemoteDetails(monitor);
+			} else if (type.equals(SET_DETAILS_NOW)) {
+				createServerSetDetailsNow();
 			}
-		} catch(CoreException ce) {
+		} catch (CoreException ce) {
 			return ce.getStatus();
+		} finally {
+			monitor.done();
 		}
+
 		return Status.OK_STATUS;
 	}
+
+	private Object getHostName() {
+		String hostname = "";
+		if (host != null) {
+			hostname = host.getName();
+		}
+		return hostname;
+	}
+
 	protected IServer createDeployOnlyServer() throws CoreException {
 		IServer server = createDeployOnlyServerWithRuntime(data[0], data[0], imageId);
 		server = RSEUtils.setServerToRSEMode(server, host);
 		return server;
 	}
-	
-	// TODO move to util class
-	public static IRemoteFileSubSystem findRemoteFileSubSystem(IHost host) {
-		if (host == null) {
-			return null;
-		}
-		ISubSystem[] systems = RSECorePlugin.getTheSystemRegistry().getSubSystems(host);
-		for( int i = 0; i < systems.length; i++ ) {
-			if(systems[i] instanceof IRemoteFileSubSystem ) {
-				return (IRemoteFileSubSystem)systems[i];
-			}
-		}
-		return null;
-	}
-	protected IRemoteFileSubSystem findRemoteFileSubSystem() {
-		return findRemoteFileSubSystem(host);
-	}
-	// TODO move to utility class
-	public static void verifySystemConnected(IRemoteFileSubSystem system) {
-		if (!system.isConnected()) {
-		    try {
-		    	system.connect(new NullProgressMonitor(), false);
-		    } catch (Exception e) {
-		    	e.printStackTrace();
-		    }
-		}
-	}
-	
+
 	protected String loadRemoteFileData(String path, IRemoteFileSubSystem system) throws CoreException {
 		Throwable e;
 		IPath p = new Path(path);
@@ -138,15 +123,16 @@
 		String remoteFile = p.lastSegment();
 		try {
 			boolean exists = system.getRemoteFileObject(path, new NullProgressMonitor()).exists();
-			if( !exists ) {
+			if (!exists) {
 				throw new CoreException(new Status(IStatus.ERROR, DeltaCloudIntegrationPlugin.PLUGIN_ID, 
-						"Remote file " + path + " does not exist."));
+						MessageFormat.format("Remote file {0} not found ", path)));
 			}
-			
+
 			Writer writer = new StringWriter();
 			char[] buffer = new char[1024];
-			
-			InputStream is = system.getInputStream(remoteParent.toOSString(), remoteFile, false, new NullProgressMonitor());
+
+			InputStream is = system.getInputStream(remoteParent.toOSString(), remoteFile, false,
+					new NullProgressMonitor());
 			Reader reader = new BufferedReader(new InputStreamReader(is));
 			int n;
 			try {
@@ -157,36 +143,36 @@
 			} finally {
 				is.close();
 			}
-		} catch(SystemMessageException sme) {
+		} catch (SystemMessageException sme) {
 			e = sme;
-		} catch(IOException ioe) {
+		} catch (IOException ioe) {
 			e = ioe;
 		}
-		if( e.getCause() != null )
+		if (e.getCause() != null)
 			e = e.getCause();
-		if( e != null )
-			throw new CoreException(new Status(IStatus.ERROR, DeltaCloudIntegrationPlugin.PLUGIN_ID, 
-					e.getMessage() ));
+		if (e != null)
+			throw new CoreException(new Status(IStatus.ERROR, DeltaCloudIntegrationPlugin.PLUGIN_ID,
+					e.getMessage()));
 		return null;
 	}
-	
+
 	protected Properties turnRemoteFileIntoProperties(String content) {
 		Properties p = new Properties();
-		if( content == null )
+		if (content == null)
 			return p;
 		String[] byLine = content.split("\n");
 		String line, key, val;
 		int eqIn;
-		for( int i = 0; i < byLine.length; i++ ) {
+		for (int i = 0; i < byLine.length; i++) {
 			line = byLine[i].trim();
 			eqIn = line.indexOf("=");
-			if( eqIn != -1 ) {
+			if (eqIn != -1) {
 				key = line.substring(0, eqIn);
-				val = line.substring(eqIn+1);
-				while(val.contains("$")) {
+				val = line.substring(eqIn + 1);
+				while (val.contains("$")) {
 					String tmpKey;
-					Iterator j = p.keySet().iterator();
-					while(j.hasNext()) {
+					Iterator<?> j = p.keySet().iterator();
+					while (j.hasNext()) {
 						tmpKey = j.next().toString();
 						val = val.replace("$" + tmpKey, p.getProperty(tmpKey));
 					}
@@ -196,89 +182,99 @@
 		}
 		return p;
 	}
-	
-	protected IServer createServerCheckRemoteDetails() throws CoreException {
-		IRemoteFileSubSystem system = findRemoteFileSubSystem();
-		if( system != null ) {
-			verifySystemConnected(system);
+
+	protected void createServerCheckRemoteDetails(IProgressMonitor monitor) throws CoreException {
+		IRemoteFileSubSystem system = org.jboss.tools.deltacloud.integration.rse.util.RSEUtils.findRemoteFileSubSystem(host);
+		if (system != null) {
+			ensureIsConnected(system, monitor);
+
 			String contents = null;
 			CoreException ce = null;
 			try {
 				contents = loadRemoteFileData(data[0], system);
-			} catch( CoreException ce2) {
+			} catch (CoreException ce2) {
 				ce = ce2;
 			}
-						
+
 			Properties props = turnRemoteFileIntoProperties(contents);
 			String home = (String) props.get(JBOSS_HOME_KEY);
 			String config = (String) props.get(JBOSS_CONFIG_KEY);
-			
-			
-			if( home != null && config != null ) {
+
+			if (home != null && config != null) {
 				String rtId = data[1];
 				IRuntime runtime = ServerCore.findRuntime(rtId);
 				IServer newServer = null;
 				newServer = ServerCreationUtils.createServer2(instance.getAlias(), runtime);
 				newServer = RSEUtils.setServerToRSEMode(newServer, host, home, config);
-				return newServer;
+				return;
 			}
-			
-			// Handle the case in which the file doesn't exist, or home / config are null
+
+			// Handle the case in which the file doesn't exist, or home /
+			// config
+			// are null
 			final Properties props2 = props;
 			final Exception ce2 = ce;
-			Display.getDefault().asyncExec(new Runnable(){
+			Display.getDefault().asyncExec(new Runnable() {
 				public void run() {
 					handleRemoteFileIncomplete(host, props2, ce2);
 				}
 			});
 		}
-		return null;
+	}
+
+	private void ensureIsConnected(IRemoteFileSubSystem system, IProgressMonitor monitor) throws CoreException {
+		try {
+			org.jboss.tools.deltacloud.integration.rse.util.RSEUtils.connect(system, monitor);
+		} catch (Exception e) {
+			throw new CoreException(
+					new Status(IStatus.ERROR, DeltaCloudIntegrationPlugin.PLUGIN_ID, MessageFormat.format(
+							"Could not connect to host {0}", system.getName()), e));
+		}
 	}
-	
+
 	protected IServer handleRemoteFileIncomplete(IHost host, Properties props, Exception e) {
 		String message = "";
-		if( e != null ) { 
+		if (e != null) {
 			message = "Error reading remote file: " + data[0] + ", " + e.getMessage();
 		} else {
 			String home = (String) props.get(JBOSS_HOME_KEY);
 			String config = (String) props.get(JBOSS_CONFIG_KEY);
-			if( home == null )
+			if (home == null)
 				message += "Remote property file missing JBOSS_HOME property.\n";
-			if( config == null )
+			if (config == null)
 				message += "Remote property file missing JBOSS_CONFIG property.";
 		}
 		message += "\n\nTry again?";
-		
-        MessageBox messageBox = new MessageBox(new Shell(), SWT.ICON_WARNING | SWT.OK | SWT.CANCEL);
-        messageBox.setText("Cannot create Server"); 
-        messageBox.setMessage(message);
-        int buttonID = messageBox.open();
-        switch(buttonID) {
-          case SWT.OK:
-            // saves changes ...
-        	  ConvertRSEToServerWizard w = new ConvertRSEToServerWizard(instance, host);
-        	  new WizardDialog(new Shell(), w).open();
-        	  break;
-          case SWT.CANCEL:
-            break;
-        }
+
+		MessageBox messageBox = new MessageBox(new Shell(), SWT.ICON_WARNING | SWT.OK | SWT.CANCEL);
+		messageBox.setText("Cannot create Server");
+		messageBox.setMessage(message);
+		int buttonID = messageBox.open();
+		switch (buttonID) {
+		case SWT.OK:
+			// saves changes ...
+			ConvertRSEToServerWizard w = new ConvertRSEToServerWizard(instance, host);
+			new WizardDialog(new Shell(), w).open();
+			break;
+		case SWT.CANCEL:
+			break;
+		}
 		return null;
 	}
-	
-	protected IServer createServerSetDetailsNow() throws CoreException {
+
+	protected void createServerSetDetailsNow() throws CoreException {
 		String home = data[0];
 		String config = data[1];
 		String rtId = data[2];
 		IRuntime runtime = ServerCore.findRuntime(rtId);
 		IServer newServer = ServerCreationUtils.createServer2(instance.getAlias(), runtime);
 		newServer = RSEUtils.setServerToRSEMode(newServer, host, home, config);
-		return newServer;
 	}
-	
+
 	private static IRuntime findOrCreateStubDeployOnlyRuntime() throws CoreException {
 		IRuntime[] rts = ServerCore.getRuntimes();
-		for( int i = 0; i < rts.length; i++ ) {
-			if( rts[i].getRuntimeType().getId().equals("org.jboss.ide.eclipse.as.runtime.stripped")) {
+		for (int i = 0; i < rts.length; i++) {
+			if (rts[i].getRuntimeType().getId().equals("org.jboss.ide.eclipse.as.runtime.stripped")) {
 				return rts[i];
 			}
 		}
@@ -287,8 +283,8 @@
 		IRuntime runtime = wc.save(true, null);
 		return runtime;
 	}
-	
-	private static IServer createDeployOnlyServerWithRuntime(String deployLocation, String tempDeployLocation, 
+
+	private static IServer createDeployOnlyServerWithRuntime(String deployLocation, String tempDeployLocation,
 			String serverName) throws CoreException {
 		IRuntime rt = findOrCreateStubDeployOnlyRuntime();
 		IServerType st = ServerCore.findServerType("org.jboss.ide.eclipse.as.systemCopyServer");
Index: src/org/jboss/tools/deltacloud/integration/rse/util/DeltaCloudRSEConstants.java
===================================================================
--- src/org/jboss/tools/deltacloud/integration/rse/util/DeltaCloudRSEConstants.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/integration/rse/util/DeltaCloudRSEConstants.java	(revision 0)
@@ -0,0 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.integration.rse.util;
+
+public class DeltaCloudRSEConstants {
+
+	/** the username to use when connecting with RSE */ 
+	public static final String USERNAME = "jboss";
+
+}
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29180)
+++ ChangeLog	(working copy)
@@ -1,3 +1,33 @@
+2011-02-18  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/integration/wizard/RSEandASWizardPage.java 
+	(storeSelection): 
+	(verifyPageComplete): 
+	(getSelectionIndex): 
+	(fillRuntimeTypeCombo): 
+	[JBIDE-8333] now persisting last selected realm and profile per cloud.
+	
+2011-02-15  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/integration/wizard/CreateRSEFromInstanceJob.java (runRSEJob): 
+	* src/org/jboss/tools/deltacloud/integration/rse/util/RSEUtils.java (createRSEHostName): 
+	[JBIDE-8423] not failing with assertion caused exception if no hostname is provided. Just cancelling job then.
+
+2011-02-10  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/integration/wizard/CreateRSEFromInstanceJob.java 
+	(runRSEJob): 
+	(CONNECT_TIMEOUT): 
+	* src/org/jboss/tools/deltacloud/integration/rse/util/RSEUtils.java 
+	(connect): 	
+	(getProgress): 
+	[JBIDE-8354] removed case where null-status was returned, decreased timeout to 3 minutes, now reporting real lapse of time (was: simple stepwise increase), 
+
+2011-02-07  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/integration/wizard/RSEandASWizardPage.java (createControl): 
+	[JBIDE-8341] added history proposals to text fields when launching a new instance
+
 2011-02-02  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
 
 	* src/org/jboss/tools/deltacloud/integration/wizard/RSEandASWizardPage.java (createControl): 
@@ -11,8 +41,8 @@
 	(createControl): 
 	[JBIDE-8291] Server adapter is not created by default any more	
 	* src/org/jboss/tools/deltacloud/integration/wizard/CreateServerFromRSEJob.java 
-	(createServerSetDetailsNow): 
 	(createServerCheckRemoteDetails): 
+	(createServerSetDetailsNow): 
 	* src/org/jboss/tools/deltacloud/integration/rse/util/RSEUtils.java (createConnectionName): 
 	[JBIDE-8292] Server Adapter and RSE now use instance alias as name
 
Index: src/org/jboss/tools/deltacloud/integration/rse/util/ShowInRemoteSystemExplorerHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/integration/rse/util/ShowInRemoteSystemExplorerHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/integration/rse/util/ShowInRemoteSystemExplorerHandler.java	(working copy)
@@ -24,7 +24,7 @@
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
 import org.jboss.tools.deltacloud.integration.DeltaCloudIntegrationPlugin;
 import org.jboss.tools.deltacloud.integration.Messages;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * @author Andre Dietisheim
@@ -35,11 +35,13 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		if (selection instanceof IStructuredSelection) {
-			DeltaCloudInstance instance = UIUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
+			DeltaCloudInstance instance = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
 			try {
 				String connectionName = RSEUtils.createConnectionName(instance);
-				IHost host = RSEUtils.createHost(connectionName, 
-						RSEUtils.createHostName(instance),
+				IHost host = RSEUtils.createHost(
+						DeltaCloudRSEConstants.USERNAME,
+						connectionName, 
+						RSEUtils.createRSEHostName(instance),
 						RSEUtils.getSSHOnlySystemType(), 
 						RSEUtils.getSystemRegistry());
 				Job connectJob = RSEUtils.connect(connectionName, RSEUtils.getConnectorService(host));
#P org.jboss.tools.deltacloud.ui
Index: src/org/jboss/tools/deltacloud/ui/commands/CreateInstanceFromSpecificImageHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/CreateInstanceFromSpecificImageHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/CreateInstanceFromSpecificImageHandler.java	(working copy)
@@ -23,7 +23,7 @@
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudImage;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 import org.jboss.tools.internal.deltacloud.ui.wizards.NewInstanceWizard;
 
 /**
@@ -35,7 +35,7 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		if (selection instanceof IStructuredSelection) {
-			DeltaCloudImage deltaCloudImage = UIUtils.getFirstAdaptedElement(selection, DeltaCloudImage.class);
+			DeltaCloudImage deltaCloudImage = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloudImage.class);
 			createInstance(deltaCloudImage, HandlerUtil.getActiveShell(event));
 		}
 
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/SshPrivateKeysPreferences.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/SshPrivateKeysPreferences.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/SshPrivateKeysPreferences.java	(working copy)
@@ -16,8 +16,8 @@
 import org.eclipse.core.runtime.Platform;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
 import org.jboss.tools.deltacloud.core.client.utils.StringUtils;
-import org.jboss.tools.internal.deltacloud.ui.preferences.StringEntriesPreferenceValue;
-import org.jboss.tools.internal.deltacloud.ui.preferences.StringPreferenceValue;
+import org.jboss.tools.deltacloud.ui.preferences.StringPreferenceValue;
+import org.jboss.tools.deltacloud.ui.preferences.StringsPreferenceValue;
 
 /**
  * @author André Dietisheim
@@ -36,8 +36,8 @@
 	private static final String SSH_USERHOME = ".ssh";
 	private static final String SSH_USERHOME_WIN32 = "ssh";
 
-	private static StringEntriesPreferenceValue sshPrivateKeyPreference =
-			new StringEntriesPreferenceValue(",", PRIVATEKEY, PLUGIN_ID);
+	private static StringsPreferenceValue sshPrivateKeyPreference =
+			new StringsPreferenceValue(',', PRIVATEKEY, PLUGIN_ID);
 	private static StringPreferenceValue sshHome = new StringPreferenceValue(SSH2HOME, PLUGIN_ID);
 
 	/**
Index: src/org/jboss/tools/deltacloud/ui/views/CVMessages.properties
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/CVMessages.properties	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/CVMessages.properties	(working copy)
@@ -53,7 +53,7 @@
 StartInstancesDialogError.title=Error while starting instance(s)
 StartInstancesDialogError.msg=Could not start instance(s) {0}
 StoppingInstance.title=Stopping Instance
-StoppingInstance.msg=Stopping Instance: {0}
+StoppingInstance.msg=Stopping Instance {0}
 StopInstancesDialog.title=Stop Instances
 StopInstancesDialog.msg=Please choose the instances that shall be stopped by checking them:
 StopInstancesDialogError.title=Error while stopping instance(s)
@@ -70,15 +70,20 @@
 DestroyInstancesDialog.msg=Please choose the clouds that shall be destroyed by checking them:
 DestroyInstancesDialogError.title=Error while destroying instance(s)
 DestroyInstancesDialogError.msg=Could not destroy instance(s) {0}
-ConnectingRSE.msg=Connecting instance as: {0}
+ConnectingRSE.msg=Connecting instance as {0}
 ConfirmCloudDelete.title=Confirm Cloud Disconnect
 ConfirmCloudDelete.msg=Please choose the clouds that shall be disconnected by checking them:
 CreateInstance.label=Launch Instance
 
-NAME=Name
-ALIAS=Alias
-ID=ID
-HOSTNAME=Public Hostname
-STATUS=State
-ARCH=Architecture
-DESC=Description
\ No newline at end of file
+DeltaCloudElementColumn.name.label=Name
+DeltaCloudElementColumn.alias.label=Alias
+DeltaCloudElementColumn.id.label=Id
+DeltaCloudElementColumn.imageId.label=Image Id
+DeltaCloudElementColumn.ownerId.label=Owner Id
+DeltaCloudElementColumn.keyId.label=Key Id
+DeltaCloudElementColumn.realm.label=Realm
+DeltaCloudElementColumn.profile.label=Profile
+DeltaCloudElementColumn.state.label=State
+DeltaCloudElementColumn.hostname.label=Public Hostname
+DeltaCloudElementColumn.architecture.label=Architecture
+DeltaCloudElementColumn.description.label=Description
\ No newline at end of file
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/EditCloudConnectionWizard.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/EditCloudConnectionWizard.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/EditCloudConnectionWizard.java	(working copy)
@@ -12,9 +12,14 @@
 
 import java.text.MessageFormat;
 
+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.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.deltacloud.core.Driver;
-import org.jboss.tools.deltacloud.ui.ErrorUtils;
+import org.jboss.tools.deltacloud.core.DeltaCloudDriver;
+import org.jboss.tools.deltacloud.core.job.AbstractCloudJob;
+import org.jboss.tools.internal.deltacloud.ui.utils.WizardUtils;
 
 /**
  * @author Jeff Johnston
@@ -30,19 +35,30 @@
 
 	@Override
 	public boolean performFinish() {
-		String name = mainPage.getModel().getName();
-		String url = mainPage.getModel().getUrl();
-		String username = mainPage.getModel().getUsername();
-		String password = mainPage.getModel().getPassword();
-		Driver driver = mainPage.getModel().getDriver();
+		String name = mainPage.getConnectionName();
+		String url = mainPage.getUrl();
+		String username = mainPage.getUsername();
+		String password = mainPage.getPassword();
+		DeltaCloudDriver driver = mainPage.getDriver();
+		return editCloud(initialCloud, name, url, username, password, driver);
+	}
+
+	private boolean editCloud(final DeltaCloud cloud, final String name, final String url, final String username,
+			final String password, final DeltaCloudDriver driver) {
 		try {
-			initialCloud.update(name, url, username, password, driver);
+			Job job = new AbstractCloudJob(MessageFormat.format("Edit cloud \"{0}\"", cloud.getName()), cloud) {
+
+				@Override
+				protected IStatus doRun(IProgressMonitor monitor) throws Exception {
+					initialCloud.update(name, url, username, password, driver);
+					return Status.OK_STATUS;
+				}
+			};
+			WizardUtils.runInWizard(job, getContainer());
+			return job.getResult() != null && job.getResult().getCode() != IStatus.ERROR;
 		} catch (Exception e) {
-			// TODO internationalize strings
-			ErrorUtils.handleError("Error",
-					MessageFormat.format("Could not edit cloud \"{0}\"", initialCloud.getName()),
-					e, getShell());
+			return false;
 		}
-		return true;
 	}
+
 }
Index: src/org/jboss/tools/deltacloud/ui/commands/AbstractInstanceHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/AbstractInstanceHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/AbstractInstanceHandler.java	(working copy)
@@ -15,10 +15,11 @@
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
+import org.jboss.tools.deltacloud.core.DeltaCloudResourceAction;
 import org.jboss.tools.deltacloud.core.client.utils.StringUtils;
 import org.jboss.tools.deltacloud.core.client.utils.StringUtils.IElementFormatter;
 import org.jboss.tools.deltacloud.core.job.InstanceActionJob;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * A base handler that instance related handler may extend
@@ -27,7 +28,7 @@
  */
 public abstract class AbstractInstanceHandler extends AbstractHandler implements IHandler {
 
-	protected void executeInstanceAction(DeltaCloudInstance instance, DeltaCloudInstance.Action action,
+	protected void executeInstanceAction(DeltaCloudInstance instance, DeltaCloudResourceAction action,
 			DeltaCloudInstance.State expectedState, String title, String message) {
 		if (instance != null) {
 			new InstanceActionJob(message, instance, action, expectedState)
@@ -36,7 +37,7 @@
 	}
 
 	protected boolean isSingleInstanceSelected(ISelection selection) {
-		return UIUtils.isSingleSelection(selection, DeltaCloudInstance.class);
+		return WorkbenchUtils.isSingleSelection(selection, DeltaCloudInstance.class);
 	}
 
 	@SuppressWarnings("unchecked")
@@ -48,7 +49,7 @@
 					public String format(Object element) {
 						if (element instanceof DeltaCloudInstance) {
 							return new StringBuilder()
-									.append(((DeltaCloudInstance) element).getName())
+									.append(((DeltaCloudInstance) element).getAlias())
 									.append(",")
 									.toString();
 						} else {
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysPageModel.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysPageModel.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysPageModel.java	(working copy)
@@ -55,7 +55,7 @@
 			return null;
 		}
 		DeltaCloudKey keyToDelete = selectedKey;
-		cloud.deleteKey(keyToDelete.getId());
+		cloud.delete(keyToDelete);
 		int index = keys.indexOf(keyToDelete);
 		keys.remove(keyToDelete);
 		fireIndexedPropertyChange(PROP_KEYS, index, keyToDelete, null);
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterWizard.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterWizard.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterWizard.java	(working copy)
@@ -10,7 +10,6 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.ui.wizards;
 
-import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.swt.widgets.Display;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
@@ -18,51 +17,46 @@
 /**
  * @author Jeff Johnston
  */
-public class InstanceFilterWizard extends Wizard {
+public class InstanceFilterWizard extends AbstractDeltaCloudWizard {
 
-	private DeltaCloud cloud;
 	private InstanceFilterPage mainPage;
-	
+
 	public InstanceFilterWizard(DeltaCloud cloud) {
-		this.cloud = cloud;
+		super(cloud);
 	}
-	
+
 	@Override
 	public void addPages() {
-		mainPage = new InstanceFilterPage(cloud);
+		mainPage = new InstanceFilterPage(getDeltaCloud());
 		addPage(mainPage);
 	}
-	
+
 	@Override
 	public boolean canFinish() {
 		return mainPage.isPageComplete();
 	}
-	
+
 	@Override
 	public boolean performFinish() {
 		String nameRule = mainPage.getNameRule();
 		String idRule = mainPage.getIdRule();
+		String aliasRule = mainPage.getAliasRule();
 		String imageIdRule = mainPage.getImageIdRule();
 		String ownerIdRule = mainPage.getOwnerIdRule();
 		String keyNameRule = mainPage.getKeyNameRule();
 		String realmRule = mainPage.getRealmRule();
 		String profileRule = mainPage.getProfileRule();
-		
+
 		try {
-			cloud.updateInstanceFilter(nameRule + ";" + //$NON-NLS-1$
-					idRule + ";" + //$NON-NLS-1$
-					imageIdRule + ";" + //$NON-NLS-1$
-					ownerIdRule + ";" + //$NON-NLS-1$
-					keyNameRule + ";" + //$NON-NLS-1$
-					realmRule + ";" + //$NON-NLS-1$
-					profileRule);
+			getDeltaCloud().updateInstanceFilter(
+					nameRule, idRule, aliasRule, imageIdRule, ownerIdRule, keyNameRule, realmRule, profileRule);
 		} catch (Exception e) {
 			// TODO: internationalize strings
 			ErrorUtils.handleError(
 					"Error",
 					"Could not update filters", e, Display.getDefault().getActiveShell());
 		}
-		
+
 		return true;
 	}
 
Index: src/org/jboss/tools/deltacloud/ui/commands/StopInstanceHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/StopInstanceHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/StopInstanceHandler.java	(working copy)
@@ -23,9 +23,12 @@
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.common.log.StatusFactory;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
+import org.jboss.tools.deltacloud.core.DeltaCloudResourceAction;
 import org.jboss.tools.deltacloud.ui.Activator;
+import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
 import org.jboss.tools.deltacloud.ui.views.CVMessages;
 import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * @author Andre Dietisheim
@@ -43,7 +46,8 @@
 		try {
 			if (selection instanceof IStructuredSelection) {
 				if (isSingleInstanceSelected(selection)) {
-					DeltaCloudInstance instance = UIUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
+					DeltaCloudInstance instance = WorkbenchUtils.getFirstAdaptedElement(selection,
+							DeltaCloudInstance.class);
 					stopInstance(instance);
 				} else {
 					stopWithDialog((IStructuredSelection) selection);
@@ -59,11 +63,12 @@
 
 	@SuppressWarnings("unchecked")
 	private void stopWithDialog(IStructuredSelection selection) {
-		List<DeltaCloudInstance> deltaCloudInstances = UIUtils.adapt((List<DeltaCloudInstance>) selection.toList(),
+		List<DeltaCloudInstance> deltaCloudInstances = WorkbenchUtils.adapt(
+				(List<DeltaCloudInstance>) selection.toList(),
 				DeltaCloudInstance.class);
 		List<DeltaCloudInstance> stoppableInstances = getStoppableInstances(deltaCloudInstances);
 		DeltaCloudInstanceDialog dialog = new DeltaCloudInstanceDialog(
-					UIUtils.getActiveShell()
+				WorkbenchUtils.getActiveShell()
 					, stoppableInstances
 					, CVMessages.getString(STOP_INSTANCES_DIALOG_TITLE)
 					, CVMessages.getString(STOP_INSTANCES_DIALOG_MSG));
@@ -84,19 +89,41 @@
 	}
 
 	private void stopInstances(Object[] deltaCloudInstances) {
-		for (int i = 0; i < deltaCloudInstances.length; i++) {
-			stopInstance((DeltaCloudInstance) deltaCloudInstances[i]);
+		if (askUserToConfirm()) {
+			for (int i = 0; i < deltaCloudInstances.length; i++) {
+				stopInstance((DeltaCloudInstance) deltaCloudInstances[i]);
+			}
 		}
 	}
 
 	private void stopInstance(DeltaCloudInstance instance) {
 		if (instance != null) {
+			if (askUserToConfirm()) {
+				doStopInstance(instance);
+			}
+		}
+	}
+
+	private void doStopInstance(DeltaCloudInstance instance) {
+		if (instance != null) {
 			executeInstanceAction(
-					instance
-					, DeltaCloudInstance.Action.STOP
-					, DeltaCloudInstance.State.STOPPED
-					, CVMessages.getString(STOPPING_INSTANCE_TITLE)
-					, CVMessages.getFormattedString(STOPPING_INSTANCE_MSG, new String[] { instance.getName() }));
+						instance
+						, DeltaCloudResourceAction.STOP
+						, DeltaCloudInstance.State.STOPPED
+						, CVMessages.getString(STOPPING_INSTANCE_TITLE)
+						, CVMessages.getFormattedString(STOPPING_INSTANCE_MSG, new String[] { instance.getAlias() }));
 		}
 	}
+
+	private boolean askUserToConfirm() {
+		return UIUtils
+				.openConfirmationDialog(
+						"Confirm instance stop",
+						"You are about to stop a running system(s), that might be in production. Are you sure that you want to stop the given instance(s)?",
+						"Don't warn me again",
+						IDeltaCloudPreferenceConstants.DONT_CONFIRM_CREATE_INSTANCE,
+						Activator.PLUGIN_ID,
+						WorkbenchUtils.getActiveShell());
+	}
+
 }
Index: src/org/jboss/tools/deltacloud/ui/commands/EditConnectionHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/EditConnectionHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/EditConnectionHandler.java	(working copy)
@@ -21,7 +21,7 @@
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 import org.jboss.tools.internal.deltacloud.ui.wizards.EditCloudConnectionWizard;
 
 /**
@@ -33,10 +33,10 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		if (selection instanceof IStructuredSelection) {
-			DeltaCloud cloud = UIUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
+			DeltaCloud cloud = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
 			if (cloud != null) {
 				IWizard wizard = new EditCloudConnectionWizard(cloud);
-				WizardDialog dialog = new WizardDialog(UIUtils.getActiveWorkbenchWindow().getShell(), wizard);
+				WizardDialog dialog = new WizardDialog(WorkbenchUtils.getActiveWorkbenchWindow().getShell(), wizard);
 				dialog.create();
 				dialog.open();
 			}
Index: src/org/jboss/tools/deltacloud/ui/views/cloud/DeltaCloudView.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/cloud/DeltaCloudView.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/cloud/DeltaCloudView.java	(working copy)
@@ -25,7 +25,7 @@
 import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
 import org.jboss.tools.deltacloud.ui.views.CVMessages;
 import org.jboss.tools.deltacloud.ui.views.cloud.property.CVPropertySheetPage;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 public class DeltaCloudView extends ViewPart implements ITabbedPropertySheetPageContributor {
 
@@ -63,8 +63,8 @@
 	}
 
 	private void hookContextMenu(Control control) {
-		IMenuManager contextMenu = UIUtils.createContextMenu(control);
-		UIUtils.registerContributionManager(UIUtils.getContextMenuId(ID), contextMenu, control);
+		IMenuManager contextMenu = WorkbenchUtils.createContextMenu(control);
+		WorkbenchUtils.registerContributionManager(WorkbenchUtils.getContextMenuId(ID), contextMenu, control);
 	}
 
 	private void contributeToActionBars() {
Index: src/org/jboss/tools/deltacloud/ui/commands/FilterImagesHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/FilterImagesHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/FilterImagesHandler.java	(working copy)
@@ -17,13 +17,12 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WizardUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 import org.jboss.tools.internal.deltacloud.ui.wizards.ImageFilterWizard;
 
 /**
@@ -35,7 +34,7 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		if (selection instanceof IStructuredSelection) {
-			DeltaCloud cloud = UIUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
+			DeltaCloud cloud = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
 			createImagesFilter(cloud, HandlerUtil.getActiveShell(event));
 		}
 
@@ -47,10 +46,7 @@
 				Display.getDefault().asyncExec(new Runnable() {
 					@Override
 					public void run() {
-						IWizard wizard = new ImageFilterWizard(cloud);
-						WizardDialog dialog = new WizardDialog(shell, wizard);
-						dialog.create();
-						dialog.open();
+						WizardUtils.openWizardDialog(new ImageFilterWizard(cloud), shell);
 					}
 				});
 
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterPage.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterPage.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterPage.java	(working copy)
@@ -10,12 +10,8 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.ui.wizards;
 
-import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.jface.fieldassist.ControlDecoration;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
 import org.eclipse.swt.graphics.Point;
 import org.eclipse.swt.layout.FormAttachment;
 import org.eclipse.swt.layout.FormData;
@@ -25,108 +21,85 @@
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
+import org.jboss.tools.deltacloud.core.IImageFilter;
+import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
 
 /**
  * @author Jeff Johnston
  */
-public class ImageFilterPage extends WizardPage {
+public class ImageFilterPage extends AbstractFilterPage {
 
 	private final static String NAME = "ImageFilter.name"; //$NON-NLS-1$
 	private final static String TITLE = "ImageFilter.title"; //$NON-NLS-1$
 	private final static String DESC = "ImageFilter.desc"; //$NON-NLS-1$
 	private final static String FILTER_LABEL = "ImageFilter.label"; //$NON-NLS-1$
-	private final static String EMPTY_RULE = "ErrorFilterEmptyRule.msg"; //$NON-NLS-1$
-	private final static String INVALID_SEMICOLON = "ErrorFilterSemicolon.msg"; //$NON-NLS-1$
 	private final static String NAME_LABEL = "Name.label"; //$NON-NLS-1$
 	private final static String ID_LABEL = "Id.label"; //$NON-NLS-1$
 	private final static String ARCH_LABEL = "Arch.label"; //$NON-NLS-1$
 	private final static String DESC_LABEL = "Desc.label"; //$NON-NLS-1$
-	private final static String DEFAULT_LABEL = "DefaultButton.label"; //$NON-NLS-1$
-	
-	private DeltaCloud cloud;
+
 	private Text nameText;
-	private Text idText;
-	private Text archText;
-	private Text descText;
-	
+	private ControlDecoration nameDecoration;
 	private Button defaultName;
+	private Text idText;
+	private ControlDecoration idDecoration;
 	private Button defaultId;
+	private Text archText;
+	private ControlDecoration archDecoration;
 	private Button defaultArch;
+	private Text descText;
+	private ControlDecoration descDecoration;
 	private Button defaultDesc;
-	
+
 	public ImageFilterPage(DeltaCloud cloud) {
-		super(WizardMessages.getString(NAME));
-		this.cloud = cloud;
-		setDescription(WizardMessages.getString(DESC));
-		setTitle(WizardMessages.getString(TITLE));
-		setImageDescriptor(SWTImagesFactory.DESC_DELTA_LARGE);
+		super(WizardMessages.getString(NAME), WizardMessages.getString(TITLE), WizardMessages.getString(DESC), cloud);
 		setPageComplete(false);
 	}
-	
+
 	public String getNameRule() {
 		return nameText.getText();
 	}
-	
+
 	public String getIdRule() {
 		return idText.getText();
 	}
-	
+
 	public String getArchRule() {
 		return archText.getText();
 	}
-	
+
 	public String getDescRule() {
 		return descText.getText();
 	}
-	
-	private ModifyListener Listener = new ModifyListener() {
 
-		@Override
-		public void modifyText(ModifyEvent e) {
-			// TODO Auto-generated method stub
-			validate();
-		}
-	};
-	
-	private SelectionAdapter ButtonListener = new SelectionAdapter() {
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			Button b = (Button)e.widget;
-			if (b == defaultName)
-				nameText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultId)
-				idText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultArch)
-				archText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultDesc)
-				descText.setText("*"); //$NON-NLS-1$
-		}
-	
-	};
-	
-	private void validate() {
-		boolean complete = true;
-		boolean error = false;
-	
-		if (nameText.getText().length() == 0 ||
-				idText.getText().length() == 0 ||
-				archText.getText().length() == 0 ||
-				descText.getText().length() == 0) {
-			
-			setErrorMessage(WizardMessages.getString(EMPTY_RULE));
-			error = true;
-		} else if (nameText.getText().contains(";") ||
-				idText.getText().contains(";") ||
-				archText.getText().contains(";") ||
-				descText.getText().contains(";")) {
-			setErrorMessage(WizardMessages.getString(INVALID_SEMICOLON));
-			error = true;
+	@Override
+	protected Text getTextWidget(Button button) {
+		Text text = null;
+		if (button == defaultName) {
+			text = nameText;
+		} else if (button == defaultId) {
+			text = idText;
+		} else if (button == defaultArch) {
+			text = archText;
+		} else if (button == defaultDesc) {
+			text = descText;
 		}
-		
-		if (!error)
-			setErrorMessage(null);
-		setPageComplete(complete && !error);
+		return text;
+	}
+
+	@Override
+	protected void validate() {
+		nameDecoration.hide();
+		idDecoration.hide();
+		archDecoration.hide();
+		descDecoration.hide();
+		String error = null;
+		error = validate(nameText, nameDecoration, error);
+		error = validate(idText, idDecoration, error);
+		error = validate(archText, archDecoration, error);
+		error = validate(descText, descDecoration, error);
+		setPageComplete(error == null);
+		setErrorMessage(error);
 	}
 
 	@Override
@@ -135,54 +108,32 @@
 		FormLayout layout = new FormLayout();
 		layout.marginHeight = 5;
 		layout.marginWidth = 5;
-		container.setLayout(layout);		
+		container.setLayout(layout);
+
+		IImageFilter filter = getDeltaCloud().getImageFilter();
 
 		Label label = new Label(container, SWT.NULL);
 		label.setText(WizardMessages.getString(FILTER_LABEL));
-		
-		Label nameLabel = new Label(container, SWT.NULL);
-		nameLabel.setText(WizardMessages.getString(NAME_LABEL));
-		
-		nameText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		nameText.setText(cloud.getImageFilter().getNameRule().toString());
-		nameText.addModifyListener(Listener);
-		
-		defaultName = new Button(container, SWT.NULL);
-		defaultName.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultName.addSelectionListener(ButtonListener);
-
-		Label idLabel = new Label(container, SWT.NULL);
-		idLabel.setText(WizardMessages.getString(ID_LABEL));
-
-		idText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		idText.setText(cloud.getImageFilter().getIdRule().toString());
-		idText.addModifyListener(Listener);
 
-		defaultId = new Button(container, SWT.NULL);
-		defaultId.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultId.addSelectionListener(ButtonListener);
+		Label nameLabel = createRuleLabel(WizardMessages.getString(NAME_LABEL), container);
+		this.nameText = createRuleText(filter.getNameRule(), container);
+		this.nameDecoration = UIUtils.createErrorDecoration("", nameText);
+		this.defaultName = createDefaultRuleButton(container);
 
-		Label archLabel = new Label(container, SWT.NULL);
-		archLabel.setText(WizardMessages.getString(ARCH_LABEL));
-		
-		archText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		archText.setText(cloud.getImageFilter().getArchRule().toString());
-		archText.addModifyListener(Listener);
-		
-		defaultArch = new Button(container, SWT.NULL);
-		defaultArch.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultArch.addSelectionListener(ButtonListener);
+		Label idLabel = createRuleLabel(WizardMessages.getString(ID_LABEL), container);
+		this.idText = createRuleText(filter.getIdRule(), container);
+		this.idDecoration = UIUtils.createErrorDecoration("", idText);
+		this.defaultId = createDefaultRuleButton(container);
 
-		Label descLabel = new Label(container, SWT.NULL);
-		descLabel.setText(WizardMessages.getString(DESC_LABEL));
+		Label archLabel = createRuleLabel(WizardMessages.getString(ARCH_LABEL), container);
+		this.archText = createRuleText(filter.getArchRule(), container);
+		this.archDecoration = UIUtils.createErrorDecoration(WizardMessages.getString(""), archText);
+		this.defaultArch = createDefaultRuleButton(container);
 
-		descText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		descText.setText(cloud.getImageFilter().getDescRule().toString());
-		descText.addModifyListener(Listener);
-		
-		defaultDesc = new Button(container, SWT.NULL);
-		defaultDesc.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultDesc.addSelectionListener(ButtonListener);
+		Label descLabel = createRuleLabel(WizardMessages.getString(DESC_LABEL), container);
+		this.descText = createRuleText(filter.getDescRule(), container);
+		this.descDecoration = UIUtils.createErrorDecoration("", descText);
+		this.defaultDesc = createDefaultRuleButton(container);
 
 		Point p1 = label.computeSize(SWT.DEFAULT, SWT.DEFAULT);
 		Point p2 = nameText.computeSize(SWT.DEFAULT, SWT.DEFAULT);
@@ -193,28 +144,28 @@
 		FormData f = new FormData();
 		f.top = new FormAttachment(0);
 		label.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(label, 11 + centering + centering2);
 		f.left = new FormAttachment(0, 0);
 		nameLabel.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(label, 11);
 		f.right = new FormAttachment(100);
 		defaultName.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(label, 11 + centering2);
 		f.left = new FormAttachment(archLabel, 5);
 		f.right = new FormAttachment(defaultName, -10);
 		nameText.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(nameLabel, 11 + centering + centering2);
 		f.left = new FormAttachment(0, 0);
 		idLabel.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(nameLabel, 11);
 		f.right = new FormAttachment(100);
@@ -230,7 +181,7 @@
 		f.top = new FormAttachment(idLabel, 11 + centering + centering2);
 		f.left = new FormAttachment(0, 0);
 		archLabel.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(idLabel, 11);
 		f.right = new FormAttachment(100);
@@ -241,12 +192,12 @@
 		f.left = new FormAttachment(archLabel, 5);
 		f.right = new FormAttachment(defaultArch, -10);
 		archText.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(archLabel, 11 + centering + centering2);
 		f.left = new FormAttachment(0, 0);
 		descLabel.setLayoutData(f);
-		
+
 		f = new FormData();
 		f.top = new FormAttachment(archLabel, 11);
 		f.right = new FormAttachment(100);
@@ -261,5 +212,4 @@
 		setControl(container);
 		setPageComplete(true);
 	}
-
 }
Index: src/org/jboss/tools/deltacloud/ui/SWTImagesFactory.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/SWTImagesFactory.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/SWTImagesFactory.java	(working copy)
@@ -34,21 +34,27 @@
 	}	
 	private static final String NAME_PREFIX= Activator.PLUGIN_ID + '.';
 	private static final int NAME_PREFIX_LENGTH= NAME_PREFIX.length();
-	public static final String IMG_CLOUD= NAME_PREFIX + "cloud.gif"; //$NON-NLS-1$
-	public static final String IMG_FOLDER= NAME_PREFIX + "folder.gif"; //$NON-NLS-1$
-	public static final String IMG_INSTANCE= NAME_PREFIX + "instance.gif"; //$NON-NLS-1$
-	public static final String IMG_IMAGE= NAME_PREFIX + "image.gif"; //$NON-NLS-1$
+	public static final String IMG_CLOUD= NAME_PREFIX + "delta.png"; //$NON-NLS-1$
+//	public static final String IMG_CLOUD= NAME_PREFIX + "cloud.gif"; //$NON-NLS-1$
 	public static final String IMG_COLLAPSE_ALL= NAME_PREFIX + "collapseall.gif"; //$NON-NLS-1$
 	public static final String IMG_DELTA= NAME_PREFIX + "delta.gif"; //$NON-NLS-1$
 	public static final String IMG_DELTA_LARGE= NAME_PREFIX + "delta-large.gif"; //$NON-NLS-1$
+	public static final String IMG_DESTROY = NAME_PREFIX + "destroy.gif"; //$NON-NLS-1$
+	public static final String IMG_DESTROY_D = NAME_PREFIX + "destroyd.gif"; //$NON-NLS-1$
+	public static final String IMG_FOLDER= NAME_PREFIX + "folder.gif"; //$NON-NLS-1$
+	public static final String IMG_IMAGE= NAME_PREFIX + "image.gif"; //$NON-NLS-1$
+	public static final String IMG_INSTANCE= NAME_PREFIX + "instance.gif"; //$NON-NLS-1$
+	public static final String IMG_NEW_DELTA= NAME_PREFIX + "newdelta.gif"; //$NON-NLS-1$
+	public static final String IMG_REBOOT = NAME_PREFIX + "reboot.gif"; //$NON-NLS-1$
+	public static final String IMG_REBOOTD = NAME_PREFIX + "rebootd.gif"; //$NON-NLS-1$
 	public static final String IMG_START= NAME_PREFIX + "run.gif"; //$NON-NLS-1$
 	public static final String IMG_STARTD = NAME_PREFIX + "rund.gif"; //$NON-NLS-1$
+	public static final String IMG_RUNNING= NAME_PREFIX + "running.gif"; //$NON-NLS-1$
 	public static final String IMG_STOP = NAME_PREFIX + "stop.gif"; //$NON-NLS-1$
 	public static final String IMG_STOPD = NAME_PREFIX + "stopd.gif"; //$NON-NLS-1$
 	public static final String IMG_STOPPED = NAME_PREFIX + "stopped.gif"; //$NON-NLS-1$
-	public static final String IMG_REBOOT = NAME_PREFIX + "reboot.gif"; //$NON-NLS-1$
-	public static final String IMG_REBOOTD = NAME_PREFIX + "rebootd.gif"; //$NON-NLS-1$
-	public static final String IMG_RUNNING= NAME_PREFIX + "running.gif"; //$NON-NLS-1$
+	public static final String SYSTEM_VIEW = NAME_PREFIX + "system_view.gif"; //$NON-NLS-1$
+	public static final String SYSTEM_VIEWD = NAME_PREFIX + "system_viewd.gif"; //$NON-NLS-1$
 	public static final ImageDescriptor DESC_CLOUD= createManaged("", IMG_CLOUD);
 	public static final ImageDescriptor DESC_FOLDER= createManaged("", IMG_FOLDER);
 	public static final ImageDescriptor DESC_INSTANCE= createManaged("", IMG_INSTANCE);
@@ -56,6 +62,9 @@
 	public static final ImageDescriptor DESC_COLLAPSE_ALL= createManaged("", IMG_COLLAPSE_ALL);
 	public static final ImageDescriptor DESC_DELTA= createManaged("", IMG_DELTA);
 	public static final ImageDescriptor DESC_DELTA_LARGE= createManaged("", IMG_DELTA_LARGE);
+	public static final ImageDescriptor DESC_NEW_DELTA= createManaged("", IMG_NEW_DELTA);
+	public static final ImageDescriptor DESC_DESTROY = createManaged("", IMG_DESTROY);
+	public static final ImageDescriptor DESC_DESTROYD= createManaged("", IMG_DESTROY_D);
 	public static final ImageDescriptor DESC_START= createManaged("", IMG_START);
 	public static final ImageDescriptor DESC_STARTD= createManaged("", IMG_STARTD);
 	public static final ImageDescriptor DESC_RUNNING= createManaged("", IMG_RUNNING);
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/WizardMessages.properties
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/WizardMessages.properties	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/WizardMessages.properties	(working copy)
@@ -25,15 +25,16 @@
 
 Url.label=URL:
 Name.label=Name:
+Alias.label=Alias:
 Type.label=Type:
 UserName.label=Username:
 Password.label=Password:
 TestButton.label=Test
 UnknownType.label=Unknown
 IllegalCloudUrl.msg=Invalid url or non-deltacloud url.
-Id.label=ID:
-ImageId.label=Image ID:
-OwnerId.label=Owner ID:
+Id.label=Id:
+ImageId.label=Image Id:
+OwnerId.label=Owner Id:
 Image.label=Image:
 Arch.label=Architecture:
 Desc.label=Description:
@@ -120,6 +121,6 @@
 ConfirmKeyDelete.title=Confirm Key Delete
 ConfirmKeyDelete.msg=Confirm deletion of key: {0}
 
-StartingInstance.title=Starting Instance
-StartingInstance.msg=Starting Instance: {0}
-ConnectingRSE.msg=Connecting instance as: {0}
+StartingInstance.title=Starting Instance {0}
+StartingInstance.msg=Starting Instance {0}
+
Index: src/org/jboss/tools/deltacloud/ui/views/DeltaCloudImageColumns.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/DeltaCloudImageColumns.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/DeltaCloudImageColumns.java	(working copy)
@@ -12,33 +12,36 @@
 
 import org.jboss.tools.deltacloud.core.DeltaCloudImage;
 
+/**
+ * @author André Dietisheim
+ */
 public class DeltaCloudImageColumns extends Columns<DeltaCloudImage> {
 
 	@SuppressWarnings("unchecked")
 	public DeltaCloudImageColumns() {
 		super(
-				new Column<DeltaCloudImage>("NAME", 20) {
+				new Column<DeltaCloudImage>("DeltaCloudElementColumn.name.label", 20) {
 
 					@Override
 					public String getColumnText(DeltaCloudImage image) {
 						return image.getName();
 					}
 				},
-				new Column<DeltaCloudImage>("ID", 20) {
+				new Column<DeltaCloudImage>("DeltaCloudElementColumn.id.label", 20) {
 
 					@Override
 					public String getColumnText(DeltaCloudImage image) {
 						return image.getId();
 					}
 				},
-				new Column<DeltaCloudImage>("ARCH", 20) {
+				new Column<DeltaCloudImage>("DeltaCloudElementColumn.architecture.label", 20) {
 
 					@Override
 					public String getColumnText(DeltaCloudImage image) {
 						return image.getArchitecture();
 					}
 				},
-				new Column<DeltaCloudImage>("DESC", 40) {
+				new Column<DeltaCloudImage>("DeltaCloudElementColumn.description.label", 40) {
 					@Override
 					public String getColumnText(DeltaCloudImage image) {
 						return image.getDescription();
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterWizard.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterWizard.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterWizard.java	(working copy)
@@ -10,26 +10,24 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.ui.wizards;
 
-import org.eclipse.jface.wizard.Wizard;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
 
 /**
  * @author Jeff Johnston
  */
-public class ImageFilterWizard extends Wizard {
+public class ImageFilterWizard extends AbstractDeltaCloudWizard {
 
-	private DeltaCloud cloud;
 	private ImageFilterPage mainPage;
 
 	public ImageFilterWizard(DeltaCloud cloud) {
-		this.cloud = cloud;
+		super(cloud);
 	}
 
 	@Override
 	public void addPages() {
 		// TODO Auto-generated method stub
-		mainPage = new ImageFilterPage(cloud);
+		mainPage = new ImageFilterPage(getDeltaCloud());
 		addPage(mainPage);
 	}
 
@@ -46,16 +44,12 @@
 		String descRule = mainPage.getDescRule();
 
 		try {
-			cloud.updateImageFilter(
-					nameRule + ";" + //$NON-NLS-1$
-					idRule + ";" + //$NON-NLS-1$
-					archRule + ";" + //$NON-NLS-1$
-					descRule);
+			getDeltaCloud().updateImageFilter(nameRule, idRule, archRule, descRule);
 		} catch (Exception e) {
 			// TODO: internationalize strings
 			ErrorUtils.handleError(
 					"Error",
-					"Cloud not get update filters on cloud " + cloud.getName(), e, getShell());
+					"Cloud not get update filters on cloud " + getDeltaCloud().getName(), e, getShell());
 		}
 
 		return true;
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/AbstractDeltaCloudWizard.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/AbstractDeltaCloudWizard.java	(revision 0)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/AbstractDeltaCloudWizard.java	(revision 0)
@@ -0,0 +1,30 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.internal.deltacloud.ui.wizards;
+
+import org.eclipse.jface.wizard.Wizard;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+
+/**
+ * @author André Dietisheim
+ */
+public abstract class AbstractDeltaCloudWizard extends Wizard {
+
+	private DeltaCloud cloud;
+
+	public AbstractDeltaCloudWizard(DeltaCloud cloud) {
+		this.cloud = cloud;
+	}
+	
+	protected DeltaCloud getDeltaCloud() {
+		return cloud;
+	}
+}
Index: src/org/jboss/tools/deltacloud/ui/commands/FilterInstancesHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/FilterInstancesHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/FilterInstancesHandler.java	(working copy)
@@ -17,13 +17,12 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.wizard.IWizard;
-import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.swt.widgets.Display;
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WizardUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 import org.jboss.tools.internal.deltacloud.ui.wizards.InstanceFilterWizard;
 
 /**
@@ -35,7 +34,7 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		if (selection instanceof IStructuredSelection) {
-			DeltaCloud deltaCloud = UIUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
+			DeltaCloud deltaCloud = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
 			createInstancesFilter(deltaCloud, HandlerUtil.getActiveShell(event));
 		}
 
@@ -48,10 +47,7 @@
 
 				@Override
 				public void run() {
-					IWizard wizard = new InstanceFilterWizard(cloud);
-					WizardDialog dialog = new WizardDialog(shell, wizard);
-					dialog.create();
-					dialog.open();
+					WizardUtils.openWizardDialog(new InstanceFilterWizard(cloud), shell);
 				}
 			});
 		}
Index: src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudPropertyTester.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudPropertyTester.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudPropertyTester.java	(working copy)
@@ -15,7 +15,7 @@
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
 import org.jboss.tools.deltacloud.core.DeltaCloudImage;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * A property tester for the command framework that answers if the given
@@ -30,7 +30,7 @@
 
 	@Override
 	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
-		DeltaCloud cloud = UIUtils.adapt(receiver, DeltaCloud.class);
+		DeltaCloud cloud = WorkbenchUtils.adapt(receiver, DeltaCloud.class);
 		if (cloud == null) {
 			return false;
 		}
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePageModel.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePageModel.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePageModel.java	(working copy)
@@ -14,6 +14,7 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudHardwareProfile;
 import org.jboss.tools.deltacloud.core.DeltaCloudImage;
 import org.jboss.tools.deltacloud.core.DeltaCloudRealm;
@@ -49,8 +50,10 @@
 	private String cpu;
 	private String storage;
 	private String memory;
+	private DeltaCloud cloud;
 
-	protected NewInstancePageModel(String keyId, DeltaCloudImage image) {
+	protected NewInstancePageModel(String keyId, DeltaCloudImage image, DeltaCloud cloud) {
+		this.cloud = cloud;
 		this.keyId = keyId;
 		this.image = image;
 	}
@@ -74,6 +77,10 @@
 		setArch(image.getArchitecture());
 	}
 
+	public int getSelectedRealmIndex() {
+		return realms.indexOf(selectedRealm);
+	}
+
 	public void setSelectedRealmIndex(int index) {
 		if (realms.size() > index) {
 			int oldIndex = -1;
@@ -82,17 +89,34 @@
 				oldIndex = realms.indexOf(selectedRealm);
 			}
 			DeltaCloudRealm deltaCloudRealm = realms.get(index);
-			setSelectedRealm(deltaCloudRealm);
+			selectedRealm = deltaCloudRealm;
+			cloud.setLastRealmName(selectedRealm.getName());
 			firePropertyChange(PROPERTY_SELECTED_REALM_INDEX, oldIndex, index);
 		}
 	}
 
-	public int getSelectedRealmIndex() {
-		return realms.indexOf(selectedRealm);
+	private void setSelectedRealm(String name) {
+		if (realms.size() > 0) {
+			int index = getRealmIndex(name);
+			if (index >= 0) {
+				setSelectedRealmIndex(index);
+			}
+		}
 	}
 
-	public void setSelectedRealm(DeltaCloudRealm realm) {
-		selectedRealm = realm;
+	private int getRealmIndex(String name) {
+		int index = 0;
+		if (name != null
+				&& realms != null
+				&& realms.size() > 0) {
+			for (int i = 0; i < realms.size(); i++) {
+				if (name.equals(realms.get(i).getName())) {
+					index = i;
+					break;
+				}
+			}
+		}
+		return index;
 	}
 
 	public String getRealmId() {
@@ -104,14 +128,14 @@
 
 	protected void setRealms(List<DeltaCloudRealm> realms) {
 		firePropertyChange(PROPERTY_REALMS, this.realms, this.realms = realms);
-		setSelectedRealmIndex(0);
+		setSelectedRealm(cloud.getLastRealmName());
 	}
 
 	public List<DeltaCloudRealm> getRealms() {
 		return realms;
 	}
 
-	protected void setAllProfiles(List<DeltaCloudHardwareProfile> profiles) {
+	public void setAllProfiles(List<DeltaCloudHardwareProfile> profiles) {
 		firePropertyChange(PROP_ALL_PROFILES, this.allProfiles, this.allProfiles = profiles);
 		setFilteredProfiles(filterProfiles(image, profiles));
 	}
@@ -122,7 +146,7 @@
 
 	private void setFilteredProfiles(List<DeltaCloudHardwareProfile> profiles) {
 		firePropertyChange(PROP_FILTERED_PROFILES, this.filteredProfiles, this.filteredProfiles = profiles);
-		setSelectedProfileIndex(0);
+		setSelectedProfileIndex();
 	}
 
 	public List<DeltaCloudHardwareProfile> getFilteredProfiles() {
@@ -143,6 +167,24 @@
 		return filteredProfiles;
 	}
 
+	private void setSelectedProfileIndex() {
+		setSelectedProfileIndex(getProfileIndex(cloud.getLastProfileId()));
+	}
+
+	private int getProfileIndex(String selectedProfileId) {
+		int index = 0;
+		if (selectedProfileId != null 
+				&& filteredProfiles != null && filteredProfiles.size() > 0) {
+			for (int i = 0; i < filteredProfiles.size(); i++) {
+				if (selectedProfileId.equals(filteredProfiles.get(i).getId())) {
+					index = i;
+					break;
+				}
+			}
+		}
+		return index;
+	}
+
 	public void setSelectedProfileIndex(int index) {
 		if (filteredProfiles.size() > index) {
 			int oldIndex = -1;
@@ -151,8 +193,9 @@
 				oldIndex = filteredProfiles.indexOf(selectedProfile);
 			}
 			DeltaCloudHardwareProfile hardwareProfile = filteredProfiles.get(index);
-			setSelectedProfile(hardwareProfile);
+			selectedProfile = hardwareProfile;
 			firePropertyChange(PROP_SELECTED_PROFILE_INDEX, oldIndex, index);
+			cloud.setLastProfileId(hardwareProfile.getId());
 		}
 	}
 
@@ -164,10 +207,6 @@
 		return filteredProfiles.indexOf(selectedProfile);
 	}
 
-	public void setSelectedProfile(DeltaCloudHardwareProfile profile) {
-		selectedProfile = profile;
-	}
-
 	public String getProfileId() {
 		if (selectedProfile == null) {
 			return null;
Index: schema/newInstanceWizardPage.exsd
===================================================================
--- schema/newInstanceWizardPage.exsd	(revision 29180)
+++ schema/newInstanceWizardPage.exsd	(working copy)
@@ -64,7 +64,7 @@
                   
                </documentation>
                <appinfo>
-                  <meta.attribute kind="java" basedOn=":org.jboss.tools.deltacloud.ui.INewInstanceWizardPage"/>
+                  <meta.attribute kind="java" basedOn=":org.jboss.tools.deltacloud.ui.wizard.INewInstanceWizardPage"/>
                </appinfo>
             </annotation>
          </attribute>
Index: src/org/jboss/tools/deltacloud/ui/wizard/INewInstanceWizardPage.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/wizard/INewInstanceWizardPage.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/wizard/INewInstanceWizardPage.java	(working copy)
@@ -21,5 +21,5 @@
 
 	public static final String NEW_INSTANCE_FAMILY = "newInstanceFamily";
 
-	public ChainedJob getPerformFinishJob(DeltaCloudInstance addedInstance);
+	public ChainedJob createPerformFinishJob(DeltaCloudInstance addedInstance);
 }
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnectionPageModel.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnectionPageModel.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnectionPageModel.java	(working copy)
@@ -12,7 +12,7 @@
 
 import java.net.MalformedURLException;
 
-import org.jboss.tools.deltacloud.core.Driver;
+import org.jboss.tools.deltacloud.core.DeltaCloudDriver;
 import org.jboss.tools.internal.deltacloud.core.observable.ObservablePojo;
 
 /**
@@ -35,18 +35,18 @@
 	private String username;
 
 	private String password;
-	private Driver driver;
+	private DeltaCloudDriver driver;
 	private String initialName;
 
 	public CloudConnectionPageModel() {
-		this("", "", "", "", Driver.UNKNOWN);
+		this("", "", "", "", DeltaCloudDriver.UNKNOWN);
 	}
 
 	public CloudConnectionPageModel(String name, String url, String username, String password) throws MalformedURLException {
-		this(name, url, username, password, Driver.UNKNOWN);
+		this(name, url, username, password, DeltaCloudDriver.UNKNOWN);
 	}
 
-	public CloudConnectionPageModel(String name, String url, String username, String password, Driver driver) {
+	public CloudConnectionPageModel(String name, String url, String username, String password, DeltaCloudDriver driver) {
 		this.name = name;
 		this.initialName = name;
 			this.url = url;
@@ -91,11 +91,11 @@
 		firePropertyChange(PROPERTY_URL, this.url, this.url = url);
 	}
 
-	public Driver getDriver() {
+	public DeltaCloudDriver getDriver() {
 		return driver;
 	}
 
-	public void setDriver(Driver driver) {
+	public void setDriver(DeltaCloudDriver driver) {
 		firePropertyChange(PROPERTY_DRIVER, this.driver, this.driver = driver);
 	}
 }
Index: src/org/jboss/tools/deltacloud/ui/views/cloud/NumericFoldingItem.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/cloud/NumericFoldingItem.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/cloud/NumericFoldingItem.java	(working copy)
@@ -19,7 +19,7 @@
  */
 public class NumericFoldingItem extends DeltaCloudViewItem<Object> {
 
-	public static int FOLDING_SIZE = 50;
+	public static final int FOLDING_SIZE = 50;
 	private Object min;
 	private int max;
 
Index: src/org/jboss/tools/internal/deltacloud/ui/utils/WorkbenchUtils.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/utils/WorkbenchUtils.java	(revision 0)
+++ src/org/jboss/tools/internal/deltacloud/ui/utils/WorkbenchUtils.java	(revision 0)
@@ -0,0 +1,337 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.internal.deltacloud.ui.utils;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.IAdaptable;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.jface.action.ContributionManager;
+import org.eclipse.jface.action.GroupMarker;
+import org.eclipse.jface.action.IContributionManager;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.events.DisposeEvent;
+import org.eclipse.swt.events.DisposeListener;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPartSite;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.menus.IMenuService;
+import org.eclipse.ui.part.EditorPart;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * @author Andre Dietisheim
+ */
+public class WorkbenchUtils {
+
+	private static final String CONTEXT_MENU_PREFIX = "popup:";
+	private static final String VIEW_MENU_PREFIX = "menu:";
+
+	private WorkbenchUtils() {
+	}
+
+	/**
+	 * Returns the selection of the active workbench window.
+	 * 
+	 * @return the selection
+	 * 
+	 * @see IWorkbenchWindow#getSelectionService()
+	 */
+	public static ISelection getWorkbenchWindowSelection() {
+		return getActiveWorkbenchWindow().getSelectionService().getSelection();
+	}
+
+	/**
+	 * Gets the structured selection.
+	 * 
+	 * @return the structured selection
+	 */
+	public static IStructuredSelection getStructuredSelection() {
+		ISelection selection = getWorkbenchWindowSelection();
+		if (selection instanceof IStructuredSelection) {
+			return (IStructuredSelection) selection;
+		} else {
+			return null;
+		}
+	}
+
+	/**
+	 * Gets the first element of a given selection in the given type. Returns
+	 * <code>null</null> if selection is selection is empty or adaption of the first element in 
+	 * the given selection fails. Adaption is tried by casting and by adapting it.
+	 * 
+	 * @param selection
+	 *            the selection
+	 * @param expectedClass
+	 *            the expected class
+	 * 
+	 * @return the first element
+	 */
+	public static <T> T getFirstAdaptedElement(final ISelection selection, final Class<T> expectedClass) {
+		if (selection == null
+				|| !(selection instanceof IStructuredSelection)) {
+			return null;
+		} else {
+			Object firstElement = ((IStructuredSelection) selection).getFirstElement();
+			if (firstElement == null) {
+				return null;
+			}
+			return adapt(firstElement, expectedClass);
+		}
+	}
+
+	/**
+	 * Returns <code>true</code> if the given selection holds exactly 1 element
+	 * of the given type.
+	 * 
+	 * @param selection
+	 *            the selection to check
+	 * @param expectedClass
+	 *            the expected class
+	 * @return <code>true</code>, if the given selection holds a single element
+	 *         of the given type.
+	 */
+	public static <T> boolean isSingleSelection(final ISelection selection, final Class<T> expectedClass) {
+		if (!(selection instanceof IStructuredSelection)) {
+			return false;
+		}
+
+		return ((IStructuredSelection) selection).toList().size() == 1
+				&& getFirstAdaptedElement(selection, expectedClass) != null;
+	}
+
+	public static <T> List<T> adapt(Collection<?> objects, Class<T> expectedClass) {
+		List<T> adaptedObjects = new ArrayList<T>();
+		for (Object object : objects) {
+			T adaptedObject = adapt(object, expectedClass);
+			if (adaptedObject != null) {
+				adaptedObjects.add(adaptedObject);
+			}
+		}
+		return adaptedObjects;
+	}
+
+	/**
+	 * Adapts the given object to the given type. Returns <code>null</code> if
+	 * the given adaption is not possible. Adaption is tried by casting and by
+	 * adapting it.
+	 * 
+	 * @param <T>
+	 * @param object
+	 * @param expectedClass
+	 * @return
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T adapt(Object object, Class<T> expectedClass) {
+		if (object == null) {
+			return null;
+		}
+
+		Object adaptedObject = null;
+		if (expectedClass.isAssignableFrom(object.getClass())) {
+			adaptedObject = object;
+		} else if (object instanceof IAdaptable) {
+			adaptedObject = ((IAdaptable) object).getAdapter(expectedClass);
+		}
+
+		if (adaptedObject != null) {
+			return (T) adaptedObject;
+		} else {
+			return (T) Platform.getAdapterManager().loadAdapter(object, expectedClass.getName());
+		}
+	}
+
+	/**
+	 * Gets the active page.
+	 * 
+	 * @return the active page
+	 */
+	public static IWorkbenchPage getActivePage() {
+		IWorkbenchPage workbenchPage = getActiveWorkbenchWindow().getActivePage();
+		Assert.isNotNull(workbenchPage);
+		return workbenchPage;
+	}
+
+	/**
+	 * Returns the editor that's currently active (focused).
+	 * 
+	 * @return the active editor
+	 */
+	public static IEditorPart getActiveEditor() {
+		IEditorPart editor = getActivePage().getActiveEditor();
+		Assert.isNotNull(editor);
+		return editor;
+	}
+
+	/**
+	 * Gets the active workbench window.
+	 * 
+	 * @return the active workbench window
+	 */
+	public static IWorkbenchWindow getActiveWorkbenchWindow() {
+		IWorkbenchWindow workbenchWindow = getWorkbench().getActiveWorkbenchWindow();
+		Assert.isNotNull(workbenchWindow);
+		return workbenchWindow;
+	}
+
+	public static Shell getActiveShell() {
+		Shell shell = getActiveWorkbenchWindow().getShell();
+		Assert.isTrue(shell != null && !shell.isDisposed());
+		return shell;
+	}
+
+	/**
+	 * Gets the workbench.
+	 * 
+	 * @return the workbench
+	 */
+	public static IWorkbench getWorkbench() {
+		IWorkbench workbench = PlatformUI.getWorkbench();
+		Assert.isNotNull(workbench);
+		return workbench;
+	}
+
+	/**
+	 * Replaces an image with the given key by the given image descriptor.
+	 * 
+	 * @param imageKey
+	 *            the image key
+	 * @param imageDescriptor
+	 *            the image descriptor
+	 */
+	public static void replaceInJfaceImageRegistry(final String imageKey, final ImageDescriptor imageDescriptor) {
+		Assert.isNotNull(imageKey);
+		Assert.isNotNull(imageDescriptor);
+
+		JFaceResources.getImageRegistry().remove(imageKey);
+		JFaceResources.getImageRegistry().put(imageKey, imageDescriptor);
+	}
+
+	/**
+	 * Register the given ContributionManager with the given id. The
+	 * contribution manager gets unregistered on control disposal.
+	 * 
+	 * @param id
+	 *            the id
+	 * @param contributionManager
+	 *            the contribution manager
+	 * @param control
+	 *            the control
+	 * 
+	 * @see ContributionManager
+	 * @see IMenuService
+	 * @see DisposeListener
+	 */
+	public static void registerContributionManager(final String id, final IContributionManager contributionManager,
+			final Control control) {
+		Assert.isNotNull(id);
+		Assert.isNotNull(contributionManager);
+		Assert.isTrue(control != null && !control.isDisposed());
+
+		final IMenuService menuService = (IMenuService) PlatformUI.getWorkbench().getService(IMenuService.class);
+		menuService.populateContributionManager((ContributionManager) contributionManager, id);
+		contributionManager.update(true);
+		control.addDisposeListener(new DisposeListener()
+		{
+			public void widgetDisposed(DisposeEvent e)
+			{
+				menuService.releaseContributions((ContributionManager) contributionManager);
+			}
+		});
+	}
+
+	public static String getContextMenuId(String viewId) {
+		return new StringBuffer(CONTEXT_MENU_PREFIX).append(viewId).toString();
+	}
+
+	public static String getViewMenuId(String viewId) {
+		return new StringBuffer(VIEW_MENU_PREFIX).append(viewId).toString();
+	}
+
+	/**
+	 * Creates context menu to a given control.
+	 * 
+	 * @param control
+	 *            the control
+	 * 
+	 * @return the i menu manager
+	 */
+	public static IMenuManager createContextMenu(final Control control) {
+		Assert.isTrue(control != null && !control.isDisposed());
+
+		MenuManager menuManager = new MenuManager();
+		menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
+
+		Menu menu = menuManager.createContextMenu(control);
+		control.setMenu(menu);
+		return menuManager;
+	}
+
+	/**
+	 * Gets the dialog settings for the given identifer and plugin.
+	 * 
+	 * @param identifier
+	 *            the identifier
+	 * @param plugin
+	 *            the plugin
+	 * 
+	 * @return the dialog settings
+	 */
+	public static IDialogSettings getDialogSettings(final String identifier, final AbstractUIPlugin plugin) {
+		Assert.isNotNull(plugin);
+		IDialogSettings dialogSettings = plugin.getDialogSettings();
+		IDialogSettings section = dialogSettings.getSection(identifier);
+		if (section == null) {
+			section = dialogSettings.addNewSection(identifier);
+		}
+		return section;
+	}
+
+	/**
+	 * Returns the page for a given editor.
+	 * 
+	 * @param editor
+	 *            the editor
+	 * @return
+	 * 
+	 * @return the page
+	 * 
+	 * @see IWorkbenchPage
+	 */
+	public static IWorkbenchPage getPage(EditorPart editor) {
+		Assert.isNotNull(editor);
+		IWorkbenchPartSite site = editor.getSite();
+		Assert.isNotNull(site);
+		return site.getPage();
+	}
+
+	public static void showView(String viewId) throws PartInitException {
+		Assert.isLegal(viewId != null && viewId.length() > 0);
+		getActivePage().showView(viewId);
+	}
+}
Index: src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceView.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceView.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceView.java	(working copy)
@@ -10,10 +10,13 @@
  *******************************************************************************/
 package org.jboss.tools.deltacloud.ui.views.cloudelements;
 
+import java.beans.PropertyChangeEvent;
+
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.services.IEvaluationService;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
+import org.jboss.tools.deltacloud.core.ICloudElementFilter;
 import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
 
 /**
@@ -27,7 +30,7 @@
 public class InstanceView extends AbstractCloudElementTableView<DeltaCloudInstance> {
 
 	protected String getSelectedCloudPrefsKey() {
-		return IDeltaCloudPreferenceConstants.LAST_CLOUD_INSTANCE_VIEW;
+		return IDeltaCloudPreferenceConstants.CLOUD_LAST_INSTANCE_KEY;
 	}
 
 	@Override
@@ -51,10 +54,24 @@
 	}
 
 	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		super.propertyChange(event);
+		if (DeltaCloud.PROP_INSTANCES.equals(event.getPropertyName())) {
+			updateFilteredLabel();
+		}
+	}
+
+	@Override
 	protected void addPropertyChangeListener(DeltaCloud cloud) {
 		if (cloud != null) {
 			super.addPropertyChangeListener(cloud);
 			cloud.addPropertyChangeListener(DeltaCloud.PROP_INSTANCES, this);
 		}
 	}
+
+	@Override
+	protected ICloudElementFilter<DeltaCloudInstance> getFilter(DeltaCloud cloud) {
+		return cloud.getInstanceFilter();
+	}
+
 }
Index: src/org/jboss/tools/deltacloud/ui/adapter/DeltaCloudInstanceAdapterFactory.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/adapter/DeltaCloudInstanceAdapterFactory.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/adapter/DeltaCloudInstanceAdapterFactory.java	(working copy)
@@ -13,7 +13,7 @@
 import org.eclipse.core.runtime.IAdapterFactory;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 public class DeltaCloudInstanceAdapterFactory implements IAdapterFactory {
 
@@ -28,7 +28,7 @@
 		if (adaptableObject instanceof DeltaCloudInstance) {
 			return ((DeltaCloudInstance) adaptableObject).getDeltaCloud();
 		} else {
-			return UIUtils.adapt(adaptableObject, DeltaCloud.class);
+			return WorkbenchUtils.adapt(adaptableObject, DeltaCloud.class);
 		}
 	}
 
Index: plugin.properties
===================================================================
--- plugin.properties	(revision 29180)
+++ plugin.properties	(working copy)
@@ -43,7 +43,7 @@
 command.newconnection.name = New Connection
 command.editconnection.description = Edits a Connection
 command.editconnection.name = Edit Connection
-command.createinstance.description.0 = Launches an instance
+command.createinstance.description = Launches an instance
 command.createinstance.name = Launch Instance
 command.startinstance.description = Starts a cloud instance
 command.startinstance.name = Start
@@ -53,6 +53,10 @@
 command.rebootinstance.name = Reboot
 command.destroyinstance.name = Destroy
 command.destroyinstance.description = Destroys a cloud instance
+command.managekeys.description = Manages the keys of a cloud
+command.managekeys.name = Manage Keys
+command.managekeys.label = Manage Keys
+command.managekeys.tooltip = Manage Keys
 command.filterimages.description = Filters images
 command.filterimages.name = Filter Images...
 command.filterinstances.description = Filters instances
Index: src/org/jboss/tools/deltacloud/ui/IDeltaCloudPreferenceConstants.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/IDeltaCloudPreferenceConstants.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/IDeltaCloudPreferenceConstants.java	(working copy)
@@ -12,11 +12,19 @@
 
 public interface IDeltaCloudPreferenceConstants {
 	
-	public final static String DONT_CONFIRM_CREATE_INSTANCE = "dont_confirm_create_instance"; //$NON-NLS-1$
-	public final static String AUTO_CONNECT_INSTANCE = "auto_connect_instance"; //$NON-NLS-1$
-	public final static String LAST_EC2_KEYNAME = "last_ec2_keyname"; //$NON-NLS-1$
-	public final static String DEFAULT_KEY_DIR = "default_key_directory"; //$NON-NLS-1$
-	public final static String LAST_CLOUD_INSTANCE_VIEW = "last_cloud_instance_view"; //$NON-NLS-1$
-	public final static String LAST_CLOUD_IMAGE_VIEW = "last_cloud_image_view"; //$NON-NLS-1$
+	public static final String DONT_CONFIRM_CREATE_INSTANCE = "dont_confirm_create_instance"; //$NON-NLS-1$
+	public static final String DONT_CONFIRM_STOP_INSTANCE = "dont_confirm_stop_instance"; //$NON-NLS-1$
+	public static final String AUTO_CONNECT_INSTANCE = "auto_connect_instance"; //$NON-NLS-1$
+	public static final String LAST_EC2_KEYNAME = "last_ec2_keyname"; //$NON-NLS-1$
+	public static final String DEFAULT_KEY_DIR = "default_key_directory"; //$NON-NLS-1$
 
+	public static final String CLOUD_NAME_PROPOSAL_KEY = "cloud_name";//$NON-NLS-1$
+	public static final String CLOUD_USERNAME_PROPOSAL_KEY = "cloud_username";//$NON-NLS-1$
+	public static final String CLOUD_URL_PROPOSAL_KEY = "cloud_url";//$NON-NLS-1$
+	public static final String CLOUD_LAST_INSTANCE_KEY = "last_cloud_instance_view"; //$NON-NLS-1$
+	public static final String CLOUD_LAST_IMAGE_KEY = "last_cloud_image_view"; //$NON-NLS-1$
+
+	public static final String INSTANCE_NAME_PROPOSAL_KEY = "instance_name";//$NON-NLS-1$
+	public static final String INSTANCE_IMAGE_PROPOSAL_KEY = "instance_image";//$NON-NLS-1$
+	public static final String INSTANCE_KEY_PROPOSAL_KEY = "instance_key";//$NON-NLS-1$
 }
Index: src/org/jboss/tools/deltacloud/ui/views/DeltaCloudInstanceColumns.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/DeltaCloudInstanceColumns.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/DeltaCloudInstanceColumns.java	(working copy)
@@ -25,28 +25,63 @@
 	@SuppressWarnings("unchecked")
 	public DeltaCloudInstanceColumns() {
 		super(
-				new Column<DeltaCloudInstance>("NAME", 20) {
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.name.label", 20) {
 
 					@Override
 					public String getColumnText(DeltaCloudInstance image) {
 						return image.getName();
 					}
 				},
-				new Column<DeltaCloudInstance>("ALIAS", 20) {
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.alias.label", 20) {
 
 					@Override
 					public String getColumnText(DeltaCloudInstance image) {
 						return image.getAlias();
 					}
 				},
-				new Column<DeltaCloudInstance>("ID", 20) {
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.id.label", 20) {
 
 					@Override
 					public String getColumnText(DeltaCloudInstance image) {
 						return image.getId();
 					}
 				},
-				new Column<DeltaCloudInstance>("STATUS", 20) {
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.imageId.label", 20) {
+
+					@Override
+					public String getColumnText(DeltaCloudInstance image) {
+						return image.getImageId();
+					}
+				},
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.ownerId.label", 20) {
+
+					@Override
+					public String getColumnText(DeltaCloudInstance image) {
+						return image.getOwnerId();
+					}
+				},
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.keyId.label", 20) {
+
+					@Override
+					public String getColumnText(DeltaCloudInstance image) {
+						return image.getKeyId();
+					}
+				},
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.realm.label", 20) {
+
+					@Override
+					public String getColumnText(DeltaCloudInstance image) {
+						return image.getRealmId();
+					}
+				},
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.profile.label", 20) {
+
+					@Override
+					public String getColumnText(DeltaCloudInstance image) {
+						return image.getProfileId();
+					}
+				},
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.state.label", 20) {
 
 					@Override
 					public Image getColumnImage(DeltaCloudInstance instance) {
@@ -68,7 +103,8 @@
 						return image.getState().toString();
 					}
 				},
-				new Column<DeltaCloudInstance>("HOSTNAME", 40) {
+				
+				new Column<DeltaCloudInstance>("DeltaCloudElementColumn.hostname.label", 40) {
 					@Override
 					public String getColumnText(DeltaCloudInstance image) {
 						return image.getHostName();
Index: META-INF/MANIFEST.MF
===================================================================
--- META-INF/MANIFEST.MF	(revision 29180)
+++ META-INF/MANIFEST.MF	(working copy)
@@ -21,9 +21,12 @@
  org.eclipse.core.expressions;bundle-version="[3.4.200,4.0.0)",
  org.eclipse.equinox.security;bundle-version="[1.0.100,2.0.0)",
  org.eclipse.equinox.security.ui;bundle-version="1.0.200",
- org.eclipse.jsch.core;bundle-version="1.1.200"
+ org.eclipse.jsch.core;bundle-version="1.1.200",
+ org.eclipse.ui.navigator;bundle-version="3.5.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Bundle-ActivationPolicy: lazy
 Export-Package: org.jboss.tools.deltacloud.ui,
+ org.jboss.tools.deltacloud.ui.preferences,
  org.jboss.tools.deltacloud.ui.wizard,
+ org.jboss.tools.internal.deltacloud.ui.preferences;x-friends:="org.jboss.tools.deltacloud.test",
  org.jboss.tools.internal.deltacloud.ui.utils
Index: plugin.xml
===================================================================
--- plugin.xml	(revision 29180)
+++ plugin.xml	(working copy)
@@ -10,7 +10,7 @@
       </category>
       <view
             name="%CloudViewerName"
-            icon="icons/delta.gif"
+            icon="icons/delta.png"
             category="org.jboss.tools.deltacloud.ui"
             class="org.jboss.tools.deltacloud.ui.views.cloud.DeltaCloudView"
             id="org.jboss.tools.deltacloud.ui.views.CloudView">
@@ -18,14 +18,14 @@
       <view
             category="org.jboss.tools.deltacloud.ui"
             class="org.jboss.tools.deltacloud.ui.views.cloudelements.InstanceView"
-            icon="icons/delta.gif"
+            icon="icons/delta.png"
             id="org.jboss.tools.deltacloud.ui.views.InstanceView"
             name="%InstanceViewer.name">
       </view>
       <view
             category="org.jboss.tools.deltacloud.ui"
             class="org.jboss.tools.deltacloud.ui.views.cloudelements.ImageView"
-            icon="icons/delta.gif"
+            icon="icons/delta.png"
             id="org.jboss.tools.deltacloud.ui.views.ImageView"
             name="%ImageViewer.name"
             restorable="true">
@@ -81,7 +81,7 @@
       <wizard
             category="org.jboss.tools.deltacloud.ui.wizard.category"
             class="org.jboss.tools.internal.deltacloud.ui.wizards.NewCloudConnectionWizard"
-            icon="icons/delta.gif"
+            icon="icons/delta.png"
             id="org.jboss.tools.deltacloud.ui.connection.wizard"
             name="%NewWizard.name">
       </wizard>
@@ -90,7 +90,7 @@
          point="org.eclipse.ui.perspectives">
       <perspective
             class="org.jboss.tools.deltacloud.ui.DeltaCloudPerspective"
-            icon="icons/delta.gif"
+            icon="icons/delta.png"
             id="org.jboss.tools.deltacloud.ui.perspective"
             name="%DeltaCloudPerspective.name">
       </perspective>
@@ -269,6 +269,32 @@
    </extension>
    <extension
          point="org.eclipse.ui.handlers">
+	  <!-- Manage Keys command handler -->
+      <handler
+            class="org.jboss.tools.deltacloud.ui.commands.ManageKeysHandler"
+            commandId="org.jboss.tools.deltacloud.ui.managekeys">
+			<activeWhen>
+               <with
+                 variable="selection">
+					<iterate operator="and">
+						<adapt
+				             type="org.jboss.tools.deltacloud.core.DeltaCloud">
+							<test property="org.jboss.tools.deltacloud.ui.commands.isValid"
+									value="true"/>
+						</adapt>
+	               	</iterate>
+               </with>
+			</activeWhen>
+			<enabledWhen>
+				<with
+					variable="selection">
+					<count value="1" />
+				</with>
+			</enabledWhen>
+      </handler>
+   </extension>
+   <extension
+         point="org.eclipse.ui.handlers">
       <!-- image command handlers -->
       <handler
             class="org.jboss.tools.deltacloud.ui.commands.CreateInstanceFromSpecificImageHandler"
@@ -489,13 +515,30 @@
 				name="connections"
 				visible="true" />
 			<separator
+				name="keys"
+				visible="true" />
+			<separator
 				name="images"
 				visible="true" />
 			<separator
 				name="filters"
 				visible="true" />
 	</menuContribution>
-	<!-- instance commands -->
+	<!-- manage keys command -->
+    <menuContribution
+            allPopups="true"
+            locationURI="popup:org.jboss.tools.deltacloud.ui.views.DeltaCloudView?after=keys">	
+		 <!-- connection commands -->
+         <command
+               commandId="org.jboss.tools.deltacloud.ui.managekeys"
+               icon="icons/keys.gif"
+               disabledIcon="icons/keysd.gif"
+               label="%command.managekeys.label"
+               style="push"
+               tooltip="%command.managekeys.tooltip">
+         </command>
+    </menuContribution>	
+    <!-- instance commands -->
     <menuContribution
             allPopups="true"
             locationURI="popup:org.jboss.tools.deltacloud.ui.views.DeltaCloudView?after=instances">	
@@ -730,6 +773,12 @@
             id="org.jboss.tools.deltacloud.ui.destroyinstance"
             name="%command.destroyinstance.name">
       </command>
+	  <!-- manage keys command -->
+      <command
+            description="%command.managekeys.description"
+            id="org.jboss.tools.deltacloud.ui.managekeys"
+            name="%command.managekeys.name">
+      </command>
 	  <!-- filter commands -->
       <command
             description="%command.filterimages.description"
@@ -794,5 +843,106 @@
         </adapter>
      </factory>
   </extension>
+  <extension
+        point="org.eclipse.ui.navigator.navigatorContent">
+     <navigatorContent
+           activeByDefault="true"
+           contentProvider="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudContentProvider"
+           icon="icons/delta.png"
+           id="org.jboss.tools.deltacloud.ui.cloudContentRoot"
+           labelProvider="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudLabelProvider"
+           name="DeltaClouds"
+           priority="higher">
+        <triggerPoints>
+           <or>
+              <instanceof
+                    value="java.lang.Object">
+              </instanceof>
+           </or>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.Object">
+              </instanceof>
+           </or></possibleChildren>
+     </navigatorContent>
+     <navigatorContent
+           activeByDefault="true"
+           contentProvider="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersContentProvider"
+           icon="icons/sample.gif"
+           id="org.jboss.tools.deltacloud.ui.filtersContentRoot"
+           labelProvider="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudLabelProvider"
+           name="Filters"
+           priority="high">
+        <triggerPoints>
+           <or>
+              <instanceof
+                    value="java.lang.Object">
+              </instanceof>
+           </or>
+        </triggerPoints>
+        <possibleChildren>
+           <or>
+              <instanceof
+                    value="java.lang.Object">
+              </instanceof>
+           </or></possibleChildren>
+     </navigatorContent>
+     <actionProvider
+           class="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudViewActionProvider"
+           id="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudViewActionProvider"
+           priority="higher">
+        <enablement>
+           <or>
+              <instanceof
+                    value="java.lang.Object">
+              </instanceof>
+           </or>
+        </enablement>
+     </actionProvider>
+     <actionProvider
+           class="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersActionProvider"
+           id="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersActionProvider"
+           priority="higher">
+        <enablement>
+           <or>
+              <instanceof
+                    value="java.lang.Object">
+              </instanceof>
+           </or>
+        </enablement>
+     </actionProvider>
+  </extension>
+  <extension
+        point="org.eclipse.ui.navigator.viewer">
+     <viewer
+           viewerId="org.jboss.tools.deltacloud.ui.views.CloudView2">
+     </viewer>
+     <viewerContentBinding
+           viewerId="org.jboss.tools.deltacloud.ui.views.CloudView2">
+        <includes>
+           <contentExtension
+                 isRoot="true"
+                 pattern="org.jboss.tools.deltacloud.ui.cloudContentRoot">
+           </contentExtension>
+           <contentExtension
+                 isRoot="false"
+                 pattern="org.jboss.tools.deltacloud.ui.filtersContentRoot">
+           </contentExtension>
+        </includes>
+     </viewerContentBinding>
+     <viewerActionBinding
+           viewerId="org.jboss.tools.deltacloud.ui.views.CloudView2">
+        <includes>
+           <actionExtension
+                 pattern="org.jboss.tools.deltacloud.ui.views.cloud.cnf.CloudViewActionProvider">
+           </actionExtension>
+           <actionExtension
+                 pattern="org.jboss.tools.deltacloud.ui.views.cloud.cnf.FiltersActionProvider">
+           </actionExtension>
+        </includes>
+     </viewerActionBinding>
+  </extension>
 
 </plugin>
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnectionPage.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnectionPage.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnectionPage.java	(working copy)
@@ -56,17 +56,18 @@
 import org.eclipse.ui.PlatformUI;
 import org.jboss.tools.common.log.LogHelper;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.deltacloud.core.DeltaCloudDriver;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
 import org.jboss.tools.deltacloud.core.DeltaCloudManager;
-import org.jboss.tools.deltacloud.core.Driver;
-import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl.DeltaCloudServerType;
 import org.jboss.tools.deltacloud.ui.Activator;
+import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
 import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
+import org.jboss.tools.deltacloud.ui.preferences.StringPreferenceValue;
 import org.jboss.tools.internal.deltacloud.ui.common.databinding.validator.CompositeValidator;
 import org.jboss.tools.internal.deltacloud.ui.common.databinding.validator.MandatoryStringValidator;
 import org.jboss.tools.internal.deltacloud.ui.common.swt.JFaceUtils;
 import org.jboss.tools.internal.deltacloud.ui.preferences.IPreferenceKeys;
-import org.jboss.tools.internal.deltacloud.ui.preferences.StringPreferenceValue;
+import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
 
 /**
  * @author Jeff Jonhston
@@ -126,12 +127,12 @@
 
 		private Label typeLabel;
 
-		public DeltaCloudTypeLabelAdapter(Driver cloudType, Label typeLabel) {
+		public DeltaCloudTypeLabelAdapter(DeltaCloudDriver cloudType, Label typeLabel) {
 			this.typeLabel = typeLabel;
 			init(cloudType);
 		}
 
-		private void init(Driver cloudType) {
+		private void init(DeltaCloudDriver cloudType) {
 			setLabelText(cloudType);
 		}
 
@@ -142,7 +143,7 @@
 		}
 
 		private void setLabelText(Object cloudType) {
-			if (cloudType != null && !Driver.UNKNOWN.equals(cloudType)) {
+			if (cloudType != null && !DeltaCloudDriver.UNKNOWN.equals(cloudType)) {
 				typeLabel.setText(cloudType.toString());
 			} else {
 				typeLabel.setText("?"); // $NON-NLS-1$
@@ -302,7 +303,8 @@
 	}
 
 	public CloudConnectionPage(String pageName, String defaultName, String defaultUrl, String defaultUsername,
-			String defaultPassword, Driver defaultDriver, CloudConnection cloudConnection) throws MalformedURLException {
+			String defaultPassword, DeltaCloudDriver defaultDriver, CloudConnection cloudConnection)
+			throws MalformedURLException {
 		super(pageName);
 		this.connectionModel =
 				new CloudConnectionPageModel(defaultName, defaultUrl, defaultUsername, defaultPassword, defaultDriver);
@@ -330,6 +332,7 @@
 		Label nameLabel = new Label(container, SWT.NULL);
 		nameLabel.setText(WizardMessages.getString(NAME_LABEL));
 		Text nameText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		UIUtils.createPreferencesProposalAdapter(nameText, IDeltaCloudPreferenceConstants.CLOUD_NAME_PROPOSAL_KEY);
 		bindName(dbc, nameText);
 
 		// url
@@ -337,7 +340,7 @@
 		urlLabel.setText(WizardMessages.getString(URL_LABEL));
 		Point p1 = urlLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT);
 		Text urlText = new Text(container, SWT.BORDER | SWT.SINGLE);
-
+		UIUtils.createPreferencesProposalAdapter(urlText, IDeltaCloudPreferenceConstants.CLOUD_URL_PROPOSAL_KEY);
 		dbc.bindValue(
 				WidgetProperties.text(SWT.Modify).observe(urlText),
 				BeanProperties.value(
@@ -362,6 +365,7 @@
 		Label usernameLabel = new Label(container, SWT.NULL);
 		usernameLabel.setText(WizardMessages.getString(USERNAME_LABEL));
 		Text usernameText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		UIUtils.createPreferencesProposalAdapter(usernameText, IDeltaCloudPreferenceConstants.CLOUD_USERNAME_PROPOSAL_KEY);
 		IObservableValue usernameObservable = WidgetProperties.text(SWT.Modify).observe(usernameText);
 		dbc.bindValue(
 				usernameObservable,
@@ -540,8 +544,9 @@
 		 */
 		IObservableValue cloudTypeObservable = urlToCloudTypeConverter.getCloudTypeObservable();
 		Object value = cloudTypeObservable.getValue();
-		Assert.isTrue(value == null || value instanceof Driver);
-		DeltaCloudTypeLabelAdapter cloudTypeAdapter = new DeltaCloudTypeLabelAdapter((Driver) value, typeLabel);
+		Assert.isTrue(value == null || value instanceof DeltaCloudDriver);
+		DeltaCloudTypeLabelAdapter cloudTypeAdapter = new DeltaCloudTypeLabelAdapter((DeltaCloudDriver) value,
+				typeLabel);
 		cloudTypeObservable.addValueChangeListener(cloudTypeAdapter);
 		ControlDecorationSupport.create(urlTypeBinding, SWT.LEFT | SWT.TOP);
 
@@ -570,7 +575,23 @@
 		ControlDecorationSupport.create(nameTextBinding, SWT.LEFT | SWT.TOP);
 	}
 
-	public CloudConnectionPageModel getModel() {
-		return connectionModel;
+	public String getUrl() {
+		return connectionModel.getUrl();
+	}
+
+	public String getConnectionName() {
+		return connectionModel.getName();
+	}
+
+	public String getUsername() {
+		return connectionModel.getUsername();
+	}
+
+	public String getPassword() {
+		return connectionModel.getPassword();
+	}
+
+	public DeltaCloudDriver getDriver() {
+		return connectionModel.getDriver();
 	}
 }
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/NewCloudConnectionWizard.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/NewCloudConnectionWizard.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/NewCloudConnectionWizard.java	(working copy)
@@ -12,18 +12,24 @@
 
 import java.text.MessageFormat;
 
+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.jface.viewers.IStructuredSelection;
 import org.eclipse.jface.wizard.Wizard;
 import org.eclipse.ui.INewWizard;
 import org.eclipse.ui.IWorkbench;
+import org.jboss.tools.common.log.StatusFactory;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.deltacloud.core.DeltaCloudDriver;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
 import org.jboss.tools.deltacloud.core.DeltaCloudManager;
-import org.jboss.tools.deltacloud.core.Driver;
 import org.jboss.tools.deltacloud.ui.Activator;
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
+import org.jboss.tools.deltacloud.ui.preferences.StringPreferenceValue;
 import org.jboss.tools.internal.deltacloud.ui.preferences.IPreferenceKeys;
-import org.jboss.tools.internal.deltacloud.ui.preferences.StringPreferenceValue;
+import org.jboss.tools.internal.deltacloud.ui.utils.WizardUtils;
 
 /**
  * @author Jeff Johnston
@@ -82,10 +88,10 @@
 	}
 
 	public boolean performTest() {
-		String name = mainPage.getModel().getName();
-		String url = mainPage.getModel().getUrl();
-		String username = mainPage.getModel().getUsername();
-		String password = mainPage.getModel().getPassword();
+		String name = mainPage.getConnectionName();
+		String url = mainPage.getUrl();
+		String username = mainPage.getUsername();
+		String password = mainPage.getPassword();
 		try {
 			DeltaCloud newCloud = new DeltaCloud(name, url, username, password);
 			return newCloud.testCredentials();
@@ -103,24 +109,42 @@
 
 	@Override
 	public boolean performFinish() {
-		String name = mainPage.getModel().getName();
-		String url = mainPage.getModel().getUrl();
+		final String name = mainPage.getConnectionName();
+		final String url = mainPage.getUrl();
 
 		new StringPreferenceValue(IPreferenceKeys.LAST_URL, Activator.PLUGIN_ID)
 				.store(url);
 
-		String username = mainPage.getModel().getUsername();
-		String password = mainPage.getModel().getPassword();
-		Driver driver = mainPage.getModel().getDriver();
+		final String username = mainPage.getUsername();
+		final String password = mainPage.getPassword();
+		final DeltaCloudDriver driver = mainPage.getDriver();
+
+		return createCloud(name, url, username, password, driver);
+	}
+
+	private boolean createCloud(final String name, final String url, final String username, final String password,
+			final DeltaCloudDriver driver)  {
+		Job job = new Job(MessageFormat.format("Create cloud \"{0}\"", name)) {
 
+			@Override
+			protected IStatus run(IProgressMonitor monitor) {
+				try {
+					DeltaCloud newCloud = new DeltaCloud(name, url, username, password, driver);
+					DeltaCloudManager.getDefault().addCloud(newCloud);
+					return Status.OK_STATUS;
+				} catch (Exception e) {
+					// TODO internationalize strings
+					return StatusFactory.getInstance(IStatus.ERROR, Activator.PLUGIN_ID,
+							MessageFormat.format("Could not create cloud {0}", name), e);
+				}
+			}
+
+		};
 		try {
-			DeltaCloud newCloud = new DeltaCloud(name, url, username, password, driver);
-			DeltaCloudManager.getDefault().addCloud(newCloud);
+			WizardUtils.runInWizard(job, getContainer());
+			return job.getResult() != null && job.getResult().getCode() != IStatus.ERROR;
 		} catch (Exception e) {
-			// TODO internationalize strings
-			ErrorUtils
-					.handleError("Error", MessageFormat.format("Could not create cloud {0}", name), e, getShell());
+			return false;
 		}
-		return true;
 	}
 }
Index: src/org/jboss/tools/deltacloud/ui/commands/DeleteCloudHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/DeleteCloudHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/DeleteCloudHandler.java	(working copy)
@@ -38,7 +38,7 @@
 import org.jboss.tools.deltacloud.core.DeltaCloudManager;
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
 import org.jboss.tools.deltacloud.ui.views.CVMessages;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * @author Andre Dietisheim
@@ -138,7 +138,7 @@
 		DeltaCloud deltaCloud = null;
 		if (selectedElements.size() > 0) {
 			Object object = selectedElements.get(0);
-			deltaCloud = UIUtils.adapt(object, DeltaCloud.class);
+			deltaCloud = WorkbenchUtils.adapt(object, DeltaCloud.class);
 		}
 		return deltaCloud;
 	}
@@ -146,7 +146,7 @@
 	private Collection<DeltaCloud> getSelectedClouds(List<?> selectedElements) {
 		Set<DeltaCloud> selectedClouds = new HashSet<DeltaCloud>();
 		for (Object element : selectedElements) {
-			DeltaCloud deltaCloud = UIUtils.adapt(element, DeltaCloud.class);
+			DeltaCloud deltaCloud = WorkbenchUtils.adapt(element, DeltaCloud.class);
 			if (deltaCloud != null) {
 				selectedClouds.add(deltaCloud);
 			}
Index: src/org/jboss/tools/deltacloud/ui/commands/ManageKeysHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/ManageKeysHandler.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/ui/commands/ManageKeysHandler.java	(revision 0)
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.ui.commands;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.internal.deltacloud.ui.utils.WizardUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
+import org.jboss.tools.internal.deltacloud.ui.wizards.ManageKeysWizard;
+
+/**
+ * @author Andre Dietisheim
+ */
+public class ManageKeysHandler extends AbstractHandler implements IHandler {
+
+	@Override
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		ISelection selection = HandlerUtil.getCurrentSelection(event);
+		if (selection instanceof IStructuredSelection) {
+			DeltaCloud cloud = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
+			createImagesFilter(cloud, HandlerUtil.getActiveShell(event));
+		}
+
+		return Status.OK_STATUS;
+	}
+
+	private void createImagesFilter(final DeltaCloud cloud, final Shell shell) {
+		if (cloud != null) {
+				Display.getDefault().asyncExec(new Runnable() {
+					@Override
+					public void run() {
+						WizardUtils.openWizardDialog(new ManageKeysWizard(cloud), shell);
+					}
+				});
+
+		}
+	}
+}
Index: src/org/jboss/tools/internal/deltacloud/ui/utils/LayoutUtils.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/utils/LayoutUtils.java	(revision 0)
+++ src/org/jboss/tools/internal/deltacloud/ui/utils/LayoutUtils.java	(revision 0)
@@ -0,0 +1,55 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.internal.deltacloud.ui.utils;
+
+import org.eclipse.swt.layout.FormAttachment;
+import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.widgets.Control;
+
+/**
+ * @author Rob Stryker
+ */
+public class LayoutUtils {
+
+	/**
+	 * This method has been stolen from AS-Tools' UIUtil class and is useful for
+	 * creating FormData objects
+	 */
+	public static FormData createFormData(
+			Object topStart, int topOffset,
+			Object bottomStart, int bottomOffset,
+			Object leftStart, int leftOffset,
+			Object rightStart, int rightOffset) {
+
+		FormData data = new FormData();
+
+		if (topStart != null) {
+			data.top = topStart instanceof Control ? new FormAttachment((Control) topStart, topOffset) :
+					new FormAttachment(((Integer) topStart).intValue(), topOffset);
+		}
+
+		if (bottomStart != null) {
+			data.bottom = bottomStart instanceof Control ? new FormAttachment((Control) bottomStart, bottomOffset) :
+					new FormAttachment(((Integer) bottomStart).intValue(), bottomOffset);
+		}
+
+		if (leftStart != null) {
+			data.left = leftStart instanceof Control ? new FormAttachment((Control) leftStart, leftOffset) :
+					new FormAttachment(((Integer) leftStart).intValue(), leftOffset);
+		}
+
+		if (rightStart != null) {
+			data.right = rightStart instanceof Control ? new FormAttachment((Control) rightStart, rightOffset) :
+					new FormAttachment(((Integer) rightStart).intValue(), rightOffset);
+		}
+		return data;
+	}
+}
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/Url2DriverConverter.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/Url2DriverConverter.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/Url2DriverConverter.java	(working copy)
@@ -16,7 +16,7 @@
 import org.eclipse.core.databinding.observable.value.WritableValue;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
-import org.jboss.tools.deltacloud.core.Driver;
+import org.jboss.tools.deltacloud.core.DeltaCloudDriver;
 
 /**
  * A class that converts an url (string) to a DeltaCloudType (enum). The state
@@ -34,22 +34,22 @@
 	IObservableValue cloudTypeObservable = new WritableValue();
 
 	public Url2DriverConverter() {
-		super(String.class, Driver.class);
+		super(String.class, DeltaCloudDriver.class);
 	}
 
 	@Override
 	public Object convert(Object fromObject) {
 		String deltaCloudUrl = (String) fromObject;
-		Driver cloudType = getCloudType(deltaCloudUrl);
+		DeltaCloudDriver cloudType = getCloudType(deltaCloudUrl);
 		cloudTypeObservable.setValue(cloudType);
 		return cloudType;
 	}
 
-	private Driver getCloudType(String url) {
+	private DeltaCloudDriver getCloudType(String url) {
 		try {
 			return DeltaCloud.getServerDriver(url);
 		} catch (DeltaCloudException e) {
-			return Driver.UNKNOWN;
+			return DeltaCloudDriver.UNKNOWN;
 		}
 	}
 
Index: src/org/jboss/tools/internal/deltacloud/ui/utils/UIUtils.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/utils/UIUtils.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/utils/UIUtils.java	(working copy)
@@ -17,71 +17,132 @@
 import org.eclipse.core.runtime.Assert;
 import org.eclipse.core.runtime.IAdaptable;
 import org.eclipse.core.runtime.Platform;
-import org.eclipse.jface.action.ContributionManager;
-import org.eclipse.jface.action.GroupMarker;
-import org.eclipse.jface.action.IContributionManager;
-import org.eclipse.jface.action.IMenuManager;
-import org.eclipse.jface.action.MenuManager;
-import org.eclipse.jface.dialogs.IDialogSettings;
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.eclipse.jface.bindings.keys.KeyStroke;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.MessageDialogWithToggle;
+import org.eclipse.jface.fieldassist.ContentProposalAdapter;
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.jface.fieldassist.FieldDecorationRegistry;
+import org.eclipse.jface.fieldassist.SimpleContentProposalProvider;
+import org.eclipse.jface.fieldassist.TextContentAdapter;
 import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.swt.events.DisposeEvent;
-import org.eclipse.swt.events.DisposeListener;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.graphics.Image;
 import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Menu;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.IEditorPart;
-import org.eclipse.ui.IWorkbench;
-import org.eclipse.ui.IWorkbenchActionConstants;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.IWorkbenchPartSite;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.PartInitException;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.menus.IMenuService;
-import org.eclipse.ui.part.EditorPart;
-import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.swt.widgets.Text;
+import org.jboss.tools.deltacloud.ui.Activator;
+import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
+import org.jboss.tools.deltacloud.ui.preferences.StringsPreferenceValue;
+import org.osgi.service.prefs.Preferences;
 
 /**
  * @author Andre Dietisheim
  */
 public class UIUtils {
 
-	private static final String CONTEXT_MENU_PREFIX = "popup:";
-	private static final String VIEW_MENU_PREFIX = "menu:";
-	
-	private UIUtils() {
+	public static ContentProposalAdapter createPreferencesProposalAdapter(final Text text, String preferencesKey) {
+		final ControlDecoration decoration = createContenAssistDecoration(text);
+
+		final StringsPreferenceValue preferencesValues =
+				new StringsPreferenceValue(',', preferencesKey, Activator.PLUGIN_ID);
+		SimpleContentProposalProvider proposalProvider = new SimpleContentProposalProvider(preferencesValues.get());
+		proposalProvider.setFiltering(true);
+		text.addFocusListener(new FocusAdapter() {
+
+			@Override
+			public void focusGained(FocusEvent e) {
+				decoration.show();
+			}
+
+			@Override
+			public void focusLost(FocusEvent e) {
+				decoration.hide();
+				String value = text.getText();
+				if (value != null && value.length() > 0) {
+					preferencesValues.add(text.getText());
+					preferencesValues.store();
+				}
+			}
+
+		});
+		KeyStroke keyStroke = KeyStroke.getInstance(SWT.CONTROL, ' ');
+		ContentProposalAdapter proposalAdapter =
+				new ContentProposalAdapter(text, new TextContentAdapter(), proposalProvider, keyStroke, null);
+		proposalAdapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
+		return proposalAdapter;
 	}
 
-	/**
-	 * Returns the selection of the active workbench window.
-	 * 
-	 * @return the selection
-	 * 
-	 * @see IWorkbenchWindow#getSelectionService()
-	 */
-	public static ISelection getWorkbenchWindowSelection() {
-		return getActiveWorkbenchWindow().getSelectionService().getSelection();
+	private static ControlDecoration createContenAssistDecoration(Control control) {
+		ControlDecoration decoration = new ControlDecoration(control, SWT.RIGHT | SWT.TOP);
+		Image errorImage = FieldDecorationRegistry.getDefault()
+				.getFieldDecoration(FieldDecorationRegistry.DEC_CONTENT_PROPOSAL).getImage();
+		decoration.setImage(errorImage);
+		decoration.setDescriptionText("History available");
+		decoration.setShowHover(true);
+		decoration.hide();
+		return decoration;
+	}
+
+	public static ControlDecoration createErrorDecoration(String errorText, Control control) {
+		return createDecoration(errorText, FieldDecorationRegistry.DEC_ERROR, control);
+	}
+
+	public static ControlDecoration createDecoration(String text, String imageKey, Control control) {
+		ControlDecoration decoration = new ControlDecoration(control, SWT.LEFT | SWT.TOP);
+		Image errorImage = FieldDecorationRegistry.getDefault()
+				.getFieldDecoration(imageKey).getImage();
+		decoration.setImage(errorImage);
+		decoration.setDescriptionText(text);
+		decoration.setShowHover(true);
+		decoration.hide();
+		return decoration;
 	}
 
 	/**
-	 * Gets the structured selection.
+	 * Opens a confirmation dialog that offers a checkbox that allows the user
+	 * to turn further aksing off. The checkbox state is stored to the
+	 * preferences
 	 * 
-	 * @return the structured selection
+	 * @param title
+	 *            dialog title
+	 * @param message
+	 *            dialog message
+	 * @param dontShowAgainMessage
+	 *            message for further asking ("dont show this dialog again")
+	 * @param preferencesKey
+	 *            the preferences key to store state of further asking
+	 * @param pluginId
+	 *            the plugin id to use when storing the preferences
+	 * @param shell
+	 *            the shell to use
+	 * @return true, if successful
 	 */
-	public static IStructuredSelection getStructuredSelection() {
-		ISelection selection = getWorkbenchWindowSelection();
-		if (selection instanceof IStructuredSelection) {
-			return (IStructuredSelection) selection;
-		} else {
-			return null;
+	public static boolean openConfirmationDialog(String title, String message, String dontShowAgainMessage,
+			String preferencesKey, String pluginId, Shell shell) {
+		boolean confirmed = true;
+		Preferences prefs = new InstanceScope().getNode(pluginId);
+		boolean dontShowDialog =
+				prefs.getBoolean(preferencesKey, false);
+		if (!dontShowDialog) {
+			MessageDialogWithToggle dialog =
+					MessageDialogWithToggle.openOkCancelConfirm(shell, title, message, dontShowAgainMessage,
+							false, null, null);
+			confirmed = dialog.getReturnCode() == Dialog.OK;
+			boolean toggleState = dialog.getToggleState();
+			// If warning turned off by user, set the preference for future
+			// usage
+			if (toggleState) {
+				prefs.putBoolean(IDeltaCloudPreferenceConstants.DONT_CONFIRM_CREATE_INSTANCE, true);
+			}
 		}
+		return confirmed;
 	}
-
+	
 	/**
 	 * Gets the first element of a given selection in the given type. Returns
 	 * <code>null</null> if selection is selection is empty or adaption of the first element in 
@@ -93,6 +154,7 @@
 	 *            the expected class
 	 * 
 	 * @return the first element
+	 * @deprecated
 	 */
 	public static <T> T getFirstAdaptedElement(final ISelection selection, final Class<T> expectedClass) {
 		if (selection == null) {
@@ -106,27 +168,7 @@
 			return adapt(firstElement, expectedClass);
 		}
 	}
-
-	/**
-	 * Returns <code>true</code> if the given selection holds exactly 1 element
-	 * of the given type.
-	 * 
-	 * @param selection
-	 *            the selection to check
-	 * @param expectedClass
-	 *            the expected class
-	 * @return <code>true</code>, if the given selection holds a single element
-	 *         of the given type.
-	 */
-	public static <T> boolean isSingleSelection(final ISelection selection, final Class<T> expectedClass) {
-		if (!(selection instanceof IStructuredSelection)) {
-			return false;
-		}
-
-		return ((IStructuredSelection) selection).toList().size() == 1
-				&& getFirstAdaptedElement(selection, expectedClass) != null;
-	}
-
+	
 	public static <T> List<T> adapt(Collection<?> objects, Class<T> expectedClass) {
 		List<T> adaptedObjects = new ArrayList<T>();
 		for (Object object : objects) {
@@ -137,7 +179,7 @@
 		}
 		return adaptedObjects;
 	}
-	
+
 	/**
 	 * Adapts the given object to the given type. Returns <code>null</code> if
 	 * the given adaption is not possible. Adaption is tried by casting and by adapting it.
@@ -146,6 +188,7 @@
 	 * @param object
 	 * @param expectedClass
 	 * @return
+	 * @deprecated
 	 */
 	@SuppressWarnings("unchecked")
 	public static <T> T adapt(Object object, Class<T> expectedClass) {
@@ -167,209 +210,4 @@
 		}
 	}
 
-	/**
-	 * Gets the active page.
-	 * 
-	 * @return the active page
-	 */
-	public static IWorkbenchPage getActivePage() {
-		IWorkbenchPage workbenchPage = getActiveWorkbenchWindow().getActivePage();
-		Assert.isNotNull(workbenchPage);
-		return workbenchPage;
-	}
-
-	/**
-	 * Returns the editor that's currently active (focused).
-	 * 
-	 * @return the active editor
-	 */
-	public static IEditorPart getActiveEditor() {
-		IEditorPart editor = getActivePage().getActiveEditor();
-		Assert.isNotNull(editor);
-		return editor;
-	}
-
-	/**
-	 * Gets the active workbench window.
-	 * 
-	 * @return the active workbench window
-	 */
-	public static IWorkbenchWindow getActiveWorkbenchWindow() {
-		IWorkbenchWindow workbenchWindow = getWorkbench().getActiveWorkbenchWindow();
-		Assert.isNotNull(workbenchWindow);
-		return workbenchWindow;
-	}
-
-	public static Shell getActiveShell() {
-		Shell shell = getActiveWorkbenchWindow().getShell();
-		Assert.isTrue(shell != null && !shell.isDisposed());
-		return shell;
-	}
-
-	/**
-	 * Gets the workbench.
-	 * 
-	 * @return the workbench
-	 */
-	public static IWorkbench getWorkbench() {
-		IWorkbench workbench = PlatformUI.getWorkbench();
-		Assert.isNotNull(workbench);
-		return workbench;
-	}
-
-	/**
-	 * Replaces an image with the given key by the given image descriptor.
-	 * 
-	 * @param imageKey
-	 *            the image key
-	 * @param imageDescriptor
-	 *            the image descriptor
-	 */
-	public static void replaceInJfaceImageRegistry(final String imageKey, final ImageDescriptor imageDescriptor) {
-		Assert.isNotNull(imageKey);
-		Assert.isNotNull(imageDescriptor);
-
-		JFaceResources.getImageRegistry().remove(imageKey);
-		JFaceResources.getImageRegistry().put(imageKey, imageDescriptor);
-	}
-
-	/**
-	 * Register the given ContributionManager with the given id. The
-	 * contribution manager gets unregistered on control disposal.
-	 * 
-	 * @param id
-	 *            the id
-	 * @param contributionManager
-	 *            the contribution manager
-	 * @param control
-	 *            the control
-	 * 
-	 * @see ContributionManager
-	 * @see IMenuService
-	 * @see DisposeListener
-	 */
-	public static void registerContributionManager(final String id, final IContributionManager contributionManager,
-			final Control control) {
-		Assert.isNotNull(id);
-		Assert.isNotNull(contributionManager);
-		Assert.isTrue(control != null && !control.isDisposed());
-
-		final IMenuService menuService = (IMenuService) PlatformUI.getWorkbench().getService(IMenuService.class);
-		menuService.populateContributionManager((ContributionManager) contributionManager, id);
-		contributionManager.update(true);
-		control.addDisposeListener(new DisposeListener()
-		{
-			public void widgetDisposed(DisposeEvent e)
-			{
-				menuService.releaseContributions((ContributionManager) contributionManager);
-			}
-		});
-	}
-	
-	public static String getContextMenuId(String viewId) {
-		return new StringBuffer(CONTEXT_MENU_PREFIX).append(viewId).toString();
-	}
-	
-	public static String getViewMenuId(String viewId) {
-		return new StringBuffer(VIEW_MENU_PREFIX).append(viewId).toString();
-	}
-
-	/**
-	 * Creates context menu to a given control.
-	 * 
-	 * @param control
-	 *            the control
-	 * 
-	 * @return the i menu manager
-	 */
-	public static IMenuManager createContextMenu(final Control control) {
-		Assert.isTrue(control != null && !control.isDisposed());
-
-		MenuManager menuManager = new MenuManager();
-		menuManager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
-
-		Menu menu = menuManager.createContextMenu(control);
-		control.setMenu(menu);
-		return menuManager;
-	}
-
-	/**
-	 * Gets the dialog settings for the given identifer and plugin.
-	 * 
-	 * @param identifier
-	 *            the identifier
-	 * @param plugin
-	 *            the plugin
-	 * 
-	 * @return the dialog settings
-	 */
-	public static IDialogSettings getDialogSettings(final String identifier, final AbstractUIPlugin plugin) {
-		Assert.isNotNull(plugin);
-		IDialogSettings dialogSettings = plugin.getDialogSettings();
-		IDialogSettings section = dialogSettings.getSection(identifier);
-		if (section == null) {
-			section = dialogSettings.addNewSection(identifier);
-		}
-		return section;
-	}
-
-	/**
-	 * Returns the page for a given editor.
-	 * 
-	 * @param editor
-	 *            the editor
-	 * @return
-	 * 
-	 * @return the page
-	 * 
-	 * @see IWorkbenchPage
-	 */
-	public static IWorkbenchPage getPage(EditorPart editor) {
-		Assert.isNotNull(editor);
-		IWorkbenchPartSite site = editor.getSite();
-		Assert.isNotNull(site);
-		return site.getPage();
-	}
-
-	public static void showView(String viewId) throws PartInitException {
-		Assert.isLegal(viewId != null && viewId.length() > 0);
-		getActivePage().showView(viewId);
-	}
-
-	
-	/**
-	 * This method has been stolen from AS-Tools' UIUtil class 
-	 * and is useful for creating FormData objects
-	 */
-	public static FormData createFormData(
-			Object topStart, int topOffset, 
-			Object bottomStart, int bottomOffset, 
-			Object leftStart, int leftOffset, 
-			Object rightStart, int rightOffset) {
-		
-			FormData data = new FormData();
-
-			if( topStart != null ) {
-				data.top = topStart instanceof Control ? new FormAttachment((Control)topStart, topOffset) : 
-					new FormAttachment(((Integer)topStart).intValue(), topOffset);
-			}
-
-			if( bottomStart != null ) {
-				data.bottom = bottomStart instanceof Control ? new FormAttachment((Control)bottomStart, bottomOffset) : 
-					new FormAttachment(((Integer)bottomStart).intValue(), bottomOffset);
-			}
-
-			if( leftStart != null ) {
-				data.left = leftStart instanceof Control ? new FormAttachment((Control)leftStart, leftOffset) : 
-					new FormAttachment(((Integer)leftStart).intValue(), leftOffset);
-			}
-
-			if( rightStart != null ) {
-				data.right = rightStart instanceof Control ? new FormAttachment((Control)rightStart, rightOffset) : 
-					new FormAttachment(((Integer)rightStart).intValue(), rightOffset);
-			}
-			return data;
-		}
-
-
 }
Index: src/org/jboss/tools/deltacloud/ui/views/Columns.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/Columns.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/Columns.java	(working copy)
@@ -24,8 +24,8 @@
 		private String name;
 		private int weight;
 
-		public Column(String name, int weight) {
-			this.name = name;
+		public Column(String nameKey, int weight) {
+			this.name = CVMessages.getString(nameKey);
 			this.weight = weight;
 		}
 
Index: src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementTableView.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementTableView.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementTableView.java	(working copy)
@@ -46,16 +46,17 @@
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
 import org.jboss.tools.deltacloud.core.DeltaCloudManager;
+import org.jboss.tools.deltacloud.core.ICloudElementFilter;
 import org.jboss.tools.deltacloud.core.IDeltaCloudElement;
 import org.jboss.tools.deltacloud.core.IDeltaCloudManagerListener;
 import org.jboss.tools.deltacloud.core.IInstanceFilter;
 import org.jboss.tools.deltacloud.ui.Activator;
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
+import org.jboss.tools.deltacloud.ui.preferences.StringPreferenceValue;
 import org.jboss.tools.deltacloud.ui.views.CVMessages;
 import org.jboss.tools.deltacloud.ui.views.Columns;
 import org.jboss.tools.deltacloud.ui.views.Columns.Column;
-import org.jboss.tools.internal.deltacloud.ui.preferences.StringPreferenceValue;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * A common superclass for viewers that operate on IDeltaCloudElements
@@ -77,10 +78,12 @@
 
 	private Combo currentCloudSelector;
 	private Label currentCloudSelectorLabel;
+	private Label filteredLabel;
+	private Composite container;
 	private TableViewer viewer;
 	private DeltaCloud currentCloud;
+
 	private StringPreferenceValue lastSelectedCloudPref;
-	private Composite container;
 
 	private ModifyListener currentCloudModifyListener = new ModifyListener() {
 
@@ -101,6 +104,7 @@
 
 					@Override
 					public void run() {
+						updateFilteredLabel();
 						setViewerInput(currentCloud);
 					}
 				});
@@ -114,7 +118,7 @@
 		public void selectionChanged(IWorkbenchPart part, ISelection selection) {
 			// we want to listen to selection changes in the deltacloud view
 			// only
-			DeltaCloud cloud = UIUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
+			DeltaCloud cloud = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
 			if (isNewCloud(cloud)) {
 				int index = getCloudIndex(cloud, getClouds());
 				currentCloudSelector.select(index);
@@ -173,9 +177,10 @@
 		createCloudSelector(container);
 		initCloudSelector(lastSelectedCloudPref.get(), currentCloudSelector, clouds);
 
-		Label filterLabel = new Label(container, SWT.NULL);
-		filterLabel.setText(CVMessages.getString(FILTERED_LABEL));
-		filterLabel.setToolTipText(CVMessages.getString(FILTERED_TOOLTIP));
+		this.filteredLabel = new Label(container, SWT.NULL);
+		filteredLabel.setText(CVMessages.getString(FILTERED_LABEL));
+		filteredLabel.setToolTipText(CVMessages.getString(FILTERED_TOOLTIP));
+		updateFilteredLabel();
 
 		Composite tableArea = new Composite(container, SWT.NULL);
 		viewer = createTableViewer(tableArea);
@@ -183,7 +188,7 @@
 		currentCloud = getCloud(currentCloudSelector.getSelectionIndex(), clouds);
 		addPropertyChangeListener(currentCloud);
 		setViewerInput(currentCloud);
-		setFilterLabelVisible(currentCloud, filterLabel);
+		setFilterLabelVisible(currentCloud, filteredLabel);
 
 		Point p1 = currentCloudSelectorLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT);
 		Point p2 = currentCloudSelector.computeSize(SWT.DEFAULT, SWT.DEFAULT);
@@ -202,7 +207,7 @@
 		f = new FormData();
 		f.top = new FormAttachment(0, 5 + centering);
 		f.right = new FormAttachment(100, -10);
-		filterLabel.setLayoutData(f);
+		filteredLabel.setLayoutData(f);
 
 		f = new FormData();
 		f.top = new FormAttachment(currentCloudSelector, 8);
@@ -223,25 +228,22 @@
 	private TableViewer createTableViewer(Composite tableArea) {
 		TableColumnLayout tableLayout = new TableColumnLayout();
 		tableArea.setLayout(tableLayout);
-
-		TableViewer viewer = new TableViewer(tableArea,
-				SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.MULTI);
+		TableViewer viewer = new TableViewer(
+				tableArea, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.MULTI);
 		Table table = viewer.getTable();
 		table.setHeaderVisible(true);
 		table.setLinesVisible(true);
 		ITableContentAndLabelProvider<CLOUDELEMENT> provider = getContentAndLabelProvider();
 		viewer.setContentProvider(provider);
 		viewer.setLabelProvider(provider);
-		createColumns(provider, tableLayout, table);
-
+		createColumns(provider.getColumns(), tableLayout, table);
 		viewer.setComparator(new TableViewerColumnComparator());
 		table.setSortDirection(SWT.NONE);
-
 		return viewer;
 	}
 
 	protected abstract ITableContentAndLabelProvider<CLOUDELEMENT> getContentAndLabelProvider();
-	
+
 	private void setViewerInput(DeltaCloud cloud) {
 		viewer.setInput(cloud);
 	}
@@ -295,7 +297,7 @@
 		}
 
 		IInstanceFilter filter = currentCloud.getInstanceFilter();
-		filterLabel.setVisible(!filter.toString().equals(IInstanceFilter.ALL_STRING));
+		filterLabel.setVisible(!filter.isFiltering());
 	}
 
 	private DeltaCloud getCloud(int cloudIndex, DeltaCloud[] clouds) {
@@ -306,17 +308,16 @@
 		return clouds[cloudIndex];
 	}
 
-	private void createColumns(ITableContentAndLabelProvider<CLOUDELEMENT> provider, TableColumnLayout tableLayout, Table table) {
-		Columns<CLOUDELEMENT> columns = provider.getColumns();
-		
+	private void createColumns(Columns<CLOUDELEMENT> columns, TableColumnLayout tableLayout, Table table) {
 		for (int i = 0; i < columns.getSize(); ++i) {
 			Column<CLOUDELEMENT> c = columns.getColumn(i);
 			TableColumn tc = new TableColumn(table, SWT.NONE);
 			if (i == 0) {
 				table.setSortColumn(tc);
 			}
-			tc.setText(CVMessages.getString(c.getName()));
 			tableLayout.setColumnData(tc, new ColumnWeightData(c.getWeight(), true));
+			tc.setText(c.getName());
+			tc.setMoveable(true);
 			tc.addSelectionListener(new ColumnListener(i));
 		}
 	}
@@ -338,8 +339,8 @@
 	}
 
 	private void hookContextMenu(Control control) {
-		IMenuManager contextMenu = UIUtils.createContextMenu(control);
-		UIUtils.registerContributionManager(UIUtils.getContextMenuId(getViewID()), contextMenu, control);
+		IMenuManager contextMenu = WorkbenchUtils.createContextMenu(control);
+		WorkbenchUtils.registerContributionManager(WorkbenchUtils.getContextMenuId(getViewID()), contextMenu, control);
 	}
 
 	protected abstract String getViewID();
@@ -373,27 +374,33 @@
 		container.layout(true, true);
 	}
 
-	public void cloudsChanged(int type, DeltaCloud cloud) {
-		DeltaCloud[] clouds = getClouds();
-		switch (type) {
-		case IDeltaCloudManagerListener.REMOVE_EVENT:
-			onCloudRemoved(cloud, clouds);
-			break;
-		default:
-		}
-		
-		int index = getCloudIndex(currentCloud, clouds);
-		String[] cloudNames = toCloudNames(clouds);
-		setCloudSelectorItems(cloudNames, currentCloudSelector);
+	public void cloudsChanged(final int type, final DeltaCloud cloud) {
+		viewer.getControl().getDisplay().syncExec(new Runnable() {
 
-		if (cloudNames.length > 0) {
-			currentCloudSelector.setText(cloudNames[index]);
-			setViewerInput(currentCloud);
-		} else {
-			currentCloudSelector.setText("");
-			setViewerInput(null);
+			@Override
+			public void run() {
+				DeltaCloud[] clouds = getClouds();
+				switch (type) {
+				case IDeltaCloudManagerListener.REMOVE_EVENT:
+					onCloudRemoved(cloud, clouds);
+					break;
+				default:
+				}
+
+			int index = getCloudIndex(currentCloud, clouds);
+			String[] cloudNames = toCloudNames(clouds);
+			setCloudSelectorItems(cloudNames, currentCloudSelector);
+
+			if (cloudNames.length > 0) {
+				currentCloudSelector.setText(cloudNames[index]);
+				setViewerInput(currentCloud);
+			} else {
+				currentCloudSelector.setText("");
+				setViewerInput(null);
+			}
+			container.layout(true, true);
 		}
-		container.layout(true, true);
+		});
 	}
 
 	private void onCloudRemoved(DeltaCloud cloud, DeltaCloud[] clouds) {
@@ -456,4 +463,21 @@
 			return super.getAdapter(adapter);
 		}
 	}
+
+	protected void updateFilteredLabel() {
+		filteredLabel.getDisplay().syncExec(new Runnable() {
+
+			@Override
+			public void run() {
+				boolean visible = false;
+				if (currentCloud != null) {
+					ICloudElementFilter<CLOUDELEMENT> filter = getFilter(currentCloud);
+					visible = filter.isFiltering();
+				}
+				filteredLabel.setVisible(visible);
+			}
+		});
+	}
+
+	protected abstract ICloudElementFilter<CLOUDELEMENT> getFilter(DeltaCloud cloud);
 }
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstanceWizard.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstanceWizard.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstanceWizard.java	(working copy)
@@ -11,10 +11,6 @@
 package org.jboss.tools.internal.deltacloud.ui.wizards;
 
 import org.eclipse.core.runtime.Assert;
-import org.eclipse.core.runtime.preferences.InstanceScope;
-import org.eclipse.jface.dialogs.Dialog;
-import org.eclipse.jface.dialogs.MessageDialogWithToggle;
-import org.eclipse.jface.wizard.Wizard;
 import org.jboss.tools.common.jobs.ChainedJob;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
@@ -26,13 +22,13 @@
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
 import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
 import org.jboss.tools.deltacloud.ui.wizard.INewInstanceWizardPage;
-import org.osgi.service.prefs.Preferences;
+import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
 
 /**
  * @author Jeff Johnston
  * @author André Dieitsheim
  */
-public class NewInstanceWizard extends Wizard {
+public class NewInstanceWizard extends AbstractDeltaCloudWizard {
 
 	private final static String CREATE_INSTANCE_FAILURE_TITLE = "CreateInstanceError.title"; //$NON-NLS-1$
 	private final static String CREATE_INSTANCE_FAILURE_MSG = "CreateInstanceError.msg"; //$NON-NLS-1$
@@ -43,7 +39,6 @@
 
 	protected NewInstancePage mainPage;
 	protected INewInstanceWizardPage[] additionalPages;
-	protected DeltaCloud cloud;
 	protected DeltaCloudInstance instance;
 	/**
 	 * Initial image, may be null
@@ -51,7 +46,7 @@
 	private DeltaCloudImage image;
 
 	public NewInstanceWizard(DeltaCloud cloud) {
-		this.cloud = cloud;
+		super(cloud);
 		try {
 			this.image = cloud.getLastImage();
 		} catch (DeltaCloudException e) {
@@ -66,7 +61,7 @@
 
 	@Override
 	public void addPages() {
-		mainPage = new NewInstancePage(cloud, image);
+		mainPage = new NewInstancePage(getDeltaCloud(), image);
 		addPage(mainPage);
 		additionalPages = DeltacloudUIExtensionManager.getDefault().loadNewInstanceWizardPages();
 		for (int i = 0; i < additionalPages.length; i++) {
@@ -96,18 +91,23 @@
 		String name = model.getName();
 
 		// Save persistent settings for this particular cloud
+		DeltaCloud cloud = getDeltaCloud();
 		cloud.setLastImageId(imageId);
 		cloud.setLastKeyname(keyId);
 
 		boolean result = false;
 		Exception e = null;
 		try {
-			if (isProceed()) {
+			if (UIUtils.openConfirmationDialog(
+					WizardMessages.getString(CONFIRM_CREATE_TITLE), WizardMessages.getString(CONFIRM_CREATE_MSG),
+					WizardMessages.getString(DONT_SHOW_THIS_AGAIN_MSG),
+					IDeltaCloudPreferenceConstants.DONT_CONFIRM_CREATE_INSTANCE, Activator.PLUGIN_ID, getShell())) {
+
 				instance = cloud.createInstance(name, imageId, realmId, profileId, keyId, memory, storage);
 				if (instance != null) {
 					result = true;
 					if (instance.getState().equals(DeltaCloudInstance.State.PENDING)) {
-						scheduleJobs();
+						scheduleJobs(instance);
 					}
 				}
 			}
@@ -125,17 +125,17 @@
 		return result;
 	}
 
-	private void scheduleJobs() {
+	private void scheduleJobs(DeltaCloudInstance instance) {
 		ChainedJob first =
 				new InstanceStateJob(
-						WizardMessages.getFormattedString(STARTING_INSTANCE_TITLE, instance.getName()),
+						WizardMessages.getFormattedString(STARTING_INSTANCE_TITLE, instance.getAlias()),
 						instance,
 						DeltaCloudInstance.State.RUNNING);
 		first.setUser(true);
 		ChainedJob last = first;
 		ChainedJob temp;
 		for (int i = 0; i < additionalPages.length; i++) {
-			temp = additionalPages[i].getPerformFinishJob(instance);
+			temp = additionalPages[i].createPerformFinishJob(instance);
 			if (temp != null) {
 				last.setNextJob(temp);
 				last = temp;
@@ -143,27 +143,4 @@
 		}
 		first.schedule();
 	}
-
-	private boolean isProceed() {
-		boolean proceed = true;
-		Preferences prefs = new InstanceScope().getNode(Activator.PLUGIN_ID);
-		boolean dontShowDialog =
-				prefs.getBoolean(IDeltaCloudPreferenceConstants.DONT_CONFIRM_CREATE_INSTANCE, false);
-		if (!dontShowDialog) {
-			MessageDialogWithToggle dialog =
-					MessageDialogWithToggle.openOkCancelConfirm(getShell(),
-							WizardMessages.getString(CONFIRM_CREATE_TITLE),
-							WizardMessages.getString(CONFIRM_CREATE_MSG),
-							WizardMessages.getString(DONT_SHOW_THIS_AGAIN_MSG),
-							false, null, null);
-			proceed = dialog.getReturnCode() == Dialog.OK;
-			boolean toggleState = dialog.getToggleState();
-			// If warning turned off by user, set the preference for future
-			// usage
-			if (toggleState) {
-				prefs.putBoolean(IDeltaCloudPreferenceConstants.DONT_CONFIRM_CREATE_INSTANCE, true);
-			}
-		}
-		return proceed;
-	}
-}
+}
\ No newline at end of file
Index: src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudInstanceDialog.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudInstanceDialog.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudInstanceDialog.java	(working copy)
@@ -10,6 +10,7 @@
  ******************************************************************************/
 package org.jboss.tools.deltacloud.ui.commands;
 
+import java.util.ArrayList;
 import java.util.Collection;
 
 import org.eclipse.jface.viewers.ArrayContentProvider;
@@ -17,7 +18,7 @@
 import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.dialogs.ListSelectionDialog;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * A dialog that allows the user to select CVInstanceElements
@@ -28,7 +29,7 @@
 
 	private static class DeltaCloudInstanceNameProvider extends LabelProvider {
 		public String getText(Object element) {
-			DeltaCloudInstance instance = UIUtils.adapt(element, DeltaCloudInstance.class);
+			DeltaCloudInstance instance = WorkbenchUtils.adapt(element, DeltaCloudInstance.class);
 			if (instance != null) {
 				return instance.getName();
 			} else {
@@ -45,4 +46,13 @@
 				, message);
 		setTitle(title);
 	}
+	
+	public DeltaCloudInstance[] getResult2() {
+		ArrayList<DeltaCloudInstance> result = new ArrayList<DeltaCloudInstance>();
+		Object[] supArr = super.getResult();
+		for( int i = 0; i < supArr.length; i++ ) {
+			result.add((DeltaCloudInstance)supArr[i]);
+		}
+		return result.toArray(new DeltaCloudInstance[result.size()]);
+	}
 }
\ No newline at end of file
Index: src/org/jboss/tools/deltacloud/ui/preferences/StringsPreferenceValue.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/preferences/StringsPreferenceValue.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/ui/preferences/StringsPreferenceValue.java	(revision 0)
@@ -0,0 +1,189 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.ui.preferences;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+
+/**
+ * A class that offers access to a collection of values that is stored in the
+ * preferences under a single key.
+ * 
+ * @author Andre Dietisheim
+ */
+public class StringsPreferenceValue extends AbstractPreferenceValue<String[]> {
+
+	private String delimiter;
+	private String escapedDelimiter;
+
+	public StringsPreferenceValue(char delimiter, String prefsKey, String pluginId) {
+		super(prefsKey, pluginId);
+		this.delimiter = String.valueOf(delimiter);
+		try {
+			this.escapedDelimiter = URLEncoder.encode(String.valueOf(delimiter), "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			// cannot happen since we use a fixed, known encoding
+		}
+	}
+
+	public String[] get() {
+		return get(null);
+	}
+
+	public String[] get(String[] currentValues) {
+
+		String string = doGet(null);
+		String[] prefValues = split(string);
+		return overrideValues(currentValues, prefValues);
+	}
+
+	private String[] split(String string) {
+		ArrayList<String> values = new ArrayList<String>();
+		StringTokenizer tokenizer = new StringTokenizer(string, delimiter);
+		while (tokenizer.hasMoreTokens()) {
+			String value = tokenizer.nextToken();
+			String unescapedValue = unescapeDelimiterCharacter(value);
+			values.add(unescapedValue);
+		}
+		return values.toArray(new String[values.size()]);
+	}
+
+	private String[] overrideValues(String[] newValues, String[] prefValues) {
+		if (prefValues == null) {
+			return newValues;
+		}
+
+		for (int i = 0; i < prefValues.length; i++) {
+			if (newValues == null
+					|| newValues.length < i) {
+				break;
+			}
+			prefValues[i] = newValues[i];
+		}
+		return prefValues;
+	}
+
+	/**
+	 * Adds the given string value to this preference value(s). Duplicate values
+	 * are not added.
+	 * 
+	 * @param value
+	 *            the value to add
+	 */
+	public void add(String value) {
+		String currentValues = doGet();
+		StringBuilder builder = new StringBuilder(currentValues);
+		value = escapeDelimiterCharacter(value);
+		if (!contains(value, currentValues)) {
+			if (hasValues(currentValues)) {
+				builder.append(delimiter);
+			}
+			builder.append(value);
+			doStore(builder.toString());
+		}
+	}
+
+	private String escapeDelimiterCharacter(String value) {
+		if (value == null || value.length() == 0) {
+			return value;
+		}
+
+		int index = value.indexOf(delimiter);
+		if (index < 0) {
+			return value;
+		}
+		StringBuilder builder = new StringBuilder(value.substring(0, index));
+		builder.append(escapedDelimiter);
+		builder.append(value.substring(index + 1));
+		return builder.toString();
+	}
+
+	private String unescapeDelimiterCharacter(String value) {
+		if (value == null || value.length() == 0) {
+			return value;
+		}
+
+		int index = value.indexOf(escapedDelimiter);
+		if (index < 0) {
+			return value;
+		}
+		StringBuilder builder = new StringBuilder(value.substring(0, index));
+		builder.append(delimiter);
+		builder.append(value.substring(index + 1));
+		return builder.toString();
+	}
+
+	private boolean contains(String value, String currentValues) {
+		return currentValues != null
+				&& currentValues.length() > 0
+				&& currentValues.indexOf(value) >= 0;
+	}
+
+	private boolean hasValues(String currentValues) {
+		return currentValues != null && currentValues.length() > 0;
+	}
+
+	/**
+	 * Removes the given values from the strings stored in the preferences and
+	 * stores the preferences.
+	 * 
+	 * @param values
+	 *            the values
+	 */
+	public void remove(String... valuesToRemove) {
+		boolean removed = false;
+		String[] currentValues = get();
+		if (valuesToRemove != null) {
+			for (int i = 0; i < currentValues.length; i++) {
+				for (String valueToRemove : valuesToRemove) {
+					if (valueToRemove.equals(currentValues[i])) {
+						currentValues[i] = null;
+						removed = true;
+					}
+				}
+			}
+		}
+		if (removed) {
+			store(currentValues);
+		}
+	}
+
+	/**
+	 * Overrides the current values in the preferences with the values in the
+	 * given array (value in the preferences at index x is overridden with the
+	 * value in the given array at index x) and stores the preferences.
+	 */
+	public void store(String[] newValues) {
+		String[] currentValues = get();
+		overrideValues(newValues, currentValues);
+		doStore(concatenate(currentValues));
+	}
+
+	public void store() {
+		store(null);
+	}
+
+	protected String concatenate(String[] values) {
+		StringBuilder builder = new StringBuilder();
+		for (int i = 0; i < values.length; i++) {
+			if (values[i] != null) {
+				if (builder.length() > 0) {
+					builder.append(delimiter);
+				}
+				builder.append(values[i]);
+			}
+		}
+		return builder.toString();
+	}
+}
Index: src/org/jboss/tools/deltacloud/ui/commands/RebootInstanceHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/RebootInstanceHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/RebootInstanceHandler.java	(working copy)
@@ -23,9 +23,10 @@
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.common.log.StatusFactory;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
+import org.jboss.tools.deltacloud.core.DeltaCloudResourceAction;
 import org.jboss.tools.deltacloud.ui.Activator;
 import org.jboss.tools.deltacloud.ui.views.CVMessages;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * @author Andre Dietisheim
@@ -44,7 +45,7 @@
 		try {
 			if (selection instanceof IStructuredSelection) {
 				if (isSingleInstanceSelected(selection)) {
-					DeltaCloudInstance cvInstance = UIUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
+					DeltaCloudInstance cvInstance = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
 					rebootInstance(cvInstance);
 				} else {
 					rebootWithDialog((IStructuredSelection) selection);
@@ -60,10 +61,10 @@
 
 	@SuppressWarnings("unchecked")
 	private void rebootWithDialog(IStructuredSelection selection) {
-		List<DeltaCloudInstance> deltaCloudInstances = UIUtils.adapt((List<DeltaCloudInstance>) selection.toList(), DeltaCloudInstance.class);
+		List<DeltaCloudInstance> deltaCloudInstances = WorkbenchUtils.adapt((List<DeltaCloudInstance>) selection.toList(), DeltaCloudInstance.class);
 		List<DeltaCloudInstance> rebootableInstances = getRebootableInstances(deltaCloudInstances);
 		DeltaCloudInstanceDialog dialog = new DeltaCloudInstanceDialog(
-					UIUtils.getActiveShell()
+				WorkbenchUtils.getActiveShell()
 					, rebootableInstances
 					, CVMessages.getString(REBOOT_INSTANCE_TITLE)
 					, CVMessages.getString(REBOOT_INSTANCE_MSG));
@@ -93,7 +94,7 @@
 		if (instance != null) {
 			executeInstanceAction(
 					instance
-					, DeltaCloudInstance.Action.REBOOT
+					, DeltaCloudResourceAction.REBOOT
 					, DeltaCloudInstance.State.RUNNING
 					, CVMessages.getString(REBOOTING_INSTANCE_TITLE)
 					, CVMessages.getFormattedString(REBOOTING_INSTANCE_MSG, new String[] { instance.getName() }));
Index: src/org/jboss/tools/internal/deltacloud/ui/utils/WizardUtils.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/utils/WizardUtils.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/utils/WizardUtils.java	(working copy)
@@ -22,6 +22,8 @@
 import org.eclipse.jface.wizard.IWizard;
 import org.eclipse.jface.wizard.IWizardContainer;
 import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
 
 /**
  * @author André Dietisheim
@@ -115,4 +117,10 @@
 			}
 		}
 	}
+	
+	public static void openWizardDialog(IWizard wizard, Shell shell) {
+		WizardDialog dialog = new WizardDialog(shell, wizard);
+		dialog.create();
+		dialog.open();
+	}
 }
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePage.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePage.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePage.java	(working copy)
@@ -68,10 +68,12 @@
 import org.jboss.tools.deltacloud.core.job.AbstractCloudElementJob;
 import org.jboss.tools.deltacloud.core.job.AbstractCloudElementJob.CLOUDELEMENT;
 import org.jboss.tools.deltacloud.ui.Activator;
+import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
 import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
 import org.jboss.tools.internal.deltacloud.ui.common.databinding.validator.MandatoryStringValidator;
 import org.jboss.tools.internal.deltacloud.ui.common.databinding.validator.SelectedComboItemValidator;
 import org.jboss.tools.internal.deltacloud.ui.utils.DataBindingUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
 
 /**
  * @author Jeff Jonston
@@ -150,7 +152,7 @@
 		super(WizardMessages.getString(NAME));
 		this.cloud = cloud;
 		String defaultKeyname = cloud.getLastKeyname();
-		model = new NewInstancePageModel(defaultKeyname, image); //$NON-NLS-1$
+		model = new NewInstancePageModel(defaultKeyname, image, cloud); //$NON-NLS-1$
 		setDescription(WizardMessages.getString(DESCRIPTION));
 		setTitle(WizardMessages.getString(TITLE));
 		setImageDescriptor(SWTImagesFactory.DESC_DELTA_LARGE);
@@ -175,12 +177,14 @@
 		nameLabel.setText(WizardMessages.getString(NAME_LABEL));
 		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(nameLabel);
 		this.nameText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		UIUtils.createPreferencesProposalAdapter(nameText, IDeltaCloudPreferenceConstants.INSTANCE_NAME_PROPOSAL_KEY);
 		GridDataFactory.fillDefaults().span(2, 1).grab(true, false).applyTo(nameText);
 
 		Label imageLabel = new Label(container, SWT.NULL);
 		imageLabel.setText(WizardMessages.getString(IMAGE_LABEL));
 		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(imageLabel);
 		this.imageText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		UIUtils.createPreferencesProposalAdapter(imageText, IDeltaCloudPreferenceConstants.INSTANCE_IMAGE_PROPOSAL_KEY);
 		GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(imageText);
 		Button findImageButton = new Button(container, SWT.NULL);
 		findImageButton.setText(WizardMessages.getString(FIND_BUTTON_LABEL));
@@ -205,6 +209,7 @@
 		keyLabel.setText(WizardMessages.getString(KEY_LABEL));
 		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(keyLabel);
 		keyText = new Text(container, SWT.BORDER | SWT.SINGLE);
+		UIUtils.createPreferencesProposalAdapter(keyText, IDeltaCloudPreferenceConstants.INSTANCE_KEY_PROPOSAL_KEY);
 		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).applyTo(keyText);
 		Button keyManageButton = new Button(container, SWT.NULL);
 		keyManageButton.setText(WizardMessages.getString(MANAGE_BUTTON_LABEL));
@@ -444,7 +449,7 @@
 			}
 			return false;
 		}
-		
+
 		private boolean doesKeyExist(String keyId) {
 			try {
 				return cloud.getKey(keyId) != null;
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 29180)
+++ ChangeLog	(working copy)
@@ -1,12 +1,107 @@
+2011-02-18  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePageModel.java 
+	(getProfileIndex): 
+	(setSelectedProfileIndex): 
+	(getRealmIndex): 
+	(setSelectedRealm): 
+	[JBIDE-8333] now persisting last selected realm and profile per cloud.
+
+2011-02-04  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/ui/commands/StopInstanceHandler.java 
+	(stopInstances): 
+	(stopInstances): 
+	[JBIDE-8295] added confirmatino dialog when stopping instances
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterPage.java 
+	(validate): 
+	(validate): 
+	(createControl): 
+	[JBIDE-8332] added field decorations to FilterImage- and FilterInstance-dialogs
+
+2011-02-03  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceView.java (propertyChange): 
+	* src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageView.java (propertyChange): 
+	* src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementTableView.java (updateFilteredLabel): 
+	[JBIDE-8323] updating filtered label now on cloud change and on filter change.
+	* src/org/jboss/tools/deltacloud/ui/views/DeltaCloudInstanceColumns.java (DeltaCloudInstanceColumns): 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/WizardMessages.properties: 
+	[JBIDE-8319] added columns imageId, ownerId, key, realm and profile to instance view. 
+	Made that labels in filter dialog match the column names. 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterPage.java: 
+	[JBIDE-8187] added capability to filter for instance alias
+
 2011-02-02  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
 
-	* src/org/jboss/tools/internal/deltacloud/ui/wizards/FindImagePage.java (onImageDoubleclick): 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/FindImagePage.java 
+	(onImageDoubleclick): 
+	(createControl): 
 	[JBIDE-8310] added choosing an image by double clicking it
 	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePage.java (createWidgets): 
 	[JBIDE-8309] fixed layout for image text field
 
+2011-02-01  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewCloudConnectionWizard.java 
+	(performFinish): 
+	(createCloud): 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/EditCloudConnectionWizard.java 
+	(performFinish): 
+	(editCloud): 
+	[JBIDE-8148] moved cloud creation and cloud edit to background jobs
+
+2011-01-31  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnectionPage.java (createControl): 
+	[JBIDE-8259] added content proposals for cloud name, cloud url, username
+
+2011-01-27  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/SshPrivateKeysPreferences.java 
+	(contains): 
+	(getAbsoluteKeyPath): 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePage.java 
+	(KeyValidator.isKeyKnowToSsh): 
+	[JBIDE-8253] checking relative ssh private key entries now, too
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstancePage.java 
+	(KeyValidator.validate): 
+	(KeyValidator.isKeyKnowToSsh): 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstanceWizard.java (performFinish):
+	[JBIDE-8254] replaced the warning dialog by a similar decoration to the key text field. 
+	Warning is displayed in the title area and in the tooltip of the decoration
+
+2011-01-26  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewCloudConnectionWizard.java 
+	(performTest): 
+	[JBIDE-8250] all error-responses from server indicate that the credentials test failed (was: only 403 was a connection error).
+
+2011-01-25  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
+
+	* plugin.xml: 
+	* plugin.properties: 
+	* src/org/jboss/tools/deltacloud/ui/commands/ManageKeysHandler.java: 
+	[JBIDE-7772] added command, handler, plugin.xml-declaration and icosn for managing keys in the 
+	context-menu of the cloud viewer
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/NewInstanceWizard.java: 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysWizard.java: 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterWizard.java: 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/ImageFilterWizard.java: 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/AbstractDeltaCloudWizard.java: 
+	[JBIDE-7772] extracted common wizard code & moved it to AbstractDeltaCloudWizard  
+	* src/org/jboss/tools/deltacloud/ui/commands/NewConnectionHandler.java: 
+	* src/org/jboss/tools/deltacloud/ui/commands/ManageKeysHandler.java (.run): 	
+	* src/org/jboss/tools/deltacloud/ui/commands/FilterInstancesHandler.java (.run): 
+	* src/org/jboss/tools/deltacloud/ui/commands/FilterImagesHandler.java (.run): 
+	* src/org/jboss/tools/internal/deltacloud/ui/utils/WizardUtils.java (openWizardDialog): 
+	[JBIDE-7772] extracted common handler code & moved it to WizardUtils 
+
 2011-01-17  André Dietisheim  <André Dietisheim@adietisheim-thinkpad>
 
+	* src/org/jboss/tools/internal/deltacloud/ui/utils/WizardUtils.java (nextPageOrFinish): 
+	* src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysPage.java (onKeyDoubleclick): 
+	[JBIDE-8126] close manage keys dialog on double click on a key
 	* src/org/jboss/tools/deltacloud/ui/views/cloudelements/InstanceViewLabelAndContentProvider.java: 
 	* src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageViewLabelAndContentProvider.java: 
 	* src/org/jboss/tools/deltacloud/ui/views/cloudelements/AbstractCloudElementViewLabelAndContentProvider.java: 
Index: src/org/jboss/tools/deltacloud/ui/preferences/StringPreferenceValue.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/preferences/StringPreferenceValue.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/ui/preferences/StringPreferenceValue.java	(revision 0)
@@ -0,0 +1,35 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.ui.preferences;
+
+
+
+/**
+ * @author Andre Dietisheim
+ */
+public class StringPreferenceValue extends AbstractPreferenceValue<String> {
+
+	public StringPreferenceValue(String prefsKey, String pluginId) {
+		super(prefsKey, pluginId);
+	}
+
+	public String get() {
+		return get(null);
+	}
+	
+	public String get(String currentValue) {
+		return doGet(currentValue);
+	}
+
+	public void store(String value) {
+		doStore(value);
+	}
+}
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysWizard.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysWizard.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysWizard.java	(working copy)
@@ -10,7 +10,6 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.ui.wizards;
 
-import org.eclipse.jface.wizard.Wizard;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudKey;
 
@@ -18,14 +17,13 @@
  * @author Jeff Johnston
  * @author André Dietisheim
  */
-public class ManageKeysWizard extends Wizard {
+public class ManageKeysWizard extends AbstractDeltaCloudWizard {
 
-	private DeltaCloud cloud;
 	private ManageKeysPage mainPage;
 	private DeltaCloudKey key;
 
 	public ManageKeysWizard(DeltaCloud cloud) {
-		this.cloud = cloud;
+		super(cloud);
 	}
 
 	public DeltaCloudKey getKey() {
@@ -34,7 +32,7 @@
 
 	@Override
 	public void addPages() {
-		mainPage = new ManageKeysPage(cloud);
+		mainPage = new ManageKeysPage(getDeltaCloud());
 		addPage(mainPage);
 	}
 
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnection.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnection.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudConnection.java	(working copy)
@@ -1,5 +1,18 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.ui.wizards;
 
+/**
+ * @author Jeff Johnston
+ */
 public interface CloudConnection {
 	
 	public boolean performTest();
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/FindImagePage.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/FindImagePage.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/FindImagePage.java	(working copy)
@@ -39,7 +39,6 @@
 import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.Text;
-import org.jboss.tools.deltacloud.core.AllImageFilter;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudException;
 import org.jboss.tools.deltacloud.core.DeltaCloudImage;
@@ -48,7 +47,6 @@
 import org.jboss.tools.deltacloud.core.job.AbstractCloudElementJob;
 import org.jboss.tools.deltacloud.core.job.AbstractCloudElementJob.CLOUDELEMENT;
 import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
-import org.jboss.tools.deltacloud.ui.views.CVMessages;
 import org.jboss.tools.deltacloud.ui.views.Columns;
 import org.jboss.tools.deltacloud.ui.views.Columns.Column;
 import org.jboss.tools.deltacloud.ui.views.cloudelements.ITableContentAndLabelProvider;
@@ -120,7 +118,7 @@
 	public FindImagePage(DeltaCloud cloud) {
 		super(WizardMessages.getString(NAME));
 		this.cloud = cloud;
-		filter = new AllImageFilter(cloud);
+		filter = new ImageFilter(cloud);
 		setDescription(WizardMessages.getString(DESC));
 		setTitle(WizardMessages.getString(TITLE));
 		setImageDescriptor(SWTImagesFactory.DESC_DELTA_LARGE);
@@ -158,8 +156,7 @@
 					+ desc + "*"; //$NON-NLS-1$
 
 			if (!newRules.equals(oldRules)) {
-				filter = new ImageFilter(cloud);
-				filter.setRules(newRules);
+				filter = new ImageFilter(newRules, cloud);
 				oldRules = newRules;
 				asyncSetImagesToViewer(filter);
 			}
@@ -306,7 +303,7 @@
 			if (i == 0) {
 				table.setSortColumn(tc);
 			}
-			tc.setText(CVMessages.getString(c.getName()));
+			tc.setText(c.getName());
 			tableLayout.setColumnData(tc, new ColumnWeightData(c.getWeight(), true));
 			tc.addSelectionListener(new ColumnListener(i, viewer));
 		}
Index: src/org/jboss/tools/deltacloud/ui/commands/DestroyInstanceHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/DestroyInstanceHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/DestroyInstanceHandler.java	(working copy)
@@ -26,7 +26,7 @@
 import org.jboss.tools.deltacloud.core.job.DestroyCloudInstanceJob;
 import org.jboss.tools.deltacloud.ui.Activator;
 import org.jboss.tools.deltacloud.ui.views.CVMessages;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * @author Andre Dietisheim
@@ -41,7 +41,7 @@
 		try {
 			if (selection instanceof IStructuredSelection) {
 				if (isSingleInstanceSelected(selection)) {
-					DeltaCloudInstance cvInstance = UIUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
+					DeltaCloudInstance cvInstance = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
 					destroyInstance(cvInstance);
 				} else {
 					destroyWithDialog((IStructuredSelection) selection);
@@ -59,10 +59,10 @@
 	@SuppressWarnings("unchecked")
 	private void destroyWithDialog(IStructuredSelection selection) {
 		List<DeltaCloudInstance> deltaCloudInstances = 
-			UIUtils.adapt((List<DeltaCloudInstance>) selection.toList(),DeltaCloudInstance.class);
+			WorkbenchUtils.adapt((List<DeltaCloudInstance>) selection.toList(),DeltaCloudInstance.class);
 		List<DeltaCloudInstance> destroyableInstances = getDestroyableInstances(deltaCloudInstances);
 		DeltaCloudInstanceDialog dialog = new DeltaCloudInstanceDialog(
-					UIUtils.getActiveShell()
+				WorkbenchUtils.getActiveShell()
 					, destroyableInstances
 					, CVMessages.getString(DESTROY_INSTANCE_TITLE)
 					, CVMessages.getString(DESTROY_INSTANCE_MSG));
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudDriverValidator.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudDriverValidator.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/CloudDriverValidator.java	(working copy)
@@ -13,7 +13,7 @@
 import org.eclipse.core.databinding.validation.IValidator;
 import org.eclipse.core.databinding.validation.ValidationStatus;
 import org.eclipse.core.runtime.IStatus;
-import org.jboss.tools.deltacloud.core.Driver;
+import org.jboss.tools.deltacloud.core.DeltaCloudDriver;
 
 /**
  * @author André Dietisheim
@@ -23,7 +23,7 @@
 	@Override
 	public IStatus validate(Object value) {
 		if (value != null
-				&& !Driver.UNKNOWN.equals(value)) {
+				&& !DeltaCloudDriver.UNKNOWN.equals(value)) {
 			return ValidationStatus.ok();
 		} else {
 			return ValidationStatus.warning(WizardMessages.getString("IllegalCloudUrl.msg")); //$NON-NLS-1$
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterPage.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterPage.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/InstanceFilterPage.java	(working copy)
@@ -10,370 +10,221 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.ui.wizards;
 
-import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
 import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.ModifyEvent;
-import org.eclipse.swt.events.ModifyListener;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.graphics.Point;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
 import org.eclipse.swt.widgets.Button;
 import org.eclipse.swt.widgets.Composite;
 import org.eclipse.swt.widgets.Label;
 import org.eclipse.swt.widgets.Text;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
+import org.jboss.tools.deltacloud.core.IInstanceFilter;
+import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
 
 /**
  * @author Jeff Johnston
  */
-public class InstanceFilterPage extends WizardPage {
+public class InstanceFilterPage extends AbstractFilterPage {
 
 	private final static String NAME = "InstanceFilter.name"; //$NON-NLS-1$
 	private final static String TITLE = "InstanceFilter.title"; //$NON-NLS-1$
 	private final static String DESC = "InstanceFilter.desc"; //$NON-NLS-1$
 	private final static String FILTER_LABEL = "InstanceFilter.label"; //$NON-NLS-1$
-	private final static String EMPTY_RULE = "ErrorFilterEmptyRule.msg"; //$NON-NLS-1$
-	private final static String INVALID_SEMICOLON = "ErrorFilterSemicolon.msg"; //$NON-NLS-1$
 	private final static String NAME_LABEL = "Name.label"; //$NON-NLS-1$
 	private final static String ID_LABEL = "Id.label"; //$NON-NLS-1$
+	private final static String ALIAS_LABEL = "Alias.label"; //$NON-NLS-1$
 	private final static String OWNER_ID_LABEL = "OwnerId.label"; //$NON-NLS-1$
 	private final static String IMAGE_ID_LABEL = "ImageId.label"; //$NON-NLS-1$
 	private final static String KEYNAME_LABEL = "Key.label"; //$NON-NLS-1$
 	private final static String REALM_LABEL = "Realm.label"; //$NON-NLS-1$
 	private final static String PROFILE_LABEL = "Profile.label"; //$NON-NLS-1$
-	private final static String DEFAULT_LABEL = "DefaultButton.label"; //$NON-NLS-1$
-	
-	private DeltaCloud cloud;
+
 	private Text nameText;
-	private Text idText;
-	private Text imageIdText;
-	private Text ownerIdText;
-	private Text keyNameText;
-	private Text realmText;
-	private Text profileText;
-	
+	private ControlDecoration nameDecoration;
 	private Button defaultName;
+	private Text idText;
+	private ControlDecoration idDecoration;
 	private Button defaultId;
+	private Text aliasText;
+	private ControlDecoration aliasDecoration;
+	private Button defaultAlias;
+	private Text imageIdText;
+	private ControlDecoration imageDecoration;
 	private Button defaultImageId;
+	private Text ownerIdText;
 	private Button defaultOwnerId;
+	private ControlDecoration ownerDecoration;
+	private Text keyIdText;
+	private ControlDecoration keyIdDecoration;
 	private Button defaultKeyId;
+	private Text realmText;
+	private ControlDecoration realmDecoration;
 	private Button defaultRealm;
+	private Text profileText;
+	private ControlDecoration profileDecoration;
 	private Button defaultProfile;
-	
+
 	public InstanceFilterPage(DeltaCloud cloud) {
-		super(WizardMessages.getString(NAME));
-		this.cloud = cloud;
-		setDescription(WizardMessages.getString(DESC));
-		setTitle(WizardMessages.getString(TITLE));
-		setImageDescriptor(SWTImagesFactory.DESC_DELTA_LARGE);
-		setPageComplete(false);
+		super(WizardMessages.getString(NAME), WizardMessages.getString(TITLE), WizardMessages.getString(DESC), cloud);
 	}
-	
+
 	public String getNameRule() {
 		return nameText.getText();
 	}
-	
+
 	public String getIdRule() {
 		return idText.getText();
 	}
-	
+
+	public String getAliasRule() {
+		return aliasText.getText();
+	}
+
 	public String getImageIdRule() {
 		return imageIdText.getText();
 	}
-	
+
 	public String getOwnerIdRule() {
 		return ownerIdText.getText();
 	}
-	
+
 	public String getKeyNameRule() {
-		return keyNameText.getText();
+		return keyIdText.getText();
 	}
-	
+
 	public String getRealmRule() {
 		return realmText.getText();
 	}
-	
+
 	public String getProfileRule() {
 		return profileText.getText();
 	}
-	
-	private ModifyListener Listener = new ModifyListener() {
 
-		@Override
-		public void modifyText(ModifyEvent e) {
-			// TODO Auto-generated method stub
-			validate();
-		}
-	};
-	
-	private SelectionAdapter ButtonListener = new SelectionAdapter() {
-		@Override
-		public void widgetSelected(SelectionEvent e) {
-			Button b = (Button)e.widget;
-			if (b == defaultName)
-				nameText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultId)
-				idText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultImageId)
-				imageIdText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultOwnerId)
-				ownerIdText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultKeyId)
-				keyNameText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultRealm)
-				realmText.setText("*"); //$NON-NLS-1$
-			else if (b == defaultProfile)
-				profileText.setText("*"); //$NON-NLS-1$			
-		}
-	
-	};
-	
-	private void validate() {
-		boolean complete = true;
-		boolean error = false;
-	
-		if (nameText.getText().length() == 0 ||
-				idText.getText().length() == 0 ||
-				imageIdText.getText().length() == 0 ||
-				ownerIdText.getText().length() == 0 ||
-				keyNameText.getText().length() == 0 ||
-				realmText.getText().length() == 0 ||
-				profileText.getText().length() == 0) {
-			
-			setErrorMessage(WizardMessages.getString(EMPTY_RULE));
-			error = true;
-		} else if (nameText.getText().contains(";") ||
-				idText.getText().contains(";") ||
-				imageIdText.getText().contains(";") ||
-				ownerIdText.getText().contains(";") ||
-				keyNameText.getText().contains(";") ||
-				realmText.getText().contains(";") ||
-				profileText.getText().contains(";")) {
-			setErrorMessage(WizardMessages.getString(INVALID_SEMICOLON));
-			error = true;
+	@Override
+	protected Text getTextWidget(Button button) {
+		Text text = null;
+		if (button == defaultName) {
+			text = nameText;
+		} else if (button == defaultId) {
+			text = idText;
+		} else if (button == defaultAlias) {
+			text = aliasText;
+		} else if (button == defaultImageId) {
+			text = imageIdText;
+		} else if (button == defaultOwnerId) {
+			text = ownerIdText;
+		} else if (button == defaultKeyId) {
+			text = keyIdText;
+		} else if (button == defaultRealm) {
+			text = realmText;
+		} else if (button == defaultProfile) {
+			text = profileText;
 		}
+		return text;
+	}
+
+	@Override
+	protected void validate() {
+		nameDecoration.hide();
+		idDecoration.hide();
+		aliasDecoration.hide();
+		imageDecoration.hide();
+		ownerDecoration.hide();
+		keyIdDecoration.hide();
+		realmDecoration.hide();
+		profileDecoration.hide();
 		
-		if (!error)
-			setErrorMessage(null);
-		setPageComplete(complete && !error);
+		String error = null;
+		error = validate(nameText, nameDecoration, error);
+		error = validate(idText, idDecoration, error);
+		error = validate(aliasText, aliasDecoration, error);
+		error = validate(imageIdText, imageDecoration, error);
+		error = validate(ownerIdText, ownerDecoration, error);
+		error = validate(keyIdText, keyIdDecoration, error);
+		error = validate(realmText, realmDecoration, error);
+		error = validate(profileText, profileDecoration, error);
+		setPageComplete(error == null);
+		setErrorMessage(error);
 	}
 
 	@Override
 	public void createControl(Composite parent) {
 		final Composite container = new Composite(parent, SWT.NULL);
-		FormLayout layout = new FormLayout();
-		layout.marginHeight = 5;
-		layout.marginWidth = 5;
-		container.setLayout(layout);		
+		GridLayoutFactory.fillDefaults().numColumns(3).spacing(8, 4).applyTo(container);
 
 		Label label = new Label(container, SWT.NULL);
 		label.setText(WizardMessages.getString(FILTER_LABEL));
-		
-		Label nameLabel = new Label(container, SWT.NULL);
-		nameLabel.setText(WizardMessages.getString(NAME_LABEL));
-		
-		nameText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		nameText.setText(cloud.getInstanceFilter().getNameRule().toString());
-		nameText.addModifyListener(Listener);
-		
-		defaultName = new Button(container, SWT.NULL);
-		defaultName.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultName.addSelectionListener(ButtonListener);
+		GridDataFactory.fillDefaults().span(3, 1).align(SWT.LEFT, SWT.CENTER).indent(0, 14).hint(SWT.DEFAULT, 30)
+				.applyTo(label);
 
-		Label idLabel = new Label(container, SWT.NULL);
-		idLabel.setText(WizardMessages.getString(ID_LABEL));
+		IInstanceFilter filter = getDeltaCloud().getInstanceFilter();
 
-		idText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		idText.setText(cloud.getInstanceFilter().getIdRule().toString());
-		idText.addModifyListener(Listener);
+		Label nameLabel = createRuleLabel(WizardMessages.getString(NAME_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(nameLabel);
+		this.nameText = createRuleText(filter.getNameRule(), container);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(nameText);
+		this.nameDecoration = UIUtils.createErrorDecoration("", nameText);
+		this.defaultName = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultName);
 
-		defaultId = new Button(container, SWT.NULL);
-		defaultId.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultId.addSelectionListener(ButtonListener);
+		Label aliasLabel = createRuleLabel(WizardMessages.getString(ALIAS_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(aliasLabel);
+		this.aliasText = createRuleText(filter.getAliasRule(), container);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(aliasText);
+		this.aliasDecoration = UIUtils.createErrorDecoration("", aliasText);
+		this.defaultAlias = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultAlias);
 
-		Label imageIdLabel = new Label(container, SWT.NULL);
-		imageIdLabel.setText(WizardMessages.getString(IMAGE_ID_LABEL));
-		
-		imageIdText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		imageIdText.setText(cloud.getInstanceFilter().getImageIdRule().toString());
-		imageIdText.addModifyListener(Listener);
-		
-		defaultImageId = new Button(container, SWT.NULL);
-		defaultImageId.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultImageId.addSelectionListener(ButtonListener);
+		Label idLabel = createRuleLabel(WizardMessages.getString(ID_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(idLabel);
+		this.idText = createRuleText(filter.getIdRule(), container);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(idText);
+		this.idDecoration = UIUtils.createErrorDecoration("", idText);
+		this.defaultId = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultId);
 
-		Label ownerIdLabel = new Label(container, SWT.NULL);
-		ownerIdLabel.setText(WizardMessages.getString(OWNER_ID_LABEL));
+		Label imageIdLabel = createRuleLabel(WizardMessages.getString(IMAGE_ID_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(imageIdLabel);
+		this.imageIdText = createRuleText(filter.getImageIdRule(), container);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(imageIdText);
+		this.imageDecoration = UIUtils.createErrorDecoration("", imageIdText);
+		this.defaultImageId = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultImageId);
 
-		ownerIdText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		ownerIdText.setText(cloud.getInstanceFilter().getOwnerIdRule().toString());
-		ownerIdText.addModifyListener(Listener);
-		
-		defaultOwnerId = new Button(container, SWT.NULL);
-		defaultOwnerId.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultOwnerId.addSelectionListener(ButtonListener);
-
-		Label keyNameLabel = new Label(container, SWT.NULL);
-		keyNameLabel.setText(WizardMessages.getString(KEYNAME_LABEL));
-
-		keyNameText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		keyNameText.setText(cloud.getInstanceFilter().getKeyNameRule().toString());
-		keyNameText.addModifyListener(Listener);
-		
-		defaultKeyId = new Button(container, SWT.NULL);
-		defaultKeyId.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultKeyId.addSelectionListener(ButtonListener);
-
-		Label realmLabel = new Label(container, SWT.NULL);
-		realmLabel.setText(WizardMessages.getString(REALM_LABEL));
-
-		realmText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		realmText.setText(cloud.getInstanceFilter().getRealmRule().toString());
-		realmText.addModifyListener(Listener);
-		
-		defaultRealm = new Button(container, SWT.NULL);
-		defaultRealm.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultRealm.addSelectionListener(ButtonListener);
-		
-		Label profileLabel = new Label(container, SWT.NULL);
-		profileLabel.setText(WizardMessages.getString(PROFILE_LABEL));
+		Label ownerIdLabel = createRuleLabel(WizardMessages.getString(OWNER_ID_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(ownerIdLabel);
+		this.ownerIdText = createRuleText(filter.getOwnerIdRule(), container);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(ownerIdText);
+		this.ownerDecoration = UIUtils.createErrorDecoration("", ownerIdText);
+		this.defaultOwnerId = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultOwnerId);
 
-		profileText = new Text(container, SWT.BORDER | SWT.SINGLE);
-		profileText.setText(cloud.getInstanceFilter().getProfileRule().toString());
-		profileText.addModifyListener(Listener);
-		
-		defaultProfile = new Button(container, SWT.NULL);
-		defaultProfile.setText(WizardMessages.getString(DEFAULT_LABEL));
-		defaultProfile.addSelectionListener(ButtonListener);
-		
-		Point p1 = label.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		Point p2 = nameText.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		Point p3 = defaultName.computeSize(SWT.DEFAULT, SWT.DEFAULT);
-		int centering = (p2.y - p1.y + 1) / 2;
-		int centering2 = (p3.y - p2.y + 1) / 2;
+		Label keyNameLabel = createRuleLabel(WizardMessages.getString(KEYNAME_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(keyNameLabel);
+		this.keyIdText = createRuleText(filter.getKeyNameRule(), container);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(keyIdText);
+		this.keyIdDecoration = UIUtils.createErrorDecoration("", keyIdText);
+		this.defaultKeyId = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultKeyId);
 
-		FormData f = new FormData();
-		f.top = new FormAttachment(0);
-		label.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(label, 11 + centering + centering2);
-		f.left = new FormAttachment(0, 0);
-		nameLabel.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(label, 11);
-		f.right = new FormAttachment(100);
-		defaultName.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(label, 11 + centering2);
-		f.left = new FormAttachment(profileLabel, 5);
-		f.right = new FormAttachment(defaultName, -10);
-		nameText.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(nameLabel, 11 + centering + centering2);
-		f.left = new FormAttachment(0, 0);
-		idLabel.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(nameLabel, 11);
-		f.right = new FormAttachment(100);
-		defaultId.setLayoutData(f);
+		Label realmLabel = createRuleLabel(WizardMessages.getString(REALM_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(realmLabel);
+		this.realmText = createRuleText(filter.getRealmRule(), container);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(realmText);
+		this.realmDecoration = UIUtils.createErrorDecoration("", realmText);
+		this.defaultRealm = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultRealm);
 
-		f = new FormData();
-		f.top = new FormAttachment(nameLabel, 11 + centering2);
-		f.left = new FormAttachment(profileLabel, 5);
-		f.right = new FormAttachment(defaultId, -10);
-		idText.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(idLabel, 11 + centering + centering2);
-		f.left = new FormAttachment(0, 0);
-		imageIdLabel.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(idLabel, 11);
-		f.right = new FormAttachment(100);
-		defaultImageId.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(idLabel, 11 + centering2);
-		f.left = new FormAttachment(profileLabel, 5);
-		f.right = new FormAttachment(defaultImageId, -10);
-		imageIdText.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(imageIdLabel, 11 + centering + centering2);
-		f.left = new FormAttachment(0, 0);
-		ownerIdLabel.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(imageIdLabel, 11);
-		f.right = new FormAttachment(100);
-		defaultOwnerId.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(imageIdLabel, 11 + centering2);
-		f.left = new FormAttachment(profileLabel, 5);
-		f.right = new FormAttachment(defaultOwnerId, -10);
-		ownerIdText.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(ownerIdLabel, 11 + centering + centering2);
-		f.left = new FormAttachment(0, 0);
-		keyNameLabel.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(ownerIdLabel, 11);
-		f.right = new FormAttachment(100);
-		defaultKeyId.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(ownerIdLabel, 11 + centering2);
-		f.left = new FormAttachment(profileLabel, 5);
-		f.right = new FormAttachment(defaultKeyId, -10);
-		keyNameText.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(keyNameLabel, 11 + centering + centering2);
-		f.left = new FormAttachment(0, 0);
-		realmLabel.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(keyNameLabel, 11);
-		f.right = new FormAttachment(100);
-		defaultRealm.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(keyNameLabel, 11 + centering2);
-		f.left = new FormAttachment(profileLabel, 5);
-		f.right = new FormAttachment(defaultRealm, -10);
-		realmText.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(realmLabel, 11 + centering + centering2);
-		f.left = new FormAttachment(0, 0);
-		profileLabel.setLayoutData(f);
-		
-		f = new FormData();
-		f.top = new FormAttachment(realmLabel, 11);
-		f.right = new FormAttachment(100);
-		defaultProfile.setLayoutData(f);
-
-		f = new FormData();
-		f.top = new FormAttachment(realmLabel, 11 + centering2);
-		f.left = new FormAttachment(profileLabel, 5);
-		f.right = new FormAttachment(defaultProfile, -10);
-		profileText.setLayoutData(f);
+		Label profileLabel = createRuleLabel(WizardMessages.getString(PROFILE_LABEL), container);
+		GridDataFactory.fillDefaults().align(SWT.LEFT, SWT.CENTER).applyTo(profileLabel);
+		this.profileText = createRuleText(filter.getProfileRule(), container);
+		this.profileDecoration = UIUtils.createErrorDecoration("", profileText);
+		GridDataFactory.fillDefaults().align(SWT.FILL, SWT.CENTER).grab(true, false).applyTo(profileText);
+		this.defaultProfile = createDefaultRuleButton(container);
+		GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(defaultProfile);
 
 		setControl(container);
 		setPageComplete(true);
 	}
-
 }
Index: src/org/jboss/tools/deltacloud/ui/commands/CreateInstanceFromAnyImageHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/CreateInstanceFromAnyImageHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/CreateInstanceFromAnyImageHandler.java	(working copy)
@@ -21,7 +21,7 @@
 import org.eclipse.jface.wizard.WizardDialog;
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.deltacloud.core.DeltaCloud;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 import org.jboss.tools.internal.deltacloud.ui.wizards.NewInstanceWizard;
 
 /**
@@ -34,9 +34,9 @@
 	public Object execute(ExecutionEvent event) throws ExecutionException {
 		ISelection selection = HandlerUtil.getCurrentSelection(event);
 		if (selection instanceof IStructuredSelection) {
-			DeltaCloud cloud = UIUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
+			DeltaCloud cloud = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloud.class);
 			IWizard wizard = new NewInstanceWizard(cloud);
-			WizardDialog dialog = new WizardDialog(UIUtils.getActiveWorkbenchWindow().getShell(),
+			WizardDialog dialog = new WizardDialog(WorkbenchUtils.getActiveWorkbenchWindow().getShell(),
 						wizard);
 			dialog.create();
 			dialog.open();
Index: src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudInstancePropertyTester.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudInstancePropertyTester.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/DeltaCloudInstancePropertyTester.java	(working copy)
@@ -13,7 +13,7 @@
 import org.eclipse.core.expressions.PropertyTester;
 import org.eclipse.core.runtime.Assert;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * A property tester for the command framework that answers if the given
@@ -31,7 +31,7 @@
 
 	@Override
 	public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
-		DeltaCloudInstance instance = UIUtils.adapt(receiver, DeltaCloudInstance.class);
+		DeltaCloudInstance instance = WorkbenchUtils.adapt(receiver, DeltaCloudInstance.class);
 		if (instance == null) {
 			return false;
 		}
Index: src/org/jboss/tools/deltacloud/ui/commands/NewConnectionHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/NewConnectionHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/NewConnectionHandler.java	(working copy)
@@ -14,9 +14,9 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.core.commands.IHandler;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.wizard.WizardDialog;
+import org.eclipse.swt.widgets.Shell;
 import org.eclipse.ui.PlatformUI;
+import org.jboss.tools.internal.deltacloud.ui.utils.WizardUtils;
 import org.jboss.tools.internal.deltacloud.ui.wizards.NewCloudConnectionWizard;
 
 /**
@@ -26,13 +26,8 @@
 
 	@Override
 	public Object execute(ExecutionEvent event) throws ExecutionException {
-		NewCloudConnectionWizard wizard = new NewCloudConnectionWizard();
-		wizard.init(PlatformUI.getWorkbench(), new StructuredSelection());
-		WizardDialog dialog = new WizardDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
-				wizard);
-		dialog.create();
-		dialog.open();
-		
+		Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
+		WizardUtils.openWizardDialog(new NewCloudConnectionWizard(), shell);
 		return Status.OK_STATUS;
 	}
 }
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysPage.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysPage.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/ManageKeysPage.java	(working copy)
@@ -60,7 +60,7 @@
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
 import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
 import org.jboss.tools.internal.deltacloud.ui.common.databinding.validator.ObjectNotNullToBoolean;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.LayoutUtils;
 import org.jboss.tools.internal.deltacloud.ui.utils.WizardUtils;
 
 /**
@@ -216,11 +216,12 @@
 		return new SelectionAdapter() {
 			@Override
 			public void widgetSelected(SelectionEvent event) {
+				DeltaCloudKey key = model.getSelectedKey();
 				boolean confirmed = MessageDialog.openConfirm(getShell(),
 						WizardMessages.getString(CONFIRM_KEY_DELETE_TITLE),
-						WizardMessages.getFormattedString(CONFIRM_KEY_DELETE_MSG, model.getSelectedKey().getId()));
+						WizardMessages.getFormattedString(CONFIRM_KEY_DELETE_MSG, key.getId()));
 				if (confirmed) {
-					deleteKey();
+					deleteSelectedKey();
 				}
 			}
 		};
@@ -304,22 +305,22 @@
 			composite.setFont(parent.getFont());
 			composite.setLayout(new FormLayout());
 			Label titleBarSeparator = new Label(composite, SWT.HORIZONTAL | SWT.SEPARATOR);
-			titleBarSeparator.setLayoutData(UIUtils.createFormData(0,0,null,0,0,0,100,0));
+			titleBarSeparator.setLayoutData(LayoutUtils.createFormData(0,0,null,0,0,0,100,0));
 
 			setTitle(WizardMessages.getString(CREATE_KEY_TITLE));
 			Label nameLabel = new Label(composite, SWT.NONE);
 			nameLabel.setText("Key ID: ");
-			nameLabel.setLayoutData(UIUtils.createFormData(0,7,null,0,0,5,null,0));
+			nameLabel.setLayoutData(LayoutUtils.createFormData(0,7,null,0,0,5,null,0));
 			nameText = new Text(composite, SWT.BORDER);
-			nameText.setLayoutData(UIUtils.createFormData(0,5,null,0,nameLabel, 5, 100, -5));
+			nameText.setLayoutData(LayoutUtils.createFormData(0,5,null,0,nameLabel, 5, 100, -5));
 			
 			persist = new Button(composite, SWT.CHECK);
 			persist.setText("Save key in folder: ");
-			persist.setLayoutData(UIUtils.createFormData(nameText, 8, null, 0, 0,5,null,0));
+			persist.setLayoutData(LayoutUtils.createFormData(nameText, 8, null, 0, 0,5,null,0));
 			
 			Button browse = new Button(composite, SWT.DEFAULT);
 			browse.setText("Browse...");
-			browse.setLayoutData(UIUtils.createFormData(nameText, 5, null, 0, null, 0, 100, -5));
+			browse.setLayoutData(LayoutUtils.createFormData(nameText, 5, null, 0, null, 0, 100, -5));
 			browse.addSelectionListener(new SelectionAdapter() {
 				public void widgetSelected(SelectionEvent e) {
 					DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.NONE);
@@ -331,7 +332,7 @@
 			});
 			
 			pemText = new Text(composite, SWT.BORDER);
-			pemText.setLayoutData(UIUtils.createFormData(nameText,5,null,0,persist, 5, browse, -5));
+			pemText.setLayoutData(LayoutUtils.createFormData(nameText,5,null,0,persist, 5, browse, -5));
 
 			init();
 			
@@ -390,7 +391,7 @@
 	private DeltaCloudKey createKey(final String keyId) {
 		final DeltaCloudKey[] keyHolder = new DeltaCloudKey[1];
 		try {
-			Job job = new AbstractCloudElementJob("Create key", model.getCloud(), CLOUDELEMENT.KEYS) {
+			Job job = new AbstractCloudElementJob("Create new key", model.getCloud(), CLOUDELEMENT.KEYS) {
 
 				protected IStatus doRun(IProgressMonitor monitor) throws Exception {
 					try {
@@ -421,9 +422,12 @@
 		}
 	}
 
-	private void deleteKey() {
+	private void deleteSelectedKey() {
 		try {
-			Job job = new AbstractCloudElementJob("Delete key", model.getCloud(), CLOUDELEMENT.KEYS) {
+			Job job = new AbstractCloudElementJob(
+					MessageFormat.format("Delete key {0}",model.getSelectedKey().getName()), 
+					model.getCloud(), 
+					CLOUDELEMENT.KEYS) {
 
 				protected IStatus doRun(IProgressMonitor monitor) throws Exception {
 					try {
@@ -436,7 +440,7 @@
 								public void run() {
 									isConfirmDelete[0] = MessageDialog.openConfirm(
 											getShell(),
-											"Delete key locally?",
+											MessageFormat.format("Delete key {0} locally?",key.getName()),
 											MessageFormat.format(
 													"Shall the key \"{0}\" be deleted from local key store?",
 													key.getName()));
Index: src/org/jboss/tools/deltacloud/ui/commands/RefreshCloudHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/RefreshCloudHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/RefreshCloudHandler.java	(working copy)
@@ -28,7 +28,7 @@
 import org.jboss.tools.deltacloud.core.DeltaCloudMultiException;
 import org.jboss.tools.deltacloud.core.job.AbstractCloudJob;
 import org.jboss.tools.deltacloud.ui.ErrorUtils;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * @author Andre Dietisheim
@@ -43,7 +43,7 @@
 			refresh(clouds);
 		} else {
 			// no item selected: try active part
-			refresh(UIUtils.adapt(HandlerUtil.getActivePart(event), DeltaCloud.class));
+			refresh(WorkbenchUtils.adapt(HandlerUtil.getActivePart(event), DeltaCloud.class));
 		}			
 		return Status.OK_STATUS;
 	}
@@ -53,7 +53,7 @@
 			return Collections.emptyList();
 		}
 		
-		return UIUtils.adapt(((IStructuredSelection) selection).toList(), DeltaCloud.class);
+		return WorkbenchUtils.adapt(((IStructuredSelection) selection).toList(), DeltaCloud.class);
 	}
 
 	private void refresh(Collection<DeltaCloud> clouds) {
Index: Deltacloud Tools (1).launch
===================================================================
--- Deltacloud Tools (1).launch	(revision 0)
+++ Deltacloud Tools (1).launch	(revision 0)
@@ -0,0 +1,569 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="false"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Deltacloud Tools"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-deltacloud-1"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -console"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx1024m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.jdt.core.manipulation@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.update.core@default:default,org.eclipse.wst.xml.core@default:default,org.junit4@default:default,org.eclipse.jst.common.annotations.core@default:default,org.apache.commons.net@default:default,org.eclipse.wst.html.core@default:default,org.eclipse.jsch.core@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.pde.core@default:default,org.eclipse.jst.j2ee.core@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.p2.engine@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.emf.codegen@default:default,org.eclipse.debug.ui@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.jst.j2ee.ui@default:default,org.eclipse.help.ui@default:default,org.eclipse.help.base@default:default,org.eclipse.jst.common.frameworks@default:default,org.eclipse.search@default:default,org.apache.lucene.analysis@default:default,org.eclipse.wst.css.core@default:default,org.eclipse.emf.ecore@default:default,org.apache.ant@default:default,org.eclipse.wst.sse.ui@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.wst.common.frameworks.ui@default:default,javax.servlet@default:default,org.eclipse.emf.ecore.edit@default:default,org.eclipse.equinox.p2.operations@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.emf.common.ui@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.help@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.compare@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.wst.common.modulecore@default:default,org.eclipse.tm.terminal.ssh@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jem@default:default,org.mortbay.jetty.util@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.core.net@default:default,org.eclipse.ui.browser@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt@default:default,org.eclipse.swt@default:default,org.eclipse.pde.build@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.ant.core@default:default,org.eclipse.jst.j2ee@default:default,org.eclipse.core.expressions@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.wst.web.ui@default:default,org.eclipse.equinox.security.ui@default:default,org.eclipse.wst.common.modulecore.ui@default:default,org.eclipse.equinox.common@2:true,org.eclipse.wst.xml.ui@default:default,org.eclipse.ecf@default:default,org.eclipse.equinox.frameworkadmin.equinox@default:default,org.eclipse.rse.subsystems.files.ssh@default:default,org.eclipse.wst.web@default:default,org.eclipse.core.jobs@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.wst.server.ui.doc.user@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.jdt.debug.ui@default:default,org.eclipse.jst.servlet.ui@default:default,org.eclipse.jst.j2ee.ejb@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.wst.common.ui@default:default,org.eclipse.equinox.p2.garbagecollector@default:default,org.eclipse.rse.subsystems.shells.ssh@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.jdt.junit.core@default:default,org.eclipse.jst.j2ee.ejb.annotation.model@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.equinox.app@default:default,org.sat4j.pb@default:default,org.eclipse.osgi.util@default:default,org.hamcrest.core@default:default,org.eclipse.equinox.p2.publisher@default:default,org.eclipse.jdt.junit.runtime@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.ui.views.log@default:default,org.sat4j.core@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.rse.subsystems.terminals.ssh@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.jst.jee@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.equinox.p2.director.app@default:default,org.eclipse.ui.workbench@default:default,javax.servlet.jsp@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.rse.subsystems.shells.core@default:default,org.eclipse.tm.terminal.view@default:default,org.eclipse.equinox.p2.updatesite@default:default,org.apache.xml.resolver@default:default,org.eclipse.rse.services.local@default:default,org.eclipse.equinox.p2.repository.tools@default:default,org.eclipse.wst.jsdt.manipulation@default:default,org.eclipse.jst.server.core@default:default,org.eclipse.wst.validation@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.jem.proxy@default:default,org.eclipse.equinox.p2.jarprocessor@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.text@default:default,org.eclipse.ui@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.core.variables@default:default,org.eclipse.ui.console@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.wst.jsdt.ui@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.osgi.services@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.swtbot.ant.optional.junit4@default:false,org.eclipse.jst.common.ui@default:default,org.eclipse.wst.internet.monitor.core@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.jst.j2ee.web@default:default,org.eclipse.rse.ui@default:default,org.eclipse.update.configurator@3:true,org.apache.lucene@default:default,org.eclipse.ui.forms@default:default,org.apache.xerces@default:default,org.eclipse.equinox.simpleconfigurator.manipulator@default:default,org.eclipse.wst.css.ui@default:default,org.eclipse.rse.core@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.compare.core@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.equinox.security@default:default,org.eclipse.swtbot.ant.optional.junit3@default:false,org.eclipse.emf.edit@default:default,org.eclipse.equinox.p2.artifact.repository@default:default,org.eclipse.equinox.p2.director@default:default,org.eclipse.jst.common.project.facet.ui@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.jdt.junit@default:default,org.eclipse.team.core@default:default,org.eclipse.jst.common.project.facet.core@default:default,org.eclipse.team.ui@default:default,org.eclipse.wst.jsdt.core@default:default,org.eclipse.jem.workbench@default:default,org.eclipse.jst.j2ee.jca.ui@default:default,org.eclipse.tm.terminal@default:default,org.eclipse.core.resources@default:default,org.eclipse.wst.common.project.facet.ui@default:default,org.eclipse.rse.services.files.ftp@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.apache.commons.el@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.rse.services@default:default,javax.xml@default:default,org.eclipse.core.commands@default:default,org.eclipse.jem.util@default:default,org.eclipse.sdk@default:default,org.eclipse.emf.common@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.jface.text@default:default,org.eclipse.equinox.simpleconfigurator@1:true,org.eclipse.jst.j2ee.navigator.ui@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.equinox.frameworkadmin@default:default,com.ibm.icu@default:default,org.eclipse.ui.ide@default:default,org.eclipse.core.databinding@default:default,org.eclipse.wst.server.discovery@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.equinox.p2.touchpoint.eclipse@default:default,org.eclipse.debug.core@default:default,org.eclipse.rse.services.ssh@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.jst.j2ee.jca@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.rse.connectorservice.ssh@default:default,org.eclipse.jst.jee.ui@default:default,org.eclipse.ui.editors@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.tm.terminal.telnet@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.wst.server.ui@default:default,org.eclipse.jsch.ui@default:default,org.eclipse.jst.common.annotations.controller@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.mortbay.jetty.server@default:default,org.eclipse.osgi@-1:true,org.apache.xml.serializer@default:default,org.eclipse.rse.files.ui@default:default,org.eclipse.jface@default:default,org.eclipse.equinox.p2.ui@default:default,org.eclipse.emf.edit.ui@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jdt.core@default:default,org.apache.jasper@default:default,org.eclipse.rse.subsystems.files.core@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.wst.html.ui@default:default,org.eclipse.ui.views@default:default,com.jcraft.jsch@default:default,org.eclipse.wst.server.core@default:default,org.eclipse.ui.intro@default:default,org.eclipse.jst.server.ui@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.ide.eclipse.archives.core@default:default,org.jboss.ide.eclipse.as.rse.core@default:default,org.jboss.ide.eclipse.as.ui@default:default,org.jboss.ide.eclipse.as.wtp.core@default:default,org.jboss.tools.deltacloud.core@default:default,org.jboss.ide.eclipse.archives.ui@default:default,org.jboss.ide.eclipse.as.rse.ui@default:default,org.jboss.ide.eclipse.as.wtp.ui@default:default,org.jboss.ide.eclipse.as.core@default:default,org.jboss.tools.common@default:default,org.jboss.tools.deltacloud.ui@default:default,org.jboss.tools.deltacloud.integration@default:default,org.jboss.ide.eclipse.archives.webtools@default:default,org.jboss.tools.jmx.ui@default:default,org.jboss.tools.jmx.core@default:default,org.jboss.tools.usage@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<mapAttribute key="tracingOptions">
+<mapEntry key="com.ibm.datatools.core.ui/debug" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/editor/log" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/log" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorer/trace" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/modelExplorerDecoration/trace" value="true"/>
+<mapEntry key="com.ibm.datatools.core.ui/plugin/log" value="true"/>
+<mapEntry key="com.instantiations.eclipse.debug/debug" value="true"/>
+<mapEntry key="com.instantiations.eclipse.startup/startup" value="true"/>
+<mapEntry key="com.instantiations.eclipse.startup/startupUI" value="true"/>
+<mapEntry key="com.instantiations.tools/debug" value="true"/>
+<mapEntry key="com.instantiations.tools/debug/BundleManager" value="true"/>
+<mapEntry key="com.instantiations.tools/debug/BundleManagerPlugins" value="false"/>
+<mapEntry key="com.instantiations.tools/debug/BundleManagerTrace" value="false"/>
+<mapEntry key="com.instantiations.tools/debug/ConfigScriptGeneration" value="true"/>
+<mapEntry key="com.instantiations.tools/debug/ConfigScriptGenerationTrace" value="false"/>
+<mapEntry key="com.instantiations.tools/debug/ElementScriptGeneration" value="true"/>
+<mapEntry key="com.instantiations.tools/debug/JarScriptGeneration" value="true"/>
+<mapEntry key="com.instantiations.tools/debug/ProductReader" value="true"/>
+<mapEntry key="com.instantiations.tools/debug/ProductReaderTracing" value="false"/>
+<mapEntry key="com.instantiations.tools/debug/ProductReaderXmlDetail" value="false"/>
+<mapEntry key="com.instantiations.tools/debug/ProductReaderXmlSumary" value="true"/>
+<mapEntry key="com.instantiations.tools/debug/ResourceUtils" value="true"/>
+<mapEntry key="org.eclipse.cdt.core/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/ASTCache" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/deltaprocessor" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/formatter" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/index/locks" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/activity" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems/inclusion" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems/scanner" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/problems/syntax" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/indexer/statistics" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/matchlocator" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/model" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/parser" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/parser/exceptions" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/scanner" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.cdt.core/debug/typeresolver" value="false"/>
+<mapEntry key="org.eclipse.cdt.debug.mi.core/debug" value="true"/>
+<mapEntry key="org.eclipse.cdt.dsf.gdb/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/disassembly" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/stepping" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/atomicUpdate" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/cache" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/delta" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/presentationId" value=""/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/updates" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf.ui/debug/vm/updates/regex" value=""/>
+<mapEntry key="org.eclipse.cdt.dsf/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/executor" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/executorName" value=""/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/monitors" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/session" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/session/dispatches" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/session/listeners" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debug/session/modelAdapters" value="false"/>
+<mapEntry key="org.eclipse.cdt.dsf/debugCache" value="false"/>
+<mapEntry key="org.eclipse.cdt.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.cdt.ui/debug/SemanticHighlighting" value="false"/>
+<mapEntry key="org.eclipse.cdt.ui/debug/contentassist" value="false"/>
+<mapEntry key="org.eclipse.cdt.ui/debug/folding" value="false"/>
+<mapEntry key="org.eclipse.core.contenttype/debug" value="false"/>
+<mapEntry key="org.eclipse.core.expressions/debug/TypeExtensionManager" value="true"/>
+<mapEntry key="org.eclipse.core.expressions/tracePropertyResolving" value="true"/>
+<mapEntry key="org.eclipse.core.jobs/jobs" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/beginend" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/errorondeadlock" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/locks" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/shutdown" value="false"/>
+<mapEntry key="org.eclipse.core.jobs/jobs/timing" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/delta" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/failure" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/interrupt" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/invoking" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuild" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/needbuildstack" value="false"/>
+<mapEntry key="org.eclipse.core.resources/build/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype" value="false"/>
+<mapEntry key="org.eclipse.core.resources/contenttype/cache" value="false"/>
+<mapEntry key="org.eclipse.core.resources/debug" value="false"/>
+<mapEntry key="org.eclipse.core.resources/history" value="false"/>
+<mapEntry key="org.eclipse.core.resources/natures" value="false"/>
+<mapEntry key="org.eclipse.core.resources/perf/builders" value="10000"/>
+<mapEntry key="org.eclipse.core.resources/perf/listeners" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/save.participants" value="500"/>
+<mapEntry key="org.eclipse.core.resources/perf/snapshot" value="1000"/>
+<mapEntry key="org.eclipse.core.resources/preferences" value="false"/>
+<mapEntry key="org.eclipse.core.resources/refresh" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/snapshots" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/restore/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/markers" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/mastertable" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/metainfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/syncinfo" value="false"/>
+<mapEntry key="org.eclipse.core.resources/save/tree" value="false"/>
+<mapEntry key="org.eclipse.core.resources/strings" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/compatibility/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/debug/context" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/perf/success" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/preferences/plugin" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachecopy" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/cachelookup" value="false"/>
+<mapEntry key="org.eclipse.core.runtime/url/debug/connect" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity.sqm.core/debug" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity/connectionprofileextension" value="false"/>
+<mapEntry key="org.eclipse.datatools.connectivity/debug" value="true"/>
+<mapEntry key="org.eclipse.debug.core/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/commands" value="false"/>
+<mapEntry key="org.eclipse.debug.core/debug/events" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/breadcrumb" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/contextlaunching" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/launchhistory" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/breakpointDeltas" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/contentProvider" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/deltas" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/model" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/presentationId" value=""/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/stateSaveRestore" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/updateSequence" value="false"/>
+<mapEntry key="org.eclipse.debug.ui/debug/viewers/viewer" value="false"/>
+<mapEntry key="org.eclipse.egit.core/debug" value="false"/>
+<mapEntry key="org.eclipse.egit.core/debug/core" value="false"/>
+<mapEntry key="org.eclipse.egit.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.egit.ui/debug/quickdiff" value="false"/>
+<mapEntry key="org.eclipse.egit.ui/debug/repochangescanner" value="false"/>
+<mapEntry key="org.eclipse.egit.ui/debug/ui" value="false"/>
+<mapEntry key="org.eclipse.egit.ui/debug/ui/decoration" value="false"/>
+<mapEntry key="org.eclipse.egit.ui/debug/ui/repositoriesview" value="false"/>
+<mapEntry key="org.eclipse.equinox.ds/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.ds/instantiate_all" value="false"/>
+<mapEntry key="org.eclipse.equinox.ds/performance" value="false"/>
+<mapEntry key="org.eclipse.equinox.ds/print_on_console" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/engine/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/enginesession/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.p2.engine/profileregistry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/general" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/get" value="false"/>
+<mapEntry key="org.eclipse.equinox.preferences/set" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.registry/debug/events" value="false"/>
+<mapEntry key="org.eclipse.equinox.security.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.security.ui/debug/storage" value="false"/>
+<mapEntry key="org.eclipse.equinox.security/debug" value="false"/>
+<mapEntry key="org.eclipse.equinox.security/debug/loginFramework" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/embeddedBrowser/inprocess" value="false"/>
+<mapEntry key="org.eclipse.help.ui/debug/infopop" value="false"/>
+<mapEntry key="org.eclipse.help.webapp/debug" value="true"/>
+<mapEntry key="org.eclipse.help.webapp/debug/workingsets" value="false"/>
+<mapEntry key="org.eclipse.help/debug" value="true"/>
+<mapEntry key="org.eclipse.help/debug/context" value="false"/>
+<mapEntry key="org.eclipse.help/debug/search" value="false"/>
+<mapEntry key="org.eclipse.help/debug/toc" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/compilationEnv" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFileMaps" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.core/debug/generatedFiles" value="false"/>
+<mapEntry key="org.eclipse.jdt.apt.pluggable.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jdt.core.manipulation/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.core/debug/buffermanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/builder/stats" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/compiler" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/completion" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/cpresolution/failure" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/formatter" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/hierarchy" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/indexmanager/advanced" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javadelta/verbose" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/javamodel/cache" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/postaction" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/search" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/selection" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/sourcemapper" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/debug/zipaccess" value="false"/>
+<mapEntry key="org.eclipse.jdt.core/perf/completion" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/containerinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/javadeltalistener" value="500"/>
+<mapEntry key="org.eclipse.jdt.core/perf/reconcile" value="1000"/>
+<mapEntry key="org.eclipse.jdt.core/perf/selection" value="300"/>
+<mapEntry key="org.eclipse.jdt.core/perf/variableinitializer" value="5000"/>
+<mapEntry key="org.eclipse.jdt.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ASTProvider" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/BreadcrumbItemDropDown" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/ResultCollector" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/debug/TypeConstraints" value="false"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist/extensions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/content_assist_sorters/extensions" value=""/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/RefactorActionGroup" value="150"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/explorer/makeActions" value="1000"/>
+<mapEntry key="org.eclipse.jdt.ui/perf/search/participants" value="300"/>
+<mapEntry key="org.eclipse.jem.beaninfo/debug/loglevel" value="default"/>
+<mapEntry key="org.eclipse.jem.beaninfo/debug/logtrace" value="default"/>
+<mapEntry key="org.eclipse.jem.beaninfo/debug/logtracefile" value="default"/>
+<mapEntry key="org.eclipse.jem.proxy/debug/loglevel" value="default"/>
+<mapEntry key="org.eclipse.jem.proxy/debug/logtrace" value="default"/>
+<mapEntry key="org.eclipse.jem.proxy/debug/logtracefile" value="default"/>
+<mapEntry key="org.eclipse.jem.proxy/debug/traceexpressions" value="false"/>
+<mapEntry key="org.eclipse.jem.proxy/debug/traceexpressionstimethreshold" value="100"/>
+<mapEntry key="org.eclipse.jem.proxy/remote/debug/debugvm" value="false"/>
+<mapEntry key="org.eclipse.jem.proxy/remote/debug/ioconsole" value="false"/>
+<mapEntry key="org.eclipse.jem.proxy/remote/debug/notimeouts" value="false"/>
+<mapEntry key="org.eclipse.jem.proxy/remote/debug/vmtraceout" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.jem.util/debug/logtracefile" value="false"/>
+<mapEntry key="org.eclipse.jem/debug/loglevel" value="default"/>
+<mapEntry key="org.eclipse.jem/debug/logtrace" value="default"/>
+<mapEntry key="org.eclipse.jem/debug/logtracefile" value="default"/>
+<mapEntry key="org.eclipse.jface.text.source/debug/RevisionRulerColumn" value="false"/>
+<mapEntry key="org.eclipse.jface.text/assert/TextSelection/validConstructorArguments" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AbstractInformationControlManager" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/AnnotationPainter" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/ContentAssistSubjectAdapters" value="false"/>
+<mapEntry key="org.eclipse.jface.text/debug/FastPartitioner/PositionCache" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.common/debug" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.common/debug/lifecyclelistener" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.common/debug/metadataload" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/debug" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/designtime/view/jsptagintrospection" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/designtime/view/jsptagintrospection/perf" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/designtime/view/jsptagpersistence" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/designtime/view/jsptagregistry" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/designtime/view/jsptagregistry/changes" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/designtime/view/jsptagregistry/perf" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.core/designtime/view/tldregistrymanager" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.jst.jsf.ui/metadatagen" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug" value="true"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/jspindexmanager" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/jspjavamapping" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/jspsearch" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/jsptranslation" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/jsptranslationstodisk" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/jspvalidator" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/taglibclassloader" value=""/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/taglibvars" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/tldcmdocument/cache" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/tldcmdocument/factory" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/tldcmdocument/manager" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.jst.jsp.core/taglib/events" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/taglib/indexcreation" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/taglib/indextime" value="false"/>
+<mapEntry key="org.eclipse.jst.jsp.core/taglib/resolve" value="false"/>
+<mapEntry key="org.eclipse.jst.pagedesigner/debug" value="true"/>
+<mapEntry key="org.eclipse.jst.pagedesigner/debug/converter/load" value="false"/>
+<mapEntry key="org.eclipse.jst.pagedesigner/debug/converter/selection" value="false"/>
+<mapEntry key="org.eclipse.jst.pagedesigner/debug/elementedit/load" value="false"/>
+<mapEntry key="org.eclipse.jst.pagedesigner/debug/elementedit/selection" value="false"/>
+<mapEntry key="org.eclipse.jst.server.tomcat.core/debug" value="true"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/checkConditions" value="300"/>
+<mapEntry key="org.eclipse.ltk.core.refactoring/perf/participants/createChanges" value="300"/>
+<mapEntry key="org.eclipse.osgi/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/bundleTime" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/events" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/filter" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/loader" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/manifest" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/messageBundles" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/objectPool/adds" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/objectPool/dups" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/packageadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/security" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/services" value="false"/>
+<mapEntry key="org.eclipse.osgi/debug/startlevel" value="false"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/buffersize" value="256"/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logfilename" value=""/>
+<mapEntry key="org.eclipse.osgi/defaultprofile/logsynchronously" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/converter/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/cachedmanifest" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/location" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin" value="false"/>
+<mapEntry key="org.eclipse.osgi/eclipseadaptor/debug/platformadmin/resolver" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/classes" value="false"/>
+<mapEntry key="org.eclipse.osgi/monitor/resources" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/benchmark" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/profile/impl" value="org.eclipse.osgi.internal.profile.DefaultProfileLogger"/>
+<mapEntry key="org.eclipse.osgi/profile/startup" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/cycles" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/debug" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/generics" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/imports" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/requires" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/uses" value="false"/>
+<mapEntry key="org.eclipse.osgi/resolver/wiring" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/activation" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/classLoading" value="false"/>
+<mapEntry key="org.eclipse.osgi/trace/filename" value="runtime.traces"/>
+<mapEntry key="org.eclipse.osgi/trace/filters" value="trace.properties"/>
+<mapEntry key="org.eclipse.pde.build/debug" value="false"/>
+<mapEntry key="org.eclipse.pde.core/cache" value="false"/>
+<mapEntry key="org.eclipse.pde.core/classpath" value="false"/>
+<mapEntry key="org.eclipse.pde.core/debug" value="true"/>
+<mapEntry key="org.eclipse.pde.core/validation" value="false"/>
+<mapEntry key="org.eclipse.team.core/backgroundevents" value="false"/>
+<mapEntry key="org.eclipse.team.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.core/refreshjob" value="false"/>
+<mapEntry key="org.eclipse.team.core/streams" value="false"/>
+<mapEntry key="org.eclipse.team.core/threading" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/cvsprotocol" value="true"/>
+<mapEntry key="org.eclipse.team.cvs.core/debug" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/dirtycaching" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/metafiles" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/syncchangeevents" value="false"/>
+<mapEntry key="org.eclipse.team.cvs.core/threading" value="false"/>
+<mapEntry key="org.eclipse.ui.browser/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/gc" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/internalerror/openDialog" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/markers" value="false"/>
+<mapEntry key="org.eclipse.ui.ide/debug/undomonitor" value="false"/>
+<mapEntry key="org.eclipse.ui.intro.universal/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro.universal/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/debug" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/debug/toolbar" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/flags/noBrowser" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logInfo" value="true"/>
+<mapEntry key="org.eclipse.ui.intro/trace/logPerformance" value="false"/>
+<mapEntry key="org.eclipse.ui.intro/trace/printHTML" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/dnd" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/resolution" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/setup" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/sort" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/debug/viewermap" value="false"/>
+<mapEntry key="org.eclipse.ui.navigator/perf/explorer/createPartControl" value="1300"/>
+<mapEntry key="org.eclipse.ui.workbench/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/contributions" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/declaredImages" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/job.stale" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/showAllJobs" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebug" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/swtdebugglobal" value="false"/>
+<mapEntry key="org.eclipse.ui/debug/workingSets" value="false"/>
+<mapEntry key="org.eclipse.ui/experimental/menus" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPage.IPropertyChangeListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchPartReference" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPageListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPartListener2" value="false"/>
+<mapEntry key="org.eclipse.ui/listeners/IWorkbenchWindow.IPerspectiveListener" value="false"/>
+<mapEntry key="org.eclipse.ui/perf/contentTypes" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/page.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.activate" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.control" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.init" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/part.input" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/part.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.create" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.listeners" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/perspective.switch" value="800"/>
+<mapEntry key="org.eclipse.ui/perf/showHeapStatus" value="true"/>
+<mapEntry key="org.eclipse.ui/perf/uijob" value="200"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.restore" value="30000"/>
+<mapEntry key="org.eclipse.ui/perf/workbench.start" value="45000"/>
+<mapEntry key="org.eclipse.ui/trace/commands" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/contexts.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/graphics" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.performance" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/handlers.verbose.commandId" value=""/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/keyBindings.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/multipageeditor" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/operations.verbose" value="false"/>
+<mapEntry key="org.eclipse.ui/trace/sources" value="false"/>
+<mapEntry key="org.eclipse.update.configurator/debug" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug" value="true"/>
+<mapEntry key="org.eclipse.update.core/debug/configuration" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/install" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/installhandler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/parsing" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/reconciler" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/type" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/warning" value="false"/>
+<mapEntry key="org.eclipse.update.core/debug/web" value="false"/>
+<mapEntry key="org.eclipse.wst.common.environment/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/command" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/data" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/emitter" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/error" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/info" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/warning" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_ant" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_dt_cmd_engine" value="true"/>
+<mapEntry key="org.eclipse.wst.common.environment/trace/ws_framework" value="true"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/actionSorting" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/activation" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/delegate/calls" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/events/project" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.core/events/project/stacktrace" value="false"/>
+<mapEntry key="org.eclipse.wst.common.project.facet.ui/propPage/actionConfigValidation" value="false"/>
+<mapEntry key="org.eclipse.wst.css.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.css.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wst.css.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.wst.dtd.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.wst.html.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.html.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wst.internet.monitor.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.internet.monitor.core/parsing" value="false"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug/jsindexmanager" value="false"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug/jsjavamapping" value="false"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug/jssearch" value="false"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug/jstranslation" value="false"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug/jstranslationstodisk" value="false"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug/jsvalidator" value="false"/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wst.jsdt.web.core/taglib/resolve" value="false"/>
+<mapEntry key="org.eclipse.wst.server.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.server.core/extension_point" value="false"/>
+<mapEntry key="org.eclipse.wst.server.core/listeners" value="false"/>
+<mapEntry key="org.eclipse.wst.server.core/performance" value="false"/>
+<mapEntry key="org.eclipse.wst.server.core/resources" value="false"/>
+<mapEntry key="org.eclipse.wst.server.discovery/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.server.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.server.ui/extension_point" value="false"/>
+<mapEntry key="org.eclipse.wst.server.ui/performance" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/dom/adapter/notification/time/criteria" value="10"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/leaks" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/filebuffers/modelmanagement" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/format" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structureddocument" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/lifecycle" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/locks" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/modelmanager" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/structuredmodel/state" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/detection" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/job" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/overalltime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/preferences" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/registry" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.core/tasks/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/actioncontributor/debugstatusfields" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/contentOutline" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerSpelling/showProblems" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerValidatorEnablement" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerValidatorSupported" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerValidators" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/reconcilerjob" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendedconfigurationbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/contributetime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugmenu" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugpopup" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/debugtoolbar" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/extendededitoractionbuilder/readtime" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/lifecyclelistener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/modelstatelistener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/filemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/gotoNextAnnotation" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/preferences-properties" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertyChangeUpdateActionContributionItem" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/propertySheet" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/elementstatelistener" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/storagemodelprovider/operations" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/structuredPresentationReconciler" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/structuredPresentationReconciler/time" value="false"/>
+<mapEntry key="org.eclipse.wst.sse.ui/transferbuilder/time" value="false"/>
+<mapEntry key="org.eclipse.wst.validation/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.validation/extraValDetail" value=""/>
+<mapEntry key="org.eclipse.wst.validation/filter/allExcept" value=""/>
+<mapEntry key="org.eclipse.wst.validation/timings" value="false"/>
+<mapEntry key="org.eclipse.wst.validation/timings/tracefile" value=""/>
+<mapEntry key="org.eclipse.wst.validation/timings/useDoubles" value="false"/>
+<mapEntry key="org.eclipse.wst.validation/trace/level" value=""/>
+<mapEntry key="org.eclipse.wst.validation/v1" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug" value="true"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentcache" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/cmdocumentmanager" value="false"/>
+<mapEntry key="org.eclipse.wst.xml.core/debug/tracefilter" value=""/>
+<mapEntry key="org.eclipse.wst.xml.ui/projectionperf" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/loglevel" value="WARNING"/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtrace" value="false"/>
+<mapEntry key="org.eclipse.wtp.common/debug/logtracefile" value="false"/>
+<mapEntry key="org.guvnor.tools/debugHttpClient" value="false"/>
+<mapEntry key="org.jboss.tools.tests/debug" value="true"/>
+<mapEntry key="org.jboss.tools.tests/debug/importProject" value="true"/>
+<mapEntry key="org.maven.ide.eclipse/actions" value="false"/>
+<mapEntry key="org.maven.ide.eclipse/console" value="false"/>
+<mapEntry key="org.maven.ide.eclipse/debug" value="false"/>
+<mapEntry key="org.maven.ide.eclipse/debug/builder" value="false"/>
+<mapEntry key="org.maven.ide.eclipse/debug/initialization" value="false"/>
+<mapEntry key="org.maven.ide.eclipse/debug/projectManager" value="false"/>
+<mapEntry key="org.maven.ide.eclipse/launcher" value="false"/>
+<mapEntry key="org.maven.ide.eclipse/plugin" value="false"/>
+<mapEntry key="org.projectusus.core/RESOURCE_CHANGES" value="false"/>
+<mapEntry key="org.projectusus.core/SQI" value="false"/>
+</mapAttribute>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+</launchConfiguration>
Index: src/org/jboss/tools/deltacloud/ui/commands/StartInstanceHandler.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/commands/StartInstanceHandler.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/commands/StartInstanceHandler.java	(working copy)
@@ -24,9 +24,10 @@
 import org.eclipse.ui.handlers.HandlerUtil;
 import org.jboss.tools.common.log.StatusFactory;
 import org.jboss.tools.deltacloud.core.DeltaCloudInstance;
+import org.jboss.tools.deltacloud.core.DeltaCloudResourceAction;
 import org.jboss.tools.deltacloud.ui.Activator;
 import org.jboss.tools.deltacloud.ui.views.CVMessages;
-import org.jboss.tools.internal.deltacloud.ui.utils.UIUtils;
+import org.jboss.tools.internal.deltacloud.ui.utils.WorkbenchUtils;
 
 /**
  * @author Andre Dietisheim
@@ -44,7 +45,7 @@
 		try {
 			if (selection instanceof IStructuredSelection) {
 				if (isSingleInstanceSelected(selection)) {
-					DeltaCloudInstance cvinstance = UIUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
+					DeltaCloudInstance cvinstance = WorkbenchUtils.getFirstAdaptedElement(selection, DeltaCloudInstance.class);
 					startInstance(cvinstance);
 				} else {
 					startWithDialog((IStructuredSelection) selection);
@@ -61,10 +62,10 @@
 
 	@SuppressWarnings("unchecked")
 	private void startWithDialog(IStructuredSelection selection) {
-		List<DeltaCloudInstance> deltaCloudInstances =  UIUtils.adapt((List<DeltaCloudInstance>) selection.toList(), DeltaCloudInstance.class);
+		List<DeltaCloudInstance> deltaCloudInstances =  WorkbenchUtils.adapt((List<DeltaCloudInstance>) selection.toList(), DeltaCloudInstance.class);
 		List<DeltaCloudInstance> stoppedInstances = getStoppedInstances(deltaCloudInstances);
 		DeltaCloudInstanceDialog dialog = new DeltaCloudInstanceDialog(
-					UIUtils.getActiveShell()
+				WorkbenchUtils.getActiveShell()
 					, stoppedInstances
 					, CVMessages.getString(START_INSTANCES_DIALOG_TITLE)
 					, CVMessages.getString(START_INSTANCES_DIALOG_MSG));
@@ -95,7 +96,7 @@
 		if (instance != null) {
 			executeInstanceAction(
 					instance
-					, DeltaCloudInstance.Action.START
+					, DeltaCloudResourceAction.START
 					, DeltaCloudInstance.State.RUNNING
 					, CVMessages.getString(STARTING_INSTANCE_TITLE)
 					, CVMessages.getFormattedString(STARTING_INSTANCE_MSG, new String[] { instance.getName() }));
Index: src/org/jboss/tools/deltacloud/ui/preferences/AbstractPreferenceValue.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/preferences/AbstractPreferenceValue.java	(revision 0)
+++ src/org/jboss/tools/deltacloud/ui/preferences/AbstractPreferenceValue.java	(revision 0)
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.deltacloud.ui.preferences;
+
+import org.eclipse.core.runtime.preferences.InstanceScope;
+import org.osgi.service.prefs.BackingStoreException;
+import org.osgi.service.prefs.Preferences;
+
+/**
+ * @author Andre Dietisheim
+ */
+public abstract class AbstractPreferenceValue<TYPE> {
+
+	private String pluginId;
+	private String prefsKey;
+
+	public AbstractPreferenceValue(String prefsKey, String pluginId) {
+		this.pluginId = pluginId;
+		this.prefsKey = prefsKey;
+	}
+
+	public abstract TYPE get();
+	
+	protected String doGet() {
+		return doGet(null);
+	}
+	
+	public abstract TYPE get(TYPE currentValue);
+	
+	protected String doGet(String currentValue) {
+		if( currentValue == null || currentValue.equals("")) {
+			// pre-set with previously used
+			Preferences prefs = getPreferences(this.pluginId);
+			return prefs.get(prefsKey, "");
+		} else {
+			return currentValue;
+		}
+	}
+
+	public void remove() {
+		String prefsValue = doGet();
+		if (prefsValue == null
+				|| prefsValue == null) {
+			return;
+		}
+		store(null);
+	}
+	
+	public abstract void store(TYPE value);
+	
+	protected void doStore(String value) {
+		Preferences prefs = getPreferences(this.pluginId);
+		String prefsValue = prefs.get(prefsKey, "");
+		if (prefsValue == null 
+				|| prefsValue.equals("") 
+				|| !prefsValue.equals(value)) {
+			prefs.put(prefsKey, value);
+			try {
+				prefs.flush();
+			} catch (BackingStoreException bse) {
+				// intentionally ignore, non-critical
+			}
+		}
+	}
+
+	protected Preferences getPreferences(String pluginId) {
+		return new InstanceScope().getNode(pluginId);
+	}
+}
Index: src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageView.java
===================================================================
--- src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageView.java	(revision 29180)
+++ src/org/jboss/tools/deltacloud/ui/views/cloudelements/ImageView.java	(working copy)
@@ -10,8 +10,11 @@
  *******************************************************************************/
 package org.jboss.tools.deltacloud.ui.views.cloudelements;
 
+import java.beans.PropertyChangeEvent;
+
 import org.jboss.tools.deltacloud.core.DeltaCloud;
 import org.jboss.tools.deltacloud.core.DeltaCloudImage;
+import org.jboss.tools.deltacloud.core.ICloudElementFilter;
 import org.jboss.tools.deltacloud.ui.IDeltaCloudPreferenceConstants;
 
 /**
@@ -26,7 +29,7 @@
 
 	@Override
 	protected String getSelectedCloudPrefsKey() {
-		return IDeltaCloudPreferenceConstants.LAST_CLOUD_IMAGE_VIEW;
+		return IDeltaCloudPreferenceConstants.CLOUD_LAST_IMAGE_KEY;
 	}
 
 	@Override
@@ -45,10 +48,23 @@
 	}
 
 	@Override
+	public void propertyChange(PropertyChangeEvent event) {
+		super.propertyChange(event);
+		if (DeltaCloud.PROP_IMAGES.equals(event.getPropertyName())) {
+			updateFilteredLabel();
+		}
+	}
+
+	@Override
 	protected void addPropertyChangeListener(DeltaCloud cloud) {
 		if (cloud != null) {
 			super.addPropertyChangeListener(cloud);
 			cloud.addPropertyChangeListener(DeltaCloud.PROP_IMAGES, this);
 		}
 	}
+
+	@Override
+	protected ICloudElementFilter<DeltaCloudImage> getFilter(DeltaCloud cloud) {
+		return cloud.getImageFilter();
+	}
 }
Index: src/org/jboss/tools/internal/deltacloud/ui/wizards/AbstractFilterPage.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/ui/wizards/AbstractFilterPage.java	(revision 0)
+++ src/org/jboss/tools/internal/deltacloud/ui/wizards/AbstractFilterPage.java	(revision 0)
@@ -0,0 +1,119 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.internal.deltacloud.ui.wizards;
+
+import org.eclipse.core.runtime.Assert;
+import org.eclipse.jface.fieldassist.ControlDecoration;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+import org.jboss.tools.deltacloud.core.DeltaCloud;
+import org.jboss.tools.deltacloud.core.ICloudElementFilter;
+import org.jboss.tools.deltacloud.core.IFieldMatcher;
+import org.jboss.tools.deltacloud.ui.SWTImagesFactory;
+
+/**
+ * @author Jeff Johnston
+ * @author André Dietisheim
+ */
+public abstract class AbstractFilterPage extends WizardPage {
+
+	protected final static String EMPTY_RULE = "ErrorFilterEmptyRule.msg"; //$NON-NLS-1$
+	protected final static String INVALID_SEMICOLON = "ErrorFilterSemicolon.msg"; //$NON-NLS-1$
+
+	protected final static String DEFAULT_LABEL = "DefaultButton.label"; //$NON-NLS-1$
+
+	private DeltaCloud cloud;
+
+	public AbstractFilterPage(String name, String title, String description, DeltaCloud cloud) {
+		super(name);
+		this.cloud = cloud;
+		setTitle(title);
+		setDescription(description);
+		setImageDescriptor(SWTImagesFactory.DESC_DELTA_LARGE);
+		setPageComplete(false);
+	}
+
+	private ModifyListener textListener = new ModifyListener() {
+
+		@Override
+		public void modifyText(ModifyEvent e) {
+			validate();
+		}
+	};
+
+	private SelectionAdapter buttonListener = new SelectionAdapter() {
+		@Override
+		public void widgetSelected(SelectionEvent e) {
+			Button b = (Button) e.widget;
+			Text text = getTextWidget(b);
+			if (text != null) {
+				text.setText(ICloudElementFilter.ALL_MATCHER_EXPRESSION);
+			}
+		}
+	};
+
+
+	protected abstract Text getTextWidget(Button button);
+	
+	protected abstract void validate();
+	
+	protected String validate(Text text, ControlDecoration decoration, String formError) {
+		String error = null;
+		if (text.getText().length() == 0) {
+			error = WizardMessages.getString(EMPTY_RULE);
+		} else if (text.getText().contains(ICloudElementFilter.EXPRESSION_DELIMITER)) {
+			error = WizardMessages.getString(INVALID_SEMICOLON);
+		}
+		if (error != null) {
+			decoration.setDescriptionText(error);
+			decoration.show();
+			setPageComplete(false);
+			setErrorMessage(error);
+			return error;
+		} else {
+			return formError;
+		}
+	}
+
+	protected Label createRuleLabel(String text, Composite container) {
+		Label label = new Label(container, SWT.NULL);
+		label.setText(text);
+		return label;
+	}
+
+	protected Button createDefaultRuleButton(final Composite container) {
+		Button button = new Button(container, SWT.NULL);
+		button.setText(WizardMessages.getString(DEFAULT_LABEL));
+		button.addSelectionListener(buttonListener);
+		return button;
+	}
+
+	protected Text createRuleText(IFieldMatcher rule, final Composite container) {
+		Assert.isNotNull(rule, "Rule may not be null");
+
+		Text text = new Text(container, SWT.BORDER | SWT.SINGLE);
+		text.setText(rule.toString());
+		text.addModifyListener(textListener);
+		return text;
+	}
+
+	protected DeltaCloud getDeltaCloud() {
+		return cloud;
+	}
+}
#P org.jboss.tools.deltacloud-feature
Index: feature.xml
===================================================================
--- feature.xml	(revision 29180)
+++ feature.xml	(working copy)
@@ -36,12 +36,12 @@
          version="0.0.0"
          unpack="false"/>
 
-   <!-- <plugin
+   <plugin
          id="org.jboss.tools.deltacloud.docs"
          download-size="0"
          install-size="0"
          version="0.0.0"
-         unpack="false"/> -->
+         unpack="false"/>
 
    <plugin
          id="org.jboss.tools.deltacloud.integration"
#P org.jboss.tools.deltacloud.test
Index: APIDomUnmarshallingTest.launch
===================================================================
--- APIDomUnmarshallingTest.launch	(revision 0)
+++ APIDomUnmarshallingTest.launch	(revision 0)
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.jboss.ide.eclipse.as.wtp.ui,org.jboss.tools.ui.bot.ext,org.jboss.ide.eclipse.as.core,org.jboss.tools.common.projecttemplates,org.jboss.ide.eclipse.as.rse.core,org.jboss.tools.tests.performance,org.jboss.tools.common.el.core,org.jboss.ide.eclipse.as.ui.mbeans,org.jboss.tools.common.gef,org.jboss.ide.eclipse.as.archives.integration.test,org.jboss.tools.common.verification.test,org.jboss.ide.eclipse.archives.core,org.jboss.tools.common.verification,org.jboss.tools.jmx.core.test,org.jboss.ide.eclipse.archives.jdt.integration,org.jboss.tools.common.model,org.jboss.ide.eclipse.as.classpath.core,org.jboss.ide.eclipse.archives.test,org.jboss.ide.eclipse.as.classpath.ui,org.jboss.tools.deltacloud.integration,org.jboss.tools.common.ui,org.jboss.tools.common.text.ext,org.jboss.tools.jmx.ui,org.jboss.tools.ui.bot.ext.test,org.jboss.tools.common.el.core.test,org.jboss.tools.common.model.ui.test,org.jboss.tools.tests,org.jboss.tools.common.text.xml,org.jboss.ide.eclipse.as.ui.test,org.jboss.tools.common.meta.ui,org.jboss.ide.eclipse.archives.webtools,org.jboss.tools.deltacloud.docs,org.jboss.ide.eclipse.as.rse.ui,org.jboss.tools.common.verification.ui.test,org.jboss.tools.common.verification.ui,org.jboss.ide.eclipse.as.wtp.core,org.jboss.tools.common.test,org.jboss.tools.deltacloud.ui,org.jboss.tools.common.model.ui.capabilities,org.jboss.tools.common.resref.core,org.eclipse.jsch.ui,org.jboss.ide.eclipse.archives.ui,org.jboss.tools.common.el.ui,org.jboss.ide.eclipse.as.test,org.jboss.tools.jmx.ui.test,org.jboss.tools.common.resref.ui,org.jboss.ide.eclipse.as.ui,org.jboss.ide.eclipse.archives.ui.test,org.jboss.ide.eclipse.as.doc.user,org.jboss.tools.jmx.core,org.jboss.tools.common.model.ui,org.jboss.tools.common.model.test"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.jboss.tools.deltacloud.test/src/org/jboss/tools/internal/deltacloud/test/core/client/APIDomUnmarshallingTest.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.jboss.tools.internal.deltacloud.test.core.client.APIDomUnmarshallingTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.jboss.tools.deltacloud.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx1024m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.ui.console@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.ui.editors@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.core.variables@default:default,org.eclipse.ui@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.osgi@-1:true,org.eclipse.equinox.p2.repository@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jem.util@default:default,org.eclipse.swt@default:default,javax.xml@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.ui.workbench.texteditor@default:default,org.apache.xml.serializer@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.core.databinding@default:default,org.eclipse.debug.ui@default:default,org.eclipse.core.commands@default:default,org.eclipse.ui.ide@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.search@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.core.expressions@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.jface@default:default,org.eclipse.osgi.util@default:default,org.eclipse.team.ui@default:default,org.eclipse.ui.forms@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.text@default:default,org.eclipse.equinox.common@2:true,org.eclipse.equinox.p2.metadata@default:default,javax.servlet@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ui.navigator@default:default,org.hamcrest.core@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.core.jobs@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.ecf@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.emf.common@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.xml.resolver@default:default,org.eclipse.core.net@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.wst.common.environment@default:default,org.eclipse.help@default:default,org.eclipse.core.resources@default:default,org.eclipse.jdt.core@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.runtime@default:true,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.apache.xerces@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.wst.common.frameworks@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.osgi.services@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.wst.validation@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.team.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.ant.core@default:default,org.eclipse.ui.views@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.equinox.security@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.jface.text@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.emf.edit@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.databinding.observable@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.debug.core@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.ecf.filetransfer@default:default,com.ibm.icu@default:default,org.eclipse.compare@default:default,org.eclipse.wst.common.core@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.gwt.core@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.usage.test@default:default,org.jboss.tools.usage@default:default,com.jboss.jbds.usage.branding@default:default,org.jboss.tools.gwt.ui@default:default,org.jboss.tools.common@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="false"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
Index: src/org/jboss/tools/internal/deltacloud/test/core/client/KeyDomUnmarshallingTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/core/client/KeyDomUnmarshallingTest.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/core/client/KeyDomUnmarshallingTest.java	(working copy)
@@ -21,11 +21,11 @@
 
 import javax.xml.bind.JAXBException;
 
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.HttpMethod;
 import org.jboss.tools.deltacloud.core.client.Key;
-import org.jboss.tools.deltacloud.core.client.KeyAction;
-import org.jboss.tools.deltacloud.core.client.unmarshal.KeyActionUnmarshaller;
+import org.jboss.tools.deltacloud.core.client.unmarshal.ActionUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.KeyUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.KeysUnmarshaller;
 import org.jboss.tools.internal.deltacloud.test.fakes.KeyResponseFakes;
@@ -41,9 +41,9 @@
 
 	@Test
 	public void keyActionMayBeUnmarshalled() throws MalformedURLException, JAXBException, DeltaCloudClientException {
-		KeyAction keyAction = new KeyAction();
+		Action<Key> keyAction = new Action<Key>();
 		ByteArrayInputStream inputStream = new ByteArrayInputStream(KeyActionResponse.keyActionResponse.getBytes());
-		new KeyActionUnmarshaller().unmarshall(inputStream, keyAction);
+		new ActionUnmarshaller<Key>().unmarshall(inputStream, keyAction);
 		assertNotNull(keyAction);
 		assertEquals(KeyActionResponse.name, keyAction.getName());
 		assertEquals(KeyActionResponse.url, keyAction.getUrl().toString());
@@ -61,7 +61,7 @@
 		assertEquals(new URL(KeyResponse.url), key.getUrl());
 		assertEquals(KeyResponse.pem, key.getPem());
 		assertEquals(1, key.getActions().size());
-		KeyAction action = key.getActions().get(0);
+		Action<Key> action = key.getActions().get(0);
 		assertNotNull(action);
 		assertEquals(KeyResponse.url, action.getUrl().toString());
 		assertEquals(KeyResponse.name, action.getName());
@@ -80,7 +80,7 @@
 		assertEquals(new URL(KeysResponse.url1), key.getUrl());
 		assertEquals(KeysResponse.pem1, key.getPem());
 		assertEquals(1, key.getActions().size());
-		KeyAction action = key.getActions().get(0);
+		Action<Key> action = key.getActions().get(0);
 		assertNotNull(action);
 		assertEquals(KeysResponse.url1, action.getUrl().toString());
 		assertEquals(KeysResponse.name1, action.getName());
Index: src/org/jboss/tools/internal/deltacloud/test/fakes/ServerFake.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/fakes/ServerFake.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/fakes/ServerFake.java	(working copy)
@@ -19,7 +19,7 @@
 
 public class ServerFake {
 
-	public static final int DEFAULT_PORT = 3002;
+	public static final int DEFAULT_PORT = 3003;
 	private ExecutorService executor;
 	private int port;
 	private String response;
Index: DeltaCloudMockIntegrationTest.launch
===================================================================
--- DeltaCloudMockIntegrationTest.launch	(revision 29180)
+++ DeltaCloudMockIntegrationTest.launch	(working copy)
@@ -12,7 +12,7 @@
 <booleanAttribute key="clearwslog" value="false"/>
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.jboss.tools.gwt.ui,org.eclipse.epp.usagedata.recording,org.jboss.tools.deltacloud.integration,org.eclipse.epp.usagedata.gathering,org.jboss.tools.deltacloud.docs,org.jboss.tools.usage,org.jboss.tools.usage.test,com.jboss.jbds.usage.branding,org.jboss.tools.gwt.core,org.eclipse.epp.usagedata.ui,org.jboss.tools.deltacloud.ui,org.jboss.tools.tests"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.jboss.ide.eclipse.as.wtp.ui,org.jboss.tools.ui.bot.ext,org.jboss.ide.eclipse.as.core,org.jboss.tools.common.projecttemplates,org.jboss.ide.eclipse.as.rse.core,org.jboss.tools.tests.performance,org.jboss.tools.common.el.core,org.jboss.ide.eclipse.as.ui.mbeans,org.jboss.tools.common.gef,org.jboss.ide.eclipse.as.archives.integration.test,org.jboss.tools.common.verification.test,org.jboss.ide.eclipse.archives.core,org.jboss.tools.common.verification,org.jboss.tools.jmx.core.test,org.jboss.ide.eclipse.archives.jdt.integration,org.jboss.tools.common.model,org.jboss.ide.eclipse.as.classpath.core,org.jboss.ide.eclipse.archives.test,org.jboss.ide.eclipse.as.classpath.ui,org.jboss.tools.deltacloud.integration,org.jboss.tools.common.ui,org.jboss.tools.usage,org.jboss.tools.usage.test,org.jboss.tools.common.text.ext,org.jboss.tools.jmx.ui,org.jboss.tools.ui.bot.ext.test,org.jboss.tools.common.el.core.test,org.jboss.tools.common.model.ui.test,org.jboss.tools.tests,org.jboss.tools.common.text.xml,org.jboss.ide.eclipse.as.ui.test,org.jboss.tools.common.meta.ui,org.jboss.ide.eclipse.archives.webtools,org.jboss.tools.deltacloud.docs,org.jboss.tools.common.verification.ui.test,org.jboss.ide.eclipse.as.rse.ui,com.jboss.jbds.usage.branding,org.jboss.tools.common.verification.ui,org.jboss.ide.eclipse.as.wtp.core,org.jboss.tools.common.test,org.jboss.tools.gwt.ui,org.jboss.tools.common.model.ui.capabilities,org.jboss.tools.common.resref.core,org.jboss.ide.eclipse.archives.ui,org.jboss.tools.common.el.ui,org.jboss.ide.eclipse.as.test,org.jboss.tools.gwt.core,org.jboss.tools.jmx.ui.test,org.jboss.tools.common.resref.ui,org.jboss.ide.eclipse.as.ui,org.jboss.ide.eclipse.as.doc.user,org.jboss.ide.eclipse.archives.ui.test,org.jboss.tools.common.model.ui,org.jboss.tools.jmx.core,org.jboss.tools.common.model.test"/>
 <booleanAttribute key="includeOptional" value="true"/>
 <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
@@ -22,8 +22,8 @@
 <listEntry value="1"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
 <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
 </listAttribute>
 <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
 <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
@@ -37,8 +37,8 @@
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.sdk.ide"/>
 <booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.ant.core@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.compare@default:default,org.eclipse.core.commands@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.ui.editors@default:default,org.eclipse.jem.util@default:default,org.eclipse.ui.console@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.debug.ui@default:default,org.eclipse.equinox.security@default:default,org.eclipse.ui.ide@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.core.variables@default:default,org.eclipse.equinox.concurrent@default:default,org.apache.xml.serializer@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.core.jobs@default:default,org.eclipse.wst.validation@default:default,org.eclipse.team.core@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.ecf@default:default,org.eclipse.core.resources@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.ui@default:default,org.eclipse.equinox.common@default:default,org.eclipse.core.net@default:default,org.apache.xerces@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.search@default:default,javax.servlet@default:default,org.eclipse.osgi.util@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.debug.core@default:default,org.eclipse.core.databinding@default:default,org.eclipse.osgi,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.ui.navigator.resources@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.ui.views@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.jdt.compiler.tool@default:false,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.jdt.core@default:default,org.eclipse.osgi.services@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.core.databinding.observable@default:default,org.jboss.tools.xulrunner.initializer@default:false,org.eclipse.jface@default:default,org.eclipse.emf.edit@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.core.runtime@default:true,org.eclipse.emf.ecore.change@default:default,javax.xml@default:default,org.eclipse.ui@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.swt@default:default,org.eclipse.help@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.jdt.launching@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.apache.xml.resolver@default:default,org.eclipse.emf.ecore.xmi@default:default,com.ibm.icu@default:default,org.eclipse.equinox.app@default:default,org.eclipse.jface.text@default:default,org.eclipse.team.ui@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.ltk.core.refactoring@default:default,org.hamcrest.core@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.ui.forms@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.ecf.ssl@default:false,com.instantiations.designer.jdt.fragment@default:false,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.compare.core@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.text@default:default,org.eclipse.core.expressions@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.ui.workbench.texteditor@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.common@default:default,org.jboss.tools.deltacloud.core@default:default"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.equinox.common@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.apache.xerces@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.rse.services@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,com.instantiations.assist.eclipse.fragment.ui.ide@default:false,org.eclipse.core.databinding.beans@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jdt.core@default:default,org.eclipse.wst.validation@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ant.core@default:default,org.eclipse.team.core@default:default,org.eclipse.help@default:default,org.eclipse.swt@default:default,org.eclipse.ui.console@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.debug.ui@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.core.jobs@default:default,org.eclipse.ui.views@default:default,com.instantiations.assist.eclipse.fragment.swt@default:false,org.eclipse.wst.common.frameworks@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.core.databinding.observable@default:default,com.instantiations.assist.eclipse.fragment.jdt@default:false,com.instantiations.assist.eclipse.fragment.ui.workbench@default:false,org.eclipse.ecf.ssl@default:false,org.eclipse.equinox.security.ui@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.text@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.emf.edit@default:default,com.instantiations.assist.eclipse.fragment.ui.workbench.texteditor@default:false,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.ui.forms@default:default,org.apache.xml.resolver@default:default,org.eclipse.jface@default:default,javax.xml@default:default,com.ibm.icu@default:default,org.eclipse.rse.core@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.osgi.services@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.jdt.ui@default:default,org.hamcrest.core@default:default,org.apache.xml.serializer@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,com.instantiations.assist.eclipse.fragment.jdt.core@default:false,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.debug.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.search@default:default,org.eclipse.osgi.util@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.emf.common@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.resources@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ui.ide@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.compare@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.app@default:default,com.jcraft.jsch@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.osgi,org.eclipse.ui@default:default,org.eclipse.jem.util@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.equinox.security@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ecf@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.ui.editors@default:default,org.eclipse.jface.text@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.core.net@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.team.ui@default:default,org.eclipse.jsch.core@default:default,javax.servlet@default:default,org.eclipse.core.databinding@default:default,org.eclipse.emf.ecore@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.deltacloud.ui@default:default,org.jboss.tools.common@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
Index: src/org/jboss/tools/internal/deltacloud/test/ui/preferences/StringsPreferenceValueTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/ui/preferences/StringsPreferenceValueTest.java	(revision 0)
+++ src/org/jboss/tools/internal/deltacloud/test/ui/preferences/StringsPreferenceValueTest.java	(revision 0)
@@ -0,0 +1,94 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.internal.deltacloud.test.ui.preferences;
+
+import static org.junit.Assert.assertEquals;
+
+import org.jboss.tools.deltacloud.ui.preferences.StringsPreferenceValue;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * @author André Dietisheim
+ */
+public class StringsPreferenceValueTest {
+
+	private static final char DELIMITER = ',';
+
+	private static class StringsPreferenceValueFake extends StringsPreferenceValue {
+
+		private String values = "";
+
+		public StringsPreferenceValueFake(char delimiter) {
+			super(delimiter, null, null);
+		}
+
+
+		@Override
+		protected void doStore(String value) {
+			this.values = value;
+		}
+
+		@Override
+		protected String doGet(String currentValue) {
+			if (currentValue == null || currentValue.equals("")) {
+				return values;
+			} else {
+				return currentValue;
+			}
+		}
+
+	}
+
+	private StringsPreferenceValue stringValues;
+
+	@Before
+	public void setUp() {
+		this.stringValues = new StringsPreferenceValueFake(DELIMITER);
+	}
+
+	@Test
+	public void canAddValues() {
+		stringValues.add("11");
+		stringValues.add("22");
+		assertEquals(2, stringValues.get().length);
+		stringValues.add("33");
+		assertEquals(3, stringValues.get().length);
+	}
+
+	@Test
+	public void identicalValueAreNotAdded() {
+		String value = "11";
+		stringValues.add(value);
+		stringValues.add(value);
+		assertEquals(1, stringValues.get().length);
+	}
+
+	@Test
+	public void canAddDelimiterValue() {
+		stringValues.add("11");
+		assertEquals(1, stringValues.get().length);
+		stringValues.add(DELIMITER + "");
+		assertEquals(2, stringValues.get().length);
+	}
+
+	@Test
+	public void delimiterValueIsReturnedCorrectly() {
+		stringValues.add("11");
+		assertEquals(1, stringValues.get().length);
+		String delimiterValue = DELIMITER + "";
+		stringValues.add(delimiterValue);
+		String[] values = stringValues.get();
+		assertEquals(2, values.length);
+		values[1] = delimiterValue;
+	}
+
+}
Index: META-INF/MANIFEST.MF
===================================================================
--- META-INF/MANIFEST.MF	(revision 29180)
+++ META-INF/MANIFEST.MF	(working copy)
@@ -7,6 +7,7 @@
 Require-Bundle: org.jboss.tools.deltacloud.core;bundle-version="0.0.1",
  org.eclipse.core.runtime;bundle-version="[3.6.0,4.0.0)",
  org.junit;bundle-version="[4.8.0,5.0.0)",
- org.jboss.tools.common;bundle-version="[3.2.0,4.0.0)"
+ org.jboss.tools.common;bundle-version="[3.2.0,4.0.0)",
+ org.jboss.tools.deltacloud.ui;bundle-version="0.1.0"
 Bundle-ClassPath: jruby-complete-1.5.3.jar,
  .
Index: src/org/jboss/tools/internal/deltacloud/test/core/client/InstanceDomUnmarshallingTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/core/client/InstanceDomUnmarshallingTest.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/core/client/InstanceDomUnmarshallingTest.java	(working copy)
@@ -20,10 +20,10 @@
 
 import javax.xml.bind.JAXBException;
 
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.Instance;
-import org.jboss.tools.deltacloud.core.client.InstanceAction;
-import org.jboss.tools.deltacloud.core.client.unmarshal.InstanceActionUnmarshaller;
+import org.jboss.tools.deltacloud.core.client.unmarshal.ActionUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.InstanceUnmarshaller;
 import org.jboss.tools.deltacloud.core.client.unmarshal.InstancesUnmarshaller;
 import org.jboss.tools.internal.deltacloud.test.fakes.InstanceResponseFakes.InstanceActionResponse;
@@ -38,9 +38,9 @@
 
 	@Test
 	public void instanceActionMayBeUnmarshalled() throws MalformedURLException, JAXBException, DeltaCloudClientException {
-		InstanceAction instanceAction = new InstanceAction();
+		Action<Instance> instanceAction = new Action<Instance>();
 		ByteArrayInputStream inputStream = new ByteArrayInputStream(InstanceActionResponse.response.getBytes());
-		new InstanceActionUnmarshaller().unmarshall(inputStream, instanceAction);
+		new ActionUnmarshaller<Instance>().unmarshall(inputStream, instanceAction);
 		assertNotNull(instanceAction);
 		assertEquals(InstanceActionResponse.name, instanceAction.getName());
 		assertEquals(InstanceActionResponse.url, instanceAction.getUrl().toString());
Index: CloudSchedulingRulesTest.launch
===================================================================
--- CloudSchedulingRulesTest.launch	(revision 29180)
+++ CloudSchedulingRulesTest.launch	(working copy)
@@ -10,9 +10,9 @@
 <booleanAttribute key="clearConfig" value="true"/>
 <booleanAttribute key="clearws" value="true"/>
 <booleanAttribute key="clearwslog" value="false"/>
-<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/SchedulingRulesTest"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/CloudSchedulingRulesTest"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.jboss.tools.gwt.ui,org.eclipse.epp.usagedata.recording,org.jboss.tools.deltacloud.integration,org.eclipse.epp.usagedata.gathering,org.jboss.tools.deltacloud.docs,org.jboss.tools.usage,org.jboss.tools.usage.test,com.jboss.jbds.usage.branding,org.jboss.tools.gwt.core,org.eclipse.epp.usagedata.ui,org.jboss.tools.deltacloud.ui,org.jboss.tools.tests"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.jboss.tools.deltacloud.integration,org.jboss.tools.usage,org.jboss.tools.usage.test,org.jboss.tools.tests,org.jboss.tools.deltacloud.docs,com.jboss.jbds.usage.branding,org.jboss.tools.deltacloud.ui,org.jboss.tools.gwt.ui,org.jboss.tools.gwt.core"/>
 <booleanAttribute key="includeOptional" value="true"/>
 <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
@@ -22,8 +22,8 @@
 <listEntry value="1"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
 <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
 </listAttribute>
 <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
 <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
@@ -38,8 +38,8 @@
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.sdk.ide"/>
 <booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="org.eclipse.compare@default:default,org.eclipse.equinox.app@default:default,org.eclipse.ui.workbench@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.core.resources@default:default,org.eclipse.emf.common@default:default,org.eclipse.wst.common.uriresolver@default:default,javax.servlet@default:default,org.eclipse.core.commands@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.osgi.services@default:default,org.eclipse.text@default:default,org.jboss.tools.xulrunner.initializer@default:false,org.eclipse.ecf.ssl@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.jface@default:default,org.eclipse.jface.text@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.databinding@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.ui.console@default:default,org.eclipse.debug.ui@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.ecf@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.swt@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.databinding.property@default:default,org.eclipse.ui.views@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.wst.common.environment@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.team.core@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.osgi@-1:true,org.eclipse.core.filebuffers@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.core.jobs@default:default,com.ibm.icu@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.equinox.common@2:true,org.eclipse.ui.navigator.resources@default:default,org.eclipse.wst.validation@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.core.net@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.wst.xml.core@default:default,org.apache.xml.resolver@default:default,org.eclipse.search@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.equinox.preferences@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.jem.util@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.ui.editors@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.ui.forms@default:default,org.hamcrest.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.equinox.security@default:default,javax.xml@default:default,org.eclipse.help@default:default,org.apache.xml.serializer@default:default,org.apache.xerces@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.emf.edit@default:default,org.eclipse.core.variables@default:default,com.instantiations.designer.jdt.fragment@default:false,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.ant.core@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.core.runtime@default:true,org.eclipse.jdt.launching@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.osgi.util@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.databinding.observable@default:default,org.eclipse.team.ui@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.ui.ide@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jdt.core@default:default,org.eclipse.debug.core@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ui@default:default,org.eclipse.compare.core@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.common@default:default,org.jboss.tools.deltacloud.core@default:default"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,javax.servlet@default:default,org.eclipse.debug.ui@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.ltk.core.refactoring@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.core.expressions@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.ui.ide@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.commands@default:default,org.eclipse.help@default:default,org.eclipse.equinox.app@default:default,javax.xml@default:default,org.eclipse.jface.databinding@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.ecf@default:default,org.apache.xml.resolver@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.wst.validation@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.core.net@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.osgi.util@default:default,org.eclipse.jdt.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.core.runtime@default:true,org.eclipse.team.core@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.apache.xerces@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.emf.edit@default:default,org.eclipse.team.ui@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.ui.views@default:default,org.eclipse.equinox.common@2:true,org.eclipse.ui.editors@default:default,org.eclipse.core.variables@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.osgi.services@default:default,org.eclipse.compare@default:default,org.eclipse.search@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ant.core@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.wst.common.core@default:default,org.eclipse.equinox.security@default:default,org.eclipse.jface.text@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.compare.core@default:default,org.eclipse.text@default:default,org.apache.xml.serializer@default:default,org.hamcrest.core@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.ui.console@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.jdt.launching@default:default,org.eclipse.jface@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.ui@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.osgi@-1:true,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.debug.core@default:default,org.eclipse.ui.forms@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.jobs@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.emf.common@default:default,org.eclipse.jem.util@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.ide.eclipse.archives.test@default:default,org.jboss.ide.eclipse.archives.jdt.integration@default:default,org.jboss.ide.eclipse.as.ui@default:default,org.jboss.tools.common.meta.ui@default:default,org.jboss.tools.common@default:default,org.jboss.tools.common.verification.test@default:default,org.jboss.ide.eclipse.as.archives.integration.test@default:default,org.jboss.tools.common.el.ui@default:default,org.jboss.tools.common.projecttemplates@default:default,org.jboss.ide.eclipse.as.classpath.ui@default:default,org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.common.el.core.test@default:default,org.jboss.tools.jmx.core.test@default:default,org.jboss.tools.common.test@default:default,org.jboss.tools.common.ui@default:default,org.jboss.tools.common.verification.ui.test@default:default,org.jboss.ide.eclipse.archives.ui.test@default:default,org.jboss.tools.common.verification@default:default,org.jboss.tools.tests.performance@default:default,org.jboss.ide.eclipse.archives.ui@default:default,org.jboss.tools.common.resref.core@default:default,org.jboss.ide.eclipse.as.doc.user@default:default,org.jboss.ide.eclipse.as.classpath.core@default:default,org.jboss.tools.common.model.test@default:default,org.jboss.tools.common.el.core@default:default,org.jboss.tools.ui.bot.ext.test@default:default,org.jboss.tools.jmx.ui.test@default:default,org.jboss.ide.eclipse.archives.core@default:default,org.jboss.tools.common.resref.ui@default:default,org.jboss.tools.ui.bot.ext@default:default,org.jboss.ide.eclipse.as.rse.ui@default:default,org.jboss.tools.common.model@default:default,org.jboss.ide.eclipse.as.wtp.ui@default:default,org.jboss.tools.common.text.ext@default:default,org.jboss.ide.eclipse.as.wtp.core@default:default,org.jboss.tools.jmx.ui@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.ide.eclipse.as.test@default:default,org.jboss.ide.eclipse.as.core@default:default,org.eclipse.jsch.ui@default:default,org.jboss.tools.jmx.core@default:default,org.jboss.tools.common.model.ui.capabilities@default:default,org.jboss.tools.common.verification.ui@default:default,org.jboss.ide.eclipse.as.rse.core@default:default,org.jboss.tools.common.model.ui@default:default,org.jboss.ide.eclipse.archives.webtools@default:default,org.jboss.ide.eclipse.as.ui.test@default:default,org.jboss.ide.eclipse.as.ui.mbeans@default:default,org.jboss.tools.common.gef@default:default,org.jboss.tools.common.model.ui.test@default:default,org.jboss.tools.common.text.xml@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
 <booleanAttribute key="tracing" value="false"/>
Index: src/org/jboss/tools/internal/deltacloud/test/DeltaCloudTestSuite.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/DeltaCloudTestSuite.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/DeltaCloudTestSuite.java	(working copy)
@@ -10,12 +10,14 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.test;
 
+import org.jboss.tools.internal.deltacloud.test.core.client.APIDomUnmarshallingTest;
 import org.jboss.tools.internal.deltacloud.test.core.client.HardwareProfileDomUnmarshallingTest;
 import org.jboss.tools.internal.deltacloud.test.core.client.ImageDomUnmarshallingTest;
 import org.jboss.tools.internal.deltacloud.test.core.client.InstanceDomUnmarshallingTest;
 import org.jboss.tools.internal.deltacloud.test.core.client.KeyDomUnmarshallingTest;
 import org.jboss.tools.internal.deltacloud.test.core.client.RealmDomUnmarshallingTest;
 import org.jboss.tools.internal.deltacloud.test.core.job.CloudSchedulingRulesTest;
+import org.jboss.tools.internal.deltacloud.test.ui.preferences.StringsPreferenceValueTest;
 import org.junit.runner.RunWith;
 import org.junit.runners.Suite;
 
@@ -29,6 +31,8 @@
 	InstanceDomUnmarshallingTest.class,
 	ImageDomUnmarshallingTest.class,
 	HardwareProfileDomUnmarshallingTest.class,
-	RealmDomUnmarshallingTest.class})
+	APIDomUnmarshallingTest.class,
+	RealmDomUnmarshallingTest.class,
+	StringsPreferenceValueTest.class})
 public class DeltaCloudTestSuite {
 }
Index: DeltaCloudTestSuite.launch
===================================================================
--- DeltaCloudTestSuite.launch	(revision 29180)
+++ DeltaCloudTestSuite.launch	(working copy)
@@ -10,9 +10,15 @@
 <booleanAttribute key="clearConfig" value="true"/>
 <booleanAttribute key="clearws" value="true"/>
 <booleanAttribute key="clearwslog" value="false"/>
+<booleanAttribute key="com.mountainminds.eclemma.core.INPLACE_INSTRUMENTATION" value="true"/>
+<listAttribute key="com.mountainminds.eclemma.core.INSTRUMENTATION_PATHS">
+<listEntry value="/org.jboss.tools.deltacloud.integration/bin"/>
+<listEntry value="/org.jboss.tools.deltacloud.ui/bin"/>
+<listEntry value="/org.jboss.tools.deltacloud.core/bin"/>
+</listAttribute>
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.jboss.ide.eclipse.as.wtp.ui,org.jboss.tools.ui.bot.ext,org.jboss.ide.eclipse.as.core,org.jboss.tools.common.projecttemplates,org.jboss.ide.eclipse.as.rse.core,org.jboss.tools.tests.performance,org.jboss.tools.common.el.core,org.jboss.ide.eclipse.as.ui.mbeans,org.jboss.tools.common.gef,org.jboss.ide.eclipse.as.archives.integration.test,org.jboss.tools.common.verification.test,org.jboss.ide.eclipse.archives.core,org.jboss.tools.common.verification,org.jboss.ide.eclipse.archives.jdt.integration,org.jboss.tools.jmx.core.test,org.jboss.tools.common.model,org.jboss.ide.eclipse.as.classpath.core,org.jboss.ide.eclipse.archives.test,org.jboss.ide.eclipse.as.classpath.ui,org.jboss.tools.deltacloud.integration,org.jboss.tools.common.ui,org.jboss.tools.usage,org.jboss.tools.usage.test,org.jboss.tools.common.text.ext,org.jboss.tools.jmx.ui,org.jboss.tools.ui.bot.ext.test,org.jboss.tools.common.el.core.test,org.jboss.tools.common.model.ui.test,org.jboss.tools.tests,org.jboss.tools.common.text.xml,org.jboss.ide.eclipse.as.ui.test,org.jboss.tools.common.meta.ui,org.jboss.ide.eclipse.archives.webtools,org.jboss.tools.deltacloud.docs,org.jboss.tools.common.verification.ui.test,org.jboss.ide.eclipse.as.rse.ui,com.jboss.jbds.usage.branding,org.jboss.tools.common.verification.ui,org.jboss.ide.eclipse.as.wtp.core,org.jboss.tools.common.test,org.jboss.tools.deltacloud.ui,org.jboss.tools.gwt.ui,org.jboss.tools.common.model.ui.capabilities,org.jboss.tools.common.resref.core,org.eclipse.jsch.ui,org.jboss.ide.eclipse.archives.ui,org.jboss.ide.eclipse.as.test,org.jboss.tools.common.el.ui,org.jboss.tools.gwt.core,org.jboss.tools.jmx.ui.test,org.jboss.ide.eclipse.as.ssh,org.jboss.tools.common.resref.ui,org.jboss.ide.eclipse.as.ui,org.jboss.ide.eclipse.archives.ui.test,org.jboss.ide.eclipse.as.doc.user,org.jboss.tools.jmx.core,org.jboss.tools.common.model.ui,org.jboss.tools.common.model.test"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.jboss.ide.eclipse.as.wtp.ui,org.jboss.tools.ui.bot.ext,org.jboss.ide.eclipse.as.core,org.jboss.tools.common.projecttemplates,org.jboss.ide.eclipse.as.rse.core,org.jboss.tools.tests.performance,org.jboss.tools.common.el.core,org.jboss.ide.eclipse.as.ui.mbeans,org.jboss.tools.common.gef,org.jboss.ide.eclipse.as.archives.integration.test,org.jboss.tools.common.verification.test,org.jboss.ide.eclipse.archives.core,org.jboss.tools.common.verification,org.jboss.tools.jmx.core.test,org.jboss.ide.eclipse.archives.jdt.integration,org.jboss.tools.common.model,org.jboss.ide.eclipse.as.classpath.core,org.jboss.ide.eclipse.archives.test,org.jboss.ide.eclipse.as.classpath.ui,org.jboss.tools.deltacloud.integration,org.jboss.tools.common.ui,org.jboss.tools.usage,org.jboss.tools.usage.test,org.jboss.tools.common.text.ext,org.jboss.tools.jmx.ui,org.jboss.tools.ui.bot.ext.test,org.jboss.tools.common.el.core.test,org.jboss.tools.common.model.ui.test,org.jboss.tools.tests,org.jboss.tools.common.text.xml,org.jboss.ide.eclipse.as.ui.test,org.jboss.tools.common.meta.ui,org.jboss.ide.eclipse.archives.webtools,org.jboss.tools.deltacloud.docs,org.jboss.tools.common.verification.ui.test,org.jboss.ide.eclipse.as.rse.ui,com.jboss.jbds.usage.branding,org.jboss.tools.common.verification.ui,org.jboss.ide.eclipse.as.wtp.core,org.jboss.tools.common.test,org.jboss.tools.gwt.ui,org.jboss.tools.common.model.ui.capabilities,org.jboss.tools.common.resref.core,org.jboss.ide.eclipse.archives.ui,org.jboss.tools.common.el.ui,org.jboss.ide.eclipse.as.test,org.jboss.tools.gwt.core,org.jboss.tools.jmx.ui.test,org.jboss.tools.common.resref.ui,org.jboss.ide.eclipse.as.ui,org.jboss.ide.eclipse.as.doc.user,org.jboss.ide.eclipse.archives.ui.test,org.jboss.tools.common.model.ui,org.jboss.tools.jmx.core,org.jboss.tools.common.model.test"/>
 <booleanAttribute key="includeOptional" value="true"/>
 <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
@@ -38,8 +44,8 @@
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.sdk.ide"/>
 <booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="org.eclipse.ui.navigator@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.emf.common@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.wst.common.emf@default:default,com.ibm.icu@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.p2.core@default:default,javax.servlet@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.jface.databinding@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.debug@default:default,org.eclipse.ui@default:default,org.eclipse.search@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.net@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.databinding@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.core.resources@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.equinox.p2.metadata@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.wst.xml.core@default:default,org.apache.xerces@default:default,org.eclipse.osgi,org.eclipse.core.filebuffers@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.debug.core@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.core.variables@default:default,org.eclipse.jface.text@default:default,org.eclipse.emf.edit@default:default,org.eclipse.help@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.team.ui@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.ui.console@default:default,org.eclipse.core.contenttype@default:default,org.hamcrest.core@default:default,org.eclipse.jdt.core@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.equinox.common@default:default,org.eclipse.core.jobs@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.ui.editors@default:default,org.eclipse.ui.navigator.resources@default:default,org.apache.xml.serializer@default:default,org.eclipse.compare@default:default,org.eclipse.ui.forms@default:default,org.eclipse.ui.views@default:default,org.eclipse.swt@default:default,org.eclipse.ui.ide@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.osgi.services@default:default,org.eclipse.ecf.identity@default:default,javax.xml@default:default,org.eclipse.osgi.util@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.wst.validation@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.wst.sse.core@default:default,org.eclipse.text@default:default,org.eclipse.debug.ui@default:default,org.eclipse.equinox.app@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.ui.workbench@default:default,org.eclipse.jem.util@default:default,org.eclipse.ecf@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.ecf.ssl@default:false,org.eclipse.core.runtime@default:true,org.eclipse.jface@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.equinox.security@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.team.core@default:default,org.eclipse.ant.core@default:default,org.apache.xml.resolver@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.common@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.deltacloud.core@default:default"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.equinox.common@2:true,org.eclipse.jdt.launching@default:default,org.eclipse.core.runtime@default:true,org.eclipse.core.variables@default:default,org.apache.xerces@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.rse.services@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.jdt.core@default:default,org.eclipse.wst.validation@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ant.core@default:default,org.eclipse.team.core@default:default,org.eclipse.help@default:default,org.eclipse.swt@default:default,org.eclipse.ui.console@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.debug.ui@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.core.jobs@default:default,org.eclipse.ui.views@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.equinox.security.ui@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.text@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.emf.edit@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.ui.forms@default:default,org.apache.xml.resolver@default:default,org.eclipse.jface@default:default,javax.xml@default:default,com.ibm.icu@default:default,org.eclipse.rse.core@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.osgi.services@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.jdt.ui@default:default,org.hamcrest.core@default:default,org.apache.xml.serializer@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.debug.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.search@default:default,org.eclipse.osgi.util@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.emf.common@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.resources@default:default,org.eclipse.compare.core@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ui.ide@default:default,org.eclipse.core.expressions@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.compare@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.equinox.app@default:default,com.jcraft.jsch@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.osgi@-1:true,org.eclipse.ui@default:default,org.eclipse.jem.util@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.equinox.security@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ecf@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.ui.editors@default:default,org.eclipse.jface.text@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.core.net@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.team.ui@default:default,org.eclipse.jsch.core@default:default,javax.servlet@default:default,org.eclipse.core.databinding@default:default,org.eclipse.emf.ecore@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.deltacloud.ui@default:default,org.jboss.tools.common@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
Index: src/org/jboss/tools/internal/deltacloud/test/core/client/ServerTypeMockIntegrationTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/core/client/ServerTypeMockIntegrationTest.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/core/client/ServerTypeMockIntegrationTest.java	(working copy)
@@ -19,6 +19,7 @@
 import java.util.Collections;
 import java.util.List;
 
+import org.jboss.tools.deltacloud.core.client.API.Driver;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudNotFoundClientException;
@@ -55,7 +56,7 @@
 
 	@Test
 	public void recognizesDeltaCloud() throws IOException {
-		assertEquals(DeltaCloudClientImpl.DeltaCloudServerType.MOCK, testSetup.getClient().getServerType());
+		assertEquals(Driver.MOCK, testSetup.getClient().getServerType());
 	}
 
 	/**
@@ -75,7 +76,7 @@
 		serverFake.start();
 		try {
 			assertEquals(
-					DeltaCloudClientImpl.DeltaCloudServerType.UNKNOWN,
+					Driver.UNKNOWN,
 					new DeltaCloudClientImpl(
 							MockIntegrationTestContext.SERVERFAKE_URL, MockIntegrationTestContext.DELTACLOUD_USER,
 							MockIntegrationTestContext.DELTACLOUD_PASSWORD).getServerType());
@@ -97,7 +98,7 @@
 			DeltaCloudClientImpl errorClient = new DeltaCloudClientImpl(MockIntegrationTestContext.DELTACLOUD_URL) {
 				@Override
 				public List<Image> listImages() throws DeltaCloudClientException {
-					requestStringResponse(new DeltaCloudRequest() {
+					request(new DeltaCloudRequest() {
 
 						@Override
 						public URL getUrl() throws MalformedURLException {
Index: src/org/jboss/tools/internal/deltacloud/test/core/DeltaCloudMockIntegrationTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/core/DeltaCloudMockIntegrationTest.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/core/DeltaCloudMockIntegrationTest.java	(working copy)
@@ -51,7 +51,7 @@
 	@Test
 	public void testConnectionReportsFalseOnAuthFailure() throws MalformedURLException, DeltaCloudClientException,
 			DeltaCloudException {
-		ServerFake serverFake = setupServerFake("HTTP/1.1 403 Forbidden\n\n\n");
+		ServerFake serverFake = setupServerFake("HTTP/1.1 401 Forbidden\n\n\n");
 		try {
 			DeltaCloud deltaCloud = new DeltaCloudFake(
 					"http://localhost:" + ServerFake.DEFAULT_PORT,
Index: StringsPreferenceValueTest.launch
===================================================================
--- StringsPreferenceValueTest.launch	(revision 0)
+++ StringsPreferenceValueTest.launch	(revision 0)
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
+<booleanAttribute key="append.args" value="true"/>
+<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
+<booleanAttribute key="askclear" value="false"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="true"/>
+<booleanAttribute key="clearws" value="true"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/StringEntriesPreferenceValueTest"/>
+<booleanAttribute key="default" value="false"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.jboss.ide.eclipse.as.wtp.ui,org.jboss.tools.ui.bot.ext,org.jboss.ide.eclipse.as.core,org.jboss.tools.common.projecttemplates,org.jboss.ide.eclipse.as.rse.core,org.jboss.tools.tests.performance,org.jboss.tools.common.el.core,org.jboss.ide.eclipse.as.ui.mbeans,org.jboss.tools.common.gef,org.jboss.ide.eclipse.as.archives.integration.test,org.jboss.tools.common.verification.test,org.jboss.ide.eclipse.archives.core,org.jboss.tools.common.verification,org.jboss.ide.eclipse.archives.jdt.integration,org.jboss.tools.jmx.core.test,org.jboss.tools.common.model,org.jboss.ide.eclipse.as.classpath.core,org.jboss.ide.eclipse.archives.test,org.jboss.ide.eclipse.as.classpath.ui,org.jboss.tools.deltacloud.integration,org.jboss.tools.common.ui,org.jboss.tools.usage,org.jboss.tools.usage.test,org.jboss.tools.common.text.ext,org.jboss.tools.jmx.ui,org.jboss.tools.ui.bot.ext.test,org.jboss.tools.common.el.core.test,org.jboss.tools.common.model.ui.test,org.jboss.tools.tests,org.jboss.tools.common.text.xml,org.jboss.ide.eclipse.as.ui.test,org.jboss.tools.common.meta.ui,org.jboss.ide.eclipse.archives.webtools,org.jboss.tools.deltacloud.docs,org.jboss.tools.common.verification.ui.test,org.jboss.ide.eclipse.as.rse.ui,com.jboss.jbds.usage.branding,org.jboss.tools.common.verification.ui,org.jboss.ide.eclipse.as.wtp.core,org.jboss.tools.common.test,org.jboss.tools.gwt.ui,org.jboss.tools.common.model.ui.capabilities,org.jboss.tools.common.resref.core,org.eclipse.jsch.ui,org.jboss.ide.eclipse.archives.ui,org.jboss.tools.common.el.ui,org.jboss.ide.eclipse.as.test,org.jboss.tools.gwt.core,org.jboss.tools.jmx.ui.test,org.jboss.tools.common.resref.ui,org.jboss.ide.eclipse.as.ui,org.jboss.ide.eclipse.archives.ui.test,org.jboss.ide.eclipse.as.doc.user,org.jboss.tools.jmx.core,org.jboss.tools.common.model.ui,org.jboss.tools.common.model.test"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/org.jboss.tools.deltacloud.test/src/org/jboss/tools/internal/deltacloud/test/ui/preferences/StringsPreferenceValueTest.java"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="1"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.jboss.tools.internal.deltacloud.test.ui.preferences.StringsPreferenceValueTest"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.jboss.tools.deltacloud.test"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dosgi.requiredJavaVersion=1.5 -XX:MaxPermSize=256m -Xms40m -Xmx1024m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.sdk.ide"/>
+<booleanAttribute key="run_in_ui_thread" value="true"/>
+<stringAttribute key="selected_target_plugins" value="com.ibm.icu@default:default,javax.servlet@default:default,org.eclipse.debug.ui@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.jdt.debug@default:default,com.jcraft.jsch@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.ltk.core.refactoring@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.core.expressions@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.ui.ide@default:default,org.eclipse.core.resources@default:default,org.eclipse.core.commands@default:default,org.eclipse.help@default:default,org.eclipse.equinox.app@default:default,javax.xml@default:default,org.eclipse.jface.databinding@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.ecf@default:default,org.apache.xml.resolver@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.wst.validation@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.swt@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.core.net@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.jsch.core@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.osgi.util@default:default,org.eclipse.jdt.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.security.ui@default:default,org.eclipse.team.core@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.apache.xerces@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.emf.edit@default:default,org.eclipse.team.ui@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.ui.views@default:default,org.eclipse.rse.core@default:default,org.eclipse.core.databinding.beans@default:default,org.eclipse.equinox.common@2:true,org.eclipse.ui.editors@default:default,org.eclipse.core.variables@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.osgi.services@default:default,org.eclipse.compare@default:default,org.eclipse.search@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.ant.core@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.wst.common.core@default:default,org.eclipse.equinox.security@default:default,org.eclipse.jface.text@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.compare.core@default:default,org.eclipse.text@default:default,org.apache.xml.serializer@default:default,org.hamcrest.core@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.rse.services@default:default,org.eclipse.ui.console@default:default,org.eclipse.core.databinding@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.jdt.launching@default:default,org.eclipse.jface@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.ui@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.osgi@-1:true,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.debug.core@default:default,org.eclipse.ui.forms@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.jobs@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.emf.common@default:default,org.eclipse.jem.util@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.deltacloud.ui@default:default,org.jboss.tools.common@default:default,org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.deltacloud.test@default:default"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useCustomFeatures" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="false"/>
+</launchConfiguration>
Index: src/org/jboss/tools/internal/deltacloud/test/core/client/InstanceMockIntegrationTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/core/client/InstanceMockIntegrationTest.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/core/client/InstanceMockIntegrationTest.java	(working copy)
@@ -24,6 +24,7 @@
 import java.util.List;
 import java.util.concurrent.ExecutionException;
 
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClient;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl;
@@ -31,9 +32,7 @@
 import org.jboss.tools.deltacloud.core.client.HttpMethod;
 import org.jboss.tools.deltacloud.core.client.Image;
 import org.jboss.tools.deltacloud.core.client.Instance;
-import org.jboss.tools.deltacloud.core.client.Instance.InstanceState;
-import org.jboss.tools.deltacloud.core.client.InstanceAction;
-import org.jboss.tools.deltacloud.core.client.InternalDeltaCloudClient;
+import org.jboss.tools.deltacloud.core.client.StateAware.State;
 import org.jboss.tools.internal.deltacloud.test.context.MockIntegrationTestContext;
 import org.junit.After;
 import org.junit.Before;
@@ -136,7 +135,7 @@
 			instance = testSetup.getClient().createInstance(image.getId());
 			assertTrue(instance != null);
 			assertEquals(image.getId(), instance.getImageId());
-			assertEquals(InstanceState.RUNNING, instance.getState());
+			assertEquals(State.RUNNING, instance.getState());
 		} finally {
 			testSetup.quietlyDestroyInstance(instance);
 		}
@@ -161,19 +160,17 @@
 	public void destroyThrowsExceptionOnUnknowInstanceId() throws DeltaCloudClientException, IllegalArgumentException,
 			InstantiationException, IllegalAccessException, InvocationTargetException, SecurityException,
 			NoSuchMethodException {
-		InternalDeltaCloudClient client = (InternalDeltaCloudClient) testSetup.getClient();
-		client.performInstanceAction(
+		DeltaCloudClient client = testSetup.getClient();
+		client.performAction(
 				createInstanceAction(
-						InstanceAction.DESTROY,
+						"destroy",
 						MockIntegrationTestContext.DELTACLOUD_URL,
 						HttpMethod.POST,
 						new Instance()));
 	}
 
-	private InstanceAction createInstanceAction(String name, String url, HttpMethod method, Instance instance)
-			throws IllegalArgumentException, InstantiationException, IllegalAccessException, InvocationTargetException,
-			SecurityException, NoSuchMethodException {
-		InstanceAction action = new InstanceAction();
+	private Action<Instance> createInstanceAction(String name, String url, HttpMethod method, Instance instance) {
+		Action<Instance> action = new Action<Instance>();
 		action.setName(name);
 		action.setMethod(method);
 		action.setOwner(instance);
@@ -202,31 +199,31 @@
 		DeltaCloudClient client = testSetup.getClient();
 		testInstance.stop(client);
 		testInstance = client.listInstances(testInstance.getId()); // reload!
-		assertEquals(InstanceState.STOPPED, testInstance.getState());
+		assertEquals(State.STOPPED, testInstance.getState());
 	}
 
 	@Test
 	public void canStartInstance() throws DeltaCloudClientException {
 		Instance testInstance = testSetup.getTestInstance();
 		DeltaCloudClient client = testSetup.getClient();
-		if (testInstance.getState() == InstanceState.RUNNING) {
+		if (testInstance.getState() == State.RUNNING) {
 			testInstance.stop(client);
 		}
 		testInstance.start(client);
 		testInstance = client.listInstances(testInstance.getId()); // reload!
-		assertEquals(InstanceState.RUNNING, testInstance.getState());
+		assertEquals(State.RUNNING, testInstance.getState());
 	}
 
 	@Test
 	public void canStartInstanceByAction() throws DeltaCloudClientException {
 		Instance testInstance = testSetup.getTestInstance();
 		DeltaCloudClient client = testSetup.getClient();
-		if (testInstance.getState() == InstanceState.RUNNING) {
+		if (testInstance.getState() == State.RUNNING) {
 			testInstance.stop(client);
 		}
 		assertTrue(testInstance.start(client));
 		testInstance = client.listInstances(testInstance.getId()); // reload!
-		assertEquals(InstanceState.RUNNING, testInstance.getState());
+		assertEquals(State.RUNNING, testInstance.getState());
 	}
 
 	@Test
@@ -254,7 +251,7 @@
 		Instance testInstance = testSetup.getTestInstance();
 		DeltaCloudClient client = testSetup.getClient();
 		testInstance = client.listInstances(testInstance.getId()); // reload
-		assertTrue(testInstance.getState() == InstanceState.RUNNING);
+		assertTrue(testInstance.getState() == State.RUNNING);
 		assertFalse(testInstance.destroy(client));
 	}
 
@@ -266,7 +263,7 @@
 		try {
 			testInstance.stop(client);
 			testInstance = client.listInstances(testInstance.getId()); // reload
-			assertTrue(testInstance.getState() == InstanceState.STOPPED);
+			assertTrue(testInstance.getState() == State.STOPPED);
 			assertFalse(testInstance.reboot(client));
 		} finally {
 			testInstance.start(client);
Index: InstanceDomUnmarshallingTest.launch
===================================================================
--- InstanceDomUnmarshallingTest.launch	(revision 29180)
+++ InstanceDomUnmarshallingTest.launch	(working copy)
@@ -12,7 +12,7 @@
 <booleanAttribute key="clearwslog" value="false"/>
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.jboss.ide.eclipse.as.wtp.ui,org.jboss.tools.ui.bot.ext,org.jboss.ide.eclipse.as.core,org.jboss.tools.common.projecttemplates,org.jboss.ide.eclipse.as.rse.core,org.jboss.tools.tests.performance,org.jboss.tools.common.el.core,org.jboss.ide.eclipse.as.ui.mbeans,org.jboss.tools.common.gef,org.jboss.ide.eclipse.as.archives.integration.test,org.jboss.tools.common.verification.test,org.jboss.ide.eclipse.archives.core,org.jboss.tools.common.verification,org.jboss.ide.eclipse.archives.jdt.integration,org.jboss.tools.jmx.core.test,org.jboss.tools.common.model,org.jboss.ide.eclipse.as.classpath.core,org.jboss.ide.eclipse.archives.test,org.jboss.ide.eclipse.as.classpath.ui,org.jboss.tools.deltacloud.integration,org.jboss.tools.common.ui,org.jboss.tools.common.text.ext,org.jboss.tools.jmx.ui,org.jboss.tools.ui.bot.ext.test,org.jboss.tools.common.el.core.test,org.jboss.tools.common.model.ui.test,org.jboss.tools.tests,org.jboss.tools.common.text.xml,org.jboss.ide.eclipse.as.ui.test,org.jboss.tools.common.meta.ui,org.jboss.ide.eclipse.archives.webtools,org.jboss.tools.deltacloud.docs,org.jboss.tools.common.verification.ui.test,org.jboss.ide.eclipse.as.rse.ui,org.jboss.tools.common.verification.ui,org.jboss.ide.eclipse.as.wtp.core,org.jboss.tools.common.test,org.jboss.tools.deltacloud.ui,org.jboss.tools.common.model.ui.capabilities,org.jboss.tools.common.resref.core,org.eclipse.jsch.ui,org.jboss.ide.eclipse.archives.ui,org.jboss.ide.eclipse.as.test,org.jboss.tools.common.el.ui,org.jboss.tools.jmx.ui.test,org.jboss.ide.eclipse.as.ssh,org.jboss.tools.common.resref.ui,org.jboss.ide.eclipse.as.ui,org.jboss.ide.eclipse.archives.ui.test,org.jboss.ide.eclipse.as.doc.user,org.jboss.tools.jmx.core,org.jboss.tools.common.model.ui,org.jboss.tools.common.model.test"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.jboss.ide.eclipse.as.wtp.ui,org.jboss.tools.ui.bot.ext,org.jboss.ide.eclipse.as.core,org.jboss.tools.common.projecttemplates,org.jboss.ide.eclipse.as.rse.core,org.jboss.tools.tests.performance,org.jboss.tools.common.el.core,org.jboss.ide.eclipse.as.ui.mbeans,org.jboss.tools.common.gef,org.jboss.ide.eclipse.as.archives.integration.test,org.jboss.tools.common.verification.test,org.jboss.ide.eclipse.archives.core,org.jboss.tools.common.verification,org.jboss.ide.eclipse.archives.jdt.integration,org.jboss.tools.jmx.core.test,org.jboss.tools.common.model,org.jboss.ide.eclipse.as.classpath.core,org.jboss.ide.eclipse.archives.test,org.jboss.ide.eclipse.as.classpath.ui,org.jboss.tools.deltacloud.integration,org.jboss.tools.common.ui,org.jboss.tools.common.text.ext,org.jboss.tools.jmx.ui,org.jboss.tools.ui.bot.ext.test,org.jboss.tools.common.el.core.test,org.jboss.tools.common.model.ui.test,org.jboss.tools.tests,org.jboss.tools.common.text.xml,org.jboss.ide.eclipse.as.ui.test,org.jboss.tools.common.meta.ui,org.jboss.ide.eclipse.archives.webtools,org.jboss.tools.deltacloud.docs,org.jboss.tools.common.verification.ui.test,org.jboss.ide.eclipse.as.rse.ui,org.jboss.tools.common.verification.ui,org.jboss.ide.eclipse.as.wtp.core,org.jboss.tools.common.test,org.jboss.tools.deltacloud.ui,org.jboss.tools.common.model.ui.capabilities,org.jboss.tools.common.resref.core,org.eclipse.jsch.ui,org.jboss.ide.eclipse.archives.ui,org.jboss.tools.common.el.ui,org.jboss.ide.eclipse.as.test,org.jboss.tools.jmx.ui.test,org.jboss.tools.common.resref.ui,org.jboss.ide.eclipse.as.ui,org.jboss.ide.eclipse.archives.ui.test,org.jboss.ide.eclipse.as.doc.user,org.jboss.tools.jmx.core,org.jboss.tools.common.model.ui,org.jboss.tools.common.model.test"/>
 <booleanAttribute key="includeOptional" value="true"/>
 <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
@@ -37,8 +37,8 @@
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.sdk.ide"/>
 <booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="org.eclipse.equinox.p2.core@default:default,org.eclipse.core.resources@default:default,org.eclipse.osgi.util@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.net@default:default,org.eclipse.core.databinding.observable@default:default,org.eclipse.compare.core@default:default,org.apache.xml.serializer@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.core.variables@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.emf.common@default:default,org.eclipse.wst.common.emf@default:default,com.ibm.icu@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.ui.editors@default:default,org.eclipse.equinox.common@2:true,org.eclipse.debug.ui@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.team.core@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.text@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.hamcrest.core@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.wst.validation@default:default,org.eclipse.jdt.compiler.apt@default:false,org.apache.xml.resolver@default:default,org.eclipse.emf.edit@default:default,org.eclipse.jface@default:default,org.eclipse.osgi@-1:true,org.eclipse.swt@default:default,org.eclipse.equinox.p2.metadata@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jdt.core@default:default,org.eclipse.search@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.jem.util@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.wst.xml.core@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.ui.ide@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.ui.views@default:default,org.eclipse.ant.core@default:default,org.eclipse.equinox.security@default:default,org.apache.xerces@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.core.commands@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.equinox.p2.engine@default:default,org.eclipse.core.databinding@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.core.expressions@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.core.runtime@default:true,org.eclipse.ecf@default:default,org.eclipse.ui.console@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,javax.xml@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.osgi.services@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.debug.core@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.jface.text@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.jdt.core.manipulation@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.core.jobs@default:default,javax.servlet@default:default,org.eclipse.ui@default:default,org.eclipse.compare@default:default,org.eclipse.help@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.team.ui@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.equinox.app@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.contenttype@default:default,org.eclipse.ui.forms@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.usage.test@default:default,org.jboss.tools.usage@default:default,org.jboss.tools.gwt.ui@default:default,com.jboss.jbds.usage.branding@default:default,org.jboss.tools.gwt.core@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.common@default:default,org.jboss.tools.deltacloud.core@default:default"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.equinox.security@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.core.expressions@default:default,org.eclipse.equinox.registry@default:default,org.apache.xerces@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.osgi@-1:true,org.apache.xml.resolver@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.ui.views@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.osgi.util@default:default,org.eclipse.jdt.core@default:default,org.eclipse.debug.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.databinding@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.compare@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.ui.ide@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.jface.text@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.wst.xml.core@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.core.resources@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.jface@default:default,org.eclipse.compare.core@default:default,org.eclipse.equinox.common@2:true,org.eclipse.team.ui@default:default,org.eclipse.swt@default:default,com.ibm.icu@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.equinox.app@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ant.core@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.ui.editors@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.variables@default:default,org.eclipse.ui@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.debug.core@default:default,org.eclipse.ui.console@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jem.util@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.databinding.observable@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.team.core@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.search@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.xml.serializer@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.eclipse.help@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.equinox.p2.engine@default:default,org.hamcrest.core@default:default,org.eclipse.ecf@default:default,org.eclipse.emf.edit@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.text@default:default,org.eclipse.ui.forms@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.core.net@default:default,org.eclipse.osgi.services@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.wst.common.frameworks@default:default,javax.servlet@default:default,org.eclipse.wst.validation@default:default,org.eclipse.emf.ecore@default:default,javax.xml@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.core.runtime@default:true,org.eclipse.ltk.ui.refactoring@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.gwt.core@default:default,org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.common@default:default,org.jboss.tools.gwt.ui@default:default,org.jboss.tools.usage@default:default,org.jboss.tools.usage.test@default:default,com.jboss.jbds.usage.branding@default:default,org.jboss.tools.deltacloud.test@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
Index: src/org/jboss/tools/internal/deltacloud/test/core/client/KeyMockIntegrationTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/core/client/KeyMockIntegrationTest.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/core/client/KeyMockIntegrationTest.java	(working copy)
@@ -10,6 +10,7 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.test.core.client;
 
+import static org.junit.Assert.*;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertThat;
@@ -20,6 +21,7 @@
 
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
+import org.jboss.tools.deltacloud.core.client.Action;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClient;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl;
@@ -89,8 +91,8 @@
 		Key key = client.createKey(id);
 		assertNotNull(key);
 		assertEquals(id, key.getId());
-		client.deleteKey(id);
-		client.listKey(id);
+		key.destroy(client);
+		client.listKey(key.getId());
 	}
 
 	/**
@@ -155,7 +157,9 @@
 
 	private void quietlyDeleteKey(String id) {
 		try {
-			testSetup.getClient().deleteKey(id);
+			DeltaCloudClient client = testSetup.getClient();
+			Key key = client.listKey(id);
+			key.destroy(client);
 		} catch (Exception e) {
 			// ignore
 		}
Index: InstanceMockIntegrationTest.launch
===================================================================
--- InstanceMockIntegrationTest.launch	(revision 29180)
+++ InstanceMockIntegrationTest.launch	(working copy)
@@ -1,7 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.pde.ui.JunitLaunchConfig">
 <booleanAttribute key="append.args" value="true"/>
-<stringAttribute key="application" value="org.eclipse.pde.junit.runtime.coretestapplication"/>
 <booleanAttribute key="askclear" value="false"/>
 <booleanAttribute key="automaticAdd" value="true"/>
 <booleanAttribute key="automaticValidate" value="false"/>
@@ -12,18 +11,18 @@
 <booleanAttribute key="clearwslog" value="false"/>
 <stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/pde-junit"/>
 <booleanAttribute key="default" value="false"/>
-<stringAttribute key="deselected_workspace_plugins" value="org.eclipse.epp.usagedata.recording,org.eclipse.epp.usagedata.gathering,org.mozilla.xulrunner.cocoa.macosx,org.jboss.tools.common,org.jboss.tools.deltacloud.docs,org.mozilla.xulrunner.gtk.linux.x86_64,org.jboss.tools.usage,org.jboss.tools.usage.test,org.mozilla.xulrunner.win32.win32.x86,com.jboss.jbds.usage.branding,org.mozilla.xulrunner.gtk.linux.x86,org.eclipse.epp.usagedata.ui,org.mozilla.xulrunner.carbon.macosx,org.mozilla.xpcom,org.jboss.tools.deltacloud.ui,org.jboss.tools.tests,org.jruby.jruby"/>
+<stringAttribute key="deselected_workspace_plugins" value="org.jboss.tools.usage,org.jboss.tools.usage.test,org.jboss.tools.tests,org.jboss.tools.common,org.jboss.tools.deltacloud.docs,com.jboss.jbds.usage.branding,org.jboss.tools.deltacloud.ui"/>
 <booleanAttribute key="includeOptional" value="true"/>
 <stringAttribute key="location" value="${workspace_loc}/../junit-workspace"/>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
-<listEntry value="/org.jboss.tools.deltacloud.test/src/org/jboss/tools/internal/deltacloud/test/core/client/InstanceMockIntegrationTest.java"/>
+<listEntry value="/org.jboss.tools.deltacloud.test"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
-<listEntry value="1"/>
+<listEntry value="4"/>
 </listAttribute>
 <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
-<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
 <listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
 </listAttribute>
 <stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
 <booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
@@ -37,8 +36,8 @@
 <stringAttribute key="pde.version" value="3.3"/>
 <stringAttribute key="product" value="org.eclipse.sdk.ide"/>
 <booleanAttribute key="run_in_ui_thread" value="true"/>
-<stringAttribute key="selected_target_plugins" value="org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.ant.core@default:default,org.eclipse.core.jobs@default:default,org.eclipse.swtbot.ant.optional.junit3@default:false,org.eclipse.jdt.debug@default:default,org.eclipse.swtbot.ant.optional.junit4@default:false,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.core.databinding.observable@default:default,org.eclipse.core.net@default:default,org.apache.commons.el@default:default,org.eclipse.core.runtime.compatibility.registry@default:false,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.equinox.registry@default:default,org.eclipse.ltk.ui.refactoring@default:default,org.eclipse.osgi@-1:true,org.eclipse.emf.edit@default:default,org.apache.ant@default:default,org.eclipse.core.runtime@default:true,org.eclipse.equinox.app@default:default,org.eclipse.debug.core@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.equinox.http.jetty@default:default,org.eclipse.core.resources@default:default,org.eclipse.debug.ui@default:default,org.eclipse.equinox.p2.core@default:default,org.eclipse.equinox.security@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.mortbay.jetty.util@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.core.databinding@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.apache.xml.serializer@default:default,org.eclipse.jface@default:default,org.eclipse.emf.common@default:default,org.eclipse.ui.editors@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.team.ui@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.sdk@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.ecf.filetransfer@default:default,com.ibm.icu@default:default,org.eclipse.jface.text@default:default,org.eclipse.jem.util@default:default,org.eclipse.wst.validation@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.ui.ide@default:default,org.eclipse.search@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.jdt.core@default:default,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.text@default:default,org.eclipse.wst.sse.core@default:default,javax.xml@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,com.instantiations.designer.jdt.fragment@default:false,org.eclipse.ui.forms@default:default,org.mortbay.jetty.server@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.core.expressions@default:default,org.eclipse.osgi.util@default:default,org.eclipse.ui.navigator.resources@default:default,org.apache.jasper@default:default,org.eclipse.wst.xml.core@default:default,org.eclipse.swt@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.ui.views@default:default,org.eclipse.wst.common.project.facet.core@default:default,org.apache.lucene.analysis@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.equinox.preferences@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.equinox.p2.engine@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.help.base@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.ecf@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.hamcrest.core@default:default,org.eclipse.ui.console@default:default,org.eclipse.core.commands@default:default,org.eclipse.compare.core@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.compare@default:default,org.eclipse.ui.cheatsheets@default:default,org.jboss.tools.xulrunner.initializer@default:false,org.apache.lucene@default:default,org.apache.xml.resolver@default:default,org.eclipse.help@default:default,org.eclipse.core.variables@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.wst.common.uriresolver@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.team.core@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,javax.servlet@default:default,org.eclipse.equinox.common@2:true,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.wst.common.core@default:default,org.junit4@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.core.runtime.compatibility@default:default,org.eclipse.osgi.services@default:default,org.eclipse.wst.common.frameworks@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.emf.ecore@default:default,org.eclipse.update.configurator@3:true,org.eclipse.help.ui@default:default,javax.servlet.jsp@default:default,org.apache.xerces@default:default,org.eclipse.ui@default:default"/>
-<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.deltacloud.test@default:default"/>
+<stringAttribute key="selected_target_plugins" value="org.eclipse.wst.common.project.facet.core@default:default,org.eclipse.ltk.core.refactoring@default:default,org.eclipse.equinox.security@default:default,org.eclipse.ui.cheatsheets@default:default,org.eclipse.emf.ecore.xmi@default:default,org.eclipse.equinox.p2.metadata@default:default,org.eclipse.core.expressions@default:default,org.eclipse.equinox.registry@default:default,org.apache.xerces@default:default,org.eclipse.core.runtime.compatibility@default:default,org.mortbay.jetty.util@default:default,org.eclipse.ecf.filetransfer@default:default,org.eclipse.wst.common.core@default:default,org.eclipse.core.filesystem@default:default,org.eclipse.osgi@-1:true,org.apache.jasper@default:default,org.apache.xml.resolver@default:default,org.eclipse.core.runtime.compatibility.auth@default:default,org.eclipse.jdt.debug@default:default,org.eclipse.ui.views@default:default,org.eclipse.core.net.linux.x86_64@default:false,org.eclipse.osgi.util@default:default,org.eclipse.jdt.core@default:default,org.eclipse.debug.ui@default:default,org.eclipse.emf.common@default:default,org.eclipse.core.commands@default:default,org.eclipse.core.databinding@default:default,org.eclipse.equinox.p2.repository@default:default,org.eclipse.ui.workbench@default:default,org.eclipse.compare@default:default,org.eclipse.core.databinding.property@default:default,org.eclipse.ui.ide@default:default,org.eclipse.wst.sse.core@default:default,org.eclipse.ui.ide.application@default:default,org.eclipse.jface.text@default:default,org.junit*4.8.1.v4_8_1_v20100427-1100@default:default,org.eclipse.equinox.http.servlet@default:default,org.eclipse.jface.databinding@default:default,org.eclipse.swt.gtk.linux.x86_64@default:false,org.eclipse.ecf.provider.filetransfer@default:default,org.eclipse.wst.xml.core@default:default,org.apache.commons.httpclient*3.1.0.v201005080502@default:default,org.eclipse.equinox.preferences@default:default,org.apache.lucene.analysis@default:default,org.eclipse.core.resources@default:default,org.eclipse.ui.views.properties.tabbed@default:default,org.eclipse.jface@default:default,org.junit4@default:default,org.eclipse.compare.core@default:default,org.eclipse.equinox.common@2:true,org.eclipse.team.ui@default:default,org.eclipse.swt@default:default,com.ibm.icu@default:default,org.eclipse.equinox.http.jetty@default:default,org.mortbay.jetty.server@default:default,org.eclipse.wst.common.environment@default:default,org.eclipse.equinox.app@default:default,org.eclipse.ui.workbench.texteditor@default:default,org.eclipse.ant.core@default:default,org.apache.commons.logging*1.0.4.v201005080501@default:default,org.eclipse.ecf.identity@default:default,org.eclipse.equinox.concurrent@default:default,org.eclipse.update.configurator@3:true,org.eclipse.help.base@default:default,org.eclipse.ecf.provider.filetransfer.ssl@default:false,org.eclipse.swtbot.ant.optional.junit3@default:false,org.eclipse.ui.editors@default:default,org.eclipse.core.filebuffers@default:default,org.eclipse.emf.ecore.change@default:default,org.eclipse.core.jobs@default:default,org.eclipse.core.variables@default:default,org.eclipse.ui@default:default,org.eclipse.help.ui@default:default,org.eclipse.jdt.compiler.apt@default:false,org.eclipse.debug.core@default:default,org.eclipse.ui.console@default:default,org.eclipse.jdt.ui@default:default,org.eclipse.jdt.launching@default:default,org.eclipse.jem.util@default:default,org.eclipse.jdt.compiler.tool@default:false,org.eclipse.core.runtime.compatibility.registry@default:false,org.eclipse.core.databinding.observable@default:default,org.eclipse.ui.navigator.resources@default:default,org.eclipse.wst.common.uriresolver@default:default,javax.servlet.jsp@default:default,org.eclipse.team.core@default:default,org.eclipse.ui.navigator@default:default,org.eclipse.equinox.p2.metadata.repository@default:default,org.eclipse.search@default:default,org.eclipse.equinox.p2.core@default:default,org.apache.xml.serializer@default:default,org.apache.commons.codec*1.3.0.v20100518-1140@default:default,org.apache.commons.el@default:default,org.eclipse.help@default:default,org.eclipse.core.filesystem.linux.x86_64@default:false,org.eclipse.equinox.p2.engine@default:default,org.hamcrest.core@default:default,org.eclipse.ecf@default:default,org.eclipse.swtbot.ant.optional.junit4@default:false,org.eclipse.emf.edit@default:default,org.eclipse.core.contenttype@default:default,org.eclipse.text@default:default,org.apache.lucene@default:default,org.eclipse.ui.forms@default:default,org.eclipse.wst.common.emf@default:default,org.eclipse.ecf.ssl@default:false,org.eclipse.core.net@default:default,org.eclipse.osgi.services@default:default,org.eclipse.wst.common.emfworkbench.integration@default:default,org.eclipse.wst.common.frameworks@default:default,javax.servlet@default:default,org.apache.ant@default:default,org.eclipse.wst.validation@default:default,org.eclipse.sdk@default:default,org.eclipse.emf.ecore@default:default,javax.xml@default:default,org.eclipse.jdt.core.manipulation@default:default,org.eclipse.core.runtime@default:true,org.eclipse.ltk.ui.refactoring@default:default"/>
+<stringAttribute key="selected_workspace_plugins" value="org.jboss.tools.common.text.ext@default:default,org.jboss.tools.common.verification.test@default:default,org.jboss.tools.common.model.ui.capabilities@default:default,org.jboss.tools.gwt.core@default:default,org.jboss.tools.common.el.ui@default:default,org.jboss.tools.jmx.core.test@default:default,org.jboss.tools.deltacloud.core@default:default,org.jboss.tools.common.meta.ui@default:default,org.jboss.ide.eclipse.as.ui.mbeans@default:default,org.jboss.ide.eclipse.as.wtp.core@default:default,org.jboss.tools.common.model@default:default,org.eclipse.jsch.ui@default:default,org.jboss.ide.eclipse.as.wtp.ui@default:default,org.jboss.ide.eclipse.as.archives.integration.test@default:default,org.jboss.tools.common.resref.ui@default:default,org.jboss.tools.common.model.ui@default:default,org.jboss.tools.common.projecttemplates@default:default,org.jboss.ide.eclipse.as.ui@default:default,org.jboss.ide.eclipse.as.rse.ui@default:default,org.jboss.tools.jmx.ui.test@default:default,org.jboss.ide.eclipse.as.ui.test@default:default,org.jboss.ide.eclipse.as.test@default:default,org.jboss.tools.common.gef@default:default,org.jboss.tools.common.el.core.test@default:default,org.jboss.ide.eclipse.archives.ui@default:default,org.jboss.tools.common.model.test@default:default,org.jboss.tools.common.model.ui.test@default:default,org.jboss.tools.common.resref.core@default:default,org.jboss.tools.deltacloud.integration@default:default,org.jboss.ide.eclipse.archives.webtools@default:default,org.jboss.tools.common.verification.ui@default:default,org.jboss.tools.gwt.ui@default:default,org.jboss.ide.eclipse.archives.jdt.integration@default:default,org.jboss.ide.eclipse.as.rse.core@default:default,org.jboss.ide.eclipse.archives.core@default:default,org.jboss.tools.common.el.core@default:default,org.jboss.tools.jmx.ui@default:default,org.jboss.ide.eclipse.as.doc.user@default:default,org.jboss.tools.common.test@default:default,org.jboss.tools.common.verification.ui.test@default:default,org.jboss.tools.ui.bot.ext.test@default:default,org.jboss.ide.eclipse.as.classpath.ui@default:default,org.jboss.ide.eclipse.as.classpath.core@default:default,org.jboss.ide.eclipse.archives.test@default:default,org.jboss.tools.ui.bot.ext@default:default,org.jboss.tools.jmx.core@default:default,org.jboss.ide.eclipse.as.core@default:default,org.jboss.tools.common.ui@default:default,org.jboss.tools.tests.performance@default:default,org.jboss.tools.common.verification@default:default,org.jboss.tools.deltacloud.test@default:default,org.jboss.tools.common.text.xml@default:default,org.jboss.ide.eclipse.archives.ui.test@default:default"/>
 <booleanAttribute key="show_selected_only" value="false"/>
 <booleanAttribute key="tracing" value="false"/>
 <booleanAttribute key="useCustomFeatures" value="false"/>
Index: src/org/jboss/tools/internal/deltacloud/test/fakes/APIResponseFakes.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/fakes/APIResponseFakes.java	(revision 0)
+++ src/org/jboss/tools/internal/deltacloud/test/fakes/APIResponseFakes.java	(revision 0)
@@ -0,0 +1,56 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.internal.deltacloud.test.fakes;
+
+/**
+ * @author André Dietisheim
+ */
+public class APIResponseFakes {
+
+	public static class APIResponse {
+		public static final String url = "http://localhost:3001/api/keys/test1292840175447";
+		public static final String driver = "ec2";
+
+		public static final String apiResponse = getApiResponseXML(url, driver);
+		public static final String invalidDriverApiResponse = getApiResponseXML(url, "foo");
+	}
+
+	private static final String getApiResponseXML(String url, String driver) {
+		return "<api driver='" + driver + "' version='0.1'>"
+				+ "  <link href='" + url + "realms' rel='realms'>"
+				+ "  </link>"
+				+ "  <link href='" + url + "images' rel='images'>"
+				+ "    <feature name='owner_id'></feature>"
+				+ "  </link>"
+				+ "  <link href='" + url + "instance_states' rel='instance_states'>"
+				+ "  </link>"
+				+ "  <link href='" + url + "instances' rel='instances'>"
+				+ "    <feature name='user_data'></feature>"
+				+ "    <feature name='authentication_key'></feature>"
+				+ "    <feature name='public_ip'></feature>"
+				+ "    <feature name='security_group'></feature>"
+				+ "  </link>"
+				+ "  <link href='" + url + "hardware_profiles' rel='hardware_profiles'>"
+				+ "  </link>"
+				+ "  <link href='" + url + "storage_snapshots' rel='storage_snapshots'>"
+				+ "  </link>"
+				+ "  <link href='" + url + "storage_volumes' rel='storage_volumes'>"
+				+ "  </link>"
+				+ "  <link href='" + url + "keys' rel='keys'>"
+				+ "  </link>"
+				+ "  <link href='" + url + "buckets' rel='buckets'>"
+				+ "    <feature name='bucket_location'></feature>"
+				+ "  </link>"
+				+ "</api>";
+
+	}
+
+}
Index: src/org/jboss/tools/internal/deltacloud/test/core/client/APIDomUnmarshallingTest.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/core/client/APIDomUnmarshallingTest.java	(revision 0)
+++ src/org/jboss/tools/internal/deltacloud/test/core/client/APIDomUnmarshallingTest.java	(revision 0)
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Red Hat, Inc.
+ * Distributed under license by Red Hat, Inc. All rights reserved.
+ * This program is made available under the terms of the
+ * Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     Red Hat, Inc. - initial API and implementation
+ ******************************************************************************/
+package org.jboss.tools.internal.deltacloud.test.core.client;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.ByteArrayInputStream;
+import java.net.MalformedURLException;
+
+import org.jboss.tools.deltacloud.core.client.API;
+import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
+import org.jboss.tools.deltacloud.core.client.API.Driver;
+import org.jboss.tools.deltacloud.core.client.unmarshal.APIUnmarshaller;
+import org.jboss.tools.internal.deltacloud.test.fakes.APIResponseFakes.APIResponse;
+import org.junit.Test;
+
+/**
+ * @author André Dietisheim
+ */
+public class APIDomUnmarshallingTest {
+
+	@Test
+	public void ec2DriverIsUnmarshalled() throws MalformedURLException, DeltaCloudClientException {
+		API api = new API();
+		ByteArrayInputStream inputStream = new ByteArrayInputStream(APIResponse.apiResponse.getBytes());
+		new APIUnmarshaller().unmarshall(inputStream, api);
+		assertNotNull(api);
+		assertEquals(APIResponse.driver, api.getDriver().name().toLowerCase());
+	}
+
+	@Test
+	public void invalidDriverUnmarshalledToUnknown() throws MalformedURLException, DeltaCloudClientException {
+		API api = new API();
+		ByteArrayInputStream inputStream = new ByteArrayInputStream(APIResponse.invalidDriverApiResponse.getBytes());
+		new APIUnmarshaller().unmarshall(inputStream, api);
+		assertNotNull(api);
+		assertEquals(Driver.UNKNOWN, api.getDriver());
+	}
+}
Index: src/org/jboss/tools/internal/deltacloud/test/fakes/InstanceResponseFakes.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/fakes/InstanceResponseFakes.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/fakes/InstanceResponseFakes.java	(working copy)
@@ -10,7 +10,7 @@
  ******************************************************************************/
 package org.jboss.tools.internal.deltacloud.test.fakes;
 
-import org.jboss.tools.deltacloud.core.client.Instance.InstanceState;
+import org.jboss.tools.deltacloud.core.client.StateAware.State;
 
 /**
  * @author André Dietisheim
@@ -33,7 +33,7 @@
 		public static final String image1Id = "ami-7d07ec14";
 		public static final String realm1Url = "http://try.steamcannon.org/deltacloud/api/realms/us-east-1a";
 		public static final String realm1Id = "us-east-1a";
-		public static final InstanceState state = InstanceState.RUNNING;
+		public static final State state = State.RUNNING;
 		public static final String hardwareProfile1Url = "http://try.steamcannon.org/deltacloud/api/hardware_profiles/m1.small";
 		public static final String hardwareProfile1Id = "m1.small";
 		public static final String keyname1 = "ad10";
@@ -57,7 +57,7 @@
 		public static final String image1Id = "ami-7d07ec14";
 		public static final String realm1Url = "http://try.steamcannon.org/deltacloud/api/realms/us-east-1a";
 		public static final String realm1Id = "us-east-1a";
-		public static final InstanceState state = InstanceState.RUNNING;
+		public static final State state = State.RUNNING;
 		public static final String hardwareProfile1Url = "http://try.steamcannon.org/deltacloud/api/hardware_profiles/m1.small";
 		public static final String hardwareProfile1Id = "m1.small";
 		public static final String keyname1 = "ad10";
@@ -74,7 +74,7 @@
 		public static final String image2Id = "ami-7d07ec14";
 		public static final String realm2Url = "http://try.steamcannon.org/deltacloud/api/realms/us-east-2a";
 		public static final String realm2Id = "us-east-2a";
-		public static final InstanceState state2 = InstanceState.STOPPED;
+		public static final State state2 = State.STOPPED;
 		public static final String hardwareProfile2Url = "http://try.steamcannon.org/deltacloud/api/hardware_profiles/m1.large";
 		public static final String hardwareProfile2Id = "m1.large";
 		public static final String keyname2 = "ad11";
@@ -96,7 +96,7 @@
 	}
 
 	private static final String getInstanceResponseXML(String url, String id, String name, String owner,
-			String imageUrl, String imageId, String realmUrl, String realmId, InstanceState state,
+			String imageUrl, String imageId, String realmUrl, String realmId, State state,
 			String hardwareProfileUrl, String hardwareProfileId, String keyname, String actionName1,
 			String actionName2, String publicAddress, String privateAddress) {
 		return "<instance href=\""
Index: src/org/jboss/tools/internal/deltacloud/test/context/MockIntegrationTestContext.java
===================================================================
--- src/org/jboss/tools/internal/deltacloud/test/context/MockIntegrationTestContext.java	(revision 29180)
+++ src/org/jboss/tools/internal/deltacloud/test/context/MockIntegrationTestContext.java	(working copy)
@@ -24,12 +24,12 @@
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 
-import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl;
-import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
 import org.jboss.tools.deltacloud.core.client.DeltaCloudClient;
+import org.jboss.tools.deltacloud.core.client.DeltaCloudClientException;
+import org.jboss.tools.deltacloud.core.client.DeltaCloudClientImpl;
 import org.jboss.tools.deltacloud.core.client.Image;
 import org.jboss.tools.deltacloud.core.client.Instance;
-import org.jboss.tools.deltacloud.core.client.Instance.InstanceState;
+import org.jboss.tools.deltacloud.core.client.StateAware.State;
 
 /**
  * A class that holds the integration test context
@@ -103,7 +103,7 @@
 	public void quietlyDestroyInstance(Instance instance) {
 		if (instance != null) {
 			try {
-				if (instance.getState() == Instance.InstanceState.RUNNING) {
+				if (instance.getState() == Instance.State.RUNNING) {
 					instance.stop(client);
 				}
 				instance.destroy(client);
@@ -127,7 +127,7 @@
 	 * @throws ExecutionException
 	 * @throws InterruptedException
 	 */
-	public boolean waitForInstanceState(final String instanceId, final InstanceState state, final long timeout)
+	public boolean waitForInstanceState(final String instanceId, final State state, final long timeout)
 			throws InterruptedException, ExecutionException {
 		final long startTime = System.currentTimeMillis();
 		Callable<Boolean> waitingCallable = new Callable<Boolean>() {
