diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter_toValue_Test.java
similarity index 67%
rename from com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_Test.java
rename to com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter_toValue_Test.java
index 03e58d8..6804161 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter_toValue_Test.java
@@ -8,6 +8,7 @@
  */
 package com.google.eclipse.protobuf.conversion;
 
+import static java.lang.Double.*;
 import static java.util.Arrays.asList;
 import static org.hamcrest.core.IsEqual.equalTo;
 import static org.junit.Assert.assertThat;
@@ -24,45 +25,47 @@
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 
 /**
- * Tests for <code>{@link FLOATValueConverter#toValue(String, INode)}</code>.
+ * Tests for <code>{@link DOUBLEValueConverter#toValue(String, INode)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
 @RunWith(Parameterized.class)
-public class FLOATValueConverter_toValue_Test {
+public class DOUBLEValueConverter_toValue_Test {
 
   @Rule public XtextRule xtext = new XtextRule();
 
   private final String input;
-  private final Float expected;
+  private final Double expected;
 
   @Parameters
   public static Collection<Object[]> parameters() {
     return asList(new Object[][] {
-      { "52e3", 52e3F },
-      { "52E3", 52e3F },
-      { "6e-3", 0.006F },
-      { "6.8", 6.8F },
-      { "-3.1", -3.1F },
-      { ".3", 0.3F }
+      { "52e3", 52e3D },
+      { "52E3", 52e3D },
+      { "6e-3", 0.006D },
+      { "6.8", 6.8D },
+      { "-3.1", -3.1D },
+      { ".3", 0.3D },
+      { "nan", NaN },
+      { "inf", POSITIVE_INFINITY }
     });
   }
 
-  public FLOATValueConverter_toValue_Test(String input, Float expected) {
+  public DOUBLEValueConverter_toValue_Test(String input, Double expected) {
     this.input = input;
     this.expected = expected;
   }
 
-  private FLOATValueConverter converter;
+  private DOUBLEValueConverter converter;
   private INode node;
 
   @Before public void setUp() {
     node = mock(INode.class);
-    converter = xtext.injector().getInstance(FLOATValueConverter.class);
+    converter = xtext.injector().getInstance(DOUBLEValueConverter.class);
   }
 
   @Test public void should_parse_hexadecimal_number() {
-    Float value = converter.toValue(input, node);
+    Double value = converter.toValue(input, node);
     assertThat(value, equalTo(expected));
   }
 }
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java
index a2957f4..7dc34e3 100644
--- a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter_toValue_withInvalidInput_Test.java
@@ -22,7 +22,7 @@
 import com.google.eclipse.protobuf.junit.core.XtextRule;
 
 /**
- * Tests for <code>{@link FLOATValueConverter#toValue(String, INode)}</code>.
+ * Tests for <code>{@link DOUBLEValueConverter#toValue(String, INode)}</code>.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
@@ -31,12 +31,12 @@
   @Rule public XtextRule xtext = new XtextRule();
   @Rule public ExpectedException thrown = none();
 
-  private FLOATValueConverter converter;
+  private DOUBLEValueConverter converter;
   private INode node;
 
   @Before public void setUp() {
     node = mock(INode.class);
-    converter = xtext.injector().getInstance(FLOATValueConverter.class);
+    converter = xtext.injector().getInstance(DOUBLEValueConverter.class);
   }
 
   @Test public void should_throw_error_if_input_is_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 84ba83c..ad6e825 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
@@ -106,7 +106,7 @@
   name=Name ':' value=SimpleRef;
 
 SimpleRef:
-	LiteralRef | BooleanRef | NumberRef | StringRef | Nan;
+	LiteralRef | BooleanRef | NumberRef | StringRef;
 
 LiteralRef:
   literal=[Literal];
@@ -119,7 +119,7 @@
   | false;
 
 NumberRef:
-  HexRef | LongRef | FloatRef;
+  HexRef | LongRef | DoubleRef;
 
 HexRef:
   hex=HEX;
@@ -130,11 +130,11 @@
 terminal LONG returns ecore::ELong:
   ('-')? (NUMBER)+;
 
-FloatRef:
-  float=FLOAT;
+DoubleRef:
+  double=DOUBLE;
 
-terminal FLOAT returns ecore::EFloat:
-  ('-')? (NUMBER)* ('.' (NUMBER)+)? (('e'|'E')('-')? (NUMBER)+)?;
+terminal DOUBLE returns ecore::EDouble:
+  (('-')? (NUMBER)* ('.' (NUMBER)+)? (('e'|'E')('-')? (NUMBER)+)?) | 'nan' | 'inf';
 
 StringRef:
   string=STRING;
@@ -147,9 +147,6 @@
 
 terminal UNICODE_OCTAL:
   ('0'..'3')('0'..'7')('0'..'7');
-  
-Nan:
-  number='nan';
 
 Enum:
   'enum' name=Name '{'
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter.java
similarity index 72%
rename from com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter.java
rename to com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter.java
index 930b070..cec6067 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/FLOATValueConverter.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/DOUBLEValueConverter.java
@@ -8,6 +8,8 @@
  */
 package com.google.eclipse.protobuf.conversion;
 
+import static java.lang.Double.*;
+import static java.lang.Double.NaN;
 import static org.eclipse.xtext.util.Strings.isEmpty;
 
 import org.eclipse.xtext.conversion.ValueConverterException;
@@ -15,11 +17,11 @@
 import org.eclipse.xtext.nodemodel.INode;
 
 /**
- * Converts floating-point numbers to {@code float}s.
+ * Converts floating-point numbers to {@code double}s.
  *
  * @author alruiz@google.com (Alex Ruiz)
  */
-public class FLOATValueConverter extends AbstractLexerBasedConverter<Float> {
+public class DOUBLEValueConverter extends AbstractLexerBasedConverter<Double> {
 
   /**
    * Creates an {@code float} from the given input, if the given input represents a floating-point number.
@@ -29,16 +31,18 @@
    * @throws ValueConverterException if the given input is {@code null}, empty or does not represent a floating-point 
    * number.
    */
-  public Float toValue(String string, INode node) throws ValueConverterException {
-    if (isEmpty(string)) throw new ValueConverterException("Couldn't convert empty string to float.", node, null);
+  public Double toValue(String string, INode node) throws ValueConverterException {
+    if (isEmpty(string)) throw new ValueConverterException("Couldn't convert empty string to double.", node, null);
+    if ("nan".equals(string)) return NaN;
+    if ("inf".equals(string)) return POSITIVE_INFINITY;
     try {
-      return Float.parseFloat(string);
+      return Double.parseDouble(string);
     } catch (NumberFormatException e) {
       throw parsingError(string, node, e);
     }
   }
 
   private ValueConverterException parsingError(String string, INode node, Exception cause) {
-    return new ValueConverterException("Couldn't convert '" + string + "' to float.", node, cause);
+    return new ValueConverterException("Couldn't convert '" + string + "' to double.", node, cause);
   }
 }
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
index e4ac026..d778e94 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/conversion/ProtobufTerminalConverters.java
@@ -18,14 +18,14 @@
  */
 public class ProtobufTerminalConverters extends DefaultTerminalConverters {
 
-  @Inject private FLOATValueConverter floatValueConverter;
+  @Inject private DOUBLEValueConverter doubleValueConverter;
   @Inject private HEXValueConverter hexValueConverter;
   @Inject private LONGValueConverter longValueConverter;
   @Inject private STRINGValueConverter stringValueConverter;
   
-  @ValueConverter(rule = "FLOAT")
-  public IValueConverter<Float> FLOAT() {
-    return floatValueConverter;
+  @ValueConverter(rule = "DOUBLE")
+  public IValueConverter<Double> DOUBLE() {
+    return doubleValueConverter;
   }
   
   @ValueConverter(rule = "HEX")
diff --git a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java
index 625ca65..df6ed1c 100644
--- a/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java
+++ b/com.google.eclipse.protobuf/src/com/google/eclipse/protobuf/util/Properties.java
@@ -55,6 +55,11 @@
     return isScalarType(p, BOOL);
   }
 
+  /**
+   * Indicates whether the given property can accept "nan" as its default value.
+   * @param p the given property.
+   * @return {@code true} if the given property  can accept "nan" as its default value, {@code false} otherwise.
+   */
   public boolean mayBeNan(Property p) {
     String typeName = typeNameOf(p);
     return FLOAT.hasValue(typeName) || DOUBLE.hasValue(typeName);
