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 b0b7f57..d524df7 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
@@ -8,14 +8,6 @@
  */
 package com.google.eclipse.protobuf.ui.contentassist;
 
-import static java.lang.String.valueOf;
-import static java.util.Collections.emptyList;
-import static java.util.Collections.emptySet;
-
-import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
-import static org.eclipse.xtext.util.Strings.isEmpty;
-import static org.eclipse.xtext.util.Strings.toFirstLower;
-
 import static com.google.common.collect.Lists.newArrayList;
 import static com.google.eclipse.protobuf.grammar.CommonKeyword.CLOSING_BRACKET;
 import static com.google.eclipse.protobuf.grammar.CommonKeyword.DEFAULT;
@@ -38,24 +30,12 @@
 import static com.google.eclipse.protobuf.ui.grammar.CompoundElement.EQUAL_PROTO2_IN_QUOTES;
 import static com.google.eclipse.protobuf.ui.grammar.CompoundElement.PROTO2_IN_QUOTES;
 import static com.google.eclipse.protobuf.util.CommonWords.space;
-
-import java.util.Collection;
-import java.util.List;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.jface.text.contentassist.ICompletionProposal;
-import org.eclipse.jface.viewers.StyledString;
-import org.eclipse.swt.custom.StyledText;
-import org.eclipse.swt.graphics.Image;
-import org.eclipse.xtext.Assignment;
-import org.eclipse.xtext.Keyword;
-import org.eclipse.xtext.RuleCall;
-import org.eclipse.xtext.naming.QualifiedName;
-import org.eclipse.xtext.resource.IEObjectDescription;
-import org.eclipse.xtext.ui.PluginImageHelper;
-import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
-import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
-import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+import static java.lang.String.valueOf;
+import static java.util.Collections.emptyList;
+import static java.util.Collections.emptySet;
+import static org.eclipse.xtext.EcoreUtil2.getAllContentsOfType;
+import static org.eclipse.xtext.util.Strings.isEmpty;
+import static org.eclipse.xtext.util.Strings.toFirstLower;
 
 import com.google.eclipse.protobuf.grammar.CommonKeyword;
 import com.google.eclipse.protobuf.model.util.IndexedElements;
@@ -90,6 +70,24 @@
 import com.google.eclipse.protobuf.ui.labeling.Images;
 import com.google.inject.Inject;
 
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.swt.custom.StyledText;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.xtext.Assignment;
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.naming.QualifiedName;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.ui.PluginImageHelper;
+import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+
+import java.util.Collection;
+import java.util.List;
+
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
@@ -696,7 +694,10 @@
       SimpleValueField field = (SimpleValueField) model;
       FieldName name = field.getName();
       if (name != null) {
-        proposeFieldValue(name.getTarget(), context, acceptor);
+        IndexedElement target = name.getTarget();
+        if (target instanceof MessageField) {
+          proposeFieldValue((MessageField) target, context, acceptor);
+        }
       }
     }
   }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
index cfb6a0b..eb022ea 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/Protobuf.xtext
@@ -212,13 +212,13 @@
 // { foo: 1, bar: 2 }
 ComplexValueCurlyBracket:
   '{'
-  (fields+=ValueField (',')? (fields+=ValueField (',')?)*)?
+  fields+=ValueField ((',')? fields+=ValueField)* (',')?
   '}';
-  
+
 // < foo: 1, bar: 2 >
 ComplexValueAngleBracket:
   '<'
-  (fields+=ValueField (',')? (fields+=ValueField (',')?)*)?
+  fields+=ValueField ((',')? fields+=ValueField)* (',')?
   '>';
 
 ValueField:
@@ -234,10 +234,10 @@
   NormalFieldName | ExtensionFieldName;
 
 NormalFieldName:
-  target=[MessageField|Name];
+  target=[IndexedElement|Name];
 
 ExtensionFieldName:
-  '[' target=[MessageField|QualifiedName] ']';
+  '[' target=[IndexedElement|QualifiedName] ']';
 
 QualifiedName:
   '.'? SafeId ('.' (WS)* SafeId)*;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldNameFinder.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldNameFinder.java
index b78b18a..c5c7ff0 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldNameFinder.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/CustomOptionFieldNameFinder.java
@@ -10,20 +10,19 @@
 
 import static java.util.Collections.emptySet;
 
-import java.util.Collection;
-
-import org.eclipse.emf.ecore.EObject;
-import org.eclipse.xtext.resource.IEObjectDescription;
-
 import com.google.eclipse.protobuf.model.util.Options;
 import com.google.eclipse.protobuf.protobuf.AbstractCustomOption;
 import com.google.eclipse.protobuf.protobuf.ComplexValue;
 import com.google.eclipse.protobuf.protobuf.ComplexValueField;
 import com.google.eclipse.protobuf.protobuf.FieldName;
 import com.google.eclipse.protobuf.protobuf.IndexedElement;
-import com.google.eclipse.protobuf.protobuf.MessageField;
 import com.google.inject.Inject;
 
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.resource.IEObjectDescription;
+
+import java.util.Collection;
+
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -31,14 +30,14 @@
   @Inject private Options options;
 
   Collection<IEObjectDescription> findFieldNamesSources(ComplexValue value, FinderStrategy strategy) {
-    MessageField source = sourceOf(value);
+    IndexedElement source = sourceOf(value);
     if (source == null) {
       return emptySet();
     }
     return strategy.findMessageFields(source);
   }
 
-  private MessageField sourceOf(ComplexValue value) {
+  private IndexedElement sourceOf(ComplexValue value) {
     IndexedElement source = null;
     EObject container = value.eContainer();
     if (container instanceof AbstractCustomOption) {
@@ -48,15 +47,15 @@
     if (container instanceof ComplexValueField) {
       source = sourceOfNameOf((ComplexValueField) container);
     }
-    return (source instanceof MessageField) ? (MessageField) source : null;
+    return source;
   }
 
-  private MessageField sourceOfNameOf(ComplexValueField field) {
+  private IndexedElement sourceOfNameOf(ComplexValueField field) {
     FieldName name = field.getName();
     return (name == null) ? null : name.getTarget();
   }
 
   static interface FinderStrategy {
-    Collection<IEObjectDescription> findMessageFields(MessageField reference);
+    Collection<IEObjectDescription> findMessageFields(IndexedElement reference);
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldNameFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldNameFinderStrategy.java
index f9e1a71..39cbfbd 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldNameFinderStrategy.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/ExtensionFieldNameFinderStrategy.java
@@ -15,10 +15,13 @@
 
 import org.eclipse.xtext.resource.IEObjectDescription;
 
+import com.google.common.base.Strings;
 import com.google.eclipse.protobuf.model.util.MessageFields;
 import com.google.eclipse.protobuf.model.util.Messages;
 import com.google.eclipse.protobuf.model.util.ModelObjects;
 import com.google.eclipse.protobuf.naming.NormalNamingStrategy;
+import com.google.eclipse.protobuf.protobuf.Group;
+import com.google.eclipse.protobuf.protobuf.IndexedElement;
 import com.google.eclipse.protobuf.protobuf.Message;
 import com.google.eclipse.protobuf.protobuf.MessageElement;
 import com.google.eclipse.protobuf.protobuf.MessageField;
@@ -35,16 +38,22 @@
   @Inject private NormalNamingStrategy namingStrategy;
   @Inject private QualifiedNameDescriptions qualifiedNameDescriptions;
 
-  @Override public Collection<IEObjectDescription> findMessageFields(MessageField reference) {
+  @Override public Collection<IEObjectDescription> findMessageFields(IndexedElement reference) {
     Set<IEObjectDescription> descriptions = newHashSet();
-    Message type = messageFields.messageTypeOf(reference);
-    // check first in descriptor.proto
-    for (TypeExtension extension : messages.extensionsOf(type, modelObjects.rootOf(reference))) {
-      for (MessageElement element : extension.getElements()) {
-        if (!(element instanceof MessageField)) {
-          continue;
+    if (reference instanceof MessageField) {
+      Message type = messageFields.messageTypeOf((MessageField) reference);
+      // check first in descriptor.proto
+      for (TypeExtension extension : messages.extensionsOf(type, modelObjects.rootOf(reference))) {
+        for (MessageElement element : extension.getElements()) {
+          if (element instanceof IndexedElement) {
+            descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(element, namingStrategy));
+          }
         }
-        descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(element, namingStrategy));
+      }
+    } else if (reference instanceof Group) {
+      String name = ((Group) reference).getName();
+      if (!Strings.isNullOrEmpty(name)) {
+        descriptions.addAll(qualifiedNameDescriptions.qualifiedNames(reference, namingStrategy));
       }
     }
     return descriptions;
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NormalFieldNameFinderStrategy.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NormalFieldNameFinderStrategy.java
index f0cb8b8..00ac058 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NormalFieldNameFinderStrategy.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/scoping/NormalFieldNameFinderStrategy.java
@@ -8,34 +8,47 @@
  */
 package com.google.eclipse.protobuf.scoping;
 
+import static com.google.common.collect.Sets.newHashSet;
 import static org.eclipse.xtext.resource.EObjectDescription.create;
 
-import static com.google.common.collect.Sets.newHashSet;
+import com.google.common.base.Strings;
+import com.google.eclipse.protobuf.model.util.MessageFields;
+import com.google.eclipse.protobuf.protobuf.Group;
+import com.google.eclipse.protobuf.protobuf.IndexedElement;
+import com.google.eclipse.protobuf.protobuf.MessageField;
+import com.google.inject.Inject;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.resource.IEObjectDescription;
 
 import java.util.Collection;
 import java.util.Set;
 
-import org.eclipse.xtext.resource.IEObjectDescription;
-
-import com.google.eclipse.protobuf.model.util.MessageFields;
-import com.google.eclipse.protobuf.protobuf.Message;
-import com.google.eclipse.protobuf.protobuf.MessageElement;
-import com.google.eclipse.protobuf.protobuf.MessageField;
-import com.google.inject.Inject;
-
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 class NormalFieldNameFinderStrategy implements CustomOptionFieldNameFinder.FinderStrategy {
   @Inject private MessageFields messageFields;
 
-  @Override public Collection<IEObjectDescription> findMessageFields(MessageField reference) {
+  @Override public Collection<IEObjectDescription> findMessageFields(IndexedElement reference) {
     Set<IEObjectDescription> descriptions = newHashSet();
-    Message type = messageFields.messageTypeOf(reference);
-    for (MessageElement element : type.getElements()) {
-      if (element instanceof MessageField) {
-        String name = ((MessageField) element).getName();
-        descriptions.add(create(name, element));
+    Iterable<? extends EObject> elements = reference instanceof Group 
+        ? ((Group) reference).getElements()
+        : reference instanceof MessageField 
+            ? messageFields.messageTypeOf((MessageField) reference).getElements()
+            : null;
+
+    if (elements != null) {
+      for (EObject element : elements) {
+        if (element instanceof MessageField) {
+          String name = ((MessageField) element).getName();
+          descriptions.add(create(name, element));
+        } else if (element instanceof Group) {
+          String name = ((Group) element).getName();
+          if (!Strings.isNullOrEmpty(name)) {
+            descriptions.add(create(name, element));
+          }
+        }
       }
     }
     return descriptions;
