diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainsAllLiteralsInEnum.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllLiteralsInEnum.java
similarity index 75%
rename from com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainsAllLiteralsInEnum.java
rename to com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllLiteralsInEnum.java
index ef76c93..84062ba 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainsAllLiteralsInEnum.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ContainAllLiteralsInEnum.java
@@ -8,14 +8,12 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
-import static com.google.eclipse.protobuf.scoping.IEObjectDescriptions.descriptionsIn;
 import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.scoping.IScope;
 import org.hamcrest.BaseMatcher;
 import org.hamcrest.Description;
 
@@ -25,21 +23,21 @@
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
-class ContainsAllLiteralsInEnum extends BaseMatcher<IScope> {
+class ContainAllLiteralsInEnum extends BaseMatcher<IEObjectDescriptions> {
 
   private final Enum anEnum;
 
-  static ContainsAllLiteralsInEnum containsAllLiteralsIn(Enum anEnum) {
-    return new ContainsAllLiteralsInEnum(anEnum);
+  static ContainAllLiteralsInEnum containAllLiteralsIn(Enum anEnum) {
+    return new ContainAllLiteralsInEnum(anEnum);
   }
   
-  private ContainsAllLiteralsInEnum(Enum anEnum) {
+  private ContainAllLiteralsInEnum(Enum anEnum) {
     this.anEnum = anEnum;
   }
   
   public boolean matches(Object arg) {
-    if (!(arg instanceof IScope)) return false;
-    IEObjectDescriptions descriptions = descriptionsIn((IScope) arg);
+    if (!(arg instanceof IEObjectDescriptions)) return false;
+    IEObjectDescriptions descriptions = (IEObjectDescriptions) arg;
     List<Literal> literals = allLiterals();
     if (descriptions.size() != literals.size()) return false;
     for (Literal literal : literals) {
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java
index ec596d8..4b4ab01 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/IEObjectDescriptions.java
@@ -24,7 +24,7 @@
     return new IEObjectDescriptions(scope);
   }
 
-  private final Map<String, IEObjectDescription> descriptions = new HashMap<String, IEObjectDescription>();
+  private final Map<String, IEObjectDescription> descriptions = new LinkedHashMap<String, IEObjectDescription>();
   
   private IEObjectDescriptions(IScope scope) {
     for (IEObjectDescription d : scope.getAllElements()) {
@@ -41,4 +41,8 @@
   int size() {
     return descriptions.size();
   }
+  
+  @Override public String toString() {
+    return descriptions.keySet().toString();
+  }
 }
diff --git a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
index bab8572..a0bef42 100644
--- a/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
+++ b/com.google.eclipse.protobuf.integration.test/src/com/google/eclipse/protobuf/scoping/ProtobufScopeProvider_scope_LiteralRef_literal_Test.java
@@ -13,7 +13,8 @@
 import static com.google.eclipse.protobuf.junit.model.find.Name.name;
 import static com.google.eclipse.protobuf.junit.model.find.OptionFinder.findOption;
 import static com.google.eclipse.protobuf.junit.model.find.Root.in;
-import static com.google.eclipse.protobuf.scoping.ContainsAllLiteralsInEnum.containsAllLiteralsIn;
+import static com.google.eclipse.protobuf.scoping.ContainAllLiteralsInEnum.containAllLiteralsIn;
+import static com.google.eclipse.protobuf.scoping.IEObjectDescriptions.descriptionsIn;
 import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.mock;
 
@@ -67,7 +68,7 @@
     FieldOption option = findFieldOption(name("default"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = findEnum(name("Type"), in(root));
-    assertThat(scope, containsAllLiteralsIn(typeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(typeEnum));
   }
   
   @Test public void should_provide_Literals_for_native_option() {
@@ -75,7 +76,7 @@
     Option option = findOption(name("optimize_for"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum optimizeModeEnum = descriptor().enumByName("OptimizeMode");
-    assertThat(scope, containsAllLiteralsIn(optimizeModeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(optimizeModeEnum));
   }
   
   @Test public void should_provide_Literals_for_custom_option() {
@@ -96,7 +97,7 @@
     Option option = findOption(name("type"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = findEnum(name("Type"), in(root));
-    assertThat(scope, containsAllLiteralsIn(typeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(typeEnum));
   }
 
   private static LiteralRef valueOf(Option option) {
@@ -112,7 +113,7 @@
     FieldOption option = findFieldOption(name("ctype"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum cTypeEnum = descriptor().enumByName("CType");
-    assertThat(scope, containsAllLiteralsIn(cTypeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(cTypeEnum));
   }
   
   private ProtoDescriptor descriptor() {
@@ -140,7 +141,7 @@
     FieldOption option = findFieldOption(name("type"), in(root));
     IScope scope = provider.scope_LiteralRef_literal(valueOf(option), reference);
     Enum typeEnum = findEnum(name("Type"), in(root));
-    assertThat(scope, containsAllLiteralsIn(typeEnum));
+    assertThat(descriptionsIn(scope), containAllLiteralsIn(typeEnum));
   }
 
   private static LiteralRef valueOf(FieldOption option) {
