Index: cpp/frams/config/f0-SDK.def
===================================================================
--- cpp/frams/config/f0-SDK.def	(revision 527)
+++ cpp/frams/config/f0-SDK.def	(revision 528)
@@ -13,5 +13,4 @@
 PROP(y,0,1024,position.y,f,,,,p.y)
 PROP(z,0,1024,position.z,f,,,,p.z)
-XPROP(m,1,0,mass,f,0.1,999.0,1.0,mass)
 PROP(sh,1,0,shape,d,0,3,0,shape)
 PROP(s,1,0,size,f,0.1,10.0,1.0,size)
@@ -19,5 +18,5 @@
 PROP(sy,1,0,scale.y,f,0.001,1000.0,1.0,scale.y)
 PROP(sz,1,0,scale.z,f,0.001,1000.0,1.0,scale.z)
-PROP(h,1,0,hollow,f,0,1,0,hollow)
+XPROP(h,1,0,hollow,f,0,1,0,hollow)
 XPROP(dn,1,0,density,f,0.2,5.0,1.0,density)
 XPROP(fr,1,0,friction,f,0.0,4.0,0.4,friction)
Index: cpp/frams/config/f0.def
===================================================================
--- cpp/frams/config/f0.def	(revision 527)
+++ cpp/frams/config/f0.def	(revision 528)
@@ -13,5 +13,4 @@
 PROP(y,0,1024,position.y,f,,,,p.y)
 PROP(z,0,1024,position.z,f,,,,p.z)
-XPROP(m,1,0,mass,f,0.1,999.0,1.0,mass)
 PROP(sh,1,0,shape,d,0,3,0,shape)
 PROP(s,1,0,size,f,0.1,10.0,1.0,size)
@@ -19,5 +18,5 @@
 PROP(sy,1,0,scale.y,f,0.001,1000.0,1.0,scale.y)
 PROP(sz,1,0,scale.z,f,0.001,1000.0,1.0,scale.z)
-PROP(h,1,0,hollow,f,0,1,0,hollow)
+XPROP(h,1,0,hollow,f,0,1,0,hollow)
 XPROP(dn,1,0,density,f,0.2,5.0,1.0,density)
 XPROP(fr,1,0,friction,f,0.0,4.0,0.4,friction)
Index: cpp/frams/genetics/f1/conv_f1.cpp
===================================================================
--- cpp/frams/genetics/f1/conv_f1.cpp	(revision 527)
+++ cpp/frams/genetics/f1/conv_f1.cpp	(revision 528)
@@ -316,5 +316,5 @@
 int Builder::growPart(F1Props &c,const char *g)
 {
-sprintf(tmp,"p:m=1,dn=%lg,fr=%lg,ing=%lg,as=%lg,vs=%g,vr=%g,vg=%g,vb=%g",
+sprintf(tmp,"p:dn=%lg,fr=%lg,ing=%lg,as=%lg,vs=%g,vr=%g,vg=%g,vb=%g",
 	1.0/c.masa,c.tarcie,c.wchl,c.asym, c.grub, c.cred,c.cgreen,c.cblue);
 return model.singleStepBuild(tmp,makeRange(g));
Index: cpp/frams/genetics/f4/conv_f4.cpp
===================================================================
--- cpp/frams/genetics/f4/conv_f4.cpp	(revision 527)
+++ cpp/frams/genetics/f4/conv_f4.cpp	(revision 528)
@@ -178,5 +178,5 @@
 			// new part object for firstend
 			// coordinates are left to be computed by Model
-			sprintf(tmpLine, "p:m=1,fr=%g,ing=%g,as=%g",
+			sprintf(tmpLine, "p:fr=%g,ing=%g,as=%g",
 				/*1.0/C->P.mass,*/ C->P.friction, C->P.ingest, C->P.assim
 				//C->firstend.x, C->firstend.y, C->firstend.z
@@ -194,5 +194,5 @@
 		}
 		// new part object for lastend
-		sprintf(tmpLine, "p:m=1,fr=%g,ing=%g,as=%g",
+		sprintf(tmpLine, "p:fr=%g,ing=%g,as=%g",
 			//C->lastend.x, C->lastend.y, C->lastend.z
 			/*"vol=" 1.0/C->P.mass,*/ C->P.friction, C->P.ingest, C->P.assim
Index: cpp/frams/model/defassign-f0-SDK.h
===================================================================
--- cpp/frams/model/defassign-f0-SDK.h	(revision 527)
+++ cpp/frams/model/defassign-f0-SDK.h	(revision 528)
@@ -9,5 +9,4 @@
 void Part::defassign()
 {
-mass=1.0;
 shape=0;
 size=1.0;
Index: cpp/frams/model/f0-SDK-classes.h
===================================================================
--- cpp/frams/model/f0-SDK-classes.h	(revision 527)
+++ cpp/frams/model/f0-SDK-classes.h	(revision 528)
@@ -24,5 +24,5 @@
 ParamEntry f0_part_paramtab[]=
 {
- {"Geometry",3,23,"p" },
+ {"Geometry",3,22,"p" },
  {"Other properties",},
  {"Visual",},
@@ -30,5 +30,4 @@
  {"y",0,1024,"position.y","f",FIELD(p.y),},
  {"z",0,1024,"position.z","f",FIELD(p.z),},
- {"m",1,0,"mass","f 0.1 999.0 1.0",FIELD(mass),},
  {"sh",1,0,"shape","d 0 3 0",FIELD(shape),},
  {"s",1,0,"size","f 0.1 10.0 1.0",FIELD(size),},
@@ -55,5 +54,5 @@
 {
  {"Extra properties",1,9,"p"},
- {"m",0,0,"mass","f 0.1 999.0 1.0",FIELD(mass),},
+ {"h",0,0,"hollow","f 0 1 0",FIELD(hollow),},
  {"dn",0,0,"density","f 0.2 5.0 1.0",FIELD(density),},
  {"fr",0,0,"friction","f 0.0 4.0 0.4",FIELD(friction),},
Index: cpp/frams/model/model.cpp
===================================================================
--- cpp/frams/model/model.cpp	(revision 527)
+++ cpp/frams/model/model.cpp	(revision 528)
@@ -923,10 +923,20 @@
 					p->mass = 0.0;
 			}
-			//	VALIDMINMAX(p,part,mass);
+			//VALIDMINMAX(p,part,mass);//mass is very special
+			// VALIDMINMAX are managed manually when adding part properties in f0-def!
+			// (could be made dynamic but not really worth the effort)
 			VALIDMINMAX(p, Part, size);
+			VALIDMINMAX(p, Part, scale.x);
+			VALIDMINMAX(p, Part, scale.y);
+			VALIDMINMAX(p, Part, scale.z);
+			VALIDMINMAX(p, Part, hollow);
 			VALIDMINMAX(p, Part, density);
 			VALIDMINMAX(p, Part, friction);
 			VALIDMINMAX(p, Part, ingest);
 			VALIDMINMAX(p, Part, assim);
+			VALIDMINMAX(p, Part, vsize);
+			VALIDMINMAX(p, Part, vcolor.x);
+			VALIDMINMAX(p, Part, vcolor.y);
+			VALIDMINMAX(p, Part, vcolor.z);
 			p->flags &= ~LINKFLAG; // for delta joint cycle detection
 			if (p->p.x - p->size < bbmin.x) bbmin.x = p->p.x - p->size;
@@ -951,7 +961,12 @@
 		{
 			j = (Joint*)joints(i);
+			// VALIDMINMAX are managed manually when adding joint properties in f0-def!
+			// (could be made dynamic but not really worth the effort)
 			VALIDMINMAX(j, Joint, stamina);
 			VALIDMINMAX(j, Joint, stif);
 			VALIDMINMAX(j, Joint, rotstif);
+			VALIDMINMAX(p, Part, vcolor.x);
+			VALIDMINMAX(p, Part, vcolor.y);
+			VALIDMINMAX(p, Part, vcolor.z);
 			j->refno = i;
 			j->owner = this;
@@ -1039,5 +1054,4 @@
 	{
 		n = (Neuro*)neurons(i);
-		VALIDMINMAX(n, Neuro, state);
 #ifdef MODEL_V1_COMPATIBLE
 		VALIDMINMAX(n,Neuro,inertia);
Index: cpp/frams/model/modelparts.cpp
===================================================================
--- cpp/frams/model/modelparts.cpp	(revision 527)
+++ cpp/frams/model/modelparts.cpp	(revision 528)
@@ -643,4 +643,5 @@
 defassign();
 shape=s;
+mass=1;
 }
 
