Index: cpp/frams/genetics/f1/conv_f1.cpp
===================================================================
--- cpp/frams/genetics/f1/conv_f1.cpp	(revision 726)
+++ cpp/frams/genetics/f1/conv_f1.cpp	(revision 732)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2017  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -14,5 +14,5 @@
 
 F1Props stdprops = { 1, 0, 1, 0.4, 0.25, 0.25, 0.25, 0.25, 0.0, 1.0, 1.0, 1,
-	0.2, 0.5, 0.5, 0.5 };
+0.2, 0.5, 0.5, 0.5 };
 
 class Builder
@@ -106,9 +106,9 @@
 
 /** main conversion function - with conversion map support */
-SString GenoConv_f1::convert(SString &i, MultiMap *map)
+SString GenoConv_f1::convert(SString &i, MultiMap *map, bool using_checkpoints)
 {
 	const char* g = i.c_str();
 	Builder builder(g, map ? 1 : 0);
-	builder.model.open();
+	builder.model.open(using_checkpoints);
 	builder.grow(-1, g, Pt3D_0, stdprops, -1); // uses Model::addFromString() to create model elements
 	if (builder.invalid) return SString();
@@ -242,4 +242,5 @@
 
 			if (c.muscle_reset_range) c.muscle_bend_range = 1.0; else c.muscle_reset_range = true;
+			model.checkpoint();
 			grow(part2, g + 1, Pt3D_0, c, branching_part);
 			return;
Index: cpp/frams/genetics/f1/conv_f1.h
===================================================================
--- cpp/frams/genetics/f1/conv_f1.h	(revision 726)
+++ cpp/frams/genetics/f1/conv_f1.h	(revision 732)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2017  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -69,5 +69,5 @@
 		mapsupport = 1;
 	}
-	SString convert(SString &i, MultiMap *map);
+	SString convert(SString &i, MultiMap *map, bool using_checkpoints);
 	~GenoConv_f1() {}
 };
Index: cpp/frams/genetics/geno.cpp
===================================================================
--- cpp/frams/genetics/geno.cpp	(revision 726)
+++ cpp/frams/genetics/geno.cpp	(revision 732)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -32,5 +32,5 @@
 	name = genname;
 	txt = comment;
-	setGenesAndFormat(genstring,genformat);
+	setGenesAndFormat(genstring, genformat);
 }
 
@@ -54,5 +54,5 @@
 					mapinshift = end + 1;
 					gencopy = genstring.substr(end + 1);
-					if ((end>0) && (genstring[end-1]=='\r')) end--;
+					if ((end > 0) && (genstring[end - 1] == '\r')) end--;
 					error_end = end;
 					if (end != 3) genformat = INVALID_FORMAT;
@@ -82,5 +82,5 @@
 				break;
 			}
-			if (!isalnum(genformat)) genformat=INVALID_FORMAT;
+			if (!isalnum(genformat)) genformat = INVALID_FORMAT;
 			if (genformat == INVALID_FORMAT)
 			{
@@ -93,5 +93,5 @@
 					cut = genstring.substr(0, error_end);
 				int lf = cut.indexOf('\n');
-				if (lf >= 0) { if ((lf>0)&&(cut[lf-1]=='\r')) lf--; cut = cut.substr(0, lf); }
+				if (lf >= 0) { if ((lf > 0) && (cut[lf - 1] == '\r')) lf--; cut = cut.substr(0, lf); }
 				sstringQuote(cut);
 				logPrintf("Geno", "init", LOG_ERROR, "Invalid genotype format declaration: '%s'%s", cut.c_str(), name.len() ? SString::sprintf(" in '%s'", name.c_str()).c_str() : "");
@@ -226,5 +226,5 @@
 	{
 		bool converter_missing;
-		Geno f0geno = g.getConverted('0', NULL, &converter_missing);
+		Geno f0geno = g.getConverted('0', NULL, false, &converter_missing);
 		if (converter_missing)
 			return -1;//no result
@@ -295,5 +295,5 @@
 }
 
-Geno Geno::getConverted(char otherformat, MultiMap *m, bool *converter_missing)
+Geno Geno::getConverted(char otherformat, MultiMap *m, bool using_checkpoints, bool *converter_missing)
 {
 	if (otherformat == getFormat()) { if (converter_missing) *converter_missing = false; return *this; }
@@ -302,8 +302,8 @@
 	if (converters)
 	{
-		if ((otherformat == '0') && (!m))
+		if ((otherformat == '0') && (!m) && (!using_checkpoints))
 		{
 			if (!f0gen)
-				f0gen = new Geno(converters->convert(*this, otherformat, NULL, converter_missing));
+				f0gen = new Geno(converters->convert(*this, otherformat, NULL, using_checkpoints, converter_missing));
 			else
 			{
@@ -313,5 +313,5 @@
 		}
 		else
-			return converters->convert(*this, otherformat, m, converter_missing);
+			return converters->convert(*this, otherformat, m, using_checkpoints, converter_missing);
 	}
 #endif
Index: cpp/frams/genetics/geno.h
===================================================================
--- cpp/frams/genetics/geno.h	(revision 726)
+++ cpp/frams/genetics/geno.h	(revision 732)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2016  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -90,5 +90,5 @@
 
 	/** @param genformat=-1 -> detect genotype format from genstring comment (like the constructor does), else specify the valid format in genformat and pure genes in genstring. */
-	void setGenesAndFormat(const SString& genstring, char genformat=-1);
+	void setGenesAndFormat(const SString& genstring, char genformat = -1);
 	/** g must be pure genes, without format. For the standard behavior use setGenesAndFormat() */
 	void setGenesAssumingSameFormat(const SString& g);
@@ -107,5 +107,5 @@
 	/// make converted version of the genotype.
 	/// @param converter_missing optional output parameter (ignored when NULL). Receives true if the conversion fails because of the lack of appropriate converter(s) (the returned Geno is always invalid in this case). Receives false if the genotype was converted by a converter or a converter chain (the returned Geno can be valid or invalid, depending on the converter's decision).
-	Geno getConverted(char otherformat, MultiMap *m = 0, bool *converter_missing = NULL);
+	Geno getConverted(char otherformat, MultiMap *m = 0, bool using_checkpoints = false, bool *converter_missing = NULL);
 
 	/// @return -1 = before first char in the string
Index: cpp/frams/genetics/genoconv.cpp
===================================================================
--- cpp/frams/genetics/genoconv.cpp	(revision 726)
+++ cpp/frams/genetics/genoconv.cpp	(revision 732)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -81,5 +81,5 @@
 
 GenoConvManager::GenoConvManager()
-:param(this)
+	:param(this)
 {
 }
@@ -166,5 +166,5 @@
 }
 
-Geno GenoConvManager::convert(Geno &in, char format, MultiMap *map, bool *converter_missing)
+Geno GenoConvManager::convert(Geno &in, char format, MultiMap *map, bool using_checkpoints, bool *converter_missing)
 {
 	if (in.getFormat() == format) { if (converter_missing) *converter_missing = false; return in; }
@@ -187,8 +187,8 @@
 	{
 		GenoConverter *gk = (GenoConverter*)converters(*t);
-		tmp = gk->convert(tmp, mapavail ? &tmpmap : 0);
+		tmp = gk->convert(tmp, mapavail ? &tmpmap : 0, using_checkpoints);
 		if (!tmp.len())
 		{
-			string t=ssprintf("f%c->f%c conversion failed (%s)", gk->in_format, gk->out_format, gk->name);
+			string t = ssprintf("f%c->f%c conversion failed (%s)", gk->in_format, gk->out_format, gk->name);
 			return Geno(0, 0, 0, t.c_str());
 		}
Index: cpp/frams/genetics/genoconv.h
===================================================================
--- cpp/frams/genetics/genoconv.h	(revision 726)
+++ cpp/frams/genetics/genoconv.h	(revision 732)
@@ -1,4 +1,4 @@
 // This file is a part of Framsticks SDK.  http://www.framsticks.com/
-// Copyright (C) 1999-2015  Maciej Komosinski and Szymon Ulatowski.
+// Copyright (C) 1999-2018  Maciej Komosinski and Szymon Ulatowski.
 // See LICENSE.txt for details.
 
@@ -53,5 +53,5 @@
 	/// 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(); }
+	virtual SString convert(SString &i, MultiMap *map, bool using_checkpoints) { return SString(); }
 
 	virtual ~GenoConverter() {}
@@ -78,5 +78,5 @@
 	/// make a genotype in other format. genotype will be invalid
 	/// if GenoConvManager cannot convert it.
-	Geno convert(Geno &in, char format, MultiMap *map = 0, bool *converter_missing = NULL);
+	Geno convert(Geno &in, char format, MultiMap *map = 0, bool using_checkpoints = false, bool *converter_missing = NULL);
 	/// register GenoConverter, the added object will be automatically deleted when GenoConvManager is destructed (call removeConverter() if this is not desirable)
 	void addConverter(GenoConverter *conv);
