diff --git a/dnadna/cli/simulation.py b/dnadna/cli/simulation.py
index ef25457bff1298fcac52b43601577f97006d94f4..fe143c5817a22a2a861cbce42df42d9812c5d9eb 100644
--- a/dnadna/cli/simulation.py
+++ b/dnadna/cli/simulation.py
@@ -9,7 +9,7 @@ import textwrap
 
 from .. import __version__
 from ..utils.cli import Command, CommandWithPlugins
-from ..utils.config import save_dict_annotated
+from ..utils.config import save_dict_annotated, Config
 from ..utils.misc import desphinxify, first_paragraph, indent
 
 
@@ -71,6 +71,7 @@ class SimulationInitCommand(CommandWithPlugins):
 
         # Don't accidentally modify the original default config object
         config = config.copy()
+
         if args.name:
             config['dataset_name'] = args.name
 
@@ -86,6 +87,10 @@ class SimulationInitCommand(CommandWithPlugins):
 
         config['dnadna_version'] = __version__
 
+        # Merge with the default dataset config in case there are any other
+        # properties missing
+        config = Config(config, Config.from_default('dataset'))
+
         simulations_root = pth.normpath(args.simulations_root)
         simulation_dir = pth.join(simulations_root, dataset_name)
         os.makedirs(simulation_dir, exist_ok=True)
@@ -189,6 +194,6 @@ class SimulationCommand(CommandWithPlugins):
 
         for name, cls in Simulator.get_plugins():
             print(name, cls, sep=': ')
-            doc = desphinxify(first_paragraph(cls.__doc__))
+            doc = desphinxify(first_paragraph(cls.__doc__ or ''))
             print(indent('\n'.join(textwrap.wrap(doc))))
         sys.exit()
diff --git a/dnadna/schemas/simulation.yml b/dnadna/schemas/simulation.yml
index 72e4bbd03a36369a0467d03147d71aa596fe8a41..22de159bd324aa56a866be2a70eda844a7ba8f5e 100644
--- a/dnadna/schemas/simulation.yml
+++ b/dnadna/schemas/simulation.yml
@@ -27,6 +27,7 @@ allOf:
                     outputs--the number of replicates of each scenario
                     should be listed in the scenario parameters table
                 minimum: 1
+                default: 1
 
             seed:
                 type: "integer"
@@ -34,6 +35,7 @@ allOf:
                     fixed seed to use for seeding the random number
                     generator at the beginning of the simulation; if absent
                     then the PRNG's default seeding method is used
+
             summary_statistics: {"$ref": "summary-statistics.yml#/definitions/summary_statistics"}
 
         required:
diff --git a/dnadna/simulator.py b/dnadna/simulator.py
index c0930e94d7ea9db01f8d23831c33b798b4ef7175..030dde99028bbe140facfadb6760a796d95d1531 100644
--- a/dnadna/simulator.py
+++ b/dnadna/simulator.py
@@ -73,13 +73,13 @@ class Simulator(ConfigMixIn, Pluggable, metaclass=abc.ABCMeta):
     ``dataset_name`` from the config as a template variable.
     """
 
-    preprocessing_config_default = {}
+    preprocessing_config_default = Config()
     """
     Simulators may extend the default preprocessing configuration file with
     additional settings optimized for the simulator.
     """
 
-    training_config_default = {}
+    training_config_default = Config()
     """
     Simulators may extend the default training configuration file with
     additional settings optimized for the simulator.