Index: cpp/frams/genetics/f4/oper_f4.cpp
===================================================================
--- cpp/frams/genetics/f4/oper_f4.cpp	(revision 512)
+++ cpp/frams/genetics/f4/oper_f4.cpp	(revision 513)
@@ -86,5 +86,5 @@
 
 
-int Geno_f4::validate(char *& geno)
+int Geno_f4::validate(char *& geno, const char *genoname)
 {
 	// convert geno to tree, then try to validate 20 times
@@ -100,5 +100,5 @@
 
 
-int Geno_f4::checkValidity(const char * geno)
+int Geno_f4::checkValidity(const char * geno, const char *genoname)
 {
 	f4_node root;
Index: cpp/frams/genetics/f4/oper_f4.h
===================================================================
--- cpp/frams/genetics/f4/oper_f4.h	(revision 512)
+++ cpp/frams/genetics/f4/oper_f4.h	(revision 513)
@@ -33,6 +33,6 @@
 public:
 	Geno_f4();
-	int validate(char *&);
-	int checkValidity(const char *);
+	int checkValidity(const char *, const char *genoname);
+	int validate(char *&, const char *genoname);
 	int mutate(char *& g, float & chg, int &method);
 	int crossOver(char *&g1, char *&g2, float& chg1, float& chg2);
Index: cpp/frams/genetics/f9/oper_f9.cpp
===================================================================
--- cpp/frams/genetics/f9/oper_f9.cpp	(revision 512)
+++ cpp/frams/genetics/f9/oper_f9.cpp	(revision 513)
@@ -26,5 +26,5 @@
 }
 
-int GenoOper_f9::checkValidity(const char* gene)
+int GenoOper_f9::checkValidity(const char* gene, const char *genoname)
 {
 	if (!gene[0]) return 1; //empty is not valid
@@ -36,5 +36,5 @@
 
 ///Remove all invalid letters from the genotype
-int GenoOper_f9::validate(char *&gene)
+int GenoOper_f9::validate(char *&gene, const char *genoname)
 {
 	SString validated; //new genotype (everything except turtle_commands_f9 is skipped)
Index: cpp/frams/genetics/f9/oper_f9.h
===================================================================
--- cpp/frams/genetics/f9/oper_f9.h	(revision 512)
+++ cpp/frams/genetics/f9/oper_f9.h	(revision 513)
@@ -13,10 +13,10 @@
 public:
 	GenoOper_f9();
-	int checkValidity(const char *);
-	int validate(char *&);
-	int mutate(char *&g,float& chg,int &method);
-	int crossOver(char *&g1,char *&g2,float& chg1,float& chg2);
+	int checkValidity(const char *, const char *genoname);
+	int validate(char *&, const char *genoname);
+	int mutate(char *&g, float& chg, int &method);
+	int crossOver(char *&g1, char *&g2, float& chg1, float& chg2);
 	uint32_t style(const char *g, int pos);
-	const char* getSimplest() {return "R";}
+	const char* getSimplest() { return "R"; }
 
 	double mut_prob; //mutation probability
Index: cpp/frams/genetics/fF/oper_fF.cpp
===================================================================
--- cpp/frams/genetics/fF/oper_fF.cpp	(revision 512)
+++ cpp/frams/genetics/fF/oper_fF.cpp	(revision 513)
@@ -26,5 +26,5 @@
 }
 
-int GenoOper_fF::checkValidity(const char* gene)
+int GenoOper_fF::checkValidity(const char* gene, const char *genoname)
 {
 	fF_growth_params par;
@@ -32,5 +32,5 @@
 }
 
-int GenoOper_fF::validate(char *&gene)
+int GenoOper_fF::validate(char *&gene, const char *genoname)
 {
 	fF_growth_params par; //is initialized with default values
Index: cpp/frams/genetics/fF/oper_fF.h
===================================================================
--- cpp/frams/genetics/fF/oper_fF.h	(revision 512)
+++ cpp/frams/genetics/fF/oper_fF.h	(revision 513)
@@ -13,10 +13,10 @@
 public:
 	GenoOper_fF();
-	int checkValidity(const char *);
-	int validate(char *&);
+	int checkValidity(const char *, const char *genoname);
+	int validate(char *&, const char *genoname);
 	int mutate(char *&g, float& chg, int &method);
 	int crossOver(char *&g1, char *&g2, float& chg1, float& chg2);
 	uint32_t style(const char *g, int pos);
-	const char* getSimplest() { return "6, 1.05, 1.05, 1.05, 0, 0, 0"; }
+	const char* getSimplest() { return "6, "/*"1, 1, 1, "*/"1.05, 1.05, 1.05, 0, 0, 0"; }
 
 	double xover_proportion;
Index: cpp/frams/genetics/genman.cpp
===================================================================
--- cpp/frams/genetics/genman.cpp	(revision 512)
+++ cpp/frams/genetics/genman.cpp	(revision 513)
@@ -203,14 +203,14 @@
 	int check1;
 	if (!gf) { canvalidate = false; return GENOPER_NOOPER; }
-	else check1 = gf->checkValidity(gg);
+	else check1 = gf->checkValidity(gg,g.getName().c_str());
 	if (!canvalidate) return check1; //just checking
 	if (check1 == GENOPER_OK) { canvalidate = false; return check1; }
 	char *g2 = strdup(gg);
-	if (gf->validate(g2) == GENOPER_NOOPER) { free(g2); canvalidate = false; return check1; }
+	if (gf->validate(g2,g.getName().c_str()) == GENOPER_NOOPER) { free(g2); canvalidate = false; return check1; }
 	if (check1 == GENOPER_NOOPER) //disaster: cannot check because there is no check operator
 	{
 		g.setGene(g2); free(g2); canvalidate = false; return GENOPER_NOOPER;
 	}
-	int check2 = gf->checkValidity(g2);
+	int check2 = gf->checkValidity(g2, "validated");
 	if (check2 == GENOPER_OK) g.setGene(g2);
 	free(g2);
@@ -238,5 +238,5 @@
 		return Geno(SString::empty(), -1, SString::empty(), SString::sprintf("GENOPER_NOOPER: Validate(): don't know how to handle genetic format %c", format));
 	char *g2 = strdup(geny.getGene().c_str()); //copy for validation
-	int res = gf->validate(g2);
+	int res = gf->validate(g2, geny.getName().c_str());
 	SString sg2 = g2;
 	free(g2);
@@ -537,10 +537,10 @@
 	{
 		string l;
-		if (oper_fx_list[i]->checkValidity("") != GENOPER_NOOPER) l += " checkValidity";
+		if (oper_fx_list[i]->checkValidity("","") != GENOPER_NOOPER) l += " checkValidity";
 		if (oper_fx_list[i]->getSimplest())
 		{
 			g = strdup(oper_fx_list[i]->getSimplest());
 			g2 = strdup(g);
-			if (oper_fx_list[i]->validate(g) != GENOPER_NOOPER) l += " validate";
+			if (oper_fx_list[i]->validate(g,"") != GENOPER_NOOPER) l += " validate";
 			if (oper_fx_list[i]->mutate(g, f1, m) != GENOPER_NOOPER) l += " mutate";
 			if (oper_fx_list[i]->crossOver(g, g2, f1, f2) != GENOPER_NOOPER) l += " crossover";
Index: cpp/frams/genetics/genoconv.h
===================================================================
--- cpp/frams/genetics/genoconv.h	(revision 512)
+++ cpp/frams/genetics/genoconv.h	(revision 513)
@@ -50,7 +50,6 @@
 
 	/// You have to reimplement this method.
-	/// If your converter cannot do its job, return empty string
-	/// (return SString();), any other return value is assumed
-	/// to be output genotype.
+	/// If your converter cannot do its job, return empty string - return SString();
+	/// Any other return value is assumed to be output genotype.
 	/// @param map if not null, mapping informaton is requested, converter should add conversion map to this object
 	virtual SString convert(SString &i, MultiMap *map) { return SString(); }
Index: cpp/frams/genetics/oper_fx.h
===================================================================
--- cpp/frams/genetics/oper_fx.h	(revision 512)
+++ cpp/frams/genetics/oper_fx.h	(revision 513)
@@ -92,7 +92,8 @@
 /**Checks a genotype for minor mistakes and major errors.
 \param geno genotype to be checked
+\param genoname name of the genotype to be checked
 \retval error_position 1-based (or 1 if no exact error position known)
 \retval GENOPER_OK when the genotype is fully valid, and can be translated by the converter with \b no modifications nor tweaks*/
-   virtual int checkValidity(const char *geno) {return GENOPER_NOOPER;}
+   virtual int checkValidity(const char *geno, const char *genoname) { return GENOPER_NOOPER; }
 
 /**Validates a genotype. The purpose of this function is to validate
@@ -100,6 +101,7 @@
 to introduce entirely new genes in place of an error.
 \param geno input/output: genotype to be validated
+\param genoname name of the genotype to be validated
 \retval GENOPER_OK must be returned in any case ("did my best to validate")*/
-   virtual int validate(char *&geno) {return GENOPER_NOOPER;}
+   virtual int validate(char *&geno, const char *genoname) { return GENOPER_NOOPER; }
 
 /**Mutates a genotype. Mutation should always change something.
