diff --git a/CHANGES.txt b/CHANGES.txt
new file mode 100644
index 0000000000000000000000000000000000000000..9c9ab19257fd14db1d66d3beb6f0f4e75e637373
--- /dev/null
+++ b/CHANGES.txt
@@ -0,0 +1,96 @@
+=================
+Make Experiments!
+=================
+
+---------------
+Release Changes
+---------------
+
+Release 0.3.0
+=============
+
+Global
+------
+
+* Support for using native variables in templates
+
+  * Detection of variable use in configuration keys and values
+  * Context query for global template variable values
+  * Native variable format as special job configuration (.var_format)
+
+* Backup of old versions for re-generated files
+
+  * Backup directory with timestamp for each re-generation, containing previous
+    files incl. README
+  * Fixed 'diffexp' to ignore backup directories
+
+* Support for out-of-directory generation
+
+  * Added command line option and path environment variable for configuration
+    files (--path, MPEXP_PATH)
+  * Changed template lookup paths to also use these settings
+
+* Extended queue settings to host environment
+
+  * Renamed configuration variable and directory (QUEUE_TYPE -> ENVIRONMENT,
+    standard_queue_settings -> standard_environments)
+  * Support for setting environment on the command line
+  * Support for default or blank host environment
+
+* Support for setting section variables on the command line
+
+* Fixed 'diffexp' to ignore CDPATH settings
+
+* Added model directory, verbose mode to 'getexp'
+
+Configuration
+-------------
+
+* Support for job inheritance (.extends), and job removal (.remove)
+
+  * Inheritance of job configuration
+  * Namelist overloading
+
+* Support for packages of configuration options (EXP_OPTIONS, standard_options)
+
+* Improved namelist handling
+
+  * Support for removing namelist groups and variables from the parent
+    configuration (.remove)
+  * Support for namelist templates for non-Fortran namelists, e.g. OASIS
+    namcouple (.use_template)
+  * Namelist output restricted to 80 characters per line
+  * Support for automatic conversion of comments in namelist configurations,
+    on all levels
+  * Support for example namelist settings (commented assignments)
+
+* Extended expressions in configuration files
+
+  * Use of lists in configuration expressions
+  * Support for reading configuration values from a file (read)
+  * Second to time string conversion in configuration files (sec2time)
+
+* Support for overriding the 'tasks' job variable
+
+* Fixed evaluation of job configuration levels (global settings were masking
+  user settings)
+
+* Experiment identifier is taken from the file name by default
+
+* Changed to mask dollar characters when reading environment variables into
+  configuration to avoid spurious interpolation
+
+Templates
+---------
+
+* Support for input file template library
+
+  * 'split' filter for use in templates
+  * 'filter' filter for use in templates
+  * 'wrapstring' work-around for legacy Jinja (2.6)
+
+* Support for user defined, experiment specific templates
+
+* Support for 'mkexp' version info in templates (mkexp_input)
+
+
diff --git a/MANIFEST.in b/MANIFEST.in
index 1e0fc794be50507cc7480cbab7cb0501aede40fb..c29cdd7df429df3f9bc4cd2ea0044385e5ffb51e 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1 +1 @@
-include LICENSE.txt
\ No newline at end of file
+include LICENSE.txt CHANGES.txt
diff --git a/expconfig.py b/expconfig.py
index c4244822798707d2b60f9a842c771b8b3b076286..faf8ea73f82dfe2803c4aef1cd8bc52c2c06c34f 100644
--- a/expconfig.py
+++ b/expconfig.py
@@ -124,9 +124,12 @@ class ExpConfig(ConfigObj):
         pre_config = ConfigObj(experiment_config_name, interpolation=False)
 
         experiment_type = extra_dict.get('EXP_TYPE', pre_config['EXP_TYPE'])
+        # Empty environment should load default
         environment = extra_dict.get('ENVIRONMENT', 
                       pre_config.get('ENVIRONMENT',
                       ExpConfig.default_name))
+        if not environment:
+            environment = ExpConfig.default_name
         # Options should always be treated as a list
         options = extra_dict.get('EXP_OPTIONS',
                   pre_config.get('EXP_OPTIONS',
@@ -211,6 +214,7 @@ class ExpConfig(ConfigObj):
         # Add extra dictionary
         pre_config.merge(extra_dict)
 
+        # Backwards compatibility ENVIRONMENT -> QUEUE_TYPE
         if not 'ENVIRONMENT' in pre_config:
             pre_config['ENVIRONMENT'] = environment
 
diff --git a/mkexp b/mkexp
index f05492e59b3570c9f3fb82a95b78e220207e81ba..a31b7bc89d03592cc040b1e9cfecd980ec49db0d 100755
--- a/mkexp
+++ b/mkexp
@@ -309,10 +309,10 @@ template_env.filters['filter'] = lambda x, f=None: filter(f, x)
 # Read and store configuration info from input and experiments' library
 # Store environment as default for control settings, then add config from files
 
-extra_dict = {}
+extra_dict = ConfigObj(interpolation=False)
 for assign in args.assigns:
-    extra_dict.update(assign_to_dict(assign))
-extra_dict.update(mkexp_input='Generated by $$Id$$')
+    extra_dict.merge(assign_to_dict(assign))
+extra_dict['mkexp_input'] = 'Generated by $$Id$$'
 try:
     config = ExpConfig(experiment_config_name, extra_dict, config_roots)
 except ExpConfigError as error:
diff --git a/setup.py b/setup.py
index 1633aaaecf11757565d7da361f378c79a300c3cb..a9b0b8c115be865f35b3a0d100f523ce0e6b1ccf 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
 from distutils.core import setup
 
 name = 'mkexp'
-version = '0.2.1dev'
+version = '0.3.0dev'
 
 setup(
     name = name,
diff --git a/test.py b/test.py
index a78dc1648317c41ff8773e2d18d3f6091e249452..86b47e813baf7115839d0641500cfa52397e1550 100644
--- a/test.py
+++ b/test.py
@@ -80,17 +80,25 @@ class RunningTestCase(MkexpTestCase):
         result = output(self.script_run)
         self.assertIn(expected, result)
 
-class ContentTestCase(MkexpTestCase):
+class CommandLineTestCase(MkexpTestCase):
 
-    def test_pass_section_variable(self):
+    def test_pass_section_variables(self):
         script_section = script("""
             mkexp test0001.config \
-                namelists.namelist..echam.runctl.dt_start=2345,01,23,12,34,56
+                namelists.namelist..echam.runctl.dt_start=2345,01,23,12,34,56 \
+                namelists.namelist..echam.runctl.some_file=abcdefgh.ijk
         """)
-        expected = "dt_start = 2345, 1, 23, 12, 34, 56"
+        expecteds = ["dt_start = 2345, 1, 23, 12, 34, 56",
+                     "some_file = 'abcdefgh.ijk'"]
         ignore = output(script_section)
         result = readfile('test/experiments/test0001/test0001.run')
-        self.assertIn(expected, result)
+        for expected in expecteds:
+            self.assertIn(expected, result)
+
+    def test_pass_new_job(self):
+        output(script("mkexp test0001.config jobs.dummy...extends=run"))
+        readfile('test/experiments/test0001/test0001.dummy')
+        # Should exist, otherwise exception is thrown
 
     def test_options(self):
         script_option = script("""
@@ -101,11 +109,12 @@ class ContentTestCase(MkexpTestCase):
         result = readfile('test/experiments/test0001/test0001.run')
         self.assertIn(expected, result)
 
+class ContentTestCase(MkexpTestCase):
+
     def test_job_override(self):
         exp_id = "test_job_override"
         writeconfig(exp_id, """
             EXP_TYPE =
-            [namelists]
             [jobs]
               key1 = global
               key2 = global
@@ -169,7 +178,6 @@ class ContentTestCase(MkexpTestCase):
             GLOBAL2 = $${VAR2} # Uninitialized
             GLOBAL3 = $${VAR1} # Used twice, may only be listed once
             GLOBAL${FOUR} = 4  # (Uninitialized) Variable in key
-            [namelists]
             [jobs]
               [["""+job_id+"""]]
         """)
diff --git a/test/standard_experiments/DEFAULT.config b/test/standard_experiments/DEFAULT.config
index 3e4682bb79a197783dc3a8456d9e934edb55cfbc..e2012161d99ddf70b57b396a9fc30c22519f57ef 100644
--- a/test/standard_experiments/DEFAULT.config
+++ b/test/standard_experiments/DEFAULT.config
@@ -3,3 +3,5 @@ VERSION_ = $$Id: New Experiment $$
 SCRIPT_DIR = experiments/$EXP_ID
 DATA_DIR = $SCRIPT_DIR
 WORK_DIR = $SCRIPT_DIR
+
+[namelists]