diff --git a/CHANGES.txt b/CHANGES.txt
index 71580bfd95cc8d8de492293e517d2f111071a189..82622cf6bae40e6e4a571e0b7e0ab43ba360deb7 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -6,6 +6,20 @@ Make Experiments!
 Release Changes
 ---------------
 
+Release 0.3.3
+=============
+
+Configuration
+-------------
+
+* Added 'raw(...)' expression to allow unquoted namelist expressions.
+  Needed for native variables containing lists
+
+Templates
+---------
+
+* Added 'set' test to reliably check if namelist switches are true
+
 Release 0.3.2
 =============
 
diff --git a/mkexp b/mkexp
index 5ae28e5e3464fdfc4d236eb8b52cdb260c6ae454..e39e5b743af158e3589fa1510bd9ae02848acf1f 100755
--- a/mkexp
+++ b/mkexp
@@ -90,9 +90,11 @@ def move_file_to_backup(file_name, backup_name):
 
 # Namelist formatting
 
+quote = repr
+
 def format_atom(value):
     '''Format atomic value for use in namelists'''
-    result = repr(value)
+    result = quote(value)
     # Strip quotes from all-numeric strings
     result = re.sub('^(["'r"'])([-+]?(\d+\.\d*|\.?\d+)([de][-+]?\d+)?)\1$", r'\2', 
                     result, flags=re.I)
@@ -102,6 +104,7 @@ def format_atom(value):
     result = re.sub('^(["'r"'])\.?t(rue)?\.?\1$", '.true.', result, flags=re.I)
     result = \
         re.sub('^(["'r"'])\.?f(alse)?\.?\1$", '.false.', result, flags=re.I)
+    result = re.sub('^(["'r"'])raw\((.*)\)\1$", r'\2', result)
     return result
 
 def format_value(value, indent):
@@ -208,9 +211,6 @@ def format_vars(section, key, log, fmt):
         # Format all list elements
         section[newkey] = map(transform, value)
  
-def quote(value):
-    return repr(value)
-
 # Command line parsing
 
 def value_to_list(value):
@@ -313,6 +313,10 @@ template_env.filters['split'] = lambda x, s, m=-1: x.split(s, m)
 # - Add list operations filter and map
 template_env.filters['filter'] = lambda x, f=None: filter(f, x)
 
+# Additional tests
+# - Check a namelist logical
+template_env.tests['set'] = lambda x: x.strip('.').lower().startswith('t')
+
 # Read and store configuration info from input and experiments' library
 # Store environment as default for control settings, then add config from files
 
diff --git a/setup.py b/setup.py
index 4b14236d08ee51e0cc98e9d8c3c35b0c293b6883..3795c75c0a241362b44496cce4ffb1e2ab34c19d 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from distutils.core import setup
 
 name = 'mkexp'
-version = '0.3.2'
+version = '0.3.3'
 
 setup(
     name = name,
diff --git a/test.py b/test.py
index 7167face0fdc5767df6622b457f6ba372b2b75a6..143c8196a54305f91523c7a9cd292177631ab37e 100644
--- a/test.py
+++ b/test.py
@@ -234,6 +234,39 @@ class ContentTestCase(MkexpTestCase):
         result = align(result)
         self.assertMultiLineEqual(expected, result)
 
+    def test_var_in_namelist(self):
+        exp_id = "test_var_in_namelist"
+        job_id = "job"
+        writeconfig(exp_id, """
+            EXP_TYPE =
+            [namelists]
+              [[namelist]]
+                [[[group]]]
+                  var_1 = raw($$value_1)
+                  var_2 = raw($${value_2})
+                  var_3 = a, raw($$value_3), b
+                  var_4 = a$$value_4
+                  var_5 = $${value_5}b
+            [jobs]
+              [["""+job_id+"""]]
+        """)
+        writetemplate(exp_id, job_id, """
+            %{NAMELIST}
+        """)
+        expected = align("""
+            &group
+                var_1 = $value_1
+                var_2 = ${value_2}
+                var_3 = 'a', $value_3, 'b'
+                var_4 = 'a$value_4'
+                var_5 = '${value_5}b'
+            /
+        """)
+        ignore = output(script("mkexp "+exp_id+".config"))
+        result = readfile(join("test", "experiments", exp_id, exp_id+"."+job_id))
+        result = align(result)
+        self.assertMultiLineEqual(expected, result)
+
     def test_split_date(self):
         exp_id = 'test_split_date'
         job_id = 'job'