diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
index c82b6eb..d5a7c5f 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.java
@@ -15,17 +15,17 @@
  */
 public class Messages extends NLS {
 
+  public static String expectedFieldName;
+  public static String expectedFieldNumber;
+  public static String expectedSyntaxIdentifier;
+  public static String fieldNumberAlreadyUsed;
+  public static String fieldNumbersMustBePositive;
+  public static String missingFieldNumber;
+  public static String unrecognizedSyntaxIdentifier;
+
   static {
     Class<Messages> targetType = Messages.class;
     NLS.initializeMessages(targetType.getName(), targetType);
   }
-
   private Messages() {}
-
-  public static String Error_expectedFieldName;
-  public static String Error_expectedFieldNumber;
-  public static String Error_missingFieldNumber;
-  public static String Error_fieldNumbersMustBePositive;
-  public static String Error_unrecognizedSyntaxIdentifier;
-  public static String Error_expectedSyntaxIdentifier;
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
index dcb7afe..a2d416e 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/Messages.properties
@@ -1,6 +1,7 @@
-Error_expectedFieldName = Expected field name.
-Error_expectedFieldNumber = Expected field number.
-Error_missingFieldNumber = Missing field number.
-Error_fieldNumbersMustBePositive = Field numbers must be positive integers.
-Error_unrecognizedSyntaxIdentifier = Unrecognized syntax identifier \"%s\".  This parser only recognizes \"proto2\".
-Error_expectedSyntaxIdentifier = Expected syntax identifier.
+expectedFieldName = Expected field name.
+expectedFieldNumber = Expected field number.
+missingFieldNumber = Missing field number.
+fieldNumberAlreadyUsed = Field number %d has already been used in \"%s\" by field \"%s\".
+fieldNumbersMustBePositive = Field numbers must be positive integers.
+unrecognizedSyntaxIdentifier = Unrecognized syntax identifier \"%s\".  This parser only recognizes \"proto2\".
+expectedSyntaxIdentifier = Expected syntax identifier.
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
index 84bd3ba..04b514f 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufJavaValidator.java
@@ -8,34 +8,63 @@
  */
 package com.google.eclipse.protobuf.validation;
 
+import static com.google.eclipse.protobuf.protobuf.ProtobufPackage.Literals.*;
 import static com.google.eclipse.protobuf.validation.Messages.*;
 import static java.lang.String.format;
 
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.naming.*;
 import org.eclipse.xtext.validation.Check;
 
 import com.google.eclipse.protobuf.protobuf.*;
+import com.google.inject.Inject;
 
 /**
  * @author alruiz@google.com (Alex Ruiz)
  */
 public class ProtobufJavaValidator extends AbstractProtobufJavaValidator {
 
+  @Inject private IQualifiedNameProvider qualifiedNameProvider;
+
+  @Check public void checkTagNumberIsDuplicated(Property property) {
+    if (isNameNull(property)) return; // we already show an error if name is null, no need to go further.
+    int index = property.getIndex();
+    EObject container = property.eContainer();
+    if (container instanceof Message) {
+      Message message = (Message) container;
+      for (MessageElement element : message.getElements()) {
+        if (!(element instanceof Property)) continue;
+        Property p = (Property) element;
+        if (p == property) break;
+        if (p.getIndex() != index) continue;
+        QualifiedName messageName = qualifiedNameProvider.getFullyQualifiedName(message);
+        String msg = format(fieldNumberAlreadyUsed, index, messageName.toString(), p.getName());
+        error(msg, PROPERTY__INDEX);
+        break;
+      }
+    }
+  }
+
   /**
    * Creates an error if the tag number of the given property is less than zero.
    * @param property the given property.
    */
   @Check public void checkTagNumberIsGreaterThanZero(Property property) {
-    if (property.getName() == null) return; // we already show an error if name is null, no need to go further.
+    if (isNameNull(property)) return; // we already show an error if name is null, no need to go further.
     int index = property.getIndex();
     if (index > 0) return;
-    String msg = (index == 0) ? Error_fieldNumbersMustBePositive : Error_expectedFieldNumber;
-    error(msg, property.eClass().getEStructuralFeature("index"));
+    String msg = (index == 0) ? fieldNumbersMustBePositive : expectedFieldNumber;
+    error(msg, PROPERTY__INDEX);
+  }
+
+  private boolean isNameNull(Property property) {
+    return property.getName() == null;
   }
 
   @Check public void checkSyntaxIsProto2(Syntax syntax) {
     String name = syntax.getName();
     if ("proto2".equals(name)) return;
-    String msg = (name == null) ? Error_expectedSyntaxIdentifier : format(Error_unrecognizedSyntaxIdentifier, name);
-    error(msg, syntax.eClass().getEStructuralFeature("name"));
+    String msg = (name == null) ? expectedSyntaxIdentifier : format(unrecognizedSyntaxIdentifier, name);
+    error(msg, SYNTAX__NAME);
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
index f22837a..a67b593 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/validation/ProtobufSyntaxErrorMessageProvider.java
@@ -34,9 +34,9 @@
 
   private String mapToProtocMessage(String message, Property property) {
     if (message.contains("RULE_ID") && property.getName() == null)
-      return Error_expectedFieldName;
+      return expectedFieldName;
     if (message.equals("mismatched input ';' expecting '='") && property.getIndex() == 0)
-      return Error_missingFieldNumber;
+      return missingFieldNumber;
     return message;
   }
 
