Index: /framspy/evolalg/examples/invalid.py
===================================================================
--- /framspy/evolalg/examples/invalid.py	(revision 1127)
+++ /framspy/evolalg/examples/invalid.py	(revision 1128)
@@ -94,5 +94,5 @@
                    statistics_union]
 
-    end_steps = [PopulationSave("halloffame.gen", provider=hall_of_fame.haloffame, fields={"genotype": "genotype",
+    end_steps = [PopulationSave("halloffame.gen", provider=hall_of_fame.halloffame, fields={"genotype": "genotype",
                                                                                            "fitness": "fitness",
                                                                                            "custom": "recording"})]
@@ -107,5 +107,5 @@
     experiment.init()
     experiment.run(3)
-    for ind in hall_of_fame.haloffame:
+    for ind in hall_of_fame.halloffame:
         print("%g\t%s" % (ind.fitness, ind.genotype))
 
Index: /framspy/evolalg/examples/niching_novelty.py
===================================================================
--- /framspy/evolalg/examples/niching_novelty.py	(revision 1127)
+++ /framspy/evolalg/examples/niching_novelty.py	(revision 1128)
@@ -1,4 +1,5 @@
 import argparse
 import os
+import pickle
 import sys
 from enum import Enum
@@ -8,4 +9,5 @@
 from FramsticksLib import FramsticksLib
 from evolalg.base.lambda_step import LambdaStep
+from evolalg.base.step import Step
 from evolalg.dissimilarity.frams_dissimilarity import FramsDissimilarity
 from evolalg.dissimilarity.levenshtein import LevenshteinDissimilarity
@@ -21,4 +23,5 @@
 from evolalg.base.union_step import UnionStep
 from evolalg.utils.population_save import PopulationSave
+import time
 
 
@@ -51,5 +54,5 @@
         description='Run this program with "python -u %s" if you want to disable buffering of its output.' % sys.argv[
             0])
-    parser.add_argument('-path', type=ensureDir, required=True, help='Path to Framsticks without trailing slash.')
+    parser.add_argument('-path', type=ensureDir, required=True, help='Path to the Framsticks library without trailing slash.')
     parser.add_argument('-opt', required=True,
                         help='optimization criteria : vertpos, velocity, distance, vertvel, lifespan, numjoints, numparts, numneurons, numconnections. Single or multiple criteria.')
@@ -63,6 +66,7 @@
                         help=' Fitness criteria DEFAULT = raw', choices=list(Fitness))
     parser.add_argument('-popsize', type=int, default=50, help="Size of population, default 50.")
+    parser.add_argument('-generations', type=int, default=5, help="Number of generations, default 5.")
     parser.add_argument('-num_parts', type=int, default=None, help="Maximum number of parts. Default None")
-    parser.add_argument('-checkpoint_path', required=False, default=None, help="Path to checkpoint path")
+    parser.add_argument('-checkpoint_path', required=False, default=None, help="Path to the checkpoint file")
     parser.add_argument('-checkpoint_interval', required=False, type=int, default=100, help="Checkpoint interval")
     return parser.parse_args()
@@ -96,14 +100,23 @@
 
 
-def main():
-    print("Running experiment with", sys.argv)
+def load_experiment(path):
+    with open(path, "rb") as file:
+        experiment = pickle.load(file)
+    print("Loaded experiment. Generation:", experiment.generation)
+    return experiment
+
+
+def create_experiment():
     parsed_args = parseArguments()
     frams = FramsticksLib(parsed_args.path, parsed_args.lib,
                           parsed_args.sim)
     # Steps for generating first population
-    init_stages = [FramsPopulation(frams, parsed_args.genformat, parsed_args.popsize)]
+    init_stages = [
+        FramsPopulation(frams, parsed_args.genformat, parsed_args.popsize)
+    ]
 
     # Selection procedure
-    selection = TournamentSelection(5, copy=True) # 'fitness' by default, the targeted attribute can be changed, e.g. fit_attr="fitness_raw"
+    selection = TournamentSelection(5,
+                                    copy=True)  # 'fitness' by default, the targeted attribute can be changed, e.g. fit_attr="fitness_raw"
 
     # Procedure for generating new population. This steps will be run as long there is less than
@@ -193,6 +206,6 @@
     end_stages = [
         fitness_end,
-        PopulationSave("halloffame.gen", provider=hall_of_fame.haloffame, fields={"genotype": "genotype",
-                                                                                            "fitness": "fitness_raw"})]
+        PopulationSave("halloffame.gen", provider=hall_of_fame.halloffame, fields={"genotype": "genotype",
+                                                                                  "fitness": "fitness_raw"})]
     # ...but custom fields can be added, e.g. "custom": "recording"
 
@@ -209,6 +222,22 @@
                             checkpoint_interval=parsed_args.checkpoint_interval
                             )
-    experiment.init()  # init is mandatory
-    experiment.run(10)
+    return experiment
+
+
+def main():
+    print("Running experiment with", sys.argv)
+    parsed_args = parseArguments()
+
+    if os.path.exists(parsed_args.checkpoint_path):
+        experiment = load_experiment(parsed_args.checkpoint_path)
+        FramsticksLib(parsed_args.path, parsed_args.lib,
+                      parsed_args.sim)
+    else:
+        experiment = create_experiment()
+        experiment.init()  # init is mandatory
+
+
+    experiment.run(parsed_args.generations)
+
     # Next call for experiment.run(10) will do nothing. Parameter 10 specifies how many generations should be
     # in one experiment. Previous call generated 10 generations.
@@ -226,6 +255,4 @@
     # # All work produced by first run will be "destroyed" by second init().
 
-    for ind in hall_of_fame.haloffame:
-        print("%g\t%s" % (ind.fitness, ind.genotype))
 
 
Index: /framspy/evolalg/examples/standard.py
===================================================================
--- /framspy/evolalg/examples/standard.py	(revision 1127)
+++ /framspy/evolalg/examples/standard.py	(revision 1128)
@@ -42,4 +42,5 @@
 
     parser.add_argument("-popsize", type=int, default=50, help="Size of population, default 50.")
+    parser.add_argument('-generations', type=int, default=5, help="Number of generations, default 5.")
     return parser.parse_args()
 
@@ -96,6 +97,6 @@
                             )
     experiment.init()
-    experiment.run(3)
-    for ind in hall_of_fame.haloffame:
+    experiment.run(parsed_args.generations)
+    for ind in hall_of_fame.halloffame:
         print("%g\t%s" % (ind.fitness, ind.genotype))
 
Index: /framspy/evolalg/statistics/halloffame_stats.py
===================================================================
--- /framspy/evolalg/statistics/halloffame_stats.py	(revision 1127)
+++ /framspy/evolalg/statistics/halloffame_stats.py	(revision 1128)
@@ -5,9 +5,9 @@
 class HallOfFameStatistics(Statistics):
     def __init__(self, size, fields="fitness"):
-        self.haloffame = HallOfFameCustom(size, fitness_field=fields)
+        self.halloffame = HallOfFameCustom(size, fitness_field=fields)
 
     def init(self):
-        self.haloffame.clear()
+        self.halloffame.clear()
 
     def collect(self, population):
-        self.haloffame.update(population)
+        self.halloffame.update(population)
