diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/SupportCurlyAndAngleBracketsForComplexValues.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/SupportCurlyAndAngleBracketsForComplexValues.java
new file mode 100644
index 0000000..8f4e387
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/SupportCurlyAndAngleBracketsForComplexValues.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright (c) 2013 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.bugs;
+
+import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule;
+import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith;
+import static org.junit.Assert.assertTrue;
+
+import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.validation.ProtobufJavaValidator;
+import com.google.inject.Inject;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Test that complex values can be enclosed in {...} or &lt;...&gt;
+ */
+public class SupportCurlyAndAngleBracketsForComplexValues {
+  @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
+
+  @Inject private ProtobufJavaValidator validator;
+
+  //  syntax = "proto2";
+  //
+  //  package test;
+  //
+  //  message AttributeOptions {
+  //    message CommonAttributes {
+  //      optional bool boolValue = 1;
+  //      optional int32 intValue = 2;
+  //    }
+  //
+  //    optional group MainAttribute = 2 {
+  //      optional CommonAttributes attrs = 5;
+  //    }
+  //
+  //    optional group ExtraAttribute = 6 {
+  //      optional CommonAttributes attrs = 7;
+  //    }
+  //
+  //    optional int32 value = 8;
+  //  }
+  //
+  //  extend google.protobuf.MessageOptions {
+  //    optional AttributeOptions main_options = 16662875;
+  //    optional AttributeOptions.CommonAttributes common_options = 16662876;
+  //  }
+  //
+  //  message TestMessage {
+  //    option (main_options) = {
+  //      value: 10,
+  //
+  //      MainAttribute <
+  //        attrs {
+  //          boolValue: false
+  //        }
+  //      >
+  //
+  //      ExtraAttribute {
+  //        attrs {
+  //          boolValue: false
+  //        }
+  //      }
+  //    };
+  //
+  //    option (.test.common_options) = {
+  //      intValue: 3
+  //    };
+  //  }
+  @Test public void should_allow_curly_and_angle_brackets_in_complex_value() {
+    boolean isValid = validator.validate(xtext.root(), new BasicDiagnostic(), null);
+    assertTrue(isValid);
+  }
+}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/SupportTripleQuotes.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/SupportTripleQuotes.java
new file mode 100644
index 0000000..ee420c1
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/SupportTripleQuotes.java
@@ -0,0 +1,46 @@
+/*
+ * Copyright (c) 2013 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.bugs;
+
+import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule;
+import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith;
+import static org.junit.Assert.assertTrue;
+
+import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.validation.ProtobufJavaValidator;
+import com.google.inject.Inject;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.junit.Rule;
+import org.junit.Test;
+
+/**
+ * Test the parser correctly handles """...""" template strings
+ */
+public class SupportTripleQuotes {
+  @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
+
+  @Inject private ProtobufJavaValidator validator;
+
+  // syntax = "proto2";
+  //
+  // package test;
+  //  
+  // extend google.protobuf.MessageOptions {
+  //   optional string value = 16662875;
+  // }
+  //
+  // message TestMessage {
+  //   option (value) = """test""";
+  // }
+  @Test public void should_allow_template_quotes() {
+    boolean isValid = validator.validate(xtext.root(), new BasicDiagnostic(), null);
+    assertTrue(isValid);
+  }
+}
diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/b10744621_AllowSemicolonAfterOptionValue_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/b10744621_AllowSemicolonAfterOptionValue_Test.java
new file mode 100644
index 0000000..0f6994c
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/b10744621_AllowSemicolonAfterOptionValue_Test.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2013 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.bugs;
+
+import static org.junit.Assert.assertTrue;
+
+import static com.google.eclipse.protobuf.junit.core.UnitTestModule.unitTestModule;
+import static com.google.eclipse.protobuf.junit.core.XtextRule.overrideRuntimeModuleWith;
+
+import org.eclipse.emf.common.util.BasicDiagnostic;
+import org.junit.Rule;
+import org.junit.Test;
+
+import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.validation.ProtobufJavaValidator;
+import com.google.inject.Inject;
+
+/**
+ * Tests fix for b/10744621.
+ */
+public class b10744621_AllowSemicolonAfterOptionValue_Test {
+  @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
+
+  @Inject private ProtobufJavaValidator validator;
+
+  // syntax = "proto2";
+  //
+  // package abc;
+  //
+  // message TestValues {
+  //   optional string value1 = 1;
+  //   optional string value2 = 2;
+  // }
+  // 
+  // extend google.protobuf.MessageOptions {
+  //   optional TestValues test_values = 42180343;
+  // }
+  // 
+  // message TestMessage {
+  //   option (test_values) = {
+  //     value1: "Value 1";
+  //     value2: "Value 2"
+  //   };
+  // }
+  @Test public void should_allow_semicolon_in_complex_value() {
+    boolean isValid = validator.validate(xtext.root(), new BasicDiagnostic(), null);
+    assertTrue(isValid);
+  }
+}
