Fix exceptions thrown in SchemaImportDialog and SchemaSelectionDialog. This is only a partial fix for the Interface.implementationRef selector.
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
index f32f76c..c7a8535 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/utils/ModelUtil.java
@@ -1030,9 +1030,14 @@
 		return null;
 	}
 
-	public static boolean setValue(TransactionalEditingDomain domain, final EObject object, final EStructuralFeature feature, final Object value) {
+	public static boolean setValue(TransactionalEditingDomain domain, final EObject object, final EStructuralFeature feature, Object value) {
 		ExtendedPropertiesAdapter adapter = AdapterUtil.adapt(object, ExtendedPropertiesAdapter.class);
 		Object oldValue = adapter==null ? object.eGet(feature) : adapter.getFeatureDescriptor(feature).getValue();
+		if (isStringWrapper(oldValue)) {
+			oldValue = getStringWrapperValue(oldValue);
+			if (value instanceof String)
+				value = ModelUtil.createStringWrapper((String)value);
+		}
 		final Object newValue = (feature instanceof EReference && !(value instanceof EObject)) ? null : value;
 		
 		boolean valueChanged = (newValue != oldValue);
diff --git a/org.eclipse.bpmn2.modeler.ui/plugin.xml b/org.eclipse.bpmn2.modeler.ui/plugin.xml
index 5f1781e..49e5aca 100644
--- a/org.eclipse.bpmn2.modeler.ui/plugin.xml
+++ b/org.eclipse.bpmn2.modeler.ui/plugin.xml
@@ -422,6 +422,8 @@
 			<!-- process -->
 			<enable object="Process"/>
 			<enable object="SubProcess"/>
+			<enable object="Transaction"/>
+			<enable object="AdHocSubProcess"/>
 
 			<!-- gateways -->
 			<enable object="ExclusiveGateway"/>
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java
index 1e91aa4..54a8d12 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/adapters/properties/InterfacePropertiesAdapter.java
@@ -13,17 +13,32 @@
 
 package org.eclipse.bpmn2.modeler.ui.adapters.properties;
 
+import javax.xml.namespace.QName;
+
 import org.eclipse.bpmn2.Bpmn2Package;
 import org.eclipse.bpmn2.Interface;
+import org.eclipse.bpmn2.Process;
 import org.eclipse.bpmn2.modeler.core.adapters.ExtendedPropertiesAdapter;
 import org.eclipse.bpmn2.modeler.core.adapters.FeatureDescriptor;
 import org.eclipse.bpmn2.modeler.core.adapters.ObjectDescriptor;
 import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
+import org.eclipse.bpmn2.modeler.core.utils.NamespaceUtil;
 import org.eclipse.emf.common.notify.AdapterFactory;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EStructuralFeature;
 import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.wst.wsdl.Fault;
+import org.eclipse.wst.wsdl.Input;
+import org.eclipse.wst.wsdl.Message;
+import org.eclipse.wst.wsdl.Operation;
+import org.eclipse.wst.wsdl.Output;
+import org.eclipse.wst.wsdl.Part;
+import org.eclipse.wst.wsdl.PortType;
+import org.eclipse.xsd.XSDAttributeDeclaration;
+import org.eclipse.xsd.XSDElementDeclaration;
+import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.XSDTypeDefinition;
 
 /**
  * @author Bob Brodt
@@ -66,12 +81,33 @@
 	    		@Override
 	    		public Object getValue(Object context) {
 					final Interface iface = adopt(context);
-					return iface.getImplementationRef();
+					if (iface.getImplementationRef()!=null)
+						return iface.getImplementationRef();
+					return ModelUtil.createStringWrapper("");
 	    		}
 
 	    		@Override
 	    		public void setValue(Object context, Object value) {
-					if (value instanceof String) {
+	    			Interface object = adopt(context);
+	    			Resource resource = ModelUtil.getResource(object);
+	    			
+	    			if (value instanceof PortType) {
+	    				PortType portType = (PortType)value;
+	    				QName qname = portType.getQName();
+	    				String prefix = NamespaceUtil.getPrefixForNamespace(resource, qname.getNamespaceURI());
+	    				if (prefix==null)
+	    					prefix = NamespaceUtil.addNamespace(resource, qname.getNamespaceURI());
+	    				if (prefix!=null)
+	    					value = prefix + ":";
+	    				value += qname.getLocalPart();
+	    			}
+	    			else if (value instanceof Process) {
+	    				Process process = (Process)value;
+	    				if (process.getSupportedInterfaceRefs().size()>0)
+	    					value = process.getSupportedInterfaceRefs().get(0).getImplementationRef();
+	    			}
+
+	    			if (value instanceof String) {
 						value = ModelUtil.createStringWrapper((String)value);
 	    			}
 	    			else if (!ModelUtil.isStringWrapper(value)) {
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaImportDialog.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaImportDialog.java
index 3434159..47ecfaf 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaImportDialog.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaImportDialog.java
@@ -1063,21 +1063,21 @@
 			fTreeViewer.setContentProvider(fTreeContentProvider);
 		fResourceKind = "xml";
 
-		String[] wsdl_FILTER_EXTENSIONS = {
+		String[] xml_FILTER_EXTENSIONS = {
 				"*.xml",
 				"*.xsd",
 				"*.wsdl",
 				"*.*"
 		};
-		FILTER_EXTENSIONS = wsdl_FILTER_EXTENSIONS;
+		FILTER_EXTENSIONS = xml_FILTER_EXTENSIONS;
 
-		String[] wsdl_FILTER_NAMES = {
+		String[] xml_FILTER_NAMES = {
 				"XML Files",
 				"XML Schema Files",
 				"WSDL Definition Files",
 				"All"
 		};
-		FILTER_NAMES = wsdl_FILTER_NAMES;
+		FILTER_NAMES = xml_FILTER_NAMES;
 
 		resourceFilter = ".xml";
 		if (fResourceComposite!=null)
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaSelectionDialog.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaSelectionDialog.java
index 68b1776..bd6b846 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaSelectionDialog.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/dialogs/SchemaSelectionDialog.java
@@ -20,6 +20,7 @@
 import org.eclipse.bpmn2.modeler.core.utils.ModelUtil;
 import org.eclipse.bpmn2.modeler.ui.Activator;
 import org.eclipse.bpmn2.modeler.ui.editor.BPMN2Editor;
+import org.eclipse.bpmn2.modeler.ui.property.providers.BPMN2DefinitionsTreeContentProvider;
 import org.eclipse.bpmn2.modeler.ui.property.providers.ModelTreeLabelProvider;
 import org.eclipse.bpmn2.modeler.ui.property.providers.ServiceTreeContentProvider;
 import org.eclipse.bpmn2.modeler.ui.property.providers.TreeNode;
@@ -224,12 +225,15 @@
 
 	void attemptLoad() {
 		String path = null;
-		if ("xsd".equals(importType)) {
+		if ("xsd".equals(importType) || "xml".equals(importType)) {
 			treeContentProvider = new VariableTypeTreeContentProvider(true, true);
 			path = importLocation;
 		} else if ("wsdl".equals(importType)) {
 			treeContentProvider = new ServiceTreeContentProvider(true);
 			path = importLocation;
+		} else if ("bpmn".equals(importType)) {
+			treeContentProvider = new BPMN2DefinitionsTreeContentProvider(true);
+			path = importLocation;
 		} else {
 			treeContentProvider = null;
 			input = null;
@@ -316,6 +320,7 @@
 			tree.getVerticalBar().setSelection(0);
 			updateStatus(new Status(IStatus.OK, Activator.getDefault().PLUGIN_ID, 0,
 					"Loaded "+importLocation, null));
+			updateOK(false);
 		}
 	}
 
@@ -341,6 +346,9 @@
 				return "wsdl";
 			if ("http://www.w3.org/2001/XMLSchema".equals(type))
 				return "xsd";
+			if ("http://www.omg.org/spec/BPMN/20100524/MODEL".equals(type))
+				return "bpmn";
+			return "xml";
 		}
 		return null;
 	}
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/editors/SchemaObjectEditor.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/editors/SchemaObjectEditor.java
index 6a0a5ef..a31d7b0 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/editors/SchemaObjectEditor.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/editors/SchemaObjectEditor.java
@@ -15,7 +15,9 @@
 
 import javax.xml.namespace.QName;
 
+import org.eclipse.bpmn2.Definitions;
 import org.eclipse.bpmn2.Import;
+import org.eclipse.bpmn2.Process;
 import org.eclipse.bpmn2.modeler.core.merrimac.clad.AbstractDetailComposite;
 import org.eclipse.bpmn2.modeler.core.merrimac.dialogs.TextAndButtonObjectEditor;
 import org.eclipse.bpmn2.modeler.core.utils.NamespaceUtil;
@@ -173,6 +175,10 @@
 					value = prefix + ":";
 				value += "schema";
 			}
+			if (result instanceof Process) {
+				Process process = (Process)result;
+				process.getSupportedInterfaceRefs();
+			}
 			if (value.isEmpty()) {
 				MessageDialog.openWarning(parent.getShell(), "Invalid Selection","The selection, "+
 						selectionType+" is not a valid type definition.");
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/BPMN2DefinitionsTreeContentProvider.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/BPMN2DefinitionsTreeContentProvider.java
index ccb1f85..8b5cb52 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/BPMN2DefinitionsTreeContentProvider.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/BPMN2DefinitionsTreeContentProvider.java
@@ -11,6 +11,7 @@
 package org.eclipse.bpmn2.modeler.ui.property.providers;
 
 import org.eclipse.bpmn2.Definitions;
+import org.eclipse.bpmn2.DocumentRoot;
 import org.eclipse.bpmn2.Interface;
 import org.eclipse.bpmn2.Process;
 import org.eclipse.bpmn2.modeler.ui.util.ListMap;
@@ -47,6 +48,9 @@
 			return new Object[] { result } ;
 		}
 		
+		if (inputElement instanceof DocumentRoot) {
+			inputElement = ((DocumentRoot)inputElement).getDefinitions();
+		}
 		
 		if (inputElement instanceof Definitions) {									
 			
diff --git a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java
index 0a5c5ec..967f1ef 100644
--- a/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java
+++ b/org.eclipse.bpmn2.modeler.ui/src/org/eclipse/bpmn2/modeler/ui/property/providers/JavaTypeTreeNode.java
@@ -60,14 +60,18 @@
 	@Override
 	public Object[] getChildren() {
 		List<JavaMemberTreeNode> kids = new ArrayList<JavaMemberTreeNode>();
-		Class c = (Class)modelObject;
-		for (Field f : c.getDeclaredFields()) {
-			if ((Modifier.PUBLIC & f.getModifiers()) != 0)
-				kids.add(new JavaMemberTreeNode(f,isCondensed));
+		try {
+			Class c = (Class)modelObject;
+			for (Field f : c.getDeclaredFields()) {
+				if ((Modifier.PUBLIC & f.getModifiers()) != 0)
+					kids.add(new JavaMemberTreeNode(f,isCondensed));
+			}
+			for (Method m : c.getDeclaredMethods()) {
+				if ((Modifier.PUBLIC & m.getModifiers()) != 0)
+					kids.add(new JavaMemberTreeNode(m,isCondensed));
+			}
 		}
-		for (Method m : c.getDeclaredMethods()) {
-			if ((Modifier.PUBLIC & m.getModifiers()) != 0)
-				kids.add(new JavaMemberTreeNode(m,isCondensed));
+		catch (Exception e) {
 		}
 		return kids.toArray(new Object[kids.size()]);
 	}