diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java
index 2732377..195f33f 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForIndexConflicts_Test.java
@@ -224,4 +224,34 @@
   private void verifyError(String message, EObject errorSource, EStructuralFeature errorFeature) {
     verify(messageAcceptor).acceptError(message, errorSource, errorFeature, -1, null);
   }
+
+  // syntax = "proto2";
+  //
+  // message Person {
+  //   group foo = 10 {
+  //     reserved 1 to 3;
+  //     optional bool in_same_group = 1;
+  //   }
+  //   optional bool outside_group = 2;
+  //   group bar = 20 {
+  //     optional bool in_other_group = 3;
+  //   }
+  // }
+  @Test public void should_error_on_conflict_with_reserved_in_group() {
+    validator.checkForIndexConflicts(xtext.findFirst(Message.class));
+    List<MessageField> messageFields = xtext.findAll(MessageField.class);
+    verifyError(
+        "Tag number 1 conflicts with reserved 1 to 3.",
+        messageFields.get(0),
+        ProtobufPackage.Literals.MESSAGE_FIELD__INDEX);
+    verifyError(
+        "Tag number 2 conflicts with reserved 1 to 3.",
+        messageFields.get(1),
+        ProtobufPackage.Literals.MESSAGE_FIELD__INDEX);
+    verifyError(
+        "Tag number 3 conflicts with reserved 1 to 3.",
+        messageFields.get(2),
+        ProtobufPackage.Literals.MESSAGE_FIELD__INDEX);
+    verifyNoMoreInteractions(messageAcceptor);
+  }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java
index 074c5ea..c934b8a 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator_checkForReservedNameConflicts_Test.java
@@ -10,6 +10,7 @@
 
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.verifyZeroInteractions;
 import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule;
 import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith;
@@ -98,6 +99,36 @@
     verifyZeroInteractions(messageAcceptor);
   }
 
+  // syntax = "proto2";
+  //
+  // message Person {
+  //   group foo = 10 {
+  //     reserved "in_same_group", "outside_group", "in_other_group";
+  //     optional bool in_same_group = 1;
+  //   }
+  //   optional bool outside_group = 2;
+  //   group bar = 20 {
+  //     optional bool in_other_group = 3;
+  //   }
+  // }
+  @Test public void should_error_on_conflict_with_reserved_in_group() {
+    validator.checkForReservedNameConflicts(xtext.findFirst(Message.class));
+    List<MessageField> messageFields = xtext.findAll(MessageField.class);
+    verifyError(
+        "Name \"in_same_group\" conflicts with reserved \"in_same_group\".",
+        messageFields.get(0),
+        ProtobufPackage.Literals.MESSAGE_FIELD__NAME);
+    verifyError(
+        "Name \"outside_group\" conflicts with reserved \"outside_group\".",
+        messageFields.get(1),
+        ProtobufPackage.Literals.MESSAGE_FIELD__NAME);
+    verifyError(
+        "Name \"in_other_group\" conflicts with reserved \"in_other_group\".",
+        messageFields.get(2),
+        ProtobufPackage.Literals.MESSAGE_FIELD__NAME);
+    verifyNoMoreInteractions(messageAcceptor);
+  }
+
   private void verifyError(String message, EObject errorSource) {
     verifyError(message, errorSource, null);
   }
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 05242a4..1017681 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
@@ -73,7 +73,7 @@
   '}' (';')?;
 
 GroupElement:
-  =>Option | MessageField | ComplexType | TypeExtension | Extensions;
+  =>Option | MessageField | ComplexType | TypeExtension | Extensions | Reserved;
 
 OneOf:
   (isRepeated?='repeated')? =>'oneof' name=Name '{'
