diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java
index ec8697d..2fad391 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/UriEditorInput.java
@@ -22,9 +22,9 @@
   private final URI fileUri;
   private final String name;
 
-  public UriEditorInput(URI fileUri, String name) {
+  public UriEditorInput(URI fileUri) {
     this.fileUri = fileUri.trimFragment();
-    this.name = name;
+    name = this.fileUri.segment(this.fileUri.segmentCount() - 1);
   }
 
   @SuppressWarnings("rawtypes")
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java
index c8146ab..ed7d6ec 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/FileStoreDocumentContentsFactory.java
@@ -10,28 +10,18 @@
 
 import static com.google.eclipse.protobuf.ui.ProtobufUiModule.PLUGIN_ID;
 import static com.google.eclipse.protobuf.util.Closeables.close;
-import static com.google.eclipse.protobuf.util.Encodings.UTF_8;
-import static java.util.Collections.singletonMap;
 import static org.eclipse.core.runtime.IStatus.ERROR;
-import static org.eclipse.emf.common.util.URI.createURI;
-import static org.eclipse.emf.ecore.resource.ContentHandler.UNSPECIFIED_CONTENT_TYPE;
-import static org.eclipse.xtext.EcoreUtil2.resolveLazyCrossReferences;
-import static org.eclipse.xtext.resource.XtextResource.OPTION_ENCODING;
-import static org.eclipse.xtext.util.CancelIndicator.NullImpl;
 
 import java.io.*;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.Status;
-import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.ui.IEditorInput;
 import org.eclipse.ui.ide.FileStoreEditorInput;
 import org.eclipse.xtext.resource.XtextResource;
 import org.eclipse.xtext.ui.editor.model.XtextDocument;
-import org.eclipse.xtext.ui.resource.IResourceSetProvider;
-import org.eclipse.xtext.util.StringInputStream;
 
-import com.google.eclipse.protobuf.ui.util.Resources;
+import com.google.eclipse.protobuf.ui.resource.XtextResourceFactory;
 import com.google.inject.Inject;
 
 /**
@@ -39,10 +29,9 @@
  */
 class FileStoreDocumentContentsFactory implements DocumentContentsFactory {
 
-  @Inject private IResourceSetProvider resourceSetProvider;
-  @Inject private Resources resources;
-  @Inject private Files files;
   @Inject private ContentReader contentReader;
+  @Inject private UriEditorInputs files;
+  @Inject private XtextResourceFactory resourceFactory;
 
   public void createContents(XtextDocument document, Object element) throws CoreException {
     FileStoreEditorInput input = supportedEditorInputType().cast(element);
@@ -50,7 +39,7 @@
     try {
       String contents = contentsOf(file);
       document.set(contents);
-      XtextResource resource = createResource(file.toURI().toString(), new StringInputStream(contents));
+      XtextResource resource = resourceFactory.createResource(file.toURI().toString(), contents);
       document.setInput(resource);
     } catch (Throwable t) {
       String message = t.getMessage();
@@ -69,18 +58,6 @@
     }
   }
 
-  private XtextResource createResource(String uri, InputStream input) {
-    ResourceSet resourceSet = resourceSetProvider.get(resources.activeProject());
-    XtextResource resource = (XtextResource) resourceSet.createResource(createURI(uri), UNSPECIFIED_CONTENT_TYPE);
-    try {
-      resource.load(input, singletonMap(OPTION_ENCODING, UTF_8));
-    } catch (IOException e) {
-      throw new RuntimeException(e);
-    }
-    resolveLazyCrossReferences(resource, NullImpl);
-    return resource;
-  }
-
   public boolean supportsEditorInputType(IEditorInput input) {
     return supportedEditorInputType().isInstance(input);
   }
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java
index 027d3b3..1e9a52e 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriDocumentContentsFactory.java
@@ -20,11 +20,11 @@
 import org.eclipse.core.runtime.Status;
 import org.eclipse.emf.common.util.URI;
 import org.eclipse.ui.IEditorInput;
+import org.eclipse.xtext.resource.XtextResource;
 import org.eclipse.xtext.ui.editor.model.XtextDocument;
 
-import com.google.eclipse.protobuf.scoping.ProtoDescriptor;
-import com.google.eclipse.protobuf.scoping.ProtoDescriptorProvider;
 import com.google.eclipse.protobuf.ui.editor.UriEditorInput;
+import com.google.eclipse.protobuf.ui.resource.XtextResourceFactory;
 import com.google.inject.Inject;
 
 /**
@@ -32,20 +32,17 @@
  */
 class UriDocumentContentsFactory implements DocumentContentsFactory {
 
-  @Inject private ProtoDescriptorProvider descriptorProvider;
   @Inject private ContentReader contentReader;
+  @Inject private XtextResourceFactory resourceFactory;
 
   public void createContents(XtextDocument document, Object element) throws CoreException {
     UriEditorInput input = supportedEditorInputType().cast(element);
-    URI uri = input.getFileUri().trimFragment();
-    if (!descriptorProvider.descriptorLocation().equals(uri)) {
-      throw new UnsupportedOperationException("File to open is not descriptor.proto");
-    }
-    ProtoDescriptor descriptor = descriptorProvider.get();
+    URI uri = input.getFileUri();
     try {
       String contents = contentsOf(uri);
       document.set(contents);
-      document.setInput(descriptor.resource());
+      XtextResource resource = resourceFactory.createResource(uri, contents);
+      document.setInput(resource);
     } catch (Throwable t) {
       String message = t.getMessage();
       if (message == null) message = "";
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/Files.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriEditorInputs.java
similarity index 97%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/Files.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriEditorInputs.java
index 48252ce..905de36 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/Files.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/editor/model/UriEditorInputs.java
@@ -21,7 +21,7 @@
  * @author alruiz@google.com (Alex Ruiz)
  */
 @Singleton
-class Files {
+class UriEditorInputs {
 
   File fileFrom(IURIEditorInput input) {
     URI uri = input.getURI();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/XtextResourceFactory.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/XtextResourceFactory.java
new file mode 100644
index 0000000..584e464
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/resource/XtextResourceFactory.java
@@ -0,0 +1,67 @@
+/*
+ * Copyright (c) 2011 Google 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
+ */
+package com.google.eclipse.protobuf.ui.resource;
+
+import static com.google.eclipse.protobuf.util.Encodings.UTF_8;
+import static java.util.Collections.singletonMap;
+import static org.eclipse.emf.common.util.URI.createURI;
+import static org.eclipse.emf.ecore.resource.ContentHandler.UNSPECIFIED_CONTENT_TYPE;
+import static org.eclipse.xtext.EcoreUtil2.resolveLazyCrossReferences;
+import static org.eclipse.xtext.resource.XtextResource.OPTION_ENCODING;
+import static org.eclipse.xtext.util.CancelIndicator.NullImpl;
+
+import java.io.IOException;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.ResourceSet;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.ui.resource.IResourceSetProvider;
+import org.eclipse.xtext.util.StringInputStream;
+
+import com.google.eclipse.protobuf.ui.util.Resources;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
+/**
+ * Factory of <code>{@link XtextResource}</code>s.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton
+public class XtextResourceFactory {
+
+  @Inject private IResourceSetProvider resourceSetProvider;
+  @Inject private Resources resources;
+
+  /**
+   * Creates a new <code>{@link XtextResource}</code>.
+   * @param uri the URI of the file containing the EMF model.
+   * @param contents the contents of the file.
+   * @return the created {@code XtextResource}.
+   * @throws IOException if something goes wrong.
+   */
+  public XtextResource createResource(String uri, String contents) throws IOException {
+    return createResource(createURI(uri), contents);
+  }
+
+  /**
+   * Creates a new <code>{@link XtextResource}</code>.
+   * @param uri the URI of the file containing the EMF model.
+   * @param contents the contents of the file.
+   * @return the created {@code XtextResource}.
+   * @throws IOException if something goes wrong.
+   */
+  public XtextResource createResource(URI uri, String contents) throws IOException {
+    ResourceSet resourceSet = resourceSetProvider.get(resources.activeProject());
+    XtextResource resource = (XtextResource) resourceSet.createResource(uri, UNSPECIFIED_CONTENT_TYPE);
+    resource.load(new StringInputStream(contents), singletonMap(OPTION_ENCODING, UTF_8));
+    resolveLazyCrossReferences(resource, NullImpl);
+    return resource;
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
index 99a7eb8..966017a 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/util/Resources.java
@@ -93,7 +93,7 @@
   }
 
   public IEditorPart openProtoFileInPlugin(URI uri) throws PartInitException {
-    IEditorInput editorInput = new UriEditorInput(uri, "descriptor.proto");
+    IEditorInput editorInput = new UriEditorInput(uri);
     return openFile(editorInput);
   }
 
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
index a27e34a..fae683b 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
@@ -22,7 +22,8 @@
 
 import com.google.eclipse.protobuf.protobuf.*;
 import com.google.eclipse.protobuf.protobuf.Package;
-import com.google.eclipse.protobuf.util.*;
+import com.google.eclipse.protobuf.util.FieldOptions;
+import com.google.eclipse.protobuf.util.Properties;
 import com.google.inject.Inject;
 
 /**
@@ -33,7 +34,6 @@
   @Inject private FieldOptions fieldOptions;
   @Inject private ImportUriResolver uriResolver;
   @Inject private IQualifiedNameProvider qualifiedNameProvider;
-  @Inject private Imports imports;
   @Inject private Properties properties;
 
   @Check public void checkDefaultValueType(FieldOption option) {
