Index: cpp/frams/model/geometry/modelgeoclass.cpp
===================================================================
--- cpp/frams/model/geometry/modelgeoclass.cpp	(revision 997)
+++ 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 997)
+++ 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 997)
+++ 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 997)
+++ 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 997)
+++ 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 997)
+++ 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 997)
+++ 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())
 	{
