diff --git a/lib/xos-genx/xosgenx/jinja2_extensions/base.py b/lib/xos-genx/xosgenx/jinja2_extensions/base.py
index c15bf32..3cb9886 100644
--- a/lib/xos-genx/xosgenx/jinja2_extensions/base.py
+++ b/lib/xos-genx/xosgenx/jinja2_extensions/base.py
@@ -16,6 +16,8 @@
 def unquote(s):
     if (s.startswith('"') and s.endswith('"')):
         return s[1:-1]
+    else:
+        return s
 
 def xproto_singularize(field):
     try:
@@ -151,44 +153,6 @@
             links.extend(model_links)
     return links
 
-
-def xproto_validators(f):
-    # To be cleaned up when we formalize validation in xproto
-    validators = []
-
-    # bound-based validators
-    bound_validators = [('max_length','maxlength'), ('min', 'min'), ('max', 'max')]
-
-    for v0, v1 in bound_validators:
-        try:
-            validators.append({'name':v1, 'int_value':int(f['options'][v0])})
-        except KeyError:
-            pass
-
-    # validators based on content_type
-    content_type_validators = ['ip', 'url', 'email']
-
-    for v in content_type_validators:
-        #if f['name']=='ip': pdb.set_trace()
-        try:
-            val = unquote(f['options']['content_type'])==v
-            if not val:
-                raise KeyError
-
-            validators.append({'name':v, 'bool_value': True})
-        except KeyError:
-            pass
-
-    # required validator
-    try:
-        required = f['options']['blank']=='False' and f['options']['null']=='False'
-        if required:
-            validators.append({'name':'required', 'bool_value':required})
-    except KeyError:
-        pass
-
-    return validators
-
 def xproto_string_type(xptags):
     try:
         max_length = eval(xptags['max_length'])
@@ -200,25 +164,6 @@
     else:
         return 'text'
 
-def xproto_type_to_ui_type(f):
-    try:
-        content_type = f['options']['content_type']
-        content_type = eval(content_type)
-    except:
-        content_type = None
-        pass
-
-    if content_type == 'date':
-        return 'date'
-    elif f['type'] == 'bool':
-        return 'boolean'
-    elif f['type'] == 'string':
-        return xproto_string_type(f['options'])
-    elif f['type'] in ['int','uint32','int32'] or 'link' in f:
-        return 'number'
-    elif f['type'] in ['double','float']:
-        return 'string'
-
 def xproto_tuplify(nested_list_or_set):
     if not isinstance(nested_list_or_set, list) and not isinstance(nested_list_or_set, set):
         return nested_list_or_set
