Index: /cpp/frams/_demos/f0_variants_test.cpp
===================================================================
--- /cpp/frams/_demos/f0_variants_test.cpp	(revision 998)
+++ /cpp/frams/_demos/f0_variants_test.cpp	(revision 999)
@@ -98,5 +98,5 @@
 		g.getFormat().c_str(), g.getComment().c_str());
 
-	Model m(g, Model::SHAPE_UNKNOWN);//.getConverted('0'));
+	Model m(g, Model::SHAPETYPE_UNKNOWN);//.getConverted('0'));
 
 	if (!m.isValid())
Index: /cpp/frams/_demos/full_props.cpp
===================================================================
--- /cpp/frams/_demos/full_props.cpp	(revision 998)
+++ /cpp/frams/_demos/full_props.cpp	(revision 999)
@@ -75,5 +75,5 @@
 		loadSString(VirtFILE::Vstdin, gen);
 	Geno g(gen);
-	Model m(g, Model::SHAPE_UNKNOWN);
+	Model m(g, Model::SHAPETYPE_UNKNOWN);
 
 	if (!m.isValid())
Index: /cpp/frams/_demos/genoconv_test.cpp
===================================================================
--- /cpp/frams/_demos/genoconv_test.cpp	(revision 998)
+++ /cpp/frams/_demos/genoconv_test.cpp	(revision 999)
@@ -212,7 +212,7 @@
 	if (using_checkpoints)
 	{ // using Model with checkpoints
-		Model m1(g2, Model::SHAPE_UNKNOWN, false, true);//true=using_checkpoints
+		Model m1(g2, Model::SHAPETYPE_UNKNOWN, false, true);//true=using_checkpoints
 		printf("\nModel built from the converted f%s genotype has %d checkpoints\n", g2.getFormat().c_str(), m1.getCheckpointCount());
-		Model m2(g1, Model::SHAPE_UNKNOWN, false, true);//true=using_checkpoints
+		Model m2(g1, Model::SHAPETYPE_UNKNOWN, false, true);//true=using_checkpoints
 		printf("Model built from the source f%s genotype has %d checkpoints\n", g1.getFormat().c_str(), m2.getCheckpointCount());
 		// accessing individual checkpoint models (if available)
@@ -240,5 +240,5 @@
 		}
 
-		Model mod1(g1, Model::SHAPE_UNKNOWN, 1);
+		Model mod1(g1, Model::SHAPETYPE_UNKNOWN, 1);
 		printf("\nModel map for f%s genotype:\n", g1.getFormat().c_str());
 		ModelDisplayMap dm1(mod1);
@@ -247,5 +247,5 @@
 		mod1combined.addCombined(mod1.getMap(), dm1.getMap());
 		mod1combined.print();
-		Model mod2(g2, Model::SHAPE_UNKNOWN, 1);
+		Model mod2(g2, Model::SHAPETYPE_UNKNOWN, 1);
 		printf("\nModel map for f%s genotype:\n", g2.getFormat().c_str());
 		ModelDisplayMap dm2(mod2);
Index: /cpp/frams/_demos/genomanipulation.cpp
===================================================================
--- /cpp/frams/_demos/genomanipulation.cpp	(revision 998)
+++ /cpp/frams/_demos/genomanipulation.cpp	(revision 999)
@@ -196,10 +196,10 @@
 			printf(cl->getPreferredOutput() ? "and provides meaningful output signal (getPreferredOutput()==1).\n" : "and doesn't provide useful output signal (getPreferredOutput()==0).\n");
 			printf("Instances of '%s' can be used in models having ", cl->getName().c_str());
-			if (cl->getSupportedShapeTypes() == NeuroClass::SUPPORTED_SHAPE_ALL)
+			if (cl->getSupportedShapeTypes() == NeuroClass::SUPPORTED_SHAPETYPE_ALL)
 				printf("any shape types.\n");
 			else
 			{
 				printf("shape types:");
-				for (int i = Model::SHAPE_FIRST; i <= Model::SHAPE_LAST; i++)
+				for (int i = Model::SHAPETYPE_FIRST; i <= Model::SHAPETYPE_LAST; i++)
 					if (cl->isShapeTypeSupported((Model::ShapeType)i))
 						printf(" '%s'", Model::getShapeTypeName((Model::ShapeType)i));
@@ -209,5 +209,5 @@
 			{
 				printf("Instances of '%s' can be attached to Joints having ", cl->getName().c_str());
-				if (cl->getSupportedJointShapes() == NeuroClass::SUPPORTED_JOINT_ALL)
+				if (cl->getSupportedJointShapes() == NeuroClass::SUPPORTED_JOINTSHAPE_ALL)
 					printf("any shapes");
 				else
@@ -311,5 +311,5 @@
 		g.getFormat().c_str(), g.getComment().c_str());
 
-	Model m(g, Model::SHAPE_UNKNOWN);//.getConverted('0'));
+	Model m(g, Model::SHAPETYPE_UNKNOWN);//.getConverted('0'));
 
 	if (!m.isValid())
Index: /cpp/frams/_demos/geometry/geometrytestutils.cpp
===================================================================
--- /cpp/frams/_demos/geometry/geometrytestutils.cpp	(revision 998)
+++ /cpp/frams/_demos/geometry/geometrytestutils.cpp	(revision 999)
@@ -63,5 +63,5 @@
 		if ((genoIndex == count) || (strcmp(genotype->name.c_str(), genoName) == 0))
 		{
-			Model model(genotype->genotype, Model::SHAPE_UNKNOWN);
+			Model model(genotype->genotype, Model::SHAPETYPE_UNKNOWN);
 
 			if (!model.isValid())
Index: /cpp/frams/_demos/multiline_f0_test.cpp
===================================================================
--- /cpp/frams/_demos/multiline_f0_test.cpp	(revision 998)
+++ /cpp/frams/_demos/multiline_f0_test.cpp	(revision 999)
@@ -30,5 +30,5 @@
 		g.getFormat().c_str(), g.getComment().c_str());
 
-	Model m(g, Model::SHAPE_UNKNOWN);//.getConverted('0'));
+	Model m(g, Model::SHAPETYPE_UNKNOWN);//.getConverted('0'));
 
 	if (!m.isValid())
Index: /cpp/frams/_demos/neuro_layout_test.cpp
===================================================================
--- /cpp/frams/_demos/neuro_layout_test.cpp	(revision 998)
+++ /cpp/frams/_demos/neuro_layout_test.cpp	(revision 999)
@@ -104,5 +104,5 @@
 	Geno g(gen);
 	if (!g.isValid()) { puts("invalid genotype"); return 5; }
-	Model m(g, Model::SHAPE_UNKNOWN);
+	Model m(g, Model::SHAPETYPE_UNKNOWN);
 	if (!m.getNeuroCount()) { puts("no neural network"); return 1; }
 	printf("%d neurons,", m.getNeuroCount());
Index: /cpp/frams/_demos/neuro_test.cpp
===================================================================
--- /cpp/frams/_demos/neuro_test.cpp	(revision 998)
+++ /cpp/frams/_demos/neuro_test.cpp	(revision 999)
@@ -77,5 +77,5 @@
 	Geno g(gen);
 	if (!g.isValid()) { puts("invalid genotype"); return 5; }
-	Model m(g, Model::SHAPE_UNKNOWN);
+	Model m(g, Model::SHAPETYPE_UNKNOWN);
 	if (!m.getNeuroCount()) { puts("no neural network"); return 1; }
 	printf("%d neurons,", m.getNeuroCount());
Index: /cpp/frams/_demos/shapeconvert.cpp
===================================================================
--- /cpp/frams/_demos/shapeconvert.cpp	(revision 998)
+++ /cpp/frams/_demos/shapeconvert.cpp	(revision 999)
@@ -67,5 +67,5 @@
 		loadSString(VirtFILE::Vstdin, gen);
 	Geno g(gen);
-	Model m(g, Model::SHAPE_UNKNOWN);
+	Model m(g, Model::SHAPETYPE_UNKNOWN);
 
 	if (!m.isValid())
@@ -75,5 +75,5 @@
 	}
 
-	if (m.getShapeType() != Model::SHAPE_BALL_AND_STICK)
+	if (m.getShapeType() != Model::SHAPETYPE_BALL_AND_STICK)
 	{
 		logPrintf("", "shapeconvert", LOG_ERROR, "Only ball-and-stick models can be converted");
Index: /cpp/frams/genetics/f4/f4_oper.cpp
===================================================================
--- /cpp/frams/genetics/f4/f4_oper.cpp	(revision 998)
+++ /cpp/frams/genetics/f4/f4_oper.cpp	(revision 999)
@@ -164,5 +164,5 @@
 			{
 				// make neuron
-				NeuroClass *rndclass = GenoOperators::getRandomNeuroClass(Model::SHAPE_BALL_AND_STICK);
+				NeuroClass *rndclass = GenoOperators::getRandomNeuroClass(Model::SHAPETYPE_BALL_AND_STICK);
 				if (rndclass == NULL)
 				{
@@ -434,5 +434,5 @@
 	{
 		// '*', 'G', 'T', or 'S', 1/4 chance each
-		nc = GenoOperators::getRandomNeuroClassWithOutputAndNoInputs(Model::SHAPE_BALL_AND_STICK);
+		nc = GenoOperators::getRandomNeuroClassWithOutputAndNoInputs(Model::SHAPETYPE_BALL_AND_STICK);
 	}
 	if (nc != NULL)
@@ -470,5 +470,5 @@
 		if (rndDouble(1) < 0.2f)
 		{
-			cl = GenoOperators::getRandomNeuroClassWithOutputAndNoInputs(Model::SHAPE_BALL_AND_STICK);
+			cl = GenoOperators::getRandomNeuroClassWithOutputAndNoInputs(Model::SHAPETYPE_BALL_AND_STICK);
 			if (cl != NULL)
 			{
Index: /cpp/frams/genetics/fB/fB_oper.cpp
===================================================================
--- /cpp/frams/genetics/fB/fB_oper.cpp	(revision 998)
+++ /cpp/frams/genetics/fB/fB_oper.cpp	(revision 999)
@@ -287,5 +287,5 @@
 		int rndid = rndUint(tokenized.size()); // select random insertion point
 		std::advance(it, rndid);
-		NeuroClass *cls = getRandomNeuroClass(Model::SHAPE_BALL_AND_STICK);
+		NeuroClass *cls = getRandomNeuroClass(Model::SHAPETYPE_BALL_AND_STICK);
 		if (cls)
 		{
Index: /cpp/frams/genetics/fH/fH_oper.cpp
===================================================================
--- /cpp/frams/genetics/fH/fH_oper.cpp	(revision 998)
+++ /cpp/frams/genetics/fH/fH_oper.cpp	(revision 999)
@@ -255,5 +255,5 @@
 		fH_Handle *handle = NULL;
 		method = FH_OPCOUNT + roulette(addoperations, FH_ADD_OPCOUNT);
-		if (getActiveNeuroClassCount(Model::SHAPE_BALL_AND_STICK) == 0) method = FH_OPCOUNT + FH_ADD_STICK;
+		if (getActiveNeuroClassCount(Model::SHAPETYPE_BALL_AND_STICK) == 0) method = FH_OPCOUNT + FH_ADD_STICK;
 		switch (method - FH_OPCOUNT)
 		{
@@ -440,5 +440,5 @@
 	if (userandomclass)
 	{
-		NeuroClass *nc = getRandomNeuroClass(Model::SHAPE_BALL_AND_STICK); // checking that neuron classes are available should be done before
+		NeuroClass *nc = getRandomNeuroClass(Model::SHAPETYPE_BALL_AND_STICK); // checking that neuron classes are available should be done before
 		det = nc->getName();
 	}
Index: /cpp/frams/genetics/fL/fL_oper.cpp
===================================================================
--- /cpp/frams/genetics/fL/fL_oper.cpp	(revision 998)
+++ /cpp/frams/genetics/fL/fL_oper.cpp	(revision 999)
@@ -141,5 +141,5 @@
 		{
 			SString det;
-			NeuroClass *cls = getRandomNeuroClass(Model::SHAPE_BALL_AND_STICK);
+			NeuroClass *cls = getRandomNeuroClass(Model::SHAPETYPE_BALL_AND_STICK);
 			det = cls->getName();
 			Geno_fH::mutateNeuronProperties(det);
@@ -201,5 +201,5 @@
 			return creature->words["S"];
 		case FL_ADD_NEURO:
-			if (getActiveNeuroClassCount(Model::SHAPE_BALL_AND_STICK) == 0)
+			if (getActiveNeuroClassCount(Model::SHAPETYPE_BALL_AND_STICK) == 0)
 				return creature->words["S"];
 			else
Index: /cpp/frams/genetics/geno.cpp
===================================================================
--- /cpp/frams/genetics/geno.cpp	(revision 998)
+++ /cpp/frams/genetics/geno.cpp	(revision 999)
@@ -260,5 +260,5 @@
 	if (Geno::formatIsOneOf(g.getFormat(), Geno::F0_FORMAT_LIST))
 	{
-		Model mod(g, Model::SHAPE_UNKNOWN);
+		Model mod(g, Model::SHAPETYPE_UNKNOWN);
 		return mod.isValid();
 	}
Index: /cpp/frams/genetics/genoconv.h
===================================================================
--- /cpp/frams/genetics/genoconv.h	(revision 998)
+++ /cpp/frams/genetics/genoconv.h	(revision 999)
@@ -34,15 +34,13 @@
 
 /// Base class for all Geno Converters.
-/// In constructor you have to set public fields
-/// indicating your identity and supported formats.
+/// In constructor you have to set public fields indicating your identity and supported formats.
 /// Each converter serves one in-out format pair.
-/// Instance of your converter should be registered
-/// in GenoConvManager.
+/// The instance of your converter should be registered in GenoConvManager.
 class GenoConverter
 {
 public:
 	const char *name;	//< converter name (short)
-	SString in_format,	//< input format, eg. "1"
-		out_format;	//< output format, eg. "0"
+	SString in_format,	//< input format, e.g. "1"
+		out_format;	//< output format, e.g. "0"
 	paInt enabled;	//< don't touch this! (used by configuration module)
 	paInt mapsupport; //< set to 1 if your converter supports genotype mapping
Index: /cpp/frams/model/geometry/modelgeoclass.cpp
===================================================================
--- /cpp/frams/model/geometry/modelgeoclass.cpp	(revision 998)
+++ /cpp/frams/model/geometry/modelgeoclass.cpp	(revision 999)
@@ -74,5 +74,5 @@
 	if (m != NULL)
 	{
-	        if (m->getShapeType() == Model::SHAPE_BALL_AND_STICK)
+	        if (m->getShapeType() == Model::SHAPETYPE_BALL_AND_STICK)
 			{
 			Model *converted = new Model;
Index: /cpp/frams/model/model.cpp
===================================================================
--- /cpp/frams/model/model.cpp	(revision 998)
+++ /cpp/frams/model/model.cpp	(revision 999)
@@ -17,5 +17,5 @@
 }
 
-void Model::init(ShapeType sh)
+void Model::init(ShapeType shtype)
 {
 	partmappingchanged = 0;
@@ -29,11 +29,11 @@
 	f0map = 0;
 	f0genoknown = 1;
-	shape = SHAPE_UNKNOWN;
-	declared_shape = sh;
-}
-
-void Model::declareShapeType(ShapeType sh)
-{
-	declared_shape = sh;
+	shapetype = SHAPETYPE_UNKNOWN;
+	declared_shapetype = shtype;
+}
+
+void Model::declareShapeType(ShapeType shtype)
+{
+	declared_shapetype = shtype;
 }
 
@@ -56,6 +56,6 @@
 	geno = mod.geno;
 	f0genoknown = 0;
-	shape = mod.shape;
-	declared_shape = mod.declared_shape;
+	shapetype = mod.shapetype;
+	declared_shapetype = mod.declared_shapetype;
 	startenergy = mod.startenergy;
 	modelfromgenotype = mod.modelfromgenotype;
@@ -117,5 +117,5 @@
 	:autobuildmaps(buildmaps)
 {
-	init(mod.declared_shape);
+	init(mod.declared_shapetype);
 	open(_using_checkpoints, _is_checkpoint);
 	internalCopy(mod);
@@ -169,5 +169,5 @@
 	delMap();
 	delF0Map();
-	init(declared_shape);
+	init(declared_shapetype);
 	geno = Geno();
 	f0geno = Geno();
@@ -340,8 +340,8 @@
 	f0warnposition = -1;
 	MultiMap *convmap = autobuildmaps ? new MultiMap() : NULL;
-	if (declared_shape == SHAPE_UNKNOWN)
+	if (declared_shapetype == SHAPETYPE_UNKNOWN)
 		f0geno = geno.getConverted(Geno::F0_FORMAT_LIST, convmap, using_checkpoints);
 	else
-		f0geno = geno.getConverted(genoFormatForShapeType(declared_shape), convmap, using_checkpoints);
+		f0geno = geno.getConverted(genoFormatForShapeType(declared_shapetype), convmap, using_checkpoints);
 	f0genoknown = 1;
 	if (f0geno.isInvalid())
@@ -351,5 +351,5 @@
 		return;
 	}
-	if (declared_shape == SHAPE_UNKNOWN)
+	if (declared_shapetype == SHAPETYPE_UNKNOWN)
 		declareShapeType(shapeTypeForGenoFormat(f0geno.getFormat()));
 	SString f0txt = f0geno.getGenes();
@@ -560,7 +560,7 @@
 	switch (st)
 	{
-	case SHAPE_BALL_AND_STICK:
+	case SHAPETYPE_BALL_AND_STICK:
 		return "0";
-	case SHAPE_SOLIDS:
+	case SHAPETYPE_SOLIDS:
 		return "0s";
 	default:
@@ -572,9 +572,9 @@
 {
 	if (format == "0")
-		return SHAPE_BALL_AND_STICK;
+		return SHAPETYPE_BALL_AND_STICK;
 	else if (format == "0s")
-		return SHAPE_SOLIDS;
+		return SHAPETYPE_SOLIDS;
 	else
-		return SHAPE_UNKNOWN;
+		return SHAPETYPE_UNKNOWN;
 
 }
@@ -584,9 +584,9 @@
 	switch (sh)
 	{
-	case SHAPE_BALL_AND_STICK: return "ball-and-stick";
-	case SHAPE_SOLIDS: return "solid shapes";
-	case SHAPE_UNKNOWN: return "unknown";
-
-	case SHAPE_ILLEGAL:
+	case SHAPETYPE_BALL_AND_STICK: return "ball-and-stick";
+	case SHAPETYPE_SOLIDS: return "solid shapes";
+	case SHAPETYPE_UNKNOWN: return "unknown";
+
+	case SHAPETYPE_ILLEGAL:
 	default:
 		return "illegal";
@@ -894,5 +894,5 @@
 	int i, k;
 	int ret = 1;
-	shape = SHAPE_UNKNOWN;
+	shapetype = SHAPETYPE_UNKNOWN;
 	updateRefno();
 	if ((parts.size() == 0) && (neurons.size() == 0)) return 0;
@@ -931,11 +931,11 @@
 			if (p->p.y + p->size > bbmax.y) bbmax.y = p->p.y + p->size;
 			if (p->p.z + p->size > bbmax.z) bbmax.z = p->p.z + p->size;
-			if (shape == SHAPE_UNKNOWN)
-				shape = (p->shape == Part::SHAPE_BALL_AND_STICK) ? SHAPE_BALL_AND_STICK : SHAPE_SOLIDS;
-			else if (shape != SHAPE_ILLEGAL)
+			if (shapetype == SHAPETYPE_UNKNOWN)
+				shapetype = (p->shape == Part::SHAPE_BALL) ? SHAPETYPE_BALL_AND_STICK : SHAPETYPE_SOLIDS;
+			else if (shapetype != SHAPETYPE_ILLEGAL)
 			{
-				if ((p->shape == Part::SHAPE_BALL_AND_STICK) ^ (shape == SHAPE_BALL_AND_STICK))
+				if ((p->shape == Part::SHAPE_BALL) ^ (shapetype == SHAPETYPE_BALL_AND_STICK))
 				{
-					shape = SHAPE_ILLEGAL;
+					shapetype = SHAPETYPE_ILLEGAL;
 					logPrintf("Model", "internalCheck", LOG_WARN, "Inconsistent part shapes (mixed ball-and-stick and solids shape types)%s", nameForErrors().c_str());
 				}
@@ -1002,5 +1002,5 @@
 				if ((check != LIVE_CHECK) && (check != CHECKPOINT_CHECK))
 				{
-					if (j->shape == Joint::SHAPE_BALL_AND_STICK)
+					if (j->shape == Joint::SHAPE_STICK)
 					{
 						if (j->d() > getMaxJoint().d.x)
@@ -1017,9 +1017,9 @@
 				ret = 0;
 			}
-			if (shape != SHAPE_ILLEGAL)
+			if (shapetype != SHAPETYPE_ILLEGAL)
 			{
-				if ((j->shape == Joint::SHAPE_BALL_AND_STICK) ^ (shape == SHAPE_BALL_AND_STICK))
+				if ((j->shape == Joint::SHAPE_STICK) ^ (shapetype == SHAPETYPE_BALL_AND_STICK))
 				{
-					shape = SHAPE_ILLEGAL;
+					shapetype = SHAPETYPE_ILLEGAL;
 					logPrintf("Model", "internalCheck", LOG_WARN, "Inconsistent joint shapes (mixed old and new shapes)%s", nameForErrors().c_str());
 				}
@@ -1109,9 +1109,9 @@
 	}
 
-	if (shape == SHAPE_ILLEGAL)
+	if (shapetype == SHAPETYPE_ILLEGAL)
 		ret = 0;
-	else if ((declared_shape != SHAPE_UNKNOWN) && (declared_shape != shape))
-	{
-		logPrintf("Model", "internalCheck", LOG_ERROR, "Model shape type '%s' does not match the declared type '%s'", getShapeTypeName(shape), getShapeTypeName(declared_shape));
+	else if ((declared_shapetype != SHAPETYPE_UNKNOWN) && (declared_shapetype != shapetype))
+	{
+		logPrintf("Model", "internalCheck", LOG_ERROR, "Model shape type '%s' does not match the declared type '%s'", getShapeTypeName(shapetype), getShapeTypeName(declared_shapetype));
 		ret = 0;
 	}
@@ -1335,5 +1335,5 @@
 {
 	using_model = converted_model = NULL;
-	if (m.getShapeType() == Model::SHAPE_BALL_AND_STICK)
+	if (m.getShapeType() == Model::SHAPETYPE_BALL_AND_STICK)
 	{
 		converted_model = new Model;
Index: /cpp/frams/model/model.h
===================================================================
--- /cpp/frams/model/model.h	(revision 998)
+++ /cpp/frams/model/model.h	(revision 999)
@@ -101,6 +101,6 @@
 	};
 protected:
-	ShapeType shape;
-	ShapeType declared_shape;
+	ShapeType shapetype;
+	ShapeType declared_shapetype;
 
 	SString nameForErrors() const;
@@ -134,5 +134,5 @@
 	int isValid() const { return buildstatus == valid; }
 	int getErrorPosition(bool includingwarnings = false);
-	ShapeType getShapeType() const { return shape; }
+	ShapeType getShapeType() const { return shapetype; }
 	bool isUsingCheckpoints() const { return using_checkpoints; }
 	bool isCheckpoint() const { return is_checkpoint; }
@@ -155,5 +155,5 @@
 
 	/// Create empty model with invalid empty genotype, declaring the shape type for later operations
-	Model(ShapeType sh = SHAPE_UNKNOWN);
+	Model(ShapeType sh = SHAPETYPE_UNKNOWN);
 
 	/// Change the declared shape type of the Model
@@ -333,7 +333,7 @@
 
 	/** create new Part and add it to the model. @see addPart()  */
-	Part *addNewPart(Part::Shape shape = Part::SHAPE_BALL_AND_STICK) { return addPart(new Part(shape)); }
+	Part *addNewPart(Part::Shape shape = Part::SHAPE_BALL) { return addPart(new Part(shape)); }
 	/** create new Joint and add it to the model. @see addJoint() */
-	Joint *addNewJoint(Part *p1 = NULL, Part *p2 = NULL, Joint::Shape shape = Joint::SHAPE_BALL_AND_STICK) { Joint *j = addJoint(new Joint()); j->shape = shape; if ((p1 != NULL) && (p2 != NULL)) j->attachToParts(p1, p2); return j; }
+	Joint *addNewJoint(Part *p1 = NULL, Part *p2 = NULL, Joint::Shape shape = Joint::SHAPE_STICK) { Joint *j = addJoint(new Joint()); j->shape = shape; if ((p1 != NULL) && (p2 != NULL)) j->attachToParts(p1, p2); return j; }
 	/** create new Neuro and add it to the model. @see addNeuro() */
 	Neuro *addNewNeuro() { return addNeuro(new Neuro()); }
Index: /cpp/frams/model/modelobj.cpp
===================================================================
--- /cpp/frams/model/modelobj.cpp	(revision 998)
+++ /cpp/frams/model/modelobj.cpp	(revision 999)
@@ -58,5 +58,5 @@
 void ModelObj::p_newfromstring(ExtValue *args, ExtValue *ret)
 {
-	*ret = makeDynamicObject(new Model(Geno(args[0].getString()), Model::SHAPE_UNKNOWN));
+	*ret = makeDynamicObject(new Model(Geno(args[0].getString()), Model::SHAPETYPE_UNKNOWN));
 }
 
@@ -65,5 +65,5 @@
 	Geno *g = GenoObj::fromObject(args[0].getObject());
 	if (g)
-		*ret = makeDynamicObject(new Model(*g, Model::SHAPE_UNKNOWN));
+		*ret = makeDynamicObject(new Model(*g, Model::SHAPETYPE_UNKNOWN));
 	else
 		ret->setEmpty();
@@ -74,10 +74,10 @@
 	Model *m = NULL;
 	if (args[0].getType() == TString)
-		m = new Model(Geno(args[0].getString()), Model::SHAPE_UNKNOWN, false, true);
+		m = new Model(Geno(args[0].getString()), Model::SHAPETYPE_UNKNOWN, false, true);
 	else
 	{
 		Geno *g = GenoObj::fromObject(args[0].getObject(), false);
 		if (g)
-			m = new Model(*g, Model::SHAPE_UNKNOWN, false, true);
+			m = new Model(*g, Model::SHAPETYPE_UNKNOWN, false, true);
 		else
 			logPrintf("Model", "newWithCheckpoints", LOG_ERROR, "Geno or string expected, %s found", args[0].typeDescription().c_str());
@@ -178,5 +178,5 @@
 void ModelObj::get_solid_model(ExtValue *ret)
 {
-	if (getShapeType() != Model::SHAPE_BALL_AND_STICK)
+	if (getShapeType() != Model::SHAPETYPE_BALL_AND_STICK)
 		ret->setEmpty();
 	Model *m = new Model;
Index: /cpp/frams/model/modelparts.cpp
===================================================================
--- /cpp/frams/model/modelparts.cpp	(revision 998)
+++ /cpp/frams/model/modelparts.cpp	(revision 999)
@@ -629,5 +629,5 @@
 	switch (sh)
 	{
-	case SHAPE_BALL_AND_STICK: return "ball-and-stick";
+	case SHAPE_BALL: return "ball[-and-stick]";
 	case SHAPE_ELLIPSOID: return "ellipsoid";
 	case SHAPE_CUBOID: return "cuboid";
@@ -727,5 +727,5 @@
 	switch (sh)
 	{
-	case SHAPE_BALL_AND_STICK: return "ball-and-stick";
+	case SHAPE_STICK: return "[ball-and-]stick";
 	case SHAPE_FIXED: return "fixed";
 	case SHAPE_HINGE_X: return "hinge x";
Index: /cpp/frams/model/modelparts.h
===================================================================
--- /cpp/frams/model/modelparts.h	(revision 998)
+++ /cpp/frams/model/modelparts.h	(revision 999)
@@ -34,7 +34,8 @@
 {
 public:
-	enum ShapeType { SHAPE_BALL_AND_STICK = 0, SHAPE_SOLIDS = 1, SHAPE_UNKNOWN, SHAPE_ILLEGAL, ///< 0 and 1 have special significance - these values allow for bit operations.
-			 SHAPE_FIRST = SHAPE_BALL_AND_STICK, SHAPE_LAST = SHAPE_SOLIDS // for iteration
-	}; 
+	enum ShapeType {
+		SHAPETYPE_BALL_AND_STICK = 0, SHAPETYPE_SOLIDS = 1, SHAPETYPE_UNKNOWN, SHAPETYPE_ILLEGAL, ///< 0 and 1 have special significance - these values allow for bit operations.
+		SHAPETYPE_FIRST = SHAPETYPE_BALL_AND_STICK, SHAPETYPE_LAST = SHAPETYPE_SOLIDS // for iteration
+	};
 };
 
@@ -73,7 +74,7 @@
 };
 
-/// Part is the only real physical object in the Framsticks creature.
+/// Part is the only real physical object in creatures in Framsticks.
 /// You can use this class for querying and adjusting constructed
-/// model properties
+/// model properties.
 class Part : public PartBase
 {
@@ -96,6 +97,8 @@
 	///
 	paInt shape;///default=old Framsticks compatible, do not mix with shapes>0
-	enum Shape { SHAPE_BALL_AND_STICK = 0, SHAPE_ELLIPSOID = 1, SHAPE_CUBOID = 2, SHAPE_CYLINDER = 3,
-		     SHAPE_FIRST = SHAPE_BALL_AND_STICK, SHAPE_LAST = SHAPE_CYLINDER // for iteration
+	enum Shape {
+		SHAPE_BALL = 0, ///<  for "ball and stick" shape type model only.
+		SHAPE_ELLIPSOID = 1, SHAPE_CUBOID = 2, SHAPE_CYLINDER = 3,
+		SHAPE_FIRST = SHAPE_BALL, SHAPE_LAST = SHAPE_CYLINDER // for iteration
 	};
 	static const char* getShapeName(Shape sh);
@@ -110,5 +113,5 @@
 	double vsize;
 
-	Part(enum Shape s = SHAPE_BALL_AND_STICK);
+	Part(enum Shape s = SHAPE_BALL);
 	Part(const Part &src) :PartBase(getDefaultStyle()) { operator=(src); }
 	void operator=(const Part &src);
@@ -151,9 +154,9 @@
 	class Pt3D rot;	///< orientation delta between parts expressed as 3 angles
 	enum Shape {
-		SHAPE_BALL_AND_STICK = 0, ///<  old Framsticks compatible, creates a physical rod between parts (cylinder or cuboid), do not mix with part.shape>0
+		SHAPE_STICK = 0, ///<  for "ball and stick" shape type model, creates a physical (cylinder or cuboid) rod between parts. Do not mix with part.shape>0.
 		SHAPE_FIXED = 1, ///< merge parts into one physical entity
 		SHAPE_HINGE_X = 2, ///< hinge connection, revolving around X axis defined by hinge_pos and hinge_rot
 		SHAPE_HINGE_XY = 3, ///< double hinge connection, revolving around X and Y axes defined by hinge_pos and hinge_rot
-		SHAPE_FIRST = SHAPE_BALL_AND_STICK, SHAPE_LAST = SHAPE_HINGE_XY // for iteration
+		SHAPE_FIRST = SHAPE_STICK, SHAPE_LAST = SHAPE_HINGE_XY // for iteration
 	};
 	paInt shape;///< values of type Shape (paInt for integration with Param)
@@ -230,9 +233,9 @@
 	paInt preflocation;
 
-	enum PrefLocation { PREFER_UNATTACHED=0, PREFER_PART=1, PREFER_JOINT=2 };
-	
-	static constexpr int SUPPORTED_SHAPE_BALL_AND_STICK = 1;
-	static constexpr int SUPPORTED_SHAPE_SOLIDS = 2;
-	static constexpr int SUPPORTED_SHAPE_ALL = SUPPORTED_SHAPE_BALL_AND_STICK | SUPPORTED_SHAPE_SOLIDS;
+	enum PrefLocation { PREFER_UNATTACHED = 0, PREFER_PART = 1, PREFER_JOINT = 2 };
+
+	static constexpr int SUPPORTED_SHAPETYPE_BALL_AND_STICK = 1;
+	static constexpr int SUPPORTED_SHAPETYPE_SOLIDS = 2;
+	static constexpr int SUPPORTED_SHAPETYPE_ALL = SUPPORTED_SHAPETYPE_BALL_AND_STICK | SUPPORTED_SHAPETYPE_SOLIDS;
 	paInt supported_shape_types; //< bitfield of 'Model::shape' values: NeuroClass::SUPPORTED_SHAPE_xxx = 1 << Model::SHAPE_xxx
 
@@ -241,5 +244,5 @@
 	static constexpr int SUPPORTED_JOINT_HINGE_X = 4;
 	static constexpr int SUPPORTED_JOINT_HINGE_XY = 8;
-	static constexpr int SUPPORTED_JOINT_ALL = SUPPORTED_JOINT_BALL_AND_STICK + SUPPORTED_JOINT_FIXED + SUPPORTED_JOINT_HINGE_X + SUPPORTED_JOINT_HINGE_XY;
+	static constexpr int SUPPORTED_JOINTSHAPE_ALL = SUPPORTED_JOINT_BALL_AND_STICK + SUPPORTED_JOINT_FIXED + SUPPORTED_JOINT_HINGE_X + SUPPORTED_JOINT_HINGE_XY;
 	paInt supported_joint_shapes; //< bitfield of 'Joint::shape' values: NeuroClass::SUPPORTED_JOINT_xxx = 1 << JOINT::SHAPE_xxx
 
@@ -257,5 +260,5 @@
 	NeuroClass();
 	NeuroClass(ParamEntry *_props, SString _description,
-		   int _prefinputs, int _prefoutput, int _preflocation, int *_vectordata, bool own_vd = 1, int vhints = 0, int sup_shapes = NeuroClass::SUPPORTED_SHAPE_ALL, int sup_joints = NeuroClass::SUPPORTED_JOINT_ALL);
+		int _prefinputs, int _prefoutput, int _preflocation, int *_vectordata, bool own_vd = 1, int vhints = 0, int sup_shapes = NeuroClass::SUPPORTED_SHAPETYPE_ALL, int sup_joints = NeuroClass::SUPPORTED_JOINTSHAPE_ALL);
 	/** class name for use in Neuro::setClassName(), Neuro::setDetails() (former 'moredata' field),
 		eg. "N","-",G" */
Index: /cpp/frams/model/similarity/simil_model.cpp
===================================================================
--- /cpp/frams/model/similarity/simil_model.cpp	(revision 998)
+++ /cpp/frams/model/similarity/simil_model.cpp	(revision 999)
@@ -534,5 +534,5 @@
 		return NULL;
 	}
-	Model *m = new Model(*g, Model::SHAPE_UNKNOWN);
+	Model *m = new Model(*g, Model::SHAPETYPE_UNKNOWN);
 	if (!m->isValid())
 	{
Index: /cpp/frams/userinput/modelcheckpoints.cpp
===================================================================
--- /cpp/frams/userinput/modelcheckpoints.cpp	(revision 998)
+++ /cpp/frams/userinput/modelcheckpoints.cpp	(revision 999)
@@ -45,5 +45,5 @@
 	freeModel();
 	if (g != NULL)
-		mod = new Model(*g, Model::SHAPE_UNKNOWN, true, false);
+		mod = new Model(*g, Model::SHAPETYPE_UNKNOWN, true, false);
 	toguiCheckpoints(use_checkpoints ? EnabledUnknown : Disabled, 1, 1);
 	int ret = model_view.showModel(mod);
@@ -58,5 +58,5 @@
 	{
 		if (p == current_value) return;
-		mod_checkpoints = new Model(mod->getGeno(), Model::SHAPE_UNKNOWN, false, true);
+		mod_checkpoints = new Model(mod->getGeno(), Model::SHAPETYPE_UNKNOWN, false, true);
 		if (mod_checkpoints->getCheckpointCount() > 1)
 		{
Index: /cpp/frams/vm/classes/genoobj.cpp
===================================================================
--- /cpp/frams/vm/classes/genoobj.cpp	(revision 998)
+++ /cpp/frams/vm/classes/genoobj.cpp	(revision 999)
@@ -64,5 +64,5 @@
 void GenoObj::get_autoname(ExtValue *ret)
 {
-	Model m(*this, Model::SHAPE_UNKNOWN);
+	Model m(*this, Model::SHAPETYPE_UNKNOWN);
 	ret->setString(AutoName::makeName(m));
 }
