Index: java/Framclipse/com.framsticks.framclipse/res/framscript.xml
===================================================================
--- java/Framclipse/com.framsticks.framclipse/res/framscript.xml	(revision 769)
+++ java/Framclipse/com.framsticks.framclipse/res/framscript.xml	(revision 906)
@@ -54,7 +54,5 @@
 		</element>
 		<element name="about" function="true" flags="34"/>
-		<element name="regname" type="string" flags="35"/>
 		<element name="prev_show" type="string" flags="35"/>
-		<element name="mode" type="integer" min="0" max="2" flags="35"/>
 		<element name="switchmode" type="integer" min="0" max="3" flags="32"/>
 		<element name="switchtime" type="integer" min="0" max="9999" flags="32">
@@ -141,18 +139,35 @@
 		</element>
 		<element name="energy" type="float"/>
-		<element name="perf" type="integer" min="0" max="2">
-			<description><![CDATA[Initial value of this property is taken from Population.enableperf]]></description>
-		</element>
-		<element name="nnenabled" type="integer" min="0" max="1"/>
-		<element name="bodysim" type="integer" min="0" max="1" default="1">
-			<description><![CDATA[(Physical) body simulation can be disabled for individual objects which makes them immovable. Disabled objects can still participate in collisions depending on their collisions masks.
+		<element name="perf" type="integer" min="0" max="2" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by perf_measuring]]></description>
+		</element>
+		<element name="perf_measuring" type="integer" min="0" max="2">
+			<description><![CDATA[The initial value of this property is taken from Population.initial_perf_measuring]]></description>
+		</element>
+		<element name="nnenabled" type="integer" min="0" max="2" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by nn_active]]></description>
+		</element>
+		<element name="nn_active" type="integer" min="0" max="2">
+			<description><![CDATA[The initial value of this property is taken from Population.nn_active]]></description>
+		</element>
+		<element name="bodysim" type="integer" min="0" max="1" default="1" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by physics_active]]></description>
+		</element>
+		<element name="physics_active" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[(Physical) body simulation can be disabled for individual objects which makes them immovable. Disabled objects can still participate in collisions depending on their collisions masks. The initial value of this property is taken from Population.initial_physics_active.
 
 Bugs: the standard collision handler does not work for disabled objects when ODE simulation is used. It means that these objects won't physically interact with other objects. The custom (scripting) handlers work as expected.]]></description>
 		</element>
-		<element name="selfcol" type="integer" min="0" max="1">
-			<description><![CDATA[Enable/disable detection of self-collisions (within a creature body). They can only occur when using the ODE simulation engine. If enabled, the creature will have its sticks collide during lifespan.]]></description>
-		</element>
-		<element name="selfcolstate" function="true" type="integer" flags="32">
-			<description><![CDATA[Current self-collision state. In old versions this was a field, not a function.]]></description>
+		<element name="selfcol" type="integer" min="0" max="1" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by self_collisions]]></description>
+		</element>
+		<element name="self_collisions" type="integer" min="0" max="1">
+			<description><![CDATA[Enable/disable detection of self-collisions (within a creature body). They can only occur when using the ODE simulation engine. If enabled, the creature will have its sticks collide during lifespan.  The initial value of this property is taken from Population.initial_self_collisions.]]></description>
+		</element>
+		<element name="selfcolstate" function="true" type="integer" deprecated="true" flags="8224">
+			<description><![CDATA[Replaced by selfCollisionsCount()]]></description>
+<arguments/></element>
+		<element name="selfCollisionsCount" function="true" type="integer" flags="32">
+			<description><![CDATA[Returns the number of self-collisions detected in the creature.]]></description>
 <arguments/></element>
 		<element name="lifespan" type="integer">
@@ -524,15 +539,17 @@
 		</element>
 		<element name="energy" type="float"/>
-		<element name="perf" type="integer" min="0" max="2">
-			<description><![CDATA[Initial value of this property is taken from Population.enableperf]]></description>
-		</element>
-		<element name="nnenabled" type="integer" min="0" max="1"/>
-		<element name="bodysim" type="integer" min="0" max="1" default="1">
-			<description><![CDATA[(Physical) body simulation can be disabled for individual objects which makes them immovable. Disabled objects can still participate in collisions depending on their collisions masks.
+		<element name="perf_measuring" type="integer" min="0" max="2">
+			<description><![CDATA[The initial value of this property is taken from Population.initial_perf_measuring]]></description>
+		</element>
+		<element name="nn_active" type="integer" min="0" max="2">
+			<description><![CDATA[The initial value of this property is taken from Population.nn_active]]></description>
+		</element>
+		<element name="physics_active" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[(Physical) body simulation can be disabled for individual objects which makes them immovable. Disabled objects can still participate in collisions depending on their collisions masks. The initial value of this property is taken from Population.initial_physics_active.
 
 Bugs: the standard collision handler does not work for disabled objects when ODE simulation is used. It means that these objects won't physically interact with other objects. The custom (scripting) handlers work as expected.]]></description>
 		</element>
-		<element name="selfcol" type="integer" min="0" max="1">
-			<description><![CDATA[Enable/disable detection of self-collisions (within a creature body). They can only occur when using the ODE simulation engine. If enabled, the creature will have its sticks collide during lifespan.]]></description>
+		<element name="self_collisions" type="integer" min="0" max="1">
+			<description><![CDATA[Enable/disable detection of self-collisions (within a creature body). They can only occur when using the ODE simulation engine. If enabled, the creature will have its sticks collide during lifespan.  The initial value of this property is taken from Population.initial_self_collisions.]]></description>
 		</element>
 		<element name="lifespan" type="integer">
@@ -594,5 +611,7 @@
 	d={ "name":"John", "age":44 };
 Iterating:
-	for(var i=0;i<d.size;i++) Simulator.print(d.getKey(i)+" is "+d.get(i));]]></description>
+	for(var v in d) Simulator.print(v); //values
+	for(var k in d.keys) Simulator.print(k+" is "+d[k]); //keys
+	for(var i=0;i<d.size;i++) Simulator.print(d.getKey(i)+" is "+d.get(i)); //by index]]></description>
 		<element name="clear" function="true" type="void" flags="256"><arguments/></element>
 		<element name="size" type="integer" flags="257"/>
@@ -604,6 +623,6 @@
 		</element>
 		<element name="get" function="true" type="untyped" flags="256">
-			<description><![CDATA[Retrieves the named or indexed element (depending on the argument type: string or int). null is returned for nonexistent keys.
-object.get(key) can be shortened to 'object[key]']]></description>
+			<description><![CDATA[Retrieves the named or indexed element (depending on the argument type: string or int). Accessing nonexistent keys is an error (use hasKey() if necessary).
+object.get(key) can be shortened to object[key].]]></description>
 			<arguments>
 				<argument name="key" type="untyped"/>
@@ -611,7 +630,16 @@
 		</element>
 		<element name="getKey" function="true" type="string" flags="256">
-			<description><![CDATA[Returns the key of the indexed element (0 <= index < size)]]></description>
+			<description><![CDATA[Returns the key of the indexed element (0 <= index < size).]]></description>
 			<arguments>
 				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="hasKey" function="true" type="integer" flags="256">
+			<description><![CDATA[Returns 1 (interpreted as true) if dictionary contains the supplied key, or 0 (false) otherwise.
+Example:
+   if (obj.hasKey("a"))
+      x = obj->a;]]></description>
+			<arguments>
+				<argument name="key" type="string"/>
 			</arguments>
 		</element>
@@ -647,4 +675,8 @@
 			</arguments>
 		</element>
+		<element name="iterator" type="Object" flags="257"/>
+		<element name="keys" type="Object" flags="257">
+			<description><![CDATA[Iterate over this object to get all keys: for(k in dict.keys) ...]]></description>
+		</element>
 	</type>
 	<type name="EnergyParticles" context="Global context">
@@ -763,4 +795,5 @@
 		</element>
 		<element name="createDirect" function="true" type="File" flags="32">
+			<description><![CDATA[Returns null if the file can't be created]]></description>
 			<arguments>
 				<argument name="filename" type="string"/>
@@ -775,4 +808,5 @@
 		</element>
 		<element name="appendDirect" function="true" type="File " flags="32">
+			<description><![CDATA[Returns null if the file can't be appended]]></description>
 			<arguments>
 				<argument name="filename" type="string"/>
@@ -784,4 +818,5 @@
 <arguments/></element>
 		<element name="open" function="true" type="File " flags="32">
+			<description><![CDATA[Returns null if the file can't be read]]></description>
 			<arguments>
 				<argument name="filename" type="string"/>
@@ -1176,11 +1211,52 @@
 			</arguments>
 		</element>
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 		<element name="genoper_f0" type="integer" min="0" max="0" flags="65">
 			<description><![CDATA[]]></description>
@@ -1198,4 +1274,7 @@
 			<description><![CDATA[]]></description>
 		</element>
+		<element name="genoper_f8" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
 		<element name="genoper_f9" type="integer" min="0" max="0" flags="65">
 			<description><![CDATA[]]></description>
@@ -1205,4 +1284,13 @@
 		</element>
 		<element name="genoper_fn" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_fB" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_fH" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_fL" type="integer" min="0" max="0" flags="65">
 			<description><![CDATA[]]></description>
 		</element>
@@ -1634,5 +1722,50 @@
 		<element name="f4_mut_exmod" type="string" max="30">
 			<description><![CDATA[Modifiers that will not be added nor deleted during mutation
-(all: ,LlRrCcQqFfMmIiEeWwAaSs)]]></description>
+(all: LlRrCcQqFfMmIiEeWwAaSsDdGgBbHh)]]></description>
+		</element>
+		<element name="f8_mut_chg_begin_arg" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a beginning argument]]></description>
+		</element>
+		<element name="f8_mut_chg_arg" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a production's argument]]></description>
+		</element>
+		<element name="f8_mut_del_comm" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a command]]></description>
+		</element>
+		<element name="f8_mut_insert_comm" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of inserting commands]]></description>
+		</element>
+		<element name="f8_mut_enc" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of encapsulating commands]]></description>
+		</element>
+		<element name="f8_mut_chg_cond_sign" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a condition sign]]></description>
+		</element>
+		<element name="f8_mut_add_param" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of adding a parameter to the production]]></description>
+		</element>
+		<element name="f8_mut_add_cond" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of adding a condition to the subproduction]]></description>
+		</element>
+		<element name="f8_mut_add_subprod" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of adding a subproduction]]></description>
+		</element>
+		<element name="f8_mut_chg_iter_number" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a number of iterations]]></description>
+		</element>
+		<element name="f8_mut_del_param" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a parameter]]></description>
+		</element>
+		<element name="f8_mut_del_cond" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a condition]]></description>
+		</element>
+		<element name="f8_mut_add_loop" type="float" min="0" max="100" default="0.0">
+			<description><![CDATA[mutation: probability of adding a loop]]></description>
+		</element>
+		<element name="f8_mut_del_loop" type="float" min="0" max="100" default="0.0">
+			<description><![CDATA[mutation: probability of deleting a loop]]></description>
+		</element>
+		<element name="f8_mut_del_prod" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a production]]></description>
 		</element>
 		<element name="f9_mut" type="float" min="0" max="1" default="0.1">
@@ -1649,4 +1782,7 @@
 1.0 => each child is identical to one parent (no crossover).]]></description>
 		</element>
+		<element name="fn_xover_random" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[If active, the amount of linear mix is random in each crossover operation, so the "Fraction inherited in linear mix crossover" parameter is ignored.]]></description>
+		</element>
 		<element name="fn_mut_bound_low" type="string" default="[-10.0, -10.0]">
 			<description><![CDATA[A vector of lower bounds (one real value for each variable)]]></description>
@@ -1657,4 +1793,109 @@
 		<element name="fn_mut_stddev" type="string" default="[0.1, 0.1]">
 			<description><![CDATA[A vector of standard deviations (one real value for each variable)]]></description>
+		</element>
+		<element name="fn_mut_single_var" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[If active, only a single randomly selected variable will be mutated in each mutation operation. Otherwise all variables will be mutated.]]></description>
+		</element>
+		<element name="fB_mut_substitution" type="float" min="0" max="1" default="0.6">
+			<description><![CDATA[Probability of mutation by changing single random letter in genotype]]></description>
+		</element>
+		<element name="fB_mut_insertion" type="float" min="0" max="1" default="0.095">
+			<description><![CDATA[Probability of mutation by inserting characters in random place of genotype]]></description>
+		</element>
+		<element name="fB_mut_nclassins" type="float" min="0" max="1" default="0.005">
+			<description><![CDATA[Probability of mutation by inserting neuron class definition in random place of genotype]]></description>
+		</element>
+		<element name="fB_mut_deletion" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of mutation by deleting random characters in genotype]]></description>
+		</element>
+		<element name="fB_mut_duplication" type="float" min="0" max="1" default="0.0">
+			<description><![CDATA[Probability of mutation by copying single *gene* of genotype and appending it to the beginning of this genotype]]></description>
+		</element>
+		<element name="fB_mut_translocation" type="float" min="0" max="1" default="0.15">
+			<description><![CDATA[Probability of mutation by replacing two substrings in genotype]]></description>
+		</element>
+		<element name="fB_cross_gene_transfer" type="float" min="0" max="1" default="0.0">
+			<description><![CDATA[Probability of crossing over by transferring single genes from both parents to beginning of each other]]></description>
+		</element>
+		<element name="fB_cross_crossover" type="float" min="0" max="1" default="1.0">
+			<description><![CDATA[Probability of crossing over by random distribution of genes from both parents to both children]]></description>
+		</element>
+		<element name="fH_mut_addition" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of adding new element to genotype]]></description>
+		</element>
+		<element name="fH_mut_add_joint" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[Probability of adding new stick handle]]></description>
+		</element>
+		<element name="fH_mut_add_neuron" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[Probability of adding new neuron handle]]></description>
+		</element>
+		<element name="fH_mut_add_connection" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[Probability of adding new connection handle]]></description>
+		</element>
+		<element name="fH_mut_deletion" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of removing element from genotype]]></description>
+		</element>
+		<element name="fH_mut_handle" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing values in vectors of handle]]></description>
+		</element>
+		<element name="fH_mut_property" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing properties of handles]]></description>
+		</element>
+		<element name="fL_maxdefinedwords" type="integer" min="0" max="100" default="10">
+			<description><![CDATA[Maximum number of words that can be defined in L-System]]></description>
+		</element>
+		<element name="fL_axm_mut_prob" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of performing mutation operations on axiom]]></description>
+		</element>
+		<element name="fL_rul_mut_prob" type="float" min="0" max="1" default="0.8">
+			<description><![CDATA[Probability of performing mutation operations on the successor of random rule]]></description>
+		</element>
+		<element name="fL_mut_addition" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding random existing word to the axiom or one of successors]]></description>
+		</element>
+		<element name="fL_mut_add_stick" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding stick]]></description>
+		</element>
+		<element name="fL_mut_add_neuro" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding neuron]]></description>
+		</element>
+		<element name="fL_mut_add_conn" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding connection]]></description>
+		</element>
+		<element name="fL_mut_add_rot" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding one of rotation words]]></description>
+		</element>
+		<element name="fL_mut_add_branch" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding branch with rotation and stick]]></description>
+		</element>
+		<element name="fL_mut_add_other" type="float" min="0" max="1" default="0.4">
+			<description><![CDATA[Probability of adding other word, defined in genotype]]></description>
+		</element>
+		<element name="fL_mut_worddefaddition" type="float" min="0" max="1" default="0.05">
+			<description><![CDATA[Probability of adding new word definition to the genotype]]></description>
+		</element>
+		<element name="fL_mut_ruleaddition" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of adding new rule definition for existing word]]></description>
+		</element>
+		<element name="fL_mut_rulecond" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of modifying random rule condition]]></description>
+		</element>
+		<element name="fL_mut_changeword" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing word name or formula of a random word from axiom or one of successors]]></description>
+		</element>
+		<element name="fL_mut_changeword_formula" type="float" min="0" max="1" default="0.7">
+			<description><![CDATA[Probability of changing formula in word]]></description>
+		</element>
+		<element name="fL_mut_changeword_name" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing name in word]]></description>
+		</element>
+		<element name="fL_mut_changeiter" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing number of iterations of L-Systems]]></description>
+		</element>
+		<element name="fL_mut_changeiter_step" type="float" min="0" max="1" default="1.0">
+			<description><![CDATA[Minimal step that should be used for changing iterations in L-Systems]]></description>
+		</element>
+		<element name="fL_mut_deletion" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of deleting random word from axiom or random successor (also deletes rule if there is only one word in successor)]]></description>
 		</element>
 	</type>
@@ -2339,5 +2580,9 @@
 http://www.framsticks.com/bib/Komosinski-et-al-2001
 http://www.framsticks.com/bib/Komosinski-and-Kubiak-2011
-http://www.framsticks.com/bib/Komosinski-2016]]></description>
+http://www.framsticks.com/bib/Komosinski-2016
+https://doi.org/10.1007/978-3-030-16692-2_8]]></description>
+		<element name="simil_method" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[]]></description>
+		</element>
 		<element name="simil_parts" type="float" min="0" max="100" default="0.0">
 			<description><![CDATA[Differing number of parts is also handled by the 'part degree' similarity component.]]></description>
@@ -2354,4 +2599,7 @@
 		<element name="simil_fixedZaxis" type="integer" min="0" max="1" default="0">
 			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_weightedMDS" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[If activated, weighted MDS with vertex (i.e., Part) degrees as weights is used for 3D alignment of body structure.]]></description>
 		</element>
 		<element name="evaluateDistance" function="true" type="float" flags="34">
@@ -2936,5 +3184,5 @@
 			<description><![CDATA[World ERP (error reduction parameter)]]></description>
 		</element>
-		<element name="odeworldcfm" type="float" min="0" max="1" default="1e-05">
+		<element name="odeworldcfm" type="float" min="0" max="1" default="1e-5">
 			<description><![CDATA[World CFM (constraint force mixing)]]></description>
 		</element>
@@ -3106,6 +3354,12 @@
 			<description><![CDATA[Do creatures die when no energy?]]></description>
 		</element>
-		<element name="nnsim" type="integer" min="0" max="2" default="1">
+		<element name="nnsim" type="integer" min="0" max="2" default="1" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by initial_nn_active]]></description>
+		</element>
+		<element name="initial_nn_active" type="integer" min="0" max="2" default="1">
 			<description><![CDATA[Stabilization means no significant movement during a specified period of time.]]></description>
+		</element>
+		<element name="nn_paused" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[Disables NN simulation for all creatures in the population]]></description>
 		</element>
 		<element name="perfperiod" type="integer" min="0" max="1000000" default="100">
@@ -3121,5 +3375,8 @@
 			<description><![CDATA[A creature is considered stabilized when its center of gravity stays within the specified distance after the "Sampling period while waiting" has elapsed.]]></description>
 		</element>
-		<element name="enableperf" type="integer" min="0" max="2" default="1">
+		<element name="enableperf" type="integer" min="0" max="2" default="1" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by initial_perf_measuring]]></description>
+		</element>
+		<element name="initial_perf_measuring" type="integer" min="0" max="2" default="1">
 			<description><![CDATA[Stabilization means no significant movement during a specified period of time.]]></description>
 		</element>
@@ -3162,9 +3419,15 @@
 			<description><![CDATA[See selfmask.]]></description>
 		</element>
-		<element name="bodysim" type="integer" min="0" max="1" default="1">
-			<description><![CDATA[Enable/disable physical body simulation. This is the initial value of Creature.bodysim for all objects created in this group. For details, see the documentation of Creature.bodysim.]]></description>
-		</element>
-		<element name="selfcol" type="integer" min="0" max="1" default="0">
-			<description><![CDATA[Detect collisions within creature bodies (only applicable for the ODE simulation engine). This is the initial value of Creature.selfcol for all objects created in this group. If enabled, creatures with self-colliding genotypes are not born, and others will have their sticks collide during lifespan.]]></description>
+		<element name="bodysim" type="integer" min="0" max="1" default="1" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by initial_physics_active]]></description>
+		</element>
+		<element name="initial_physics_active" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Enable/disable physical body simulation. This is the initial value of Creature.physics_active for all objects created in this group. For details, see the documentation of Creature.physics_active.]]></description>
+		</element>
+		<element name="selfcol" type="integer" min="0" max="1" default="0" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by initial_self_collisions]]></description>
+		</element>
+		<element name="initial_self_collisions" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[Detect collisions within creature bodies (only applicable for the ODE simulation engine). This is the initial value of Creature.self_collisions for all objects created in this group. If enabled, creatures with self-colliding genotypes are not born, and others will have their sticks collide during lifespan.]]></description>
 		</element>
 		<element name="em_stat" type="float" min="0" max="1" default="0.0">
@@ -3605,4 +3868,7 @@
 			<description><![CDATA[Useful for synchronizing the user interface state.]]></description>
 		</element>
+		<element name="stop_on" type="integer" min="0" max="3" default="2">
+			<description><![CDATA[If the simulation is running and a message is emitted with at least the selected severity, the simulation will be stopped.]]></description>
+		</element>
 		<element name="step" function="true" type="void" flags="32"><arguments/></element>
 		<element name="time" type="integer" deprecated="true" flags="8226">
@@ -3669,4 +3935,7 @@
 			<description><![CDATA[Most recently reported by the experiment definition script.]]></description>
 		</element>
+		<element name="resetToDefaults" function="true" type="void">
+			<description><![CDATA[Clears groups and loads default values for simulator parameters, then calls onExpDefLoad() of the current experiment definition.]]></description>
+<arguments/></element>
 		<element name="createrr" type="integer" min="0" max="2" default="1"/>
 		<element name="groupchk" type="integer" min="0" max="1" default="1">
@@ -3677,7 +3946,16 @@
 		</element>
 		<element name="vmdebug" type="integer" min="0" max="1"/>
-		<element name="resetToDefaults" function="true" type="void">
-			<description><![CDATA[Clears groups and loads default values for simulator parameters, then calls onExpDefLoad() of the current experiment definition.]]></description>
-<arguments/></element>
+		<element name="vm_step_limit" type="integer" min="0" max="1000000000" default="0">
+			<description><![CDATA[Abort any script (expdef, fitness formula, user script) when it performs too many operations - which can take more or less time depending on your machine performance. This can protect against infinite loops or unbearably long runs of untested scripts that would otherwise force you to kill the whole application. Use Simulator.vm_..._warning if you only need information about what script takes too much time without aborting it.]]></description>
+		</element>
+		<element name="vm_step_warning" type="integer" min="0" max="1000000000" default="0">
+			<description><![CDATA[Display a warning when any script (expdef, fitness formula, user script) performs too many operations - which can take more or less time depending on your machine performance. Use Simulator.vm_..._limit to prevent the application from becoming unresponsive by aborting misbehaving scripts.]]></description>
+		</element>
+		<element name="vm_time_limit" type="float" min="0" max="1e+09" default="0.0">
+			<description><![CDATA[Abort any script (expdef, fitness formula, user script) when it takes too much time - measured in seconds. The actual amount of work depends on your machine performance. This can protect against infinite loops or unbearably long runs of untested scripts that would otherwise force you to kill the whole application. Use Simulator.vm_..._warning if you only need information about what script takes too much time without aborting it.]]></description>
+		</element>
+		<element name="vm_time_warning" type="float" min="0" max="1e+09" default="0.0">
+			<description><![CDATA[Display a warning when any script (expdef, fitness formula, user script) takes too much time - measured in seconds. The actual amount of work depends on your machine performance. Use Simulator.vm_..._limit to prevent the application from becoming unresponsive by aborting misbehaving scripts.]]></description>
+		</element>
 		<element name="new" function="true" type="Simulator" flags="32"><arguments/></element>
 		<element name="slaves" type="SlaveSimulators" flags="35"/>
@@ -3703,11 +3981,52 @@
 			<description><![CDATA[Current application version as an integer.]]></description>
 		</element>
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 		<element name="wrldtyp" type="integer" min="0" max="2" default="0"/>
 		<element name="wrldsiz" type="float" min="10" max="10000" default="20.0">
@@ -3783,5 +4102,5 @@
 			<description><![CDATA[World ERP (error reduction parameter)]]></description>
 		</element>
-		<element name="odeworldcfm" type="float" min="0" max="1" default="1e-05">
+		<element name="odeworldcfm" type="float" min="0" max="1" default="1e-5">
 			<description><![CDATA[World CFM (constraint force mixing)]]></description>
 		</element>
@@ -3882,4 +4201,7 @@
 			<description><![CDATA[]]></description>
 		</element>
+		<element name="genoper_f8" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
 		<element name="genoper_f9" type="integer" min="0" max="0" flags="65">
 			<description><![CDATA[]]></description>
@@ -3889,4 +4211,13 @@
 		</element>
 		<element name="genoper_fn" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_fB" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_fH" type="integer" min="0" max="0" flags="65">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_fL" type="integer" min="0" max="0" flags="65">
 			<description><![CDATA[]]></description>
 		</element>
@@ -4318,5 +4649,50 @@
 		<element name="f4_mut_exmod" type="string" max="30">
 			<description><![CDATA[Modifiers that will not be added nor deleted during mutation
-(all: ,LlRrCcQqFfMmIiEeWwAaSs)]]></description>
+(all: LlRrCcQqFfMmIiEeWwAaSsDdGgBbHh)]]></description>
+		</element>
+		<element name="f8_mut_chg_begin_arg" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a beginning argument]]></description>
+		</element>
+		<element name="f8_mut_chg_arg" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a production's argument]]></description>
+		</element>
+		<element name="f8_mut_del_comm" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a command]]></description>
+		</element>
+		<element name="f8_mut_insert_comm" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of inserting commands]]></description>
+		</element>
+		<element name="f8_mut_enc" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of encapsulating commands]]></description>
+		</element>
+		<element name="f8_mut_chg_cond_sign" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a condition sign]]></description>
+		</element>
+		<element name="f8_mut_add_param" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of adding a parameter to the production]]></description>
+		</element>
+		<element name="f8_mut_add_cond" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of adding a condition to the subproduction]]></description>
+		</element>
+		<element name="f8_mut_add_subprod" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of adding a subproduction]]></description>
+		</element>
+		<element name="f8_mut_chg_iter_number" type="float" min="0" max="100" default="7.0">
+			<description><![CDATA[mutation: probability of changing a number of iterations]]></description>
+		</element>
+		<element name="f8_mut_del_param" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a parameter]]></description>
+		</element>
+		<element name="f8_mut_del_cond" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a condition]]></description>
+		</element>
+		<element name="f8_mut_add_loop" type="float" min="0" max="100" default="0.0">
+			<description><![CDATA[mutation: probability of adding a loop]]></description>
+		</element>
+		<element name="f8_mut_del_loop" type="float" min="0" max="100" default="0.0">
+			<description><![CDATA[mutation: probability of deleting a loop]]></description>
+		</element>
+		<element name="f8_mut_del_prod" type="float" min="0" max="100" default="8.0">
+			<description><![CDATA[mutation: probability of deleting a production]]></description>
 		</element>
 		<element name="f9_mut" type="float" min="0" max="1" default="0.1">
@@ -4333,4 +4709,7 @@
 1.0 => each child is identical to one parent (no crossover).]]></description>
 		</element>
+		<element name="fn_xover_random" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[If active, the amount of linear mix is random in each crossover operation, so the "Fraction inherited in linear mix crossover" parameter is ignored.]]></description>
+		</element>
 		<element name="fn_mut_bound_low" type="string" default="[-10.0, -10.0]">
 			<description><![CDATA[A vector of lower bounds (one real value for each variable)]]></description>
@@ -4342,25 +4721,120 @@
 			<description><![CDATA[A vector of standard deviations (one real value for each variable)]]></description>
 		</element>
-		<element name="genkonw0" type="integer" min="0" max="1">
-			<description><![CDATA[]]></description>
-		</element>
-		<element name="genkonw1" type="integer" min="0" max="1">
-			<description><![CDATA[]]></description>
-		</element>
-		<element name="genkonw2" type="integer" min="0" max="1">
-			<description><![CDATA[]]></description>
-		</element>
-		<element name="genkonw3" type="integer" min="0" max="1">
-			<description><![CDATA[]]></description>
-		</element>
-		<element name="genkonw4" type="integer" min="0" max="1">
-			<description><![CDATA[]]></description>
-		</element>
-		<element name="genkonw5" type="integer" min="0" max="1">
-			<description><![CDATA[]]></description>
-		</element>
-		<element name="genkonw6" type="integer" min="0" max="1">
-			<description><![CDATA[]]></description>
-		</element>
+		<element name="fn_mut_single_var" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[If active, only a single randomly selected variable will be mutated in each mutation operation. Otherwise all variables will be mutated.]]></description>
+		</element>
+		<element name="fB_mut_substitution" type="float" min="0" max="1" default="0.6">
+			<description><![CDATA[Probability of mutation by changing single random letter in genotype]]></description>
+		</element>
+		<element name="fB_mut_insertion" type="float" min="0" max="1" default="0.095">
+			<description><![CDATA[Probability of mutation by inserting characters in random place of genotype]]></description>
+		</element>
+		<element name="fB_mut_nclassins" type="float" min="0" max="1" default="0.005">
+			<description><![CDATA[Probability of mutation by inserting neuron class definition in random place of genotype]]></description>
+		</element>
+		<element name="fB_mut_deletion" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of mutation by deleting random characters in genotype]]></description>
+		</element>
+		<element name="fB_mut_duplication" type="float" min="0" max="1" default="0.0">
+			<description><![CDATA[Probability of mutation by copying single *gene* of genotype and appending it to the beginning of this genotype]]></description>
+		</element>
+		<element name="fB_mut_translocation" type="float" min="0" max="1" default="0.15">
+			<description><![CDATA[Probability of mutation by replacing two substrings in genotype]]></description>
+		</element>
+		<element name="fB_cross_gene_transfer" type="float" min="0" max="1" default="0.0">
+			<description><![CDATA[Probability of crossing over by transferring single genes from both parents to beginning of each other]]></description>
+		</element>
+		<element name="fB_cross_crossover" type="float" min="0" max="1" default="1.0">
+			<description><![CDATA[Probability of crossing over by random distribution of genes from both parents to both children]]></description>
+		</element>
+		<element name="fH_mut_addition" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of adding new element to genotype]]></description>
+		</element>
+		<element name="fH_mut_add_joint" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[Probability of adding new stick handle]]></description>
+		</element>
+		<element name="fH_mut_add_neuron" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[Probability of adding new neuron handle]]></description>
+		</element>
+		<element name="fH_mut_add_connection" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[Probability of adding new connection handle]]></description>
+		</element>
+		<element name="fH_mut_deletion" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of removing element from genotype]]></description>
+		</element>
+		<element name="fH_mut_handle" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing values in vectors of handle]]></description>
+		</element>
+		<element name="fH_mut_property" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing properties of handles]]></description>
+		</element>
+		<element name="fL_maxdefinedwords" type="integer" min="0" max="100" default="10">
+			<description><![CDATA[Maximum number of words that can be defined in L-System]]></description>
+		</element>
+		<element name="fL_axm_mut_prob" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of performing mutation operations on axiom]]></description>
+		</element>
+		<element name="fL_rul_mut_prob" type="float" min="0" max="1" default="0.8">
+			<description><![CDATA[Probability of performing mutation operations on the successor of random rule]]></description>
+		</element>
+		<element name="fL_mut_addition" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding random existing word to the axiom or one of successors]]></description>
+		</element>
+		<element name="fL_mut_add_stick" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding stick]]></description>
+		</element>
+		<element name="fL_mut_add_neuro" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding neuron]]></description>
+		</element>
+		<element name="fL_mut_add_conn" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding connection]]></description>
+		</element>
+		<element name="fL_mut_add_rot" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding one of rotation words]]></description>
+		</element>
+		<element name="fL_mut_add_branch" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of adding branch with rotation and stick]]></description>
+		</element>
+		<element name="fL_mut_add_other" type="float" min="0" max="1" default="0.4">
+			<description><![CDATA[Probability of adding other word, defined in genotype]]></description>
+		</element>
+		<element name="fL_mut_worddefaddition" type="float" min="0" max="1" default="0.05">
+			<description><![CDATA[Probability of adding new word definition to the genotype]]></description>
+		</element>
+		<element name="fL_mut_ruleaddition" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of adding new rule definition for existing word]]></description>
+		</element>
+		<element name="fL_mut_rulecond" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[Probability of modifying random rule condition]]></description>
+		</element>
+		<element name="fL_mut_changeword" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing word name or formula of a random word from axiom or one of successors]]></description>
+		</element>
+		<element name="fL_mut_changeword_formula" type="float" min="0" max="1" default="0.7">
+			<description><![CDATA[Probability of changing formula in word]]></description>
+		</element>
+		<element name="fL_mut_changeword_name" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing name in word]]></description>
+		</element>
+		<element name="fL_mut_changeiter" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[Probability of changing number of iterations of L-Systems]]></description>
+		</element>
+		<element name="fL_mut_changeiter_step" type="float" min="0" max="1" default="1.0">
+			<description><![CDATA[Minimal step that should be used for changing iterations in L-Systems]]></description>
+		</element>
+		<element name="fL_mut_deletion" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[Probability of deleting random word from axiom or random successor (also deletes rule if there is only one word in successor)]]></description>
+		</element>
+		<element name="genkonw0" type="integer" min="0" max="1"/>
+		<element name="genkonw1" type="integer" min="0" max="1"/>
+		<element name="genkonw2" type="integer" min="0" max="1"/>
+		<element name="genkonw3" type="integer" min="0" max="1"/>
+		<element name="genkonw4" type="integer" min="0" max="1"/>
+		<element name="genkonw5" type="integer" min="0" max="1"/>
+		<element name="genkonw6" type="integer" min="0" max="1"/>
+		<element name="genkonw7" type="integer" min="0" max="1"/>
+		<element name="genkonw8" type="integer" min="0" max="1"/>
+		<element name="genkonw9" type="integer" min="0" max="1"/>
+		<element name="genkonw10" type="integer" min="0" max="1"/>
 		<element name="randinit" type="float" min="0" max="10" default="0.01">
 			<description><![CDATA[Allowed range for initializing all neuron states with uniform distribution random numbers and zero mean. Set to 0 for deterministic initialization.]]></description>
@@ -4622,4 +5096,7 @@
    time (t) float 0..6.28319 (default 0)]]></description>
 		</element>
+		<element name="simil_method" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[]]></description>
+		</element>
 		<element name="simil_parts" type="float" min="0" max="100" default="0.0">
 			<description><![CDATA[Differing number of parts is also handled by the 'part degree' similarity component.]]></description>
@@ -4636,4 +5113,7 @@
 		<element name="simil_fixedZaxis" type="integer" min="0" max="1" default="0">
 			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_weightedMDS" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[If activated, weighted MDS with vertex (i.e., Part) degrees as weights is used for 3D alignment of body structure.]]></description>
 		</element>
 		<element name="evaluateDistance" function="true" type="float" flags="34">
@@ -4816,4 +5296,7 @@
 			<description><![CDATA[Useful for synchronizing the user interface state.]]></description>
 		</element>
+		<element name="stop_on" type="integer" min="0" max="3" default="2">
+			<description><![CDATA[If the simulation is running and a message is emitted with at least the selected severity, the simulation will be stopped.]]></description>
+		</element>
 		<element name="step" function="true" type="void" flags="32"><arguments/></element>
 		<element name="time" type="integer" deprecated="true" flags="8226">
@@ -4880,4 +5363,7 @@
 			<description><![CDATA[Most recently reported by the experiment definition script.]]></description>
 		</element>
+		<element name="resetToDefaults" function="true" type="void">
+			<description><![CDATA[Clears groups and loads default values for simulator parameters, then calls onExpDefLoad() of the current experiment definition.]]></description>
+<arguments/></element>
 		<element name="createrr" type="integer" min="0" max="2" default="1"/>
 		<element name="groupchk" type="integer" min="0" max="1" default="1">
@@ -4888,7 +5374,16 @@
 		</element>
 		<element name="vmdebug" type="integer" min="0" max="1"/>
-		<element name="resetToDefaults" function="true" type="void">
-			<description><![CDATA[Clears groups and loads default values for simulator parameters, then calls onExpDefLoad() of the current experiment definition.]]></description>
-<arguments/></element>
+		<element name="vm_step_limit" type="integer" min="0" max="1000000000" default="0">
+			<description><![CDATA[Abort any script (expdef, fitness formula, user script) when it performs too many operations - which can take more or less time depending on your machine performance. This can protect against infinite loops or unbearably long runs of untested scripts that would otherwise force you to kill the whole application. Use Simulator.vm_..._warning if you only need information about what script takes too much time without aborting it.]]></description>
+		</element>
+		<element name="vm_step_warning" type="integer" min="0" max="1000000000" default="0">
+			<description><![CDATA[Display a warning when any script (expdef, fitness formula, user script) performs too many operations - which can take more or less time depending on your machine performance. Use Simulator.vm_..._limit to prevent the application from becoming unresponsive by aborting misbehaving scripts.]]></description>
+		</element>
+		<element name="vm_time_limit" type="float" min="0" max="1e+09" default="0.0">
+			<description><![CDATA[Abort any script (expdef, fitness formula, user script) when it takes too much time - measured in seconds. The actual amount of work depends on your machine performance. This can protect against infinite loops or unbearably long runs of untested scripts that would otherwise force you to kill the whole application. Use Simulator.vm_..._warning if you only need information about what script takes too much time without aborting it.]]></description>
+		</element>
+		<element name="vm_time_warning" type="float" min="0" max="1e+09" default="0.0">
+			<description><![CDATA[Display a warning when any script (expdef, fitness formula, user script) takes too much time - measured in seconds. The actual amount of work depends on your machine performance. Use Simulator.vm_..._limit to prevent the application from becoming unresponsive by aborting misbehaving scripts.]]></description>
+		</element>
 		<element name="new" function="true" type="Simulator" flags="32"><arguments/></element>
 		<element name="slaves" type="SlaveSimulators" flags="35"/>
@@ -5006,11 +5501,52 @@
 			<description><![CDATA[]]></description>
 <arguments/></element>
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 		<element name="st_count" type="integer" flags="1"/>
 		<element name="st_min_numparts" type="float" flags="65"/>
@@ -5180,4 +5716,9 @@
 			</arguments>
 		</element>
+		<element name="trim" function="true" type="string">
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
 		<element name="startsWith" function="true" type="integer">
 			<arguments>
@@ -5307,13 +5848,56 @@
 			<description><![CDATA[String prefix used in the Framsticks file format to indicate object fields that contain serialized objects.]]></description>
 		</element>
+		<element name="ESC" type="string" flags="1"/>
+		<element name="NBSP" type="string" flags="1"/>
 	</type>
 	<type name="UserScripts" context="Global context">
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 	</type>
 	<type name="Vector" context="Global context">
@@ -5636,20 +6220,102 @@
 	</type>
 	<type name="ExpProperties" context="Experiment definition">
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 	</type>
 	<type name="ExpState" context="Experiment definition">
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 	</type>
 	<type name="n" context="Neuron definitions">
@@ -5950,18 +6616,35 @@
 		</element>
 		<element name="energy" type="float"/>
-		<element name="perf" type="integer" min="0" max="2">
-			<description><![CDATA[Initial value of this property is taken from Population.enableperf]]></description>
-		</element>
-		<element name="nnenabled" type="integer" min="0" max="1"/>
-		<element name="bodysim" type="integer" min="0" max="1" default="1">
-			<description><![CDATA[(Physical) body simulation can be disabled for individual objects which makes them immovable. Disabled objects can still participate in collisions depending on their collisions masks.
+		<element name="perf" type="integer" min="0" max="2" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by perf_measuring]]></description>
+		</element>
+		<element name="perf_measuring" type="integer" min="0" max="2">
+			<description><![CDATA[The initial value of this property is taken from Population.initial_perf_measuring]]></description>
+		</element>
+		<element name="nnenabled" type="integer" min="0" max="2" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by nn_active]]></description>
+		</element>
+		<element name="nn_active" type="integer" min="0" max="2">
+			<description><![CDATA[The initial value of this property is taken from Population.nn_active]]></description>
+		</element>
+		<element name="bodysim" type="integer" min="0" max="1" default="1" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by physics_active]]></description>
+		</element>
+		<element name="physics_active" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[(Physical) body simulation can be disabled for individual objects which makes them immovable. Disabled objects can still participate in collisions depending on their collisions masks. The initial value of this property is taken from Population.initial_physics_active.
 
 Bugs: the standard collision handler does not work for disabled objects when ODE simulation is used. It means that these objects won't physically interact with other objects. The custom (scripting) handlers work as expected.]]></description>
 		</element>
-		<element name="selfcol" type="integer" min="0" max="1">
-			<description><![CDATA[Enable/disable detection of self-collisions (within a creature body). They can only occur when using the ODE simulation engine. If enabled, the creature will have its sticks collide during lifespan.]]></description>
-		</element>
-		<element name="selfcolstate" function="true" type="integer" flags="32">
-			<description><![CDATA[Current self-collision state. In old versions this was a field, not a function.]]></description>
+		<element name="selfcol" type="integer" min="0" max="1" deprecated="true" flags="8226">
+			<description><![CDATA[Replaced by self_collisions]]></description>
+		</element>
+		<element name="self_collisions" type="integer" min="0" max="1">
+			<description><![CDATA[Enable/disable detection of self-collisions (within a creature body). They can only occur when using the ODE simulation engine. If enabled, the creature will have its sticks collide during lifespan.  The initial value of this property is taken from Population.initial_self_collisions.]]></description>
+		</element>
+		<element name="selfcolstate" function="true" type="integer" deprecated="true" flags="8224">
+			<description><![CDATA[Replaced by selfCollisionsCount()]]></description>
+<arguments/></element>
+		<element name="selfCollisionsCount" function="true" type="integer" flags="32">
+			<description><![CDATA[Returns the number of self-collisions detected in the creature.]]></description>
 <arguments/></element>
 		<element name="lifespan" type="integer">
@@ -6565,11 +7248,52 @@
 	</type>
 	<type name="VisProperties" context="Visual style definition">
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 		<element name="worldpan" type="integer" min="0" max="3" default="2" flags="192">
 			<description><![CDATA[]]></description>
@@ -6644,11 +7368,52 @@
 		<element name="dust" type="integer" min="0" max="1" default="1"/>
 		<element name="energy" type="integer" min="0" max="1" default="1"/>
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 		<element name="worldpan" type="integer" min="0" max="3" default="2" flags="192">
 			<description><![CDATA[]]></description>
@@ -7093,9 +7858,4 @@
 			</arguments>
 		</element>
-		<element name="newFrame" function="true" type="GUIElement">
-			<arguments>
-				<argument name="name" type="string"/>
-			</arguments>
-		</element>
 		<element name="newModel" function="true" type="GUIElement">
 			<arguments>
@@ -7155,5 +7915,11 @@
 			</arguments>
 		</element>
+		<element name="newBlocker" function="true" type="GUIElement">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
 		<element name="get" function="true" type="GUIElement">
+			<description><![CDATA[Returns null if there is no such element]]></description>
 			<arguments>
 				<argument name="name" type="string"/>
@@ -7205,4 +7971,9 @@
 		<element name="KEY_RIGHT" type="integer" flags="1"/>
 		<element name="SHARING_HTML" type="string" flags="1"/>
+		<element name="sharingButtonClicked" function="true" type="void">
+			<arguments>
+				<argument name="code" type="integer"/>
+			</arguments>
+		</element>
 		<element name="top_left" type="Element" flags="1"/>
 		<element name="top_center" type="Element" flags="1"/>
@@ -7211,4 +7982,7 @@
 		<element name="bottom_center" type="Element" flags="1"/>
 		<element name="bottom_right" type="Element" flags="1"/>
+		<element name="rect" type="Rectangle" flags="1">
+			<description><![CDATA[Available GUI area (excluding margins when applicable). List layout function receives its current list item area as GUI.rect]]></description>
+		</element>
 	</type>
 	<type name="GUIElement" context="Framsticks Theater">
@@ -7217,4 +7991,6 @@
 		<element name="text" type="string"/>
 		<element name="image" type="untyped"/>
+		<element name="tex_margin" type="float"/>
+		<element name="border_margin" type="float"/>
 		<element name="bgcolor" type="integer"/>
 		<element name="fgcolor" type="integer"/>
@@ -7230,9 +8006,8 @@
 		<element name="height" type="float"/>
 		<element name="tooltip" type="string"/>
-		<element name="rowheight" type="float"/>
+		<element name="row_height" type="float"/>
 		<element name="addItem" function="true" type="integer">
 			<arguments>
-				<argument name="label" type="string"/>
-				<argument name="image" type="string"/>
+				<argument name="data" type="untyped"/>
 			</arguments>
 		</element>
@@ -7240,28 +8015,16 @@
 			<arguments>
 				<argument name="position" type="integer"/>
-				<argument name="label" type="string"/>
-				<argument name="image" type="string"/>
-			</arguments>
-		</element>
-		<element name="getItemLabel" function="true" type="string">
+				<argument name="data" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="getItem" function="true" type="untyped">
 			<arguments>
 				<argument name="index" type="integer"/>
 			</arguments>
 		</element>
-		<element name="getItemImage" function="true" type="string">
+		<element name="setItem" function="true" type="void">
 			<arguments>
 				<argument name="index" type="integer"/>
-			</arguments>
-		</element>
-		<element name="setItemLabel" function="true" type="void">
-			<arguments>
-				<argument name="index" type="integer"/>
-				<argument name="label" type="string"/>
-			</arguments>
-		</element>
-		<element name="setItemImage" function="true" type="void">
-			<arguments>
-				<argument name="index" type="integer"/>
-				<argument name="image" type="string"/>
+				<argument name="data" type="untyped"/>
 			</arguments>
 		</element>
@@ -7278,7 +8041,35 @@
 		</element>
 		<element name="removeAllItems" function="true" type="void"><arguments/></element>
-		<element name="itemcount" type="integer" flags="1"/>
+		<element name="items" type="untyped">
+			<description><![CDATA[List items can be defined by a Vector object or callback function (returning item for index). Item can be any object. Built-in display function supports string and Vector items.
+Example:
+GUI->list.addItem("string item");
+GUI->list.addItem(["item text","picture"]);]]></description>
+		</element>
+		<element name="item_count" type="integer">
+			<description><![CDATA[Number of items is readonly for Vector lists (reflects the current Vector size). The number of items in the Callback list must be set explicitly.
+Example:
+GUI->list.items=function listfun; GUI->list.item_count=1000;
+function listfun(i) {return "Item #"+i;}]]></description>
+		</element>
+		<element name="item_display" type="untyped">
+			<description><![CDATA[Called when the list item is constructed or updated. Use GUI.newXXX() to add the desired GUI elements for the item. List items are reused, check if the element already exists before adding.
+Example:
+function myDisplay(list_element,list_index)
+{
+if (!GUI->mylabel) GUI.newLabel("mylabel",);
+GUI->mylabel.text=list_element.getItem(list_index);
+}]]></description>
+		</element>
+		<element name="item_layout" type="untyped">
+			<description><![CDATA[Called when the list item is resized (this happens after item_display). Place your elements inside the area defined by GUI.rect
+Example:
+function myLayout(list_element,list_index)
+{
+GUI->mylabel.rect=GUI.rect;
+}]]></description>
+		</element>
 		<element name="rect" type="Rectangle"/>
-		<element name="absoluteRect" type="Rectangle"/>
+		<element name="absolute_rect" type="Rectangle"/>
 		<element name="setRect" function="true" type="void">
 			<arguments>
@@ -7295,4 +8086,5 @@
 			</arguments>
 		</element>
+		<element name="transform" type="Transform"/>
 		<element name="setAutolayout" function="true" type="void">
 			<description><![CDATA[rel_* values refer to the parent element's dimensions]]></description>
@@ -7308,12 +8100,23 @@
 			</arguments>
 		</element>
-		<element name="minimalRect" type="Rectangle" flags="1"/>
+		<element name="minimal_rect" type="Rectangle" flags="1"/>
 		<element name="font" type="integer" min="0" max="5"/>
 		<element name="selected" type="integer"/>
 		<element name="data" type="untyped"/>
-		<element name="mode" type="integer"/>
-		<element name="enabled" type="integer"/>
+		<element name="mode" type="integer">
+			<description><![CDATA[Drawing: 0..6 = GL modes (GL_LINE_STRIP, GL_LINE_LOOP, GL_LINES, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN, GL_TRIANGLES, GL_POINTS)
+Image: 0=Normal, 1=Border, 2=EmptyBorder, 3=HorizBorder, 4=VertBorder, 5=Tile
+Textview: 0=plain text, 1=HTML, 2=plain text displaying cursor even when readonly
+Model: (bitfield) 1=display grid, 2=display neural network]]></description>
+		</element>
+		<element name="enabled" type="integer">
+			<description><![CDATA[For most elements: 0=readonly, 1=interaction/editing enabled]]></description>
+		</element>
 		<element name="autorepeat" type="integer" min="0" max="1"/>
-		<element name="style" type="integer"/>
+		<element name="style" type="integer">
+			<description><![CDATA[Button: 0=regular, 1=borderless
+List: 0=regular, 1=invisible selection
+Textfield: 0=dark border, 1=bright border]]></description>
+		</element>
 		<element name="feedback" type="integer"/>
 		<element name="userdata" type="untyped"/>
@@ -7384,4 +8187,5 @@
 		<element name="color" type="string" flags="256"/>
 		<element name="lighting" type="integer" min="0" max="1" flags="256"/>
+		<element name="alphatest" type="float" min="0" max="1" flags="256"/>
 		<element name="shine" type="integer" flags="256"/>
 		<element name="texture" type="string" flags="256"/>
@@ -7557,7 +8361,5 @@
 		</element>
 		<element name="about" function="true" flags="34"/>
-		<element name="regname" type="string" flags="35"/>
 		<element name="prev_show" type="string" flags="35"/>
-		<element name="mode" type="integer" min="0" max="2" flags="35"/>
 		<element name="switchmode" type="integer" min="0" max="3" flags="32"/>
 		<element name="switchtime" type="integer" min="0" max="9999" flags="32">
@@ -7576,20 +8378,102 @@
 			<description><![CDATA[Filename to be opened in onAppOpenFile()]]></description>
 		</element>
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 	</type>
 	<type name="ShowProperties" context="Framsticks Theater">
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 	</type>
 	<type name="SimStatsCharts" context="Framsticks Theater">
@@ -7677,11 +8561,52 @@
 		<element name="dust" type="integer" min="0" max="1" default="1"/>
 		<element name="energy" type="integer" min="0" max="1" default="1"/>
-		<element name="clear" function="true" flags="34"/>
-		<element name="add" function="true" flags="34"/>
-		<element name="remove" function="true" flags="34"/>
-		<element name="addGroup" function="true" flags="34"/>
-		<element name="removeGroup" function="true" flags="34"/>
-		<element name="changedProperty" type="integer" flags="35"/>
-		<element name="changedPropertyId" type="string" flags="35"/>
+		<element name="_propertyClear" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+<arguments/></element>
+		<element name="_propertyAdd" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemove" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyChange" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="type description" type="string"/>
+				<argument name="name" type="string"/>
+				<argument name="flags" type="integer"/>
+				<argument name="help text" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyAddGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_propertyRemoveGroup" function="true" type="void" flags="34">
+			<description><![CDATA[Using most _property functions is restricted for internal purposes. Use "property:" or "state:" definitions in your script files to change object properties.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="_propertyExists" function="true" type="integer" flags="34">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="_property_changed_index" type="integer" flags="35"/>
+		<element name="_property_changed_id" type="string" flags="35"/>
 		<element name="worldpan" type="integer" min="0" max="3" default="2" flags="192">
 			<description><![CDATA[]]></description>
