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 d32d6d5..53bcd64 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
@@ -40,7 +40,7 @@
 
   @Inject private CompoundElements compoundElements;
   @Inject private EObjectFinder finder;
-  @Inject private Globals globalScope;
+  @Inject private Globals globals;
   @Inject private PluginImageHelper imageHelper;
   @Inject private Images imageRegistry;
   @Inject private Keywords keywords;
@@ -58,7 +58,7 @@
   }
 
   private void proposeCommonFileOptions(ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-    for (Property fileOption : globalScope.fileOptions()) {
+    for (Property fileOption : globals.fileOptions()) {
       String displayString = fileOption.getName();
       String proposalText = displayString + " " + keywords.equalSign().getValue() + " ";
       boolean isStringOption = properties.isString(fileOption);
@@ -77,10 +77,10 @@
   @Override public void completeOption_Value(EObject model, Assignment assignment, ContentAssistContext context,
       ICompletionProposalAcceptor acceptor) {
     Option option = (Option) model;
-    Property fileOption = globalScope.lookupFileOption(option.getName());
+    Property fileOption = globals.lookupFileOption(option.getName());
     if (fileOption == null) return;
-    if (globalScope.isOptimizeForOption(option)) {
-      proposeAndAccept(globalScope.optimizedMode(), context, acceptor);
+    if (globals.isOptimizeForOption(option)) {
+      proposeAndAccept(globals.optimizedMode(), context, acceptor);
       return;
     }
     if (properties.isString(fileOption)) {
@@ -173,7 +173,7 @@
     EObject model = context.getCurrentModel();
     if (model instanceof Property) return properties.isBool((Property) model);
     if (model instanceof Option) {
-      Property fileOption = globalScope.lookupFileOption(((Option) model).getName());
+      Property fileOption = globals.lookupFileOption(((Option) model).getName());
       return fileOption != null && properties.isBool(fileOption);
     }
     return false;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/Globals.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/Globals.java
index e4194a8..9e1030c 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/Globals.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/Globals.java
@@ -9,11 +9,12 @@
 package com.google.eclipse.protobuf.scoping;
 
 import static java.util.Collections.unmodifiableCollection;
+import static org.eclipse.emf.common.util.URI.createURI;
+import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
 
 import java.io.*;
 import java.util.*;
 
-import org.eclipse.emf.common.util.URI;
 import org.eclipse.xtext.parser.IParseResult;
 import org.eclipse.xtext.parser.IParser;
 import org.eclipse.xtext.resource.XtextResource;
@@ -36,14 +37,14 @@
   private Protobuf root;
 
   private boolean initialized;
-  private Map<String, Property> fileOptions = new LinkedHashMap<String, Property>();
+  private final Map<String, Property> fileOptions = new LinkedHashMap<String, Property>();
   private Enum optimizedMode;
 
   @Inject EObjectFinder finder;
 
   @Inject public Globals(IParser parser) {
     try {
-      XtextResource resource = new XtextResource(URI.createURI(""));
+      XtextResource resource = new XtextResource(createURI("globals.proto"));
       IParseResult result = parser.parse(new InputStreamReader(globalScopeContents(), "UTF-8"));
       root = (Protobuf) result.getRootASTElement();
       resource.getContents().add(root);
@@ -95,12 +96,9 @@
   }
 
   private Message fileOptionsMessage() {
-    for (ProtobufElement e : root.getElements()) {
-      if (!(e instanceof Message)) continue;
-      Message m = (Message) e;
+    for (Message m : getAllContentsOfType(root, Message.class))
       if ("FileOptions".equals(m.getName())) return m;
-    }
-    return null;
+    throw new IllegalStateException("Unable to find message 'FileOptions'");
   }
 
   private void addFileOption(Property p) {
