diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/META-INF/MANIFEST.MF b/plugins/org.eclipse.wst.sse.sieditor.search/META-INF/MANIFEST.MF
index 32ca6a3..dbb6628 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/META-INF/MANIFEST.MF
@@ -17,7 +17,8 @@
  org.eclipse.wst.wsdl;bundle-version="1.2.201",
  org.eclipse.core.resources;bundle-version="3.7.100",
  org.eclipse.ui.ide;bundle-version="3.7.0",
- org.eclipse.ui.forms;bundle-version="3.5.200"
+ org.eclipse.ui.forms;bundle-version="3.5.200",
+ org.eclipse.wst.sse.sieditor.core;bundle-version="1.0.0"
 Bundle-ActivationPolicy: lazy
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
 Export-Package: org.eclipse.wst.sse.sieditor.search.destinations,
diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java
index 1e4eb78..3555c51 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/AbstractSearchQueryOperation.java
@@ -11,6 +11,7 @@
 package org.eclipse.wst.sse.sieditor.search.provider;
 
 import java.util.LinkedHashSet;
+import java.util.Map;
 import java.util.Set;
 
 import org.eclipse.core.resources.IContainer;
@@ -22,7 +23,9 @@
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.platform.discovery.runtime.api.ISearchParameters;
 import org.eclipse.platform.discovery.util.api.longop.ILongOperation;
 import org.eclipse.platform.discovery.util.api.longop.LongOpCanceledException;
@@ -33,10 +36,14 @@
 import org.eclipse.wst.sse.sieditor.search.ui.tree.RootTreeNode;
 import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
 import org.eclipse.wst.wsdl.Definition;
+import org.eclipse.wst.wsdl.internal.util.WSDLResourceFactoryImpl;
 import org.eclipse.wst.wsdl.util.WSDLResourceImpl;
 
 public abstract class AbstractSearchQueryOperation implements ILongOperation<ITreeNode> {
 
+    protected static final String XSD_FILE_EXTENSION = "xsd"; //$NON-NLS-1$
+    protected static final String WSDL_FILE_EXTENSION = "wsdl"; //$NON-NLS-1$
+    protected static final String XML_FILE_EXTENSION = "xml"; //$NON-NLS-1$
     protected final ISearchParameters searchParams;
 
     public AbstractSearchQueryOperation(ISearchParameters searchParams) {
@@ -101,29 +108,45 @@
     protected abstract boolean isFileThatMayHaveTheSearchedContenet(IFile file);
 
     protected boolean isXmlFileExtension(String fileExtension) {
-        return checkForFileExtension(fileExtension, "xml"); //$NON-NLS-1$
+        return checkForFileExtension(fileExtension, XML_FILE_EXTENSION);
     }
 
     protected boolean isWsdlFileExtension(String fileExtension) {
-        return checkForFileExtension(fileExtension, "wsdl"); //$NON-NLS-1$
+        return checkForFileExtension(fileExtension, WSDL_FILE_EXTENSION);
     }
 
     protected boolean isXsdFileExtension(String fileExtension) {
-        return checkForFileExtension(fileExtension, "xsd"); //$NON-NLS-1$
+        return checkForFileExtension(fileExtension, XSD_FILE_EXTENSION);
     }
 
     private boolean checkForFileExtension(String fileExtension, String searchedFileExtension) {
-        return fileExtension == null ? false : searchedFileExtension.equals(fileExtension.toLowerCase());
+        return fileExtension == null ? false : searchedFileExtension.equalsIgnoreCase(fileExtension);
     }
 
     protected abstract ITreeNode getRootTreeNode(Set<IFile> files);
 
-    protected IWsdlModelRoot getWsdlModelRootForFile(IFile file, ResourceSet resourceSet) {
-        WSDLResourceImpl resource = (WSDLResourceImpl) resourceSet.getResource(createFileUri(file), true);
-        Definition definition = resource.getDefinition();
+    protected IWsdlModelRoot getWsdlModelRootForFile(IFile file) {
+        Map<String, Object> extensionToFactoryMap = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap();
+        Object currentXmlResourceFactoryWithLowerCase = extensionToFactoryMap.get(XML_FILE_EXTENSION.toLowerCase());
+        Object currentXmlResourceFactoryWithUpperCase = extensionToFactoryMap.get(XML_FILE_EXTENSION.toUpperCase());
+        Object currentWsdlResourceFactoryWithUpperCase = extensionToFactoryMap.get(WSDL_FILE_EXTENSION.toUpperCase());
+        try {
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toLowerCase(), new WSDLResourceFactoryImpl());
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toUpperCase(), new WSDLResourceFactoryImpl());
+            extensionToFactoryMap.put(WSDL_FILE_EXTENSION.toUpperCase(), new WSDLResourceFactoryImpl());
 
-        IWsdlModelRoot modelRoot = WSDLFactory.getInstance().createWSDLModelRoot(definition);
-        return modelRoot;
+            ResourceSet resourceSet = new ResourceSetImpl();
+
+            WSDLResourceImpl resource = (WSDLResourceImpl) resourceSet.getResource(createFileUri(file), true);
+            Definition definition = resource.getDefinition();
+
+            IWsdlModelRoot modelRoot = WSDLFactory.getInstance().createWSDLModelRoot(definition);
+            return modelRoot;
+        } finally {
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toLowerCase(), currentXmlResourceFactoryWithLowerCase);
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toUpperCase(), currentXmlResourceFactoryWithUpperCase);
+            extensionToFactoryMap.put(WSDL_FILE_EXTENSION.toUpperCase(), currentWsdlResourceFactoryWithUpperCase);
+        }
     }
 
     protected URI createFileUri(IFile file) {
diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/wsdl/WsdlSearchQueryOperation.java b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/wsdl/WsdlSearchQueryOperation.java
index 4658522..1af0e8d 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/wsdl/WsdlSearchQueryOperation.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/wsdl/WsdlSearchQueryOperation.java
@@ -14,7 +14,6 @@
 import java.util.Set;
 
 import org.eclipse.core.resources.IFile;
-import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.platform.discovery.runtime.api.ISearchParameters;
 import org.eclipse.wst.sse.sieditor.model.api.IWsdlModelRoot;
 import org.eclipse.wst.sse.sieditor.model.wsdl.api.IServiceInterface;
@@ -46,11 +45,9 @@
     @Override
     protected ITreeNode getRootTreeNode(Set<IFile> files) {
         RootTreeNode rootTreeNode = new RootTreeNode();
-        final ResourceSetImpl resourceSet = new ResourceSetImpl();
-
         for (IFile file : files) {
             FileNode fileNode = new FileNode(file, rootTreeNode, false);
-            IWsdlModelRoot wsdlModelRoot = getWsdlModelRootForFile(file, resourceSet);
+            IWsdlModelRoot wsdlModelRoot = getWsdlModelRootForFile(file);
 
             if (isByNamespaceHierarchy() || isByFilesHierarchy()) {
                 NamespaceNode namespaceNode = new NamespaceNode(wsdlModelRoot.getDescription(), fileNode);
diff --git a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/xsd/XsdSearchQueryOperation.java b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/xsd/XsdSearchQueryOperation.java
index 1ac7517..0159d85 100644
--- a/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/xsd/XsdSearchQueryOperation.java
+++ b/plugins/org.eclipse.wst.sse.sieditor.search/src/org/eclipse/wst/sse/sieditor/search/provider/xsd/XsdSearchQueryOperation.java
@@ -12,9 +12,11 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Map;
 import java.util.Set;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
 import org.eclipse.platform.discovery.runtime.api.ISearchDestination;
@@ -41,6 +43,7 @@
 import org.eclipse.wst.sse.sieditor.ui.v2.factory.TreeNodeMapper;
 import org.eclipse.wst.sse.sieditor.ui.v2.nodes.ITreeNode;
 import org.eclipse.xsd.XSDSchema;
+import org.eclipse.xsd.util.XSDResourceFactoryImpl;
 import org.eclipse.xsd.util.XSDResourceImpl;
 
 public class XsdSearchQueryOperation extends AbstractSearchQueryOperation {
@@ -62,12 +65,11 @@
     protected ITreeNode getRootTreeNode(Set<IFile> files) {
         RootTreeNode rootTreeNode = new RootTreeNode();
         final TreeNodeMapper treeNodeMapper = new TreeNodeMapper();
-        final ResourceSet resourceSet = new ResourceSetImpl();
 
         for (IFile file : files) {
             FileNode fileNode = new FileNode(file, rootTreeNode, isXsdFileExtension(file.getFileExtension()));
 
-            Collection<ISchema> schemas = getSchemasFromFile(file, resourceSet);
+            Collection<ISchema> schemas = getSchemasFromFile(file);
             for (ISchema schema : schemas) {
                 if (isByNamespaceHierarchy() || isByFilesHierarchy()) {
                     NamespaceNode namespaceNode = new NamespaceNode(schema, fileNode);
@@ -86,33 +88,49 @@
         return rootTreeNode;
     }
 
-    private Collection<ISchema> getSchemasFromFile(IFile file, ResourceSet resourceSet) {
+    private Collection<ISchema> getSchemasFromFile(IFile file) {
         Collection<ISchema> schemasInFile = new ArrayList<ISchema>();
         String fileExtension = file.getFileExtension();
         if (isXsdFileExtension(fileExtension) || isXmlFileExtension(fileExtension)) {
-            ISchema schemaFromXsdFile = getSchemaFromXsdFile(file, resourceSet);
+            ISchema schemaFromXsdFile = getSchemaFromXsdFile(file);
             if (schemaFromXsdFile != null) {
                 schemasInFile.add(schemaFromXsdFile);
             }
         }
 
         if (isWsdlFileExtension(fileExtension) || isXmlFileExtension(fileExtension)) {
-            schemasInFile.addAll(getSchemasFromWsdl(file, resourceSet));
+            schemasInFile.addAll(getSchemasFromWsdl(file));
         }
 
         return schemasInFile;
     }
 
-    private Collection<ISchema> getSchemasFromWsdl(IFile file, ResourceSet resourceSet) {
-        IWsdlModelRoot modelRoot = getWsdlModelRootForFile(file, resourceSet);
+    private Collection<ISchema> getSchemasFromWsdl(IFile file) {
+        IWsdlModelRoot modelRoot = getWsdlModelRootForFile(file);
         return modelRoot.getDescription().getContainedSchemas();
     }
 
-    private ISchema getSchemaFromXsdFile(IFile file, ResourceSet resourceSet) {
-        XSDResourceImpl resource = (XSDResourceImpl) resourceSet.getResource(createFileUri(file), true);
-        XSDSchema schema = resource.getSchema();
-        IXSDModelRoot modelRoot = XSDFactory.getInstance().createXSDModelRoot(schema);
-        return modelRoot.getSchema();
+    private ISchema getSchemaFromXsdFile(IFile file) {
+        Map<String, Object> extensionToFactoryMap = Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap();
+        Object currentXmlResourceFactoryWithLowerCase = extensionToFactoryMap.get(XML_FILE_EXTENSION.toLowerCase());
+        Object currentXmlResourceFactoryWithUpperCase = extensionToFactoryMap.get(XML_FILE_EXTENSION.toUpperCase());
+        Object currentXsdResourceFactoryWithUpperCase = extensionToFactoryMap.get(XSD_FILE_EXTENSION.toUpperCase());
+        try {
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toLowerCase(), new XSDResourceFactoryImpl());
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toUpperCase(), new XSDResourceFactoryImpl());
+            extensionToFactoryMap.put(XSD_FILE_EXTENSION.toUpperCase(), new XSDResourceFactoryImpl());
+
+            ResourceSet resourceSet = new ResourceSetImpl();
+
+            XSDResourceImpl resource = (XSDResourceImpl) resourceSet.getResource(createFileUri(file), true);
+            XSDSchema schema = resource.getSchema();
+            IXSDModelRoot modelRoot = XSDFactory.getInstance().createXSDModelRoot(schema);
+            return modelRoot.getSchema();
+        } finally {
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toLowerCase(), currentXmlResourceFactoryWithLowerCase);
+            extensionToFactoryMap.put(XML_FILE_EXTENSION.toUpperCase(), currentXmlResourceFactoryWithUpperCase);
+            extensionToFactoryMap.put(XSD_FILE_EXTENSION.toUpperCase(), currentXsdResourceFactoryWithUpperCase);
+        }
     }
 
     private void addTypesToParentNode(ISchema schema, ITreeNodeWithCustomizableChildren parent, TreeNodeMapper treeNodeMapper) {
