Index: cpp/frams/_demos/genoconv_test.cpp
===================================================================
--- cpp/frams/_demos/genoconv_test.cpp	(revision 727)
+++ cpp/frams/_demos/genoconv_test.cpp	(revision 732)
@@ -27,5 +27,5 @@
 		in_format = 'x';
 	}
-	SString convert(SString &i, MultiMap *map) { return SString("after conversion..."); }
+	SString convert(SString &i, MultiMap *map, bool using_checkpoints) { return SString("after conversion..."); }
 	~GenoConv_Test() {}
 };
@@ -42,5 +42,5 @@
 	}
 
-	SString convert(SString &i, MultiMap *map)
+	SString convert(SString &i, MultiMap *map, bool using_checkpoints)
 	{
 		Model mod;
@@ -53,5 +53,5 @@
 		return mod.getF0Geno().getGenes();
 	}
-	
+
 	~GenoConv_Test2() {}
 };
@@ -70,10 +70,10 @@
 		mapsupport = 1;
 	}
-	SString convert(SString &in, MultiMap *map);
+	SString convert(SString &in, MultiMap *map, bool using_checkpoints);
 	~GenoConv_Test3() {}
 };
 
 /** main converting routine - most important: direct conversion map example */
-SString GenoConv_Test3::convert(SString &in, MultiMap *map)
+SString GenoConv_Test3::convert(SString &in, MultiMap *map, bool using_checkpoints)
 {
 	SString dst;
@@ -116,4 +116,8 @@
 }
 
+// arguments:
+//     genotype (or - meaning "read from stdin") [default: X]
+//     target format [default: 0]
+//     "checkpoints" (just write this exact word) [default: not using checkpoints]
 int main(int argc, char *argv[])
 {
@@ -146,4 +150,5 @@
 		src = "X";
 	char dst = (argc > 2) ? *argv[2] : '0';
+	bool using_checkpoints = (argc > 3) ? (strcmp(argv[3], "checkpoints") == 0) : false;
 
 	printf("*** Source genotype:\n");
@@ -151,29 +156,51 @@
 	printGen(g1);
 	MultiMap m;
-	Geno g2 = g1.getConverted(dst, &m);
+	Geno g2 = g1.getConverted(dst, &m, using_checkpoints);
 	printf("*** Converted to f%c:\n", dst);
 	printGen(g2);
-	if (m.isEmpty())
-		printf("(conversion map not available)\n");
+
+	if (using_checkpoints)
+	{ // using Model with checkpoints
+		Model m1(g2, false, true);//true=using_checkpoints
+		printf("\nModel built from the converted f%c genotype has %d checkpoints\n", g2.getFormat(), m1.getCheckpointCount());
+		Model m2(g1, false, true);//true=using_checkpoints
+		printf("Model built from the source f%c genotype has %d checkpoints\n", g1.getFormat(), m2.getCheckpointCount());
+		// accessing individual checkpoint models (if available)
+		if (m1.getCheckpointCount() > 0)
+		{
+			int c = m1.getCheckpointCount() / 2;
+			Model *cm = m1.getCheckpoint(c);
+			printf("Checkpoint #%d (%d parts, %d joint, %d neurons)\n%s", c, cm->getPartCount(), cm->getJointCount(), cm->getNeuroCount(), cm->getF0Geno().getGenesAndFormat().c_str());
+		}
+	}
 	else
-	{
-		printf("Conversion map:\n");
-		m.print();
-		printConvMap(g1.getGenes(), g2.getGenes(), m);
-		printf("Reverse conversion map:\n");
-		MultiMap rm;
-		rm.addReversed(m);
-		rm.print();
-		printConvMap(g2.getGenes(), g1.getGenes(), rm);
-	}
-
-	Model mod1(g1, 1);
-	printf("\nModel map for f%c genotype:\n", g1.getFormat());
-	printModelMap(g1.getGenes(), mod1.getMap());
-	mod1.getMap().print();
-	Model mod2(g2, 1);
-	printf("\nModel map for f%c genotype:\n", g2.getFormat());
-	printModelMap(g2.getGenes(), mod2.getMap());
-	mod2.getMap().print();
+	{ // there is no mapping for checkpoints so it's nothing interesting to see here in the checkpoints mode
+		if (m.isEmpty())
+			printf("(conversion map not available)\n");
+		else
+		{
+			printf("Conversion map:\n");
+			m.print();
+			printConvMap(g1.getGenes(), g2.getGenes(), m);
+			printf("Reverse conversion map:\n");
+			MultiMap rm;
+			rm.addReversed(m);
+			rm.print();
+			printConvMap(g2.getGenes(), g1.getGenes(), rm);
+		}
+
+		Model mod1(g1, 1);
+		printf("\nModel map for f%c genotype:\n", g1.getFormat());
+		printModelMap(g1.getGenes(), mod1.getMap());
+		MultiMap mod1combined;
+		mod1combined.addCombined(mod1.getMap(), getModelDisplayMap());
+		mod1combined.print();
+		Model mod2(g2, 1);
+		printf("\nModel map for f%c genotype:\n", g2.getFormat());
+		printModelMap(g2.getGenes(), mod2.getMap());
+		MultiMap mod2combined;
+		mod2combined.addCombined(mod2.getMap(), getModelDisplayMap());
+		mod2combined.print();
+	}
 	return 0;
 }
