Index: framspy/FramsticksEvolution.py
===================================================================
--- framspy/FramsticksEvolution.py	(revision 1194)
+++ framspy/FramsticksEvolution.py	(revision 1195)
@@ -21,8 +21,8 @@
 
 
-def frams_evaluate(frams_cli, individual):
+def frams_evaluate(frams_lib, individual):
 	BAD_FITNESS = [-1] * len(OPTIMIZATION_CRITERIA)  # fitness of -1 is intended to discourage further propagation of this genotype via selection ("this genotype is very poor")
 	genotype = individual[0]  # individual[0] because we can't (?) have a simple str as a deap genotype/individual, only list of str.
-	data = frams_cli.evaluate([genotype])
+	data = frams_lib.evaluate([genotype])
 	# print("Evaluated '%s'" % genotype, 'evaluation is:', data)
 	valid = True
@@ -47,27 +47,27 @@
 
 
-def frams_crossover(frams_cli, individual1, individual2):
+def frams_crossover(frams_lib, individual1, individual2):
 	geno1 = individual1[0]  # individual[0] because we can't (?) have a simple str as a deap genotype/individual, only list of str.
 	geno2 = individual2[0]  # individual[0] because we can't (?) have a simple str as a deap genotype/individual, only list of str.
-	individual1[0] = frams_cli.crossOver(geno1, geno2)
-	individual2[0] = frams_cli.crossOver(geno1, geno2)
+	individual1[0] = frams_lib.crossOver(geno1, geno2)
+	individual2[0] = frams_lib.crossOver(geno1, geno2)
 	return individual1, individual2
 
 
-def frams_mutate(frams_cli, individual):
-	individual[0] = frams_cli.mutate([individual[0]])[0]  # individual[0] because we can't (?) have a simple str as a deap genotype/individual, only list of str.
+def frams_mutate(frams_lib, individual):
+	individual[0] = frams_lib.mutate([individual[0]])[0]  # individual[0] because we can't (?) have a simple str as a deap genotype/individual, only list of str.
 	return individual,
 
 
-def frams_getsimplest(frams_cli, genetic_format, initial_genotype):
-	return initial_genotype if initial_genotype is not None else frams_cli.getSimplest(genetic_format)
+def frams_getsimplest(frams_lib, genetic_format, initial_genotype):
+	return initial_genotype if initial_genotype is not None else frams_lib.getSimplest(genetic_format)
 
 
-def prepareToolbox(frams_cli, OPTIMIZATION_CRITERIA, tournament_size, genetic_format, initial_genotype):
+def prepareToolbox(frams_lib, OPTIMIZATION_CRITERIA, tournament_size, genetic_format, initial_genotype):
 	creator.create("FitnessMax", base.Fitness, weights=[1.0] * len(OPTIMIZATION_CRITERIA))
 	creator.create("Individual", list, fitness=creator.FitnessMax)  # would be nice to have "str" instead of unnecessary "list of str"
 
 	toolbox = base.Toolbox()
-	toolbox.register("attr_simplest_genotype", frams_getsimplest, frams_cli, genetic_format, initial_genotype)  # "Attribute generator"
+	toolbox.register("attr_simplest_genotype", frams_getsimplest, frams_lib, genetic_format, initial_genotype)  # "Attribute generator"
 	# (failed) struggle to have an individual which is a simple str, not a list of str
 	# toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_frams)
@@ -78,7 +78,7 @@
 	toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_simplest_genotype, 1)
 	toolbox.register("population", tools.initRepeat, list, toolbox.individual)
-	toolbox.register("evaluate", frams_evaluate, frams_cli)
-	toolbox.register("mate", frams_crossover, frams_cli)
-	toolbox.register("mutate", frams_mutate, frams_cli)
+	toolbox.register("evaluate", frams_evaluate, frams_lib)
+	toolbox.register("mate", frams_crossover, frams_lib)
+	toolbox.register("mutate", frams_mutate, frams_lib)
 	if len(OPTIMIZATION_CRITERIA) <= 1:
 		toolbox.register("select", tools.selTournament, tournsize=tournament_size)
@@ -90,6 +90,6 @@
 def parseArguments():
 	parser = argparse.ArgumentParser(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 CLI without trailing slash.')
-	parser.add_argument('-lib', required=False, help='Library name. If not given, "frams-objects.dll" or "frams-objects.so" is assumed depending on the platform.')
+	parser.add_argument('-path', type=ensureDir, required=True, help='Path to Framsticks library without trailing slash.')
+	parser.add_argument('-lib', required=False, help='Library name. If not given, "frams-objects.dll" (or .so or .dylib) is assumed depending on the platform.')
 	parser.add_argument('-sim', required=False, default="eval-allcriteria.sim", help="The name of the .sim file with settings for evaluation, mutation, crossover, and similarity estimation. If not given, \"eval-allcriteria.sim\" is assumed by default. Must be compatible with the \"standard-eval\" expdef. If you want to provide more files, separate them with a semicolon ';'.")
 
Index: framspy/README.txt
===================================================================
--- framspy/README.txt	(revision 1194)
+++ framspy/README.txt	(revision 1195)
@@ -5,12 +5,16 @@
 
 "frams.py" is the most fundamental file. It allows to access Framsticks script
-objects in Python. You will find detailed descriptions in the source of this file.
+objects in Python. You will find detailed descriptions in the source of this file,
+but since this file is only responsible for buidling the low-level bridge between
+Framsticks and Python, understanding and modifying it should not be necessary.
 
 "frams-test.py" uses "frams.py" and tests the connection between Python
 and the native Framsticks library by performing a number of simple yet diversified
-operations,  so you should run it first to ensure everything works correctly. 
+operations, so you should run it first to ensure everything works correctly.
+This file can also be treated as a set of examples and demonstrations on how to access
+Framsticks genotypes, the simulation, body parts, neurons, etc.
 Again, read the comments in the source for more information.
 
-"FramsticksLib.py" uses "frams.py" and provides a few fundamental building blocks
+"FramsticksLib.py" uses "frams.py" and provides a few fundamental, high-level building blocks
 for optimization: functions to mutate, crossover, evaluate a solution, etc.
 
Index: framspy/evolalg/base/experiment_niching_abc.py
===================================================================
--- framspy/evolalg/base/experiment_niching_abc.py	(revision 1194)
+++ framspy/evolalg/base/experiment_niching_abc.py	(revision 1195)
@@ -193,5 +193,5 @@
                             help="What normalization use for dissimilarity matrix, max (default}, sum and none")
         parser.add_argument("-knn",type= int, default= 0,
-                        help="Nearest neighbors parameter for local novelty/niching, if knn==0 global is performed.Default:0")
+                        help="Nearest neighbors parameter for local novelty/niching, if knn==0 global is performed. Default: 0")
         return parser 
         
Index: framspy/frams-test.py
===================================================================
--- framspy/frams-test.py	(revision 1194)
+++ framspy/frams-test.py	(revision 1195)
@@ -106,6 +106,6 @@
 
 matrix = np.zeros((20, 20, 20), dtype=int)  # 3D matrix, "voxels"
-m = frams.ModelGeometry.forModel(frams.Model.newFromString(geno));
-m.geom_density = 20;
+m = frams.ModelGeometry.forModel(frams.Model.newFromString(geno))
+m.geom_density = 20
 for p in m.voxels():
 	# print('%f %f %f ' % (p.x._value(), p.y._value(), p.z._value()))
