diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_fileOptions_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_fileOptions_Test.java
index 3afe1bb..43ee6b3 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_fileOptions_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/scoping/Descriptor_fileOptions_Test.java
@@ -28,7 +28,7 @@
 
   @Rule public XtextRule xtext = new XtextRule();
 
-  private IProtoDescriptor descriptor;
+  private ProtoDescriptor descriptor;
 
   @Before public void setUp() {
     descriptor = xtext.getInstanceOf(ProtoDescriptor.class);
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
index 845fa54..ed93126 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/contentassist/ProtobufProposalProvider.java
@@ -106,7 +106,7 @@
   @Override public void completeOption_Value(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
     Option option = (Option) model;
-    IProtoDescriptor descriptor = descriptorProvider.get();
+    ProtoDescriptor descriptor = descriptorProvider.get();
     Enum enumType = descriptor.enumTypeOf(option);
     if (enumType != null) {
       proposeAndAccept(enumType, context, acceptor);
@@ -399,7 +399,7 @@
   @Override public void completeFieldOption_Value(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
     FieldOption option = (FieldOption) model;
-    IProtoDescriptor descriptor = descriptorProvider.get();
+    ProtoDescriptor descriptor = descriptorProvider.get();
     Enum enumType = descriptor.enumTypeOf(option);
     if (enumType != null) {
       proposeAndAccept(enumType, context, acceptor);
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IProtoDescriptor.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IProtoDescriptor.java
deleted file mode 100644
index 4560359..0000000
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IProtoDescriptor.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * 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.scoping;
-
-import java.util.Collection;
-
-import com.google.eclipse.protobuf.protobuf.*;
-import com.google.eclipse.protobuf.protobuf.Enum;
-
-/**
- * Contains the elements from descriptor.proto (provided with protobuf's library.)
- *
- * @author alruiz@google.com (Alex Ruiz)
- */
-public interface IProtoDescriptor {
-
-  /**
-   * Returns all the file-level options available. These are the options defined in
-   * {@code google/protobuf/descriptor.proto} (more details can be found
-   * <a href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @return all the file-level options available.
-   */
-  public abstract Collection<Property> fileOptions();
-
-  /**
-   * Looks up an option per name, as defined in {@code google/protobuf/descriptor.proto}
-   * (more details can be found <a
-   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @param name the name of the option to look for.
-   * @return the option whose name matches the given one or {@code null} if a matching option is not found.
-   */
-  public abstract Property lookupOption(String name);
-
-  /**
-   * Returns all the message-level options available. These are the options defined in
-   * {@code google/protobuf/descriptor.proto} (more details can be found
-   * <a href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @return all the message-level options available.
-   */
-  public abstract Collection<Property> messageOptions();
-
-  /**
-   * Returns all the field-level options available. These are the options defined in
-   * {@code google/protobuf/descriptor.proto} (more details can be found
-   * <a href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @return all the field-level options available.
-   */
-  public abstract Collection<Property> fieldOptions();
-
-  /**
-   * Looks up a field-level option per name. Field-level options are defined in {@code google/protobuf/descriptor.proto}
-   * (more details can be found <a
-   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @param name the name of the option to look for.
-   * @return the option whose name matches the given one or {@code null} if a matching option is not found.
-   */
-  public abstract Property lookupFieldOption(String name);
-
-  /**
-   * Returns the enum type of the given option, only if the given option is defined in
-   * {@code google/protobuf/descriptor.proto} and its type is enum (more details can be found <a
-   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @param option the given option.
-   * @return the enum type of the given option or {@code null} if the type of the given option is not enum.
-   */
-  public abstract Enum enumTypeOf(Option option);
-
-  /**
-   * Returns the enum type of the given option, only if the given option is defined in
-   * {@code google/protobuf/descriptor.proto} and its type is enum (more details can be found <a
-   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
-   * @param option the given option.
-   * @return the enum type of the given option or {@code null} if the type of the given option is not enum.
-   */
-  public abstract Enum enumTypeOf(FieldOption option);
-
-}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IProtoDescriptorSource.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IProtoDescriptorSource.java
new file mode 100644
index 0000000..319e45b
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/IProtoDescriptorSource.java
@@ -0,0 +1,37 @@
+/*
+ * 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.scoping;
+
+import com.google.inject.ImplementedBy;
+
+import org.eclipse.emf.common.util.URI;
+
+import java.io.*;
+
+/**
+ * Provides the contents of <code>{@link ProtoDescriptor}</code>.
+ * 
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@ImplementedBy(OssProtoDescriptorSource.class)
+public interface IProtoDescriptorSource {
+
+  /**
+   * Returns the URI of the resource containing the descriptor.
+   * @return the URI of the resource containing the descriptor.
+   */
+  URI uri();
+  
+  /**
+   * Returns the contents of the descriptor.
+   * @return the contents of the descriptor.
+   * @throws IOException if something goes wrong.
+   */
+  InputStream contents() throws IOException;
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OssProtoDescriptorSource.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OssProtoDescriptorSource.java
new file mode 100644
index 0000000..01492b4
--- /dev/null
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/OssProtoDescriptorSource.java
@@ -0,0 +1,37 @@
+/*
+ * 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.scoping;
+
+import com.google.inject.Singleton;
+
+import org.eclipse.emf.common.util.URI;
+
+import java.io.*;
+import java.net.URL;
+
+/**
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+@Singleton
+class OssProtoDescriptorSource implements IProtoDescriptorSource {
+
+  private static final String DESCRIPTOR_URL = "platform:/plugin/com.google.eclipse.protobuf/descriptor.proto";
+  
+  private static final URI DESCRIPTOR_URI = URI.createURI(DESCRIPTOR_URL);
+
+  public URI uri() {
+    return DESCRIPTOR_URI;
+  }
+
+  public InputStream contents() throws IOException {
+    URL url = new URL(DESCRIPTOR_URL);
+    return url.openConnection().getInputStream();
+  }
+
+}
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
index 618b2d4..31c4cf5 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptor.java
@@ -12,7 +12,6 @@
 import static com.google.eclipse.protobuf.scoping.OptionType.*;
 import static com.google.eclipse.protobuf.util.Closeables.close;
 import static java.util.Collections.unmodifiableCollection;
-import static org.eclipse.emf.common.util.URI.createURI;
 import static org.eclipse.xtext.EcoreUtil2.*;
 import static org.eclipse.xtext.util.CancelIndicator.NullImpl;
 import static org.eclipse.xtext.util.Strings.isEmpty;
@@ -26,8 +25,7 @@
 import org.eclipse.xtext.parser.*;
 import org.eclipse.xtext.resource.XtextResource;
 
-import java.io.*;
-import java.net.URL;
+import java.io.InputStreamReader;
 import java.util.*;
 
 /**
@@ -35,9 +33,8 @@
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class ProtoDescriptor implements IProtoDescriptor {
+public class ProtoDescriptor {
 
-  private static final String DESCRIPTOR_URI = "platform:/plugin/com.google.eclipse.protobuf/descriptor.proto";
   private static final Map<String, OptionType> OPTION_DEFINITION_BY_NAME = new HashMap<String, OptionType>();
   
   static {
@@ -54,13 +51,13 @@
 
   private final ModelNodes nodes;
 
-  @Inject public ProtoDescriptor(IParser parser, ModelNodes nodes) {
+  @Inject public ProtoDescriptor(IParser parser, IProtoDescriptorSource source, ModelNodes nodes) {
     this.nodes = nodes;
     addOptionTypes();
     InputStreamReader reader = null;
     try {
-      XtextResource resource = new XtextResource(createURI(DESCRIPTOR_URI));
-      reader = new InputStreamReader(globalScopeContents(), "UTF-8");
+      XtextResource resource = new XtextResource(source.uri());
+      reader = new InputStreamReader(source.contents(), "UTF-8");
       IParseResult result = parser.parse(reader);
       root = (Protobuf) result.getRootASTElement();
       resource.getContents().add(root);
@@ -79,11 +76,6 @@
       optionsByType.put(type, new LinkedHashMap<String, Property>());
   }
 
-  private static InputStream globalScopeContents() throws IOException {
-    URL url = new URL(DESCRIPTOR_URI);
-    return url.openConnection().getInputStream();
-  }
-
   private void initContents() {
     for (Message m : getAllContentsOfType(root, Message.class)) {
       OptionType type = OPTION_DEFINITION_BY_NAME.get(m.getName());
@@ -114,17 +106,28 @@
     return "uninterpreted_option".equals(property.getName());
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Returns all the file-level options available. These are the options defined in
+   * {@code google/protobuf/descriptor.proto} (more details can be found
+   * <a href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
+   * @return all the file-level options available.
+   */
   public Collection<Property> fileOptions() {
     return optionsOfType(FILE);
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Looks up an option per name, as defined in {@code google/protobuf/descriptor.proto}
+   * (more details can be found <a
+   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
+   * @param name the name of the option to look for.
+   * @return the option whose name matches the given one or {@code null} if a matching option is not found.
+   */
   public Property lookupOption(String name) {
     return lookupOption(name, FILE, MESSAGE, METHOD);
   }
   
-  public Property lookupOption(String name, OptionType...types) {
+  private Property lookupOption(String name, OptionType...types) {
     for (OptionType type : types) {
       Property p = lookupOption(name, type);
       if (p != null) return p;
@@ -132,7 +135,13 @@
     return null;
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Looks up a field-level option per name. Field-level options are defined in {@code google/protobuf/descriptor.proto}
+   * (more details can be found <a
+   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
+   * @param name the name of the option to look for.
+   * @return the option whose name matches the given one or {@code null} if a matching option is not found.
+   */
   public Property lookupFieldOption(String name) {
     return lookupOption(name, FIELD);
   }
@@ -141,12 +150,22 @@
     return optionsByType.get(type).get(name);
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Returns all the message-level options available. These are the options defined in
+   * {@code google/protobuf/descriptor.proto} (more details can be found
+   * <a href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
+   * @return all the message-level options available.
+   */
   public Collection<Property> messageOptions() {
     return optionsOfType(MESSAGE);
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Returns all the field-level options available. These are the options defined in
+   * {@code google/protobuf/descriptor.proto} (more details can be found
+   * <a href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
+   * @return all the field-level options available.
+   */
   public Collection<Property> fieldOptions() {
     return optionsOfType(FIELD);
   }
@@ -155,13 +174,25 @@
     return unmodifiableCollection(optionsByType.get(type).values());
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Returns the enum type of the given option, only if the given option is defined in
+   * {@code google/protobuf/descriptor.proto} and its type is enum (more details can be found <a
+   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
+   * @param option the given option.
+   * @return the enum type of the given option or {@code null} if the type of the given option is not enum.
+   */
   public Enum enumTypeOf(Option option) {
     String name = option.getName();
     return enumTypeOf(lookupOption(name));
   }
 
-  /** {@inheritDoc} */
+  /**
+   * Returns the enum type of the given option, only if the given option is defined in
+   * {@code google/protobuf/descriptor.proto} and its type is enum (more details can be found <a
+   * href=http://code.google.com/apis/protocolbuffers/docs/proto.html#options" target="_blank">here</a>.)
+   * @param option the given option.
+   * @return the enum type of the given option or {@code null} if the type of the given option is not enum.
+   */
   public Enum enumTypeOf(FieldOption option) {
     String name = option.getName();
     return enumTypeOf(lookupFieldOption(name));
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
index 82aef7f..b235efb 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtoDescriptorProvider.java
@@ -19,15 +19,16 @@
  * @author Alex Ruiz
  */
 @Singleton
-public class ProtoDescriptorProvider implements Provider<IProtoDescriptor> {
+public class ProtoDescriptorProvider implements Provider<ProtoDescriptor> {
 
   @Inject private IParser parser;
+  @Inject private IProtoDescriptorSource source;
   @Inject private ModelNodes nodes;
 
-  private IProtoDescriptor descriptor;
+  private ProtoDescriptor descriptor;
 
-  public synchronized IProtoDescriptor get() {
-    if (descriptor == null) descriptor = new ProtoDescriptor(parser, nodes);
+  public synchronized ProtoDescriptor get() {
+    if (descriptor == null) descriptor = new ProtoDescriptor(parser, source, nodes);
     return descriptor;
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
index 461b2a5..562a552 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider.java
@@ -170,7 +170,7 @@
   }
 
   private Enum enumTypeOfOption(EObject mayBeOption) {
-    IProtoDescriptor descriptor = descriptorProvider.get();
+    ProtoDescriptor descriptor = descriptorProvider.get();
     if (mayBeOption instanceof Option) return descriptor.enumTypeOf((Option) mayBeOption);
     if (mayBeOption instanceof FieldOption) return descriptor.enumTypeOf((FieldOption) mayBeOption);
     return null;
