diff --git a/xos/genx/tool/lib.py b/xos/genx/tool/lib.py
index 6a5409b..54a2b08 100644
--- a/xos/genx/tool/lib.py
+++ b/xos/genx/tool/lib.py
@@ -29,6 +29,11 @@
 
     return plural
 
+def xproto_unquote(s):
+    if (s.startswith('"') and s.endswith('"')):
+        s = s[1:-1]
+    return s
+
 def django_content_type_string(xptags):
     # Check possibility of KeyError in caller
     content_type = xptags['content_type']
diff --git a/xos/genx/tool/tests/proto_generator_test.py b/xos/genx/tool/tests/proto_generator_test.py
index f9c2d69..151edcc 100644
--- a/xos/genx/tool/tests/proto_generator_test.py
+++ b/xos/genx/tool/tests/proto_generator_test.py
@@ -2,11 +2,7 @@
 
 # Generate Protobuf from Xproto and then parse the resulting Protobuf
 class XProtoProtobufGeneratorTest(XProtoTest):
-    # This test is disabled because of a bug in Protobuf generation from xproto
-    # Namely, options appear with repeated double quotes: foo=""bar"" 
-    # TODO: Fix this bug, and re-enable this test
-
-    def __disabled_test_proto_generator(self):
+    def test_proto_generator(self):
         xproto = \
 """
 message VRouterPort (XOSBase){
@@ -22,7 +18,7 @@
 message {{ m.name }} {
   option bases = "{{ m.bases | join(",") }}";
   {%- for f in m.fields %}
-  {{ f.modifier }} {{f.type}} {{f.name}} = {{ f.id }}{% if f.options %} [{% for k,v in f.options.iteritems() %} {{ k }} = "{{ v}}"{% if not loop.last %},{% endif %} {% endfor %}]{% endif %};
+  {{ f.modifier }} {{f.type}} {{f.name}} = {{ f.id }}{% if f.options %} [{% for k,v in f.options.iteritems() %} {{ k }} = "{{ xproto_unquote(v)}}"{% if not loop.last %},{% endif %} {% endfor %}]{% endif %};
   {%- endfor %}
 }
 {% endfor %}
@@ -31,6 +27,7 @@
         self.generate(xproto = xproto, target = target)
         self.generate(xproto = self.get_output(), target = "{{ proto }}")
 	output = self.get_output()
+        self.assertIn("VRouterService", output)
 
 if __name__ == '__main__':
     unittest.main()
diff --git a/xos/genx/tool/xos2jinja.py b/xos/genx/tool/xos2jinja.py
index 2a20612..727c097 100644
--- a/xos/genx/tool/xos2jinja.py
+++ b/xos/genx/tool/xos2jinja.py
@@ -178,6 +178,13 @@
         n = self.count_stack.pop()
         for i in range(0, n):
             k,v = self.stack.pop()
+
+            # The two lines below may be added to eliminate "" around an option. 
+            # Right now, this is handled in targets. FIXME
+            #
+            # if (v.startswith('"') and v.endswith('"')):
+            #    v = v[1:-1]
+
             opts[k] = v
 
         s['options'] = opts
