Index: /cpp/frams/_demos/loader_test_param.cpp
===================================================================
--- /cpp/frams/_demos/loader_test_param.cpp	(revision 1185)
+++ /cpp/frams/_demos/loader_test_param.cpp	(revision 1186)
@@ -37,6 +37,6 @@
 	{ "Data", 1, 16, "data", },
 	{ "text", 0, 0, "Text", "s 0 10", FIELD(text), }, // 10 = length limit
-	{ "longtext", 0, 0, "Long text", "s 1", FIELD(longtext), }, // 1 = multiline, 0 = unlimited
-	{ "deftext", 0, 0, "Text with default value", "s 0 0 some text", FIELD(deftext), },
+	{ "longtext", 0, 0, "Long text", "s 1", FIELD(longtext), }, // 1 = multiline, -1 = unlimited
+	{ "deftext", 0, 0, "Text with default value", "s 0 -1 some text", FIELD(deftext), },
 	{ "i1", 0, 0, "Integer 1", "d", FIELD(i1), },          // unrestricted integer
 	{ "i2", 0, 0, "Integer 2", "d -5 5 1", FIELD(i2), }, // [-5..5] integer, default=1
Index: /cpp/frams/config/f0-SDK.def
===================================================================
--- /cpp/frams/config/f0-SDK.def	(revision 1185)
+++ /cpp/frams/config/f0-SDK.def	(revision 1186)
@@ -3,5 +3,5 @@
 GROUP(Visual)
 PROP(se,0,1024,startenergy,f,,,,startenergy)
-PROP(Vstyle,1,0,Visual style,s,0,0,,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,1,0,Visual style,s,0,-1,,vis_style,,``See the \"Visual style definition\" context for more information'')
 ENDCLASS
 
@@ -27,5 +27,5 @@
 PROP(rz,0,1024,rot.z,f,,,,rot.z)
 PROP(i,1,0,`info',s,,,,info)
-PROP(Vstyle,2,0,Visual style,s,0,0,part,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,2,0,Visual style,s,0,-1,part,vis_style,,``See the \"Visual style definition\" context for more information'')
 XPROP(vr,2,0,red component,f,0.0,1.0,0.5,vcolor.x)
 XPROP(vg,2,1024,green component,f,0.0,1.0,0.5,vcolor.y)
@@ -66,5 +66,5 @@
 PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
 PROP(i,2,0,`info',s,,,,info)
-PROP(Vstyle,3,0,Visual style,s,0,0,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,3,0,Visual style,s,0,-1,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
 XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
 XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
@@ -94,5 +94,5 @@
 PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
 PROP(i,2,0,`info',s,,,,info)
-PROP(Vstyle,3,0,Visual style,s,0,0,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,3,0,Visual style,s,0,-1,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
 XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
 XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
@@ -108,5 +108,5 @@
 PROP(d,1,0,details,s,,,N,details,GETSET)
 PROP(i,1,0,`info',s,,,,info)
-PROP(Vstyle,2,0,Visual style,s,0,0,neuro,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,2,0,Visual style,s,0,-1,neuro,vis_style,,``See the \"Visual style definition\" context for more information'')
 PROP(getInputCount,0,1+2,`input count',d,,,,inputCount,GETONLY)
 PROP(getInputNeuroDef,0,0,`get input neuron',p oNeuroDef(d),,,,p_getInputNeuroDef,PROCEDURE)
Index: /cpp/frams/config/f0.def
===================================================================
--- /cpp/frams/config/f0.def	(revision 1185)
+++ /cpp/frams/config/f0.def	(revision 1186)
@@ -3,5 +3,5 @@
 GROUP(Visual)
 PROP(se,0,1024,startenergy,f,,,,startenergy)
-PROP(Vstyle,1,0,Visual style,s,0,0,,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,1,0,Visual style,s,0,-1,,vis_style,,``See the \"Visual style definition\" context for more information'')
 ENDCLASS
 
@@ -27,5 +27,5 @@
 PROP(rz,0,1024,rot.z,f,,,,rot.z)
 PROP(i,1,0,`info',s,,,,info)
-PROP(Vstyle,2,0,Visual style,s,0,0,part,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,2,0,Visual style,s,0,-1,part,vis_style,,``See the \"Visual style definition\" context for more information'')
 XPROP(vr,2,0,red component,f,0.0,1.0,0.5,vcolor.x)
 XPROP(vg,2,1024,green component,f,0.0,1.0,0.5,vcolor.y)
@@ -66,5 +66,5 @@
 PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
 PROP(i,2,0,`info',s,,,,info)
-PROP(Vstyle,3,0,Visual style,s,0,0,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,3,0,Visual style,s,0,-1,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
 XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
 XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
@@ -94,5 +94,5 @@
 PROP(stam,2,0,stamina,f,0.0,1.0,0.25,stamina)
 PROP(i,2,0,`info',s,,,,info)
-PROP(Vstyle,3,0,Visual style,s,0,0,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,3,0,Visual style,s,0,-1,joint,vis_style,,``See the \"Visual style definition\" context for more information'')
 XPROP(vr,3,0,red component,f,0.0,1.0,0.5,vcolor.x)
 XPROP(vg,3,1024,green component,f,0.0,1.0,0.5,vcolor.y)
@@ -108,5 +108,5 @@
 PROP(d,1,0,details,s,,,N,details,GETSET)
 PROP(i,1,0,`info',s,,,,info)
-PROP(Vstyle,2,0,Visual style,s,0,0,neuro,vis_style,,``See the \"Visual style definition\" context for more information'')
+PROP(Vstyle,2,0,Visual style,s,0,-1,neuro,vis_style,,``See the \"Visual style definition\" context for more information'')
 PROP(getInputCount,0,1+2,`input count',d,,,,inputCount,GETONLY)
 PROP(getInputNeuroDef,0,0,`get input neuron',p oNeuroDef(d),,,,p_getInputNeuroDef,PROCEDURE)
Index: /cpp/frams/genetics/fn/fn_oper.cpp
===================================================================
--- /cpp/frams/genetics/fn/fn_oper.cpp	(revision 1185)
+++ /cpp/frams/genetics/fn/fn_oper.cpp	(revision 1186)
@@ -27,7 +27,7 @@
 	{ "fn_xover", 0, 0, "Fraction inherited in linear mix crossover", "f 0.5 1.0 0.9", FIELD(xover_proportion), "0.5 => children are averaged parents.\n0.8 => children are only 20% different from parents.\n1.0 => each child is identical to one parent (no crossover).", },
 	{ "fn_xover_random", 0, 0, "Random fraction inherited in crossover", "d 0 1 1", FIELD(xover_proportion_random), "If active, the amount of linear mix is random in each crossover operation, so the \"Fraction inherited in linear mix crossover\" parameter is ignored.", },
-	{ "fn_mut_bound_low", 1, 0, "Lower bounds for mutation", "s 0 0 [-10.0, -10.0]", FIELD(mut_bound_low), "A vector of lower bounds (one real value for each variable)", },
-	{ "fn_mut_bound_high", 1, 0, "Higher bounds for mutation", "s 0 0 [10.0, 10.0]", FIELD(mut_bound_high), "A vector of higher bounds (one real value for each variable)", },
-	{ "fn_mut_stddev", 1, 0, "Standard deviations for mutation", "s 0 0 [0.1, 0.1]", FIELD(mut_stddev), "A vector of standard deviations (one real value for each variable)", },
+	{ "fn_mut_bound_low", 1, 0, "Lower bounds for mutation", "s 0 -1 [-10.0, -10.0]", FIELD(mut_bound_low), "A vector of lower bounds (one real value for each variable)", },
+	{ "fn_mut_bound_high", 1, 0, "Higher bounds for mutation", "s 0 -1 [10.0, 10.0]", FIELD(mut_bound_high), "A vector of higher bounds (one real value for each variable)", },
+	{ "fn_mut_stddev", 1, 0, "Standard deviations for mutation", "s 0 -1 [0.1, 0.1]", FIELD(mut_stddev), "A vector of standard deviations (one real value for each variable)", },
 	{ "fn_mut_single_var", 0, 0, "Mutate only a single variable", "d 0 1 0", FIELD(mut_single_var), "If active, only a single randomly selected variable will be mutated in each mutation operation. Otherwise all variables will be mutated.", },
 	{ 0, },
Index: /cpp/frams/model/f0-SDK-classes.h
===================================================================
--- /cpp/frams/model/f0-SDK-classes.h	(revision 1185)
+++ /cpp/frams/model/f0-SDK-classes.h	(revision 1186)
@@ -10,5 +10,5 @@
  {"Visual",},
  {"se",0,1024,"startenergy","f",FIELD(startenergy),},
- {"Vstyle",1,0,"Visual style","s 0 0 ",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
+ {"Vstyle",1,0,"Visual style","s 0 -1 ",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
  {0,0,0,}
 };
@@ -44,5 +44,5 @@
  {"rz",0,1024,"rot.z","f",FIELD(rot.z),},
  {"i",1,0,"info","s",FIELD(info),},
- {"Vstyle",2,0,"Visual style","s 0 0 part",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
+ {"Vstyle",2,0,"Visual style","s 0 -1 part",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
  {"vr",2,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
  {"vg",2,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
@@ -111,5 +111,5 @@
  {"stam",2,0,"stamina","f 0.0 1.0 0.25",FIELD(stamina),},
  {"i",2,0,"info","s",FIELD(info),},
- {"Vstyle",3,0,"Visual style","s 0 0 joint",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
+ {"Vstyle",3,0,"Visual style","s 0 -1 joint",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
  {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
  {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
@@ -154,5 +154,5 @@
  {"stam",2,0,"stamina","f 0.0 1.0 0.25",FIELD(stamina),},
  {"i",2,0,"info","s",FIELD(info),},
- {"Vstyle",3,0,"Visual style","s 0 0 joint",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
+ {"Vstyle",3,0,"Visual style","s 0 -1 joint",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
  {"vr",3,0,"red component","f 0.0 1.0 0.5",FIELD(vcolor.x),},
  {"vg",3,1024,"green component","f 0.0 1.0 0.5",FIELD(vcolor.y),},
@@ -183,5 +183,5 @@
  {"d",1,0,"details","s",GETSET(details),},
  {"i",1,0,"info","s",FIELD(info),},
- {"Vstyle",2,0,"Visual style","s 0 0 neuro",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
+ {"Vstyle",2,0,"Visual style","s 0 -1 neuro",FIELD(vis_style),"See the \"Visual style definition\" context for more information",},
  {"getInputCount",0,1+2,"input count","d",GETONLY(inputCount),},
  {"getInputNeuroDef",0,0,"get input neuron","p oNeuroDef(d)",PROCEDURE(p_getInputNeuroDef),},
Index: /cpp/frams/param/param.cpp
===================================================================
--- /cpp/frams/param/param.cpp	(revision 1185)
+++ /cpp/frams/param/param.cpp	(revision 1186)
@@ -909,5 +909,5 @@
 		//if (have == 1) return false; //not sure?
 		if ((have >= 1) && (!((a == 0) || (a == 1)))) return false; // 'min' for string (single/multi) can be only 0 or 1
-		if ((have >= 2) && (b < 0)) return false; // max=0 means unlimited, max<0 is not allowed
+		if ((have >= 2) && (b < -1)) return false; // max=-1 means unlimited, >=0 is max len, max<-1 is not allowed
 	}
 	break;
@@ -1162,5 +1162,5 @@
 	if (sscanf(t, "%d %d", &mn, &mx) == 2) //using getMinMax would also get default value, which is not needed here
 	{
-		if ((x.length() > mx) && (mx > 0))
+		if ((x.length() > mx) && (mx >= 0))
 		{
 			vs = x.substr(0, mx);
