diff --git a/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue197_AllowEmptyStatements_Test.java b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue197_AllowEmptyStatements_Test.java
new file mode 100644
index 0000000..4b75230
--- /dev/null
+++ b/com.google.eclipse.protobuf.test/src/com/google/eclipse/protobuf/bugs/Issue197_AllowEmptyStatements_Test.java
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2012 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 org.junit.*;
+
+import com.google.eclipse.protobuf.junit.core.XtextRule;
+import com.google.eclipse.protobuf.protobuf.*;
+
+/**
+ * Tests fix for <a href="http://code.google.com/p/protobuf-dt/issues/detail?id=197">Issue 197</a>.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class Issue197_AllowEmptyStatements_Test {
+  @Rule public XtextRule xtext = overrideRuntimeModuleWith(unitTestModule());
+
+  // syntax = "proto2";;
+  //
+  // message Person {}
+  @Test public void should_allow_empty_statement_in_syntax() {
+    xtext.find("Person", Message.class);
+  }
+
+  // syntax = "proto2";
+  //
+  // package com.google.proto.test;;
+  //
+  // message Person {}
+  @Test public void should_allow_empty_statement_in_package() {
+    xtext.find("Person", Message.class);
+  }
+
+  // syntax = "proto2";
+  //
+  // import "google/protobuf/descriptor.proto";;
+  //
+  // message Person {}
+  @Test public void should_allow_empty_statement_in_import() {
+    xtext.find("Person", Message.class);
+  }
+
+  // syntax = "proto2";
+  //
+  // option optimize_for = CODE_SIZE;;
+  //
+  // message Person {}
+  @Test public void should_allow_empty_statement_in_option() {
+    xtext.find("Person", Message.class);
+  }
+
+  // syntax = "proto2";
+  //
+  // message Person {
+  //   extensions 1000 to max;;
+  // }
+  //
+  // message PhoneNumber {}
+  @Test public void should_allow_empty_statement_in_extension() {
+    xtext.find("PhoneNumber", Message.class);
+  }
+
+  // syntax = "proto2";
+  //
+  // enum Type {
+  //   HOME = 0;;
+  //   OFFICE = 1;
+  // }
+  @Test public void should_allow_empty_statement_in_literal() {
+    xtext.find("OFFICE", Literal.class);
+  }
+
+  // syntax = "proto2";
+  //
+  // message Person {}
+  //
+  // service Service {
+  //   rpc Rpc (Person) returns (Person);;
+  // }
+  //
+  // message PhoneNumber {}
+  @Test public void should_allow_empty_statement_in_rpc() {
+    xtext.find("PhoneNumber", Message.class);
+  }
+}
diff --git a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolverStrategy_resolveUri_Test.java b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolverStrategy_resolveUri_Test.java
index 43f4279..d176e4e 100644
--- a/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolverStrategy_resolveUri_Test.java
+++ b/com.google.eclipse.protobuf.ui.test/src/com/google/eclipse/protobuf/ui/scoping/MultipleDirectoriesFileResolverStrategy_resolveUri_Test.java
@@ -75,8 +75,8 @@
     when(directoryPaths.getValue()).thenReturn("${workspace_loc:/src/protos}");
     // try the first time as resource platform
     when(uris.exists(URI.createURI("platform:/resource/src/protos/imported.proto"))).thenReturn(false);
-    when(mapping.directoryLocation("/src/protos")).thenReturn("/usr/local/project/src/protos");
     // try again, but in the file system this time
+    when(mapping.directoryLocation("/src/protos")).thenReturn("/usr/local/project/src/protos");
     when(uris.exists(URI.createURI(expected))).thenReturn(true);
     String resolved = resolver.resolveUri("imported.proto", declaringResourceUri, allPreferences);
     assertThat(resolved, equalTo(expected));
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 20dc5c9..3899343 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
@@ -18,13 +18,13 @@
   (elements+=ProtobufElement)*;
 
 Syntax:
-  'syntax' '=' name=STRING ';';
+  'syntax' '=' name=STRING (';')+;
 
 ProtobufElement:
   Package | Import | Option | ComplexType | TypeExtension | Service;
 
 Package:
-  'package' name=PackageName ';';
+  'package' name=PackageName (';')+;
 
 PackageName:
   IdOrReservedWord ('.' IdOrReservedWord)*;
@@ -33,13 +33,13 @@
   NormalImport | PublicImport | WeakImport;
 
 NormalImport:
-  'import' importURI=STRING ';';
+  'import' importURI=STRING (';')+;
 
 PublicImport:
-  'import' 'public' importURI=STRING ';';
+  'import' 'public' importURI=STRING (';')+;
 
 WeakImport:
-  'import' 'weak' importURI=STRING ';';
+  'import' 'weak' importURI=STRING (';')+;
 
 ComplexType:
   Enum | ExtensibleType;
@@ -68,7 +68,7 @@
   Option | IndexedElement | ComplexType | TypeExtension | Extensions;
 
 Extensions:
-  'extensions' ranges+=Range (',' ranges+=Range)* ';';
+  'extensions' ranges+=Range (',' ranges+=Range)* (';')+;
 
 MessageField:
   =>modifier=Modifier type=TypeLink name=Name '=' index=(LONG | HEX)
@@ -100,7 +100,7 @@
 
 Literal:
   name=Name '=' index=(LONG | HEX) 
-  ('[' fieldOptions+=FieldOption (',' fieldOptions+=FieldOption)* ']')? ';';
+  ('[' fieldOptions+=FieldOption (',' fieldOptions+=FieldOption)* ']')? (';')+;
 
 terminal HEX returns ecore::ELong:
   ('-')? '0x' (NUMBER | 'a'..'f' | 'A'..'F')+;
@@ -126,11 +126,11 @@
 
 Rpc:
   'rpc' name=Name '(' argType=MessageLink ')' 'returns' '(' returnType=MessageLink ')'
-  (('{' options+=Option* '}') (';')? | ';');
+  (('{' options+=Option* '}') (';')? | (';')+);
 
 Stream:
   'stream' name=Name '(' clientMessage=MessageLink ',' serverMessage=MessageLink ')'
-  (('{' options+=Option* '}') (';')? | ';');
+  (('{' options+=Option* '}') (';')? | (';')+);
 
 Name:
   IdOrReservedWord;
@@ -151,11 +151,11 @@
   NativeOption | CustomOption;
 
 NativeOption:
-  'option' source=OptionSource '=' value=Value ';';
+  'option' source=OptionSource '=' value=Value (';')+;
 
 CustomOption:
   'option' '(' source=OptionSource ')'
-  ('.' fields+=OptionField ('.' fields+=OptionField)*)? '=' value=Value ';';
+  ('.' fields+=OptionField ('.' fields+=OptionField)*)? '=' value=Value (';')+;
  
 FieldOption:
   DefaultValueFieldOption | NativeFieldOption | CustomFieldOption;
