Index: /java/Framclipse/com.framsticks.framclipse/res/framscontext.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscontext.xml	(revision 490)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscontext.xml	(revision 491)
@@ -13,5 +13,5 @@
       <context name="Global context"/>
     </code>
-    <properties from="prop" to="ExpParams"/>
+    <properties from="property" to="ExpProperties"/>
     <properties from="stat" to="ExpState"/>
   </file>
@@ -25,5 +25,5 @@
       <context name="Global context"/>
     </code>
-    <properties from="prop" to="Fields"/>
+    <properties from="property" to="NeuroProperties"/>
   </file>
 
@@ -36,5 +36,5 @@
       <context name="Global context"/>
     </code>
-    <properties from="prop" to="VisParams"/>
+    <properties from="property" to="VisProperties"/>
   </file>
 
@@ -48,5 +48,5 @@
       <context name="Global context"/>
     </code>
-    <properties from="prop" to="ShowParams"/>
+    <properties from="property" to="ShowProperties"/>
   </file>
 
Index: /java/Framclipse/com.framsticks.framclipse/res/framscript.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscript.xml	(revision 490)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscript.xml	(revision 491)
@@ -123,5 +123,5 @@
 			<description><![CDATA[Deprecated. Use population instead.]]></description>
 		</element>
-		<element name="population" type="untyped" flags="35"/>
+		<element name="population" type="Population" flags="35"/>
 		<element name="index" type="integer" flags="35">
 			<description><![CDATA[Note that the index changes depending on the current creature position in the population. Use Creature.uid if you need a permanent identifier that persists through the entire object lifetime.]]></description>
@@ -190,7 +190,8 @@
 		<element name="numjoints" type="integer" flags="3"/>
 		<element name="numneurons" type="integer" flags="3"/>
-		<element name="user1" type="untyped"/>
-		<element name="user2" type="untyped"/>
-		<element name="user3" type="untyped"/>
+		<element name="data" type="Dictionary" flags="32768"/>
+		<element name="user1" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user2" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user3" type="untyped" deprecated="true" flags="8192"/>
 		<element name="move" function="true" type="void" flags="32">
 			<description><![CDATA[Shift the creature by a given vector.]]></description>
@@ -442,7 +443,8 @@
 			<description><![CDATA[Center of gravity]]></description>
 		</element>
-		<element name="user1" type="untyped"/>
-		<element name="user2" type="untyped"/>
-		<element name="user3" type="untyped"/>
+		<element name="data" type="Dictionary" flags="32768"/>
+		<element name="user1" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user2" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user3" type="untyped" deprecated="true" flags="8192"/>
 		<element name="orient" type="Orient" flags="32">
 			<description><![CDATA[By convention, the orientation of the creature is equal to the orientation of its first Part]]></description>
@@ -513,4 +515,10 @@
 			<description><![CDATA[The resulting clone is a shallow copy (contains the same object references as the original). A deep copy can be obtained through serialization: String.deserialize(String.serialize(object));]]></description>
 <arguments/></element>
+		<element name="assign" function="true" type="void" flags="256">
+			<description><![CDATA[Replaces current dictionary with dictionary contents from another object.]]></description>
+			<arguments>
+				<argument type="untyped"/>
+			</arguments>
+		</element>
 	</type>
 	<type name="File" context="Global context">
@@ -630,4 +638,11 @@
 <arguments/></element>
 		<element name="pathseparator" type="string" flags="33"/>
+		<element name="callURL" function="true" type="Dictionary" flags="32">
+			<arguments>
+				<argument name="url" type="string"/>
+				<argument name="post data or null" type="untyped"/>
+				<argument name="callback or null" type="FunctionReference"/>
+			</arguments>
+		</element>
 	</type>
 	<type name="FunctionReference" context="Global context">
@@ -720,8 +735,8 @@
 		</element>
 		<element name="add" function="true" type="Genotype" flags="34">
-			<description><![CDATA[Creates a new Genotype from the supplied Genotype, Geno or string.
+			<description><![CDATA[Creates a new Genotype from the supplied Geno or string.
 Returns the created Genotype.]]></description>
 			<arguments>
-				<argument name="genotype object or geno object or string genotype" type="untyped"/>
+				<argument name="geno object or string genotype" type="untyped"/>
 			</arguments>
 		</element>
@@ -1357,9 +1372,9 @@
 		<element name="f1_smComma" type="float" min="0" max="100" default="0.02"/>
 		<element name="f1_smModif" type="float" min="0" max="100" default="0.1">
-			<description><![CDATA[Modifiers: LlRrCcQqFfMmIiWwEeAaSsDdGgBbHh]]></description>
+			<description><![CDATA[Modifiers: LlRrCcQqFfMmIiEeWwAaSsDdGgBbHh]]></description>
 		</element>
 		<element name="f1_mut_exmod" type="string" max="30">
 			<description><![CDATA[Modifiers that will not be added nor deleted during mutation
-(all: LlRrCcQqFfMmIiWwEeAaSsDdGgBbHh)]]></description>
+(all: LlRrCcQqFfMmIiEeWwAaSsDdGgBbHh)]]></description>
 		</element>
 		<element name="f1_nmNeu" type="float" min="0" max="100" default="0.05">
@@ -1598,7 +1613,8 @@
 		</element>
 		<element name="convtrace1" type="string" flags="3"/>
-		<element name="user1" type="untyped"/>
-		<element name="user2" type="untyped"/>
-		<element name="user3" type="untyped"/>
+		<element name="data" type="Dictionary" flags="32768"/>
+		<element name="user1" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user2" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user3" type="untyped" deprecated="true" flags="8192"/>
 		<element name="mutate" function="true" type="void"><arguments/></element>
 		<element name="isValid" type="integer" min="0" max="1" deprecated="true" flags="8227">
@@ -1650,15 +1666,12 @@
 			</arguments>
 		</element>
-		<element name="copyTo" function="true" type="Genotype" flags="32">
-			<description><![CDATA[returns the duplicate genotype, created in the target pool]]></description>
-			<arguments>
-				<argument name="pool" type="GenePool"/>
-			</arguments>
-		</element>
+		<element name="clone" function="true" type="Genotype" flags="32">
+			<description><![CDATA[Returns a duplicated genotype, not attached to any gene pool. All genotype fields are copied including 'data' (for which Dictionary.clone() produces a shallow copy).]]></description>
+<arguments/></element>
 		<element name="delete" function="true" type="void" flags="32"><arguments/></element>
 		<element name="deleteOne" function="true" type="void" flags="32">
 			<description><![CDATA[]]></description>
 <arguments/></element>
-		<element name="genepool" type="untyped" flags="35">
+		<element name="genepool" type="GenePool" flags="35">
 			<description><![CDATA[GenePool object or null when not in pool]]></description>
 		</element>
@@ -1672,7 +1685,7 @@
 	<type name="Interface" context="Global context">
 <description><![CDATA[Used to query for object member descriptions. Example:
-var iface=Interface.makeFrom(someobject); var description="this object has "+iface.properties+" properties, first property is "+iface.getId(0);]]></description>
+var iface=Interface.makeFrom(someobject); var description="this object has "+iface.size+" properties, first property is "+iface.getId(0);]]></description>
 		<element name="name" type="string" flags="257"/>
-		<element name="properties" type="integer" flags="257"/>
+		<element name="size" type="integer" flags="257"/>
 		<element name="groups" type="integer" flags="257"/>
 		<element name="get" function="true" type="untyped" flags="256">
@@ -2210,17 +2223,17 @@
 		<element name="part" type="MechPart" flags="1"/>
 		<element name="joint" type="MechJoint" flags="1"/>
-		<element name="fields" type="Fields" flags="1">
-			<description><![CDATA[Neurons can have different fields depending on their class. Script neurons have their fields defined using the "prop:" syntax. If you develop a custom neuron script you should use the Fields object for accessing your own neuron fields. The Neuro.fields property is meant for accessing the neuron fields from the outside script.
+		<element name="neuroproperties" type="NeuroProperties" flags="1">
+			<description><![CDATA[Neurons can have different fields depending on their class. Script neurons have their fields defined using the "property:" syntax. If you develop a custom neuron script you should use the NeuroProperties object for accessing your own neuron fields. The Neuro.neuroproperties property is meant for accessing the neuron fields from the outside script.
 Examples:
 var c=Populations.createFromString("X[N]");
-Simulator.print("standard neuron inertia="+c.getNeuro(0).fields.in);
+Simulator.print("standard neuron inertia="+c.getNeuro(0).neuroproperties.in);
 c=Populations.createFromString("X[Nn,e:0.1]");
-Simulator.print("noisy neuron error rate="+c.getNeuro(0).fields.e);
+Simulator.print("noisy neuron error rate="+c.getNeuro(0).neuroproperties.e);
 
 The Interface object can be used to discover which fields are available for a certain neuron object:
 c=Populations.createFromString("X[N]");
-var iobj=Interface.makeFrom(c.getNeuro(0).fields);
+var iobj=Interface.makeFrom(c.getNeuro(0).neuroproperties);
 var i;
-for(i=0;i<iobj.properties;i++)
+for(i=0;i<iobj.size;i++)
  Simulator.print(iobj.getId(i)+" ("+iobj.getName(i)+")");]]></description>
 		</element>
@@ -2634,5 +2647,8 @@
 		</element>
 		<element name="odeairdrag" type="float" min="0" max="0.5" default="0.01">
-			<description><![CDATA[A drag force ("air drag") proportional to the velocity of mass centers of moving parts]]></description>
+			<description><![CDATA[A drag force ("air drag") proportional to the velocity of mass centers of moving parts (ODE's "linear damping")]]></description>
+		</element>
+		<element name="oderotdrag" type="float" min="0" max="0.5" default="0.01">
+			<description><![CDATA[Drag momentum acting on rotating bodies (ODE's "angular damping")]]></description>
 		</element>
 		<element name="odewaterdrag" type="float" min="0.001" max="1" default="0.5"/>
@@ -3239,9 +3255,9 @@
 		</element>
 		<element name="eval" function="true" type="void" flags="32">
-			<description><![CDATA[The argument must be a complete statement, e.g. "return 2+2;" is valid, while "2+2" is not. The EvalError object is returned for invalid statements.
+			<description><![CDATA[The argument must be a complete statement, e.g. "return 2+2;" is valid, while "2+2" is not. The Error object is returned for invalid statements.
 Example:
 var statement="function fun(a) {return a*a;} return fun(Math.pi);";
 var result=Simulator.eval(statement);
-if (typeof result=="EvalError")
+if (typeof result=="Error")
    Simulator.print("Error:"+result.message);
 else
@@ -3384,5 +3400,5 @@
 		<element name="populations" type="Populations" flags="35"/>
 		<element name="genepools" type="GenePools" flags="35"/>
-		<element name="expparams" type="ExpParams" flags="35"/>
+		<element name="expproperties" type="ExpProperties" flags="35"/>
 		<element name="expstate" type="ExpState" flags="35"/>
 		<element name="genman" type="GenMan" flags="35"/>
@@ -3451,5 +3467,8 @@
 		</element>
 		<element name="odeairdrag" type="float" min="0" max="0.5" default="0.01">
-			<description><![CDATA[A drag force ("air drag") proportional to the velocity of mass centers of moving parts]]></description>
+			<description><![CDATA[A drag force ("air drag") proportional to the velocity of mass centers of moving parts (ODE's "linear damping")]]></description>
+		</element>
+		<element name="oderotdrag" type="float" min="0" max="0.5" default="0.01">
+			<description><![CDATA[Drag momentum acting on rotating bodies (ODE's "angular damping")]]></description>
 		</element>
 		<element name="odewaterdrag" type="float" min="0.001" max="1" default="0.5"/>
@@ -3909,9 +3928,9 @@
 		<element name="f1_smComma" type="float" min="0" max="100" default="0.02"/>
 		<element name="f1_smModif" type="float" min="0" max="100" default="0.1">
-			<description><![CDATA[Modifiers: LlRrCcQqFfMmIiWwEeAaSsDdGgBbHh]]></description>
+			<description><![CDATA[Modifiers: LlRrCcQqFfMmIiEeWwAaSsDdGgBbHh]]></description>
 		</element>
 		<element name="f1_mut_exmod" type="string" max="30">
 			<description><![CDATA[Modifiers that will not be added nor deleted during mutation
-(all: LlRrCcQqFfMmIiWwEeAaSsDdGgBbHh)]]></description>
+(all: LlRrCcQqFfMmIiEeWwAaSsDdGgBbHh)]]></description>
 		</element>
 		<element name="f1_nmNeu" type="float" min="0" max="100" default="0.05">
@@ -4396,9 +4415,9 @@
 		</element>
 		<element name="eval" function="true" type="void" flags="32">
-			<description><![CDATA[The argument must be a complete statement, e.g. "return 2+2;" is valid, while "2+2" is not. The EvalError object is returned for invalid statements.
+			<description><![CDATA[The argument must be a complete statement, e.g. "return 2+2;" is valid, while "2+2" is not. The Error object is returned for invalid statements.
 Example:
 var statement="function fun(a) {return a*a;} return fun(Math.pi);";
 var result=Simulator.eval(statement);
-if (typeof result=="EvalError")
+if (typeof result=="Error")
    Simulator.print("Error:"+result.message);
 else
@@ -4541,5 +4560,5 @@
 		<element name="populations" type="Populations" flags="35"/>
 		<element name="genepools" type="GenePools" flags="35"/>
-		<element name="expparams" type="ExpParams" flags="35"/>
+		<element name="expproperties" type="ExpProperties" flags="35"/>
 		<element name="expstate" type="ExpState" flags="35"/>
 		<element name="genman" type="GenMan" flags="35"/>
@@ -4913,5 +4932,8 @@
 		</element>
 		<element name="deserialize" function="true" type="untyped">
-			<description><![CDATA[Extracts objects from textual representation.]]></description>
+			<description><![CDATA[Extracts objects from textual representation. Error object is returned if deserialization fails.
+Example:
+var ret=String.deserialize(something);
+if (typeof(ret)=="Error") Simulator.print("something is wrong: "+ret.message);]]></description>
 			<arguments>
 				<argument type="string"/>
@@ -5227,5 +5249,5 @@
 		</element>
 	</type>
-	<type name="ExpParams" context="Experiment definition">
+	<type name="ExpProperties" context="Experiment definition">
 		<element name="clear" function="true" flags="34"/>
 		<element name="add" function="true" flags="34"/>
@@ -5355,17 +5377,17 @@
 		<element name="part" type="MechPart" flags="1"/>
 		<element name="joint" type="MechJoint" flags="1"/>
-		<element name="fields" type="Fields" flags="1">
-			<description><![CDATA[Neurons can have different fields depending on their class. Script neurons have their fields defined using the "prop:" syntax. If you develop a custom neuron script you should use the Fields object for accessing your own neuron fields. The Neuro.fields property is meant for accessing the neuron fields from the outside script.
+		<element name="neuroproperties" type="NeuroProperties" flags="1">
+			<description><![CDATA[Neurons can have different fields depending on their class. Script neurons have their fields defined using the "property:" syntax. If you develop a custom neuron script you should use the NeuroProperties object for accessing your own neuron fields. The Neuro.neuroproperties property is meant for accessing the neuron fields from the outside script.
 Examples:
 var c=Populations.createFromString("X[N]");
-Simulator.print("standard neuron inertia="+c.getNeuro(0).fields.in);
+Simulator.print("standard neuron inertia="+c.getNeuro(0).neuroproperties.in);
 c=Populations.createFromString("X[Nn,e:0.1]");
-Simulator.print("noisy neuron error rate="+c.getNeuro(0).fields.e);
+Simulator.print("noisy neuron error rate="+c.getNeuro(0).neuroproperties.e);
 
 The Interface object can be used to discover which fields are available for a certain neuron object:
 c=Populations.createFromString("X[N]");
-var iobj=Interface.makeFrom(c.getNeuro(0).fields);
+var iobj=Interface.makeFrom(c.getNeuro(0).neuroproperties);
 var i;
-for(i=0;i<iobj.properties;i++)
+for(i=0;i<iobj.size;i++)
  Simulator.print(iobj.getId(i)+" ("+iobj.getName(i)+")");]]></description>
 		</element>
@@ -5424,7 +5446,8 @@
 		</element>
 		<element name="convtrace1" type="string" flags="3"/>
-		<element name="user1" type="untyped"/>
-		<element name="user2" type="untyped"/>
-		<element name="user3" type="untyped"/>
+		<element name="data" type="Dictionary" flags="32768"/>
+		<element name="user1" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user2" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user3" type="untyped" deprecated="true" flags="8192"/>
 		<element name="mutate" function="true" type="void"><arguments/></element>
 		<element name="isValid" type="integer" min="0" max="1" deprecated="true" flags="8227">
@@ -5476,15 +5499,12 @@
 			</arguments>
 		</element>
-		<element name="copyTo" function="true" type="Genotype" flags="32">
-			<description><![CDATA[returns the duplicate genotype, created in the target pool]]></description>
-			<arguments>
-				<argument name="pool" type="GenePool"/>
-			</arguments>
-		</element>
+		<element name="clone" function="true" type="Genotype" flags="32">
+			<description><![CDATA[Returns a duplicated genotype, not attached to any gene pool. All genotype fields are copied including 'data' (for which Dictionary.clone() produces a shallow copy).]]></description>
+<arguments/></element>
 		<element name="delete" function="true" type="void" flags="32"><arguments/></element>
 		<element name="deleteOne" function="true" type="void" flags="32">
 			<description><![CDATA[]]></description>
 <arguments/></element>
-		<element name="genepool" type="untyped" flags="35">
+		<element name="genepool" type="GenePool" flags="35">
 			<description><![CDATA[GenePool object or null when not in pool]]></description>
 		</element>
@@ -5509,5 +5529,5 @@
 			<description><![CDATA[Deprecated. Use population instead.]]></description>
 		</element>
-		<element name="population" type="untyped" flags="35"/>
+		<element name="population" type="Population" flags="35"/>
 		<element name="index" type="integer" flags="35">
 			<description><![CDATA[Note that the index changes depending on the current creature position in the population. Use Creature.uid if you need a permanent identifier that persists through the entire object lifetime.]]></description>
@@ -5576,7 +5596,8 @@
 		<element name="numjoints" type="integer" flags="3"/>
 		<element name="numneurons" type="integer" flags="3"/>
-		<element name="user1" type="untyped"/>
-		<element name="user2" type="untyped"/>
-		<element name="user3" type="untyped"/>
+		<element name="data" type="Dictionary" flags="32768"/>
+		<element name="user1" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user2" type="untyped" deprecated="true" flags="8192"/>
+		<element name="user3" type="untyped" deprecated="true" flags="8192"/>
 		<element name="move" function="true" type="void" flags="32">
 			<description><![CDATA[Shift the creature by a given vector.]]></description>
@@ -6025,5 +6046,5 @@
 		<element name="twosided" type="integer" min="0" max="1"/>
 	</type>
-	<type name="VisParams" context="Visual style definition">
+	<type name="VisProperties" context="Visual style definition">
 		<element name="clear" function="true" flags="34"/>
 		<element name="add" function="true" flags="34"/>
@@ -7020,5 +7041,5 @@
 		<element name="changedPropertyId" type="string" flags="35"/>
 	</type>
-	<type name="ShowParams" context="Framsticks Theater">
+	<type name="ShowProperties" context="Framsticks Theater">
 		<element name="clear" function="true" flags="34"/>
 		<element name="add" function="true" flags="34"/>
