Index: /java/Framclipse/com.framsticks.framclipse.feature/.project
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.feature/.project	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.feature/.project	(revision 437)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.framsticks.framclipse.feature</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
Index: /java/Framclipse/com.framsticks.framclipse.feature/build.properties
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.feature/build.properties	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.feature/build.properties	(revision 437)
@@ -0,0 +1,1 @@
+bin.includes = feature.xml
Index: /java/Framclipse/com.framsticks.framclipse.feature/feature.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.feature/feature.xml	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.feature/feature.xml	(revision 437)
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature
+      id="com.framsticks.framclipse"
+      label="Framclipse"
+      version="2.0.0.vqualifier"
+      provider-name="Poznan University of Technology">
+
+   <description>
+      Framclipse Plugin
+   </description>
+
+   <requires>
+      <import plugin="org.eclipse.xtext" version="1.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.xtext.util" version="1.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.emf.ecore"/>
+      <import plugin="org.eclipse.emf.common"/>
+      <import plugin="org.antlr.runtime"/>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.apache.log4j"/>
+      <import plugin="org.eclipse.xtext.ui" version="1.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui.editors" version="3.5.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui.ide" version="3.5.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.xtext.ui.shared" version="1.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui"/>
+      <import plugin="org.eclipse.xtext.builder" version="1.0.0" match="greaterOrEqual"/>
+   </requires>
+
+   <plugin
+         id="com.framsticks.framclipse"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.framsticks.framclipse.ui"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+   <plugin
+         id="com.google.inject"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
+</feature>
Index: /java/Framclipse/com.framsticks.framclipse.ui/.classpath
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/.classpath	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/.classpath	(revision 437)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
Index: /java/Framclipse/com.framsticks.framclipse.ui/.project
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/.project	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/.project	(revision 437)
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.framsticks.framclipse.ui</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
Index: /java/Framclipse/com.framsticks.framclipse.ui/META-INF/MANIFEST.MF
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/META-INF/MANIFEST.MF	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/META-INF/MANIFEST.MF	(revision 437)
@@ -0,0 +1,20 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Framclipse UI
+Bundle-Vendor: Poznan University of Technology
+Bundle-Version: 2.0.0.vqualifier
+Bundle-SymbolicName: com.framsticks.framclipse.ui; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: com.framsticks.framclipse;visibility:=reexport,
+ org.eclipse.xtext.ui,
+ org.eclipse.ui.editors;bundle-version="3.5.0",
+ org.eclipse.ui.ide;bundle-version="3.5.0",
+ org.eclipse.xtext.ui.shared,
+ org.eclipse.ui,
+ org.antlr.runtime,
+ org.eclipse.xtext.builder
+Import-Package: org.apache.log4j
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: com.framsticks.framclipse.ui.contentassist,
+ com.framsticks.framclipse.ui.contentassist.antlr
+Bundle-Activator: com.framsticks.framclipse.ui.internal.FramScriptActivator
Index: /java/Framclipse/com.framsticks.framclipse.ui/build.properties
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/build.properties	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/build.properties	(revision 437)
@@ -0,0 +1,8 @@
+source.. = src/,\
+           src-gen/
+bin.includes = META-INF/,\
+               plugin.xml,\
+               templates/,\
+               icons/,\
+               .
+
Index: /java/Framclipse/com.framsticks.framclipse.ui/plugin.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/plugin.xml	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/plugin.xml	(revision 437)
@@ -0,0 +1,254 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+    <extension
+            point="org.eclipse.ui.editors">
+        <editor
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
+            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
+            default="true"
+            extensions="neuro,expdef,style,show,script,inc"
+            id="com.framsticks.framclipse.FramScript"
+            icon="icons/frams.gif"
+            name="FramScript Editor">
+        </editor>
+    </extension>
+    <extension
+        point="org.eclipse.ui.handlers">
+        <handler
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
+            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
+            <activeWhen>
+                <reference
+                    definitionId="com.framsticks.framclipse.FramScript.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
+            commandId="com.framsticks.framclipse.FramScript.validate">
+         <activeWhen>
+            <reference
+                    definitionId="com.framsticks.framclipse.FramScript.Editor.opened">
+            </reference>
+         </activeWhen>
+      </handler>
+    </extension>
+    <extension point="org.eclipse.core.expressions.definitions">
+        <definition id="com.framsticks.framclipse.FramScript.Editor.opened">
+            <and>
+                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
+                <with variable="activeEditor">
+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
+                        value="com.framsticks.framclipse.FramScript" 
+                        forcePluginActivation="true"/>
+                </with>        
+            </and>
+        </definition>
+    </extension>
+    <extension
+            point="org.eclipse.ui.preferencePages">
+        <page
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+            id="com.framsticks.framclipse.FramScript"
+            name="FramScript">
+            <keywordReference id="com.framsticks.framclipse.ui.keyword_FramScript"/>
+        </page>
+        <page
+            category="com.framsticks.framclipse.FramScript"
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
+            id="com.framsticks.framclipse.FramScript.coloring"
+            name="Syntax Coloring">
+            <keywordReference id="com.framsticks.framclipse.ui.keyword_FramScript"/>
+        </page>
+        <page
+            category="com.framsticks.framclipse.FramScript"
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
+            id="com.framsticks.framclipse.FramScript.templates"
+            name="Templates">
+            <keywordReference id="com.framsticks.framclipse.ui.keyword_FramScript"/>
+        </page>
+    </extension>
+    <extension
+        point="org.eclipse.ui.keywords">
+        <keyword
+            id="com.framsticks.framclipse.ui.keyword_FramScript"
+            label="FramScript"/>
+    </extension>
+    <extension
+         point="org.eclipse.ui.commands">
+      <command
+            description="Trigger expensive validation"
+            id="com.framsticks.framclipse.FramScript.validate"
+            name="Validate">
+      </command>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+        <menuContribution
+            locationURI="popup:#TextEditorContext?after=group.edit">
+             <command
+                 commandId="com.framsticks.framclipse.FramScript.validate"
+                 style="push"
+                 tooltip="Trigger expensive validation">
+            <visibleWhen checkEnabled="false">
+                <reference
+                    definitionId="com.framsticks.framclipse.FramScript.Editor.opened">
+                </reference>
+            </visibleWhen>
+         </command>  
+         </menuContribution>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">
+			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">
+				<visibleWhen checkEnabled="false">
+                	<reference definitionId="com.framsticks.framclipse.FramScript.Editor.opened">
+                	</reference>
+            	</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.handlers">
+	    <handler
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
+            commandId="org.eclipse.xtext.ui.editor.FindReferences">
+            <activeWhen>
+                <reference
+                    definitionId="com.framsticks.framclipse.FramScript.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+    </extension>   
+
+<!-- adding resource factories -->
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="neuro">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="neuro">
+        </resourceServiceProvider>
+    </extension>
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="expdef">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="expdef">
+        </resourceServiceProvider>
+    </extension>
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="style">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="style">
+        </resourceServiceProvider>
+    </extension>
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="show">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="show">
+        </resourceServiceProvider>
+    </extension>
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="script">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="script">
+        </resourceServiceProvider>
+    </extension>
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="inc">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="inc">
+        </resourceServiceProvider>
+    </extension>
+
+
+
+
+	<!-- Quick Outline -->
+	<extension
+		point="org.eclipse.ui.handlers">
+		<handler 
+			class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
+			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
+			<activeWhen>
+				<reference
+					definitionId="com.framsticks.framclipse.FramScript.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension
+		point="org.eclipse.ui.commands">
+		<command
+			description="Open the quick outline."
+			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+			name="Quick Outline">
+		</command>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution
+			locationURI="popup:#TextEditorContext?after=group.open">
+			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+				style="push"
+				tooltip="Open Quick Outline">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="com.framsticks.framclipse.FramScript.Editor.opened"/>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+   <!-- quickfix marker resolution generator -->
+   <extension
+         point="org.eclipse.ui.ide.markerResolution">
+      <markerResolutionGenerator
+            class="com.framsticks.framclipse.ui.FramScriptExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator">
+      </markerResolutionGenerator>
+   </extension>
+</plugin>
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/FramScriptSourceViewerConfiguration.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/FramScriptSourceViewerConfiguration.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/FramScriptSourceViewerConfiguration.java	(revision 437)
@@ -0,0 +1,93 @@
+package com.framsticks.framclipse.ui;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.internal.text.html.HTMLTextPresenter;
+import org.eclipse.jface.text.DefaultInformationControl;
+import org.eclipse.jface.text.IInformationControl;
+import org.eclipse.jface.text.IInformationControlCreator;
+import org.eclipse.jface.text.IRegion;
+import org.eclipse.jface.text.ITextHover;
+import org.eclipse.jface.text.ITextViewer;
+import org.eclipse.jface.text.Region;
+import org.eclipse.jface.text.source.ISourceViewer;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.parsetree.ParseTreeUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.ui.editor.XtextSourceViewerConfiguration;
+import org.eclipse.xtext.ui.editor.model.IXtextDocument;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+import com.framsticks.framclipse.framScript.Function;
+import com.framsticks.framclipse.framScript.Invocation;
+import com.framsticks.framclipse.framScript.Proposable;
+import com.framsticks.framclipse.framScript.QualifiedExpression;
+import com.framsticks.framclipse.framScript.VariableDeclaration;
+import com.framsticks.framclipse.framScript.VariableRef;
+import com.framsticks.framclipse.ui.contentassist.DescriptorProvider;
+import com.google.inject.Inject;
+
+@SuppressWarnings("restriction")
+public class FramScriptSourceViewerConfiguration extends XtextSourceViewerConfiguration {
+
+	@Inject
+	private DescriptorProvider descripter;
+
+	@Override
+	public IInformationControlCreator getInformationControlCreator(ISourceViewer sourceViewer) {
+		return new IInformationControlCreator() {
+			public IInformationControl createInformationControl(Shell parent) {
+				return new DefaultInformationControl(parent, new HTMLTextPresenter(true));
+			}
+		};
+	}
+
+	@Override
+	public ITextHover getTextHover(final ISourceViewer sourceViewer, String contentType) {
+		return new ITextHover() {
+
+			@Override
+			public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
+				return new Region(offset, 0);
+			}
+
+			@Override
+			public String getHoverInfo(ITextViewer textViewer, IRegion hoverRegion) {
+				final int offset = hoverRegion.getOffset();
+				final IXtextDocument model = (IXtextDocument) sourceViewer.getDocument();
+				return model.readOnly(new IUnitOfWork<String, XtextResource>() {
+
+					@Override
+					public String exec(XtextResource state) throws Exception {
+						CompositeNode root = state.getParseResult().getRootNode();
+						AbstractNode current = ParseTreeUtil.getCurrentOrFollowingNodeByOffset(root, offset);
+						EObject semantic = NodeUtil.getNearestSemanticObject(current);
+
+						if (semantic instanceof QualifiedExpression) {
+							return getMessage((QualifiedExpression) semantic);
+						}
+						return null;
+					}
+				});
+			}
+		};
+	}
+
+	private String getMessage(QualifiedExpression expression) {
+		if (expression instanceof Invocation) {
+			Function function = ((Invocation) expression).getFunction();
+			if (function instanceof Proposable) {
+				return descripter.description(((Proposable) function).description());
+			}
+		} else if (expression instanceof VariableRef) {
+			VariableDeclaration var = ((VariableRef) expression).getVar();
+			if (var instanceof Proposable) {
+				return descripter.description(((Proposable) var).description());
+			}
+		}
+		return null;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/FramScriptUiModule.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/FramScriptUiModule.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/FramScriptUiModule.java	(revision 437)
@@ -0,0 +1,64 @@
+/*
+ * generated by Xtext
+ */
+package com.framsticks.framclipse.ui;
+
+import org.eclipse.jface.text.templates.ContextTypeRegistry;
+import org.eclipse.jface.text.templates.Template;
+import org.eclipse.jface.text.templates.persistence.TemplateStore;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.service.SingletonBinding;
+import org.eclipse.xtext.ui.IImageHelper;
+import org.eclipse.xtext.ui.editor.XtextSourceViewerConfiguration;
+import org.eclipse.xtext.ui.editor.contentassist.ITemplateProposalProvider;
+import org.eclipse.xtext.ui.editor.templates.ContextTypeIdHelper;
+import org.eclipse.xtext.ui.editor.templates.DefaultTemplateProposalProvider;
+
+import com.framsticks.framclipse.ui.contentassist.DescriptorProvider;
+import com.framsticks.framclipse.ui.contentassist.HTMLDescriptorProvider;
+import com.google.inject.Inject;
+
+/**
+ * Use this class to register components to be used within the IDE.
+ */
+public class FramScriptUiModule extends com.framsticks.framclipse.ui.AbstractFramScriptUiModule {
+
+	public FramScriptUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+
+	public Class<? extends XtextSourceViewerConfiguration> bindSourceViewerConfiguration() {
+		return FramScriptSourceViewerConfiguration.class;
+	}
+
+	@SingletonBinding
+	public Class<? extends DescriptorProvider> bindDescriptorProvider() {
+		return HTMLDescriptorProvider.class;
+	}
+
+	@Override
+	@SingletonBinding
+	public Class<? extends ITemplateProposalProvider> bindITemplateProposalProvider() {
+		return FramScriptTemplateProposalProvider.class;
+	}
+
+	public static class FramScriptTemplateProposalProvider extends DefaultTemplateProposalProvider {
+
+		@Inject
+		private IImageHelper imageHelper;
+
+		@Inject
+		public FramScriptTemplateProposalProvider(TemplateStore templateStore,
+				ContextTypeRegistry registry, ContextTypeIdHelper helper) {
+			super(templateStore, registry, helper);
+		}
+
+		@Override
+		public Image getImage(Template template) {
+			return imageHelper.getImage("template.gif");
+		}
+
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/DescriptorProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/DescriptorProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/DescriptorProvider.java	(revision 437)
@@ -0,0 +1,13 @@
+package com.framsticks.framclipse.ui.contentassist;
+
+import java.util.Map;
+
+import org.eclipse.jface.viewers.StyledString;
+
+public interface DescriptorProvider {
+
+	StyledString display(String string);
+	
+	String description(Map<String,String> string);
+
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/FramScriptProposalProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/FramScriptProposalProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/FramScriptProposalProvider.java	(revision 437)
@@ -0,0 +1,67 @@
+/*
+ * generated by Xtext
+ */
+package com.framsticks.framclipse.ui.contentassist;
+
+import org.eclipse.jface.text.contentassist.ICompletionProposal;
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.ui.editor.contentassist.ConfigurableCompletionProposal;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+
+import com.framsticks.framclipse.framScript.Proposable;
+import com.google.common.base.Function;
+import com.google.inject.Inject;
+
+/**
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content
+ * assistant
+ */
+public class FramScriptProposalProvider extends AbstractFramScriptProposalProvider {
+
+	@Inject
+	private DescriptorProvider descripter;
+
+	@Override
+	protected Function<IEObjectDescription, ICompletionProposal> getProposalFactory(String ruleName,
+			ContentAssistContext contentAssistContext) {
+		return new FramScriptProposalCreator(contentAssistContext, ruleName);
+	}
+
+	protected class FramScriptProposalCreator extends DefaultProposalCreator {
+
+		private final ContentAssistContext cac;
+
+		protected FramScriptProposalCreator(ContentAssistContext contentAssistContext, String ruleName) {
+			super(contentAssistContext, ruleName);
+			this.cac = contentAssistContext;
+		}
+
+		public ICompletionProposal apply(IEObjectDescription candidate) {
+			if (candidate != null && candidate.getEObjectOrProxy() instanceof Proposable) {
+				return createCompletionProposal((Proposable) candidate.getEObjectOrProxy(), cac);
+			} else {
+				return super.apply(candidate);
+			}
+		}
+
+	}
+
+	public ICompletionProposal createCompletionProposal(Proposable proposable,
+			ContentAssistContext contentAssistContext) {
+		String proposal = proposable.proposal();
+		StyledString display = descripter.display(proposable.display());
+		String description = descripter.description(proposable.description());
+		Image image = getLabelProvider().getImage(proposable);
+
+		ConfigurableCompletionProposal p = (ConfigurableCompletionProposal) createCompletionProposal(
+				proposal, display, image, contentAssistContext);
+		if (p != null) {
+			p.setAutoInsertable(true);
+			p.setAdditionalProposalInfo(description);
+			getPriorityHelper().adjustCrossReferencePriority(p, contentAssistContext.getPrefix());
+		}
+		return p;
+	}
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/HTMLDescriptorProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/HTMLDescriptorProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/contentassist/HTMLDescriptorProvider.java	(revision 437)
@@ -0,0 +1,73 @@
+package com.framsticks.framclipse.ui.contentassist;
+
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.StyledString;
+import org.eclipse.jface.viewers.StyledString.Styler;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.TextStyle;
+import org.eclipse.swt.widgets.Display;
+
+public class HTMLDescriptorProvider implements DescriptorProvider {
+
+	private static final Styler LEFT_STYLER = new ColorStyler(SWT.COLOR_BLACK);
+	private static final Styler RIGHT_STYLER = new ColorStyler(SWT.COLOR_DARK_GRAY);
+	private static final String INDENT = "<pre>			</pre>";
+
+	@Override
+	public StyledString display(String string) {
+		int pointcut = string.indexOf(':');
+		if (pointcut < 0) {
+			return new StyledString(string, LEFT_STYLER);
+		} else {
+			StyledString display = new StyledString(string.substring(0, pointcut), LEFT_STYLER);
+			display.append(string.substring(pointcut, string.length()), RIGHT_STYLER);
+			return display;
+		}
+	}
+
+	@Override
+	public String description(Map<String, String> description) {
+		StringBuilder builder = new StringBuilder();
+		Set<Entry<String, String>> set = description.entrySet();
+		for (Entry<String, String> entry : set) {
+			builder.append(wrap(entry.getKey(), entry.getValue()));
+		}
+		return builder.toString();
+	}
+
+	private String wrap(String name, String content) {
+		if (name != null && content != null && content.length() > 0) {
+			String[] split = content.split("\n");
+			return "<b>" + name + ":</b><br/>" + indent(split);
+		} else {
+			return "";
+		}
+	}
+
+	private String indent(String... content) {
+		StringBuilder builder = new StringBuilder();
+		for (String string : content) {
+			builder.append(INDENT).append(string).append("<br/>");
+		}
+		return builder.toString();
+	}
+
+	private static class ColorStyler extends Styler {
+
+		private final int color;
+
+		public ColorStyler(int color) {
+			this.color = color;
+		}
+
+		@Override
+		public void applyStyles(TextStyle textStyle) {
+			textStyle.foreground = Display.getCurrent().getSystemColor(color);
+		}
+
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/labeling/FramScriptDescriptionLabelProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/labeling/FramScriptDescriptionLabelProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/labeling/FramScriptDescriptionLabelProvider.java	(revision 437)
@@ -0,0 +1,27 @@
+/*
+* generated by Xtext
+*/
+package com.framsticks.framclipse.ui.labeling;
+
+import org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider;
+
+/**
+ * Provides labels for a IEObjectDescriptions and IResourceDescriptions.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider
+ */
+public class FramScriptDescriptionLabelProvider extends DefaultDescriptionLabelProvider {
+
+/*
+	//Labels and icons can be computed like this:
+	
+	String text(IEObjectDescription ele) {
+	  return "my "+ele.getName();
+	}
+	 
+    String image(IEObjectDescription ele) {
+      return ele.getEClass().getName() + ".gif";
+    }	 
+*/
+
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/labeling/FramScriptLabelProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/labeling/FramScriptLabelProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/labeling/FramScriptLabelProvider.java	(revision 437)
@@ -0,0 +1,114 @@
+/*
+* generated by Xtext
+*/
+package com.framsticks.framclipse.ui.labeling;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider;
+
+import com.framsticks.framclipse.framScript.Code;
+import com.framsticks.framclipse.framScript.FramclipseClass;
+import com.framsticks.framclipse.framScript.Function;
+import com.framsticks.framclipse.framScript.Header;
+import com.framsticks.framclipse.framScript.IncludeDeclaration;
+import com.framsticks.framclipse.framScript.IntHeader;
+import com.framsticks.framclipse.framScript.Property;
+import com.framsticks.framclipse.framScript.ProposableVariableDeclarationImpl;
+import com.framsticks.framclipse.framScript.State;
+import com.framsticks.framclipse.framScript.VariableDeclaration;
+import com.framsticks.framclipse.framScript.VariableDeclarations;
+import com.google.inject.Inject;
+
+/**
+ * Provides labels for a EObjects.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider
+ */
+public class FramScriptLabelProvider extends DefaultEObjectLabelProvider {
+
+	@Inject
+	public FramScriptLabelProvider(AdapterFactoryLabelProvider delegate) {
+		super(delegate);
+	}
+	
+	public String text(Function f) {
+		StringBuilder sb = new StringBuilder(f.getName());
+		sb.append('(');
+		EList<VariableDeclaration> params = f.getParams();
+		for (int i = 0; i < params.size(); i++) {
+			sb.append(getText(params.get(i)));
+			if (i < params.size() - 1) {
+				sb.append(", ");
+			}
+		}
+		sb.append(')');
+		return sb.toString();
+	}
+
+	public String image(Function obj) {
+		return "method.gif";
+	}
+
+	public String text(VariableDeclaration obj) {
+		return obj.getName();
+	} 
+
+	public String image(VariableDeclaration obj) {
+		EObject container = obj.eContainer();
+		if (container instanceof VariableDeclarations && container.eContainer() instanceof Code) {
+			return "field.gif";
+		} else {
+			return "local.gif";
+		}
+	}
+
+	public String image(ProposableVariableDeclarationImpl obj) {
+		return obj.isType() ? "class.gif" : "field.gif";
+	}
+
+	public String text(Header h) {
+		return h.getName() + ": " + h.getValue();
+	}
+
+	public String text(IntHeader h) {
+		return h.getName() + " " + h.getIntValue();
+	}
+	
+	public String image(Header obj) {
+		return "header.gif";
+	}
+
+	public String text(IncludeDeclaration obj) {
+		return obj.getImportURI();
+	}
+
+	public String image(IncludeDeclaration obj) {
+		return "include.gif";
+	}
+	
+	public String text(Property obj) {
+		return obj.getName();
+	}
+
+	public String image(Property obj) {
+		return "property.gif";
+	}
+	
+	public String text(State obj) {
+		return obj.getName();
+	}
+
+	public String image(State obj) {
+		return "state.gif";
+	}
+	
+	public String text(FramclipseClass obj) {
+		return obj.getClass().getSimpleName().replace("Impl", "");
+	}
+
+	public String image(FramclipseClass obj) {
+		return "class.gif";
+	}
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/outline/FramScriptOutlineNodeAdapterFactory.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/outline/FramScriptOutlineNodeAdapterFactory.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/outline/FramScriptOutlineNodeAdapterFactory.java	(revision 437)
@@ -0,0 +1,22 @@
+/*
+* generated by Xtext
+*/
+package com.framsticks.framclipse.ui.outline;
+
+import org.eclipse.xtext.ui.editor.outline.actions.DefaultContentOutlineNodeAdapterFactory;
+
+public class FramScriptOutlineNodeAdapterFactory extends DefaultContentOutlineNodeAdapterFactory {
+
+	private static final Class<?>[] types = { 
+		// provide list of classes to adapt to, e.g.:
+		// Entity.class
+		// Service.class
+	};
+
+	@Override
+	public Class<?>[] getAdapterList() {
+		return types;
+	}
+
+}
+
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/outline/FramScriptTransformer.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/outline/FramScriptTransformer.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/outline/FramScriptTransformer.java	(revision 437)
@@ -0,0 +1,52 @@
+/*
+ * generated by Xtext
+ */
+package com.framsticks.framclipse.ui.outline;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.ui.editor.outline.transformer.AbstractDeclarativeSemanticModelTransformer;
+
+import com.framsticks.framclipse.framScript.Code;
+import com.framsticks.framclipse.framScript.Function;
+import com.framsticks.framclipse.framScript.Model;
+import com.framsticks.framclipse.framScript.Property;
+import com.framsticks.framclipse.framScript.State;
+import com.framsticks.framclipse.framScript.VariableDeclarations;
+
+/**
+ * customization of the default outline structure
+ */
+public class FramScriptTransformer extends AbstractDeclarativeSemanticModelTransformer {
+
+	public List<EObject> getChildren(Function e) {
+		return NO_CHILDREN;
+	}
+	
+	public List<EObject> getChildren(Model e) {
+		List<EObject> children = new ArrayList<EObject>();
+		for (EObject child : e.eContents()) {
+			if (child instanceof Code) {
+				addCodeContents(children, (Code) child);
+			} else if (child instanceof Property
+					|| child instanceof State) {
+				children.add(child);
+			}
+		}
+		return children;
+	}
+
+	private void addCodeContents(List<EObject> children, Code code) {
+		if (code != null) {
+			children.addAll(code.getIncludes());
+			EList<VariableDeclarations> globals = code.getGlobals();
+			for (VariableDeclarations declarations : globals) {
+				children.addAll(declarations.getVars());
+			}
+			children.addAll(code.getFunctions());
+		}
+	}
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/quickfix/FramScriptQuickfixProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/quickfix/FramScriptQuickfixProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/src/com/framsticks/framclipse/ui/quickfix/FramScriptQuickfixProvider.java	(revision 437)
@@ -0,0 +1,19 @@
+
+package com.framsticks.framclipse.ui.quickfix;
+
+import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider;
+
+public class FramScriptQuickfixProvider extends DefaultQuickfixProvider {
+
+//	@Fix(MyJavaValidator.INVALID_TYPE_NAME)
+//	public void capitalizeName(final Issue issue, IssueResolutionAcceptor acceptor) {
+//		acceptor.accept(issue, "Capitalize name", "Capitalize name of type", "upcase.png", new IModification() {
+//			public void apply(IModificationContext context) throws BadLocationException {
+//				IXtextDocument xtextDocument = context.getXtextDocument();
+//				String firstLetter = xtextDocument.get(issue.getOffset(), 1);
+//				xtextDocument.replace(issue.getOffset(), 1, Strings.toFirstUpper(firstLetter));
+//			}
+//		});
+//	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse.ui/templates/templates.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.ui/templates/templates.xml	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.ui/templates/templates.xml	(revision 437)
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<templates>
+
+	<template id="function" name="function" enabled="true" deleted="false" autoinsert="true" context="com.framsticks.framclipse.FramScript.Function" description="Creates new function">function ${name}(${}) {&#13;
+	${cursor}&#13;
+}</template>
+
+	<template id="property" name="property" enabled="true" deleted="false" autoinsert="true" context="com.framsticks.framclipse.FramScript.Property" description="Creates new property">prop:&#13;
+id:${id}&#13;
+name:${name}&#13;
+help:~${message}~&#13;
+type:${d}&#13;
+flags:${0}
+${cursor}&#13;</template>
+
+	<template id="state" name="state" enabled="true" deleted="false" autoinsert="true" context="com.framsticks.framclipse.FramScript.State" description="Creates new state">state:&#13;
+id:${id}&#13;
+name:${name}&#13;
+help:~${message}~&#13;
+type:${d}&#13;
+flags:${0}
+${cursor}&#13;</template>
+
+</templates>
Index: /java/Framclipse/com.framsticks.framclipse.updateSite/.project
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.updateSite/.project	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.updateSite/.project	(revision 437)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.framsticks.framclipse.updateSite</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.UpdateSiteBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.UpdateSiteNature</nature>
+	</natures>
+</projectDescription>
Index: /java/Framclipse/com.framsticks.framclipse.updateSite/site.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse.updateSite/site.xml	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse.updateSite/site.xml	(revision 437)
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<site>
+   <description name="Framclipse Update Site">
+      Framclipse Update Site
+   </description>
+   <feature url="features/com.framsticks.framclipse_2.0.0.vqualifier.jar" id="com.framsticks.framclipse" version="2.0.0.vqualifier">
+      <category name="Framclipse"/>
+   </feature>
+   <category-def name="Framclipse" label="Framclipse"/>
+</site>
Index: /java/Framclipse/com.framsticks.framclipse/.classpath
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/.classpath	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/.classpath	(revision 437)
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="res"/>
+	<classpathentry exported="true" kind="lib" path="lib/commons-io-1.4.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/xpp3_min-1.1.4c.jar"/>
+	<classpathentry exported="true" kind="lib" path="lib/xstream-1.3.1.jar"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
Index: /java/Framclipse/com.framsticks.framclipse/.project
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/.project	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/.project	(revision 437)
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>com.framsticks.framclipse</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtext.builder.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtext.builder.xtextNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
Index: /java/Framclipse/com.framsticks.framclipse/META-INF/MANIFEST.MF
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/META-INF/MANIFEST.MF	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/META-INF/MANIFEST.MF	(revision 437)
@@ -0,0 +1,38 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Framclipse
+Bundle-Vendor: Poznan University of Technology
+Bundle-Version: 2.0.0.vqualifier
+Bundle-SymbolicName: com.framsticks.framclipse; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext,
+ org.eclipse.xtext.generator;resolution:=optional,
+ de.itemis.xtext.antlr;resolution:=optional,
+ org.apache.commons.logging;resolution:=optional,
+ org.eclipse.emf.codegen.ecore;resolution:=optional,
+ org.eclipse.emf.mwe.utils;resolution:=optional,
+ org.eclipse.emf.mwe2.launch;resolution:=optional,
+ com.ibm.icu;resolution:=optional,
+ org.eclipse.xtext.xtend;resolution:=optional,
+ org.eclipse.xtext.util,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.antlr.runtime,
+ org.eclipse.core.runtime
+Import-Package: org.apache.log4j
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Export-Package: com.framsticks.framclipse,
+ com.framsticks.framclipse.framScript,
+ com.framsticks.framclipse.framScript.impl,
+ com.framsticks.framclipse.framScript.util,
+ com.framsticks.framclipse.parseTreeConstruction,
+ com.framsticks.framclipse.parser.antlr,
+ com.framsticks.framclipse.parser.antlr.internal,
+ com.framsticks.framclipse.script,
+ com.framsticks.framclipse.script.model,
+ com.framsticks.framclipse.services,
+ com.framsticks.framclipse.validation
+Bundle-ClassPath: lib/commons-io-1.4.jar,
+ lib/xpp3_min-1.1.4c.jar,
+ lib/xstream-1.3.1.jar,
+ .
Index: /java/Framclipse/com.framsticks.framclipse/build.properties
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/build.properties	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/build.properties	(revision 437)
@@ -0,0 +1,9 @@
+source.. = src/,\
+           res/,\
+           src-gen/
+bin.includes = META-INF/,\
+               plugin.xml,\
+               lib/commons-io-1.4.jar,\
+               lib/xpp3_min-1.1.4c.jar,\
+               lib/xstream-1.3.1.jar,\
+               .
Index: /java/Framclipse/com.framsticks.framclipse/plugin.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/plugin.xml	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/plugin.xml	(revision 437)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.framsticks.com/framclipse/FramScript" 
+       class = "com.framsticks.framclipse.framScript.FramScriptPackage"
+       genModel = "com/framsticks/framclipse/FramScript.genmodel" /> 
+	
+  </extension>
+
+
+
+
+</plugin>
Index: /java/Framclipse/com.framsticks.framclipse/res/framscontext.dtd
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscontext.dtd	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscontext.dtd	(revision 437)
@@ -0,0 +1,35 @@
+<!ELEMENT framscontext (file*)>
+
+<!ELEMENT file (objects*,code*,script*,properties*)>
+<!ATTLIST file pattern CDATA #REQUIRED>
+<!ATTLIST file label CDATA #IMPLIED>
+
+<!--
+ framsticks files can reference scripting objects in 3 ways
+ as described by the 3 tags of the framscontext.xml file:
+
+ - <objects> framsticks objects are stored in the file in the framsticks format
+ - <code> a field in the file (using the framsticks format) contains a script
+         that uses some objects
+ - <script> plain text file containing a script
+
+<script> excludes the two following tags.
+<code> implies that the framsticks format is used for the file so the <objects> tags will be also used to declare which objects can be present in the file.
+-->
+
+<!ELEMENT objects (#PCDATA)>
+<!ATTLIST objects context CDATA #REQUIRED>
+
+<!ELEMENT code (context*)>
+<!ATTLIST code object CDATA #REQUIRED>
+<!ATTLIST code member CDATA #REQUIRED>
+
+<!ELEMENT context (#PCDATA)>
+<!ATTLIST context name CDATA #REQUIRED>
+
+<!ELEMENT script (#PCDATA)>
+<!ATTLIST script context CDATA #REQUIRED>
+
+<!ELEMENT properties (#PCDATA)>
+<!ATTLIST properties from CDATA #REQUIRED>
+<!ATTLIST properties to CDATA #REQUIRED>
Index: /java/Framclipse/com.framsticks.framclipse/res/framscontext.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscontext.xml	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscontext.xml	(revision 437)
@@ -0,0 +1,71 @@
+<?xml version="1.0"?>
+<!DOCTYPE framscontext SYSTEM "framscontext.dtd">
+<?xml-stylesheet type="text/xsl" href="framscontext.xsl"?>
+
+<framscontext>
+
+  <file pattern="*.expdef" label="Experiment definition">
+    <objects context="expdef file"/>
+    <objects context="properties file"/>
+    <objects context="state file"/>
+    <code object="expdef" member="code">
+      <context name="Experiment definition"/>
+      <context name="Global context"/>
+    </code>
+    <properties from="prop" to="ExpParams"/>
+    <properties from="stat" to="ExpState"/>
+  </file>
+
+  <file pattern="*.neuro" label="Scripting neuron definition">
+    <objects context="neuro file"/>
+    <objects context="properties file"/>
+    <code object="class" member="code">
+      <context name="Neuron definitions"/>
+      <context name="Experiment definition"/>
+      <context name="Global context"/>
+    </code>
+    <properties from="prop" to="Fields"/>
+  </file>
+
+  <file pattern="*.style" label="Visual style definition">
+    <objects context="style file"/>
+    <objects context="properties file"/>
+    <code object="style" member="code">
+      <context name="Visual style definition"/>
+      <context name="Experiment definition"/>
+      <context name="Global context"/>
+    </code>
+    <properties from="prop" to="VisParams"/>
+  </file>
+
+  <file pattern="*.show" label="Framsticks Theater show">
+    <objects context="show file"/>
+    <objects context="properties file"/>
+    <code object="show" member="code">
+      <context name="Command line interface"/>
+      <context name="Experiment definition"/>
+      <context name="Global context"/>
+    </code>
+    <properties from="prop" to="ShowParams"/>
+  </file>
+
+  <file pattern="*.script" label="User script">
+    <objects context="script file"/>
+    <code object="script" member="code">
+      <context name="Experiment definition"/>
+      <context name="Global context"/>
+    </code>
+  </file>
+
+  <file pattern="*.ini" label="Framsticks startup scripts">
+    <script context="Command line interface"/>
+    <script context="Global context"/>
+  </file>
+  
+  <file pattern="*.inc" label="Framsticks Theater show">
+    <code object="include" member="code">
+      <context name="Global context"/>
+    </code>
+  </file>
+
+</framscontext>
Index: /java/Framclipse/com.framsticks.framclipse/res/framscontext.xsl
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscontext.xsl	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscontext.xsl	(revision 437)
@@ -0,0 +1,132 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<xsl:template match="/">
+  <html><body>
+    <xsl:apply-templates select="framscontext"/>
+  </body></html>
+</xsl:template>
+
+<xsl:template match="framscontext">
+  <h1>Framscript Context Configuration</h1>
+<i>Note:
+  <xsl:choose><xsl:when test="count(document('framscript.xml')/framscript)=0">
+	This formatting sheet would also use <a href="framscript.xml">framscript.xml</a> to show object names if that file was available</xsl:when>
+<xsl:otherwise>This formatting sheet also includes object names extracted from <a href="framscript.xml">framscript.xml</a></xsl:otherwise>
+	</xsl:choose>
+</i>
+
+  <table border="1">
+  <th>File types</th><th>Contents</th><th>Examples</th>
+  <xsl:apply-templates select="file"/>
+  </table>
+</xsl:template>
+
+<xsl:template match="file">
+  <tr valign="top">
+   <td><b><xsl:value-of select="@label"/></b><br/><xsl:value-of select="@pattern"/></td>
+   <td>
+	<xsl:if test="count(code)!=0">
+	<p title="Defined by &lt;objects&gt;">
+	Objects defined in the following contexts can be stored directly in the file: (using the standard framsticks format)<ul><xsl:apply-templates select="objects"/></ul>
+	</p>
+	<xsl:apply-templates select="code"/>
+	</xsl:if>
+	<xsl:if test="count(script)!=0">
+	<p title="Defined by &lt;script&gt;">
+	Contains the script (plain text format) accessing objects defined in the following contexts:<ul><xsl:apply-templates select="script"/></ul>
+	</p>
+	</xsl:if>
+	<xsl:if test="count(properties)!=0">
+	<p title="Defined by &lt;properties&gt;">
+	Special objects properties are created according to property definitions in the file:<ul><xsl:apply-templates select="properties"/></ul>
+	</p>
+	</xsl:if>
+	</td>
+   <td><i>sample <xsl:value-of select="@pattern"/> file</i><br/>
+	<pre style="background:#eeeeee;">
+<xsl:if test="count(code)!=0">
+# object defined in "<xsl:value-of select="objects[1]/@context"/>"
+object:
+field_1:...
+field_2:...
+</xsl:if>
+
+<xsl:if test="count(code)!=0">
+# sample object that contains the script:
+<xsl:value-of select="code[1]/@object"/>:
+field_1:...
+field_2:...
+<xsl:value-of select="code[1]/@member"/>:~
+function fun()
+{
+// using some objects from "<xsl:value-of select="code[1]/context[1]/@name"/>"
+}
+~
+</xsl:if>
+<xsl:if test="count(properties)!=0">
+# this property will be visible as "<xsl:value-of select="properties[1]/@to"/>.field"
+<xsl:value-of select="properties[1]/@from"/>:
+id:field
+name:My property
+...
+</xsl:if>
+
+<xsl:if test="count(script)!=0">
+// script directly in the file
+function fun()
+{
+// using some objects from <xsl:value-of select="script[1]/@context"/>
+}
+</xsl:if>
+
+</pre>
+   </td>
+  </tr>
+</xsl:template>
+
+<xsl:template match="objects">
+  <li><b><xsl:value-of select="@context"/></b>
+	<xsl:variable name="context" select="@context"/>
+      	<xsl:call-template name="extobjects"><xsl:with-param name="objs" select="document('framscript.xml')/framscript/type[@context=$context]"/></xsl:call-template>
+  </li>
+</xsl:template>
+
+<xsl:template match="script">
+  <li><b><xsl:value-of select="@context"/></b>
+	<xsl:variable name="context" select="@context"/>
+      	<xsl:call-template name="extobjects"><xsl:with-param name="objs" select="document('framscript.xml')/framscript/type[@context=$context]"/></xsl:call-template>
+  </li>
+</xsl:template>
+
+<xsl:template name="extobjects">
+  <xsl:param name="objs"/>
+  <xsl:if test="count($objs)!=0">
+  (
+  <xsl:for-each select="$objs">
+	<xsl:value-of select="@name"/>,
+  </xsl:for-each>
+  )
+  </xsl:if>
+</xsl:template>
+
+<xsl:template match="context">
+  <li><b><xsl:value-of select="@name"/></b>
+	<xsl:variable name="context" select="@name"/>
+      	<xsl:call-template name="extobjects"><xsl:with-param name="objs" select="document('framscript.xml')/framscript/type[@context=$context]"/></xsl:call-template>
+  </li>
+</xsl:template>
+
+<xsl:template match="code">
+  <p title="Defined by &lt;code&gt;">
+  "<xsl:value-of select="@member"/>:" field of "<xsl:value-of select="@object"/>:" contains a script that can access objects defined in the following contexts:<ul><xsl:apply-templates select="context"/></ul>
+  </p>
+</xsl:template>
+
+<xsl:template match="properties">
+  <li>
+  <b><xsl:value-of select="@to"/></b> is defined by "<xsl:value-of select="@from"/>" objects
+  </li>
+</xsl:template>
+
+</xsl:stylesheet>
Index: /java/Framclipse/com.framsticks.framclipse/res/framscript.dtd
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscript.dtd	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscript.dtd	(revision 437)
@@ -0,0 +1,32 @@
+<!ELEMENT framscript (type*)>
+
+<!ELEMENT type (description?,element*)>
+<!ATTLIST type name CDATA #REQUIRED>
+<!ATTLIST type context CDATA #REQUIRED>
+
+<!ELEMENT description (#PCDATA)>
+
+<!ELEMENT element (description?,arguments?)>
+<!ATTLIST element name CDATA #REQUIRED>
+
+<!-- "type" attribute in element:
+     - framscript scalar datatypes: "integer", "float", "string"
+     - object of unknown type: "Object"
+     - value of unknown type: "untyped" (this can be object or not)
+     - other names refer to object classes (as defined in <type> tags)
+-->
+
+<!ATTLIST element type CDATA #IMPLIED>
+
+<!ATTLIST element min CDATA #IMPLIED>
+<!ATTLIST element max CDATA #IMPLIED>
+<!ATTLIST element function (false|true) "false">
+<!ATTLIST element default CDATA #IMPLIED>
+
+<!-- important difference: no <arguments> tag means the argument number is not known
+                           empty <arguments> means the function does not accept arguments -->
+<!ELEMENT arguments (argument*)>
+
+<!ELEMENT argument (#PCDATA)>
+<!ATTLIST argument name CDATA #IMPLIED>
+<!ATTLIST argument type CDATA #IMPLIED>
Index: /java/Framclipse/com.framsticks.framclipse/res/framscript.xml
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscript.xml	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscript.xml	(revision 437)
@@ -0,0 +1,5806 @@
+<?xml version="1.0"?>
+<!DOCTYPE framscript SYSTEM "framscript.dtd">
+<?xml-stylesheet type="text/xsl" href="framscript.xsl"?>
+<framscript>
+	<type name="expdef" context="expdef file">
+		<element name="code" type="string"/>
+		<element name="info" type="string"/>
+		<element name="name" type="string"/>
+		<element name="neurons" type="string"/>
+	</type>
+	<type name="prop" context="properties file">
+		<element name="flags" type="integer"/>
+		<element name="group" type="string"/>
+		<element name="help" type="string"/>
+		<element name="id" type="string"/>
+		<element name="name" type="string"/>
+		<element name="type" type="string"/>
+	</type>
+	<type name="stat" context="state file">
+		<element name="flags" type="integer"/>
+		<element name="group" type="string"/>
+		<element name="help" type="string"/>
+		<element name="id" type="string"/>
+		<element name="name" type="string"/>
+		<element name="type" type="string"/>
+	</type>
+	<type name="style" context="style file">
+<description><![CDATA[General visual style properties.]]></description>
+		<element name="code" type="string"/>
+		<element name="info" type="string"/>
+		<element name="name" type="string"/>
+		<element name="neurons" type="integer" min="0" max="1"/>
+		<element name="smooth" type="integer" min="0" max="1"/>
+		<element name="style" type="string"/>
+		<element name="tex" type="integer" min="0" max="2"/>
+		<element name="rebuild" function="true"/>
+		<element name="streload" function="true"/>
+	</type>
+	<type name="show" context="show file">
+<description><![CDATA[Show properties for the Framsticks Theater (from the *.show file).]]></description>
+		<element name="code" type="string"/>
+		<element name="dispinfo" type="integer" min="0" max="2"/>
+		<element name="expdef" type="string"/>
+		<element name="info" type="string"/>
+		<element name="mode" type="integer" min="0" max="2"/>
+		<element name="name" type="string"/>
+		<element name="regname" type="string"/>
+		<element name="show" type="string"/>
+		<element name="showlog" type="integer" min="0" max="1"/>
+		<element name="switchmode" type="integer" min="0" max="2"/>
+		<element name="switchshows" type="string">
+			<description><![CDATA[names of the shows participating in automatic switching (comma separated). Use * as a wildcard.]]></description>
+		</element>
+		<element name="switchtime" type="integer" min="0" max="9999">
+			<description><![CDATA[time between switching (seconds)]]></description>
+		</element>
+		<element name="userspeed" type="integer" min="0" max="5" default="3"/>
+		<element name="about" function="true"/>
+		<element name="dummy" function="true">
+			<description><![CDATA[This is the empty item in the Theater's menu]]></description>
+		</element>
+		<element name="reload" function="true"/>
+	</type>
+	<type name="class" context="neuro file">
+		<element name="code" type="string"/>
+		<element name="description" type="string"/>
+		<element name="icon" type="string"/>
+		<element name="longname" type="string"/>
+		<element name="name" type="string"/>
+		<element name="prefinputs" type="integer"/>
+		<element name="preflocation" type="integer" min="0" max="2"/>
+		<element name="prefoutput" type="integer" min="0" max="1"/>
+		<element name="vhints" type="integer"/>
+	</type>
+	<type name="script" context="script file">
+		<element name="code" type="string"/>
+		<element name="group" type="string"/>
+		<element name="help" type="string"/>
+		<element name="name" type="string"/>
+	</type>
+	<type name="Collision" context="Global context">
+<description><![CDATA[Used in collision handlers (On___Collision). Contains the detailed information about the colliding parts (Part1,Part2 and their associated MechParts and Creatures). See the onFoodCollision() function in standard.expdef]]></description>
+		<element name="Creature1" type="Object"/>
+		<element name="Creature2" type="Object"/>
+		<element name="MechPart1" type="Object"/>
+		<element name="MechPart2" type="Object"/>
+		<element name="Part1" type="Object"/>
+		<element name="Part2" type="Object"/>
+	</type>
+	<type name="CrCollision" context="Global context">
+<description><![CDATA[Used in creature collision handlers (On___CrCollision).]]></description>
+		<element name="Creature1" type="Object"/>
+		<element name="Creature2" type="Object"/>
+	</type>
+	<type name="Creature" context="Global context">
+<description><![CDATA[The object inside the simulated world, including its physical structure, neural network and performance data. Food pieces, obstacles and other movable objects can be implemented as Creatures even though the are not "alive". See also: Population.]]></description>
+		<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.
+
+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="buildproblems" type="integer"/>
+		<element name="c_velocity" type="float"/>
+		<element name="c_vertpos" type="float"/>
+		<element name="c_vertvelocity" type="float"/>
+		<element name="center_x" type="float">
+			<description><![CDATA[Center of gravity]]></description>
+		</element>
+		<element name="center_y" type="float">
+			<description><![CDATA[Center of gravity]]></description>
+		</element>
+		<element name="center_z" type="float">
+			<description><![CDATA[Center of gravity]]></description>
+		</element>
+		<element name="distance" type="float"/>
+		<element name="drive" type="XYZ">
+			<description><![CDATA[Measured in global coordinates]]></description>
+		</element>
+		<element name="energ0" type="float"/>
+		<element name="energy" type="float"/>
+		<element name="energy_b" type="float"/>
+		<element name="energy_m" type="float"/>
+		<element name="energy_p" type="float"/>
+		<element name="geno" type="Geno">
+			<description><![CDATA[Source genotype for this creature]]></description>
+		</element>
+		<element name="genotype" type="string"/>
+		<element name="gnum" type="integer"/>
+		<element name="group" type="untyped"/>
+		<element name="idleen" type="float"/>
+		<element name="index" type="integer">
+			<description><![CDATA[Index of this Creature in its Population.]]></description>
+		</element>
+		<element name="info" type="string">
+			<description><![CDATA[Additional info or comments]]></description>
+		</element>
+		<element name="lifespan" type="integer"/>
+		<element name="liveModel" type="Model">
+			<description><![CDATA[A Model object that is a copy of the current (temporary) geometry of this creature]]></description>
+		</element>
+		<element name="localDrive" type="XYZ">
+			<description><![CDATA[Measured in local coordinates, that is, with respect to the current orientation of the creature.
+See also: Creature.orient]]></description>
+		</element>
+		<element name="model" type="Model">
+			<description><![CDATA[Source Model for this creature]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="nnenabled" type="integer" min="0" max="1"/>
+		<element name="numjoints" type="integer"/>
+		<element name="numneurons" type="integer"/>
+		<element name="numparts" type="integer"/>
+		<element name="orient" type="Orient">
+			<description><![CDATA[By convention, the orientation of the creature is equal to the orientation of its first Part]]></description>
+		</element>
+		<element name="othermask" type="integer" min="0" max="2147483647" default="0"/>
+		<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="pos_x" type="float">
+			<description><![CDATA[(pos_x,pos_y,pos_z) is the point of minimal coordinates ("bottom left corner") of the creature, including imaginary Part sizes (Part.s, usually 1.0). See also: Creature.moveAbs]]></description>
+		</element>
+		<element name="pos_y" type="float">
+			<description><![CDATA[See Creature.pos_x]]></description>
+		</element>
+		<element name="pos_z" type="float">
+			<description><![CDATA[See Creature.pos_x]]></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" type="integer" min="0" max="1">
+			<description><![CDATA[Current self-collision state]]></description>
+		</element>
+		<element name="selfmask" type="integer" min="0" max="2147483647" default="0"/>
+		<element name="signals" type="CreatureSignals"/>
+		<element name="size_x" type="float">
+			<description><![CDATA[(size_x,size_y,size_z) are dimensions of the axis-aligned bounding box of the creature, including the imaginary part sizes (Part.s, usually 1.0). A creature consisting of a single default Part has the size of (2.0,2.0,2.0) - twice the Part.s value (like a sphere diameter is twice its radius).
+See also: Creature.moveAbs]]></description>
+		</element>
+		<element name="size_y" type="float">
+			<description><![CDATA[See Creature.size_x]]></description>
+		</element>
+		<element name="size_z" type="float">
+			<description><![CDATA[See Creature.size_x]]></description>
+		</element>
+		<element name="uid" type="string"/>
+		<element name="user1" type="untyped"/>
+		<element name="user2" type="untyped"/>
+		<element name="user3" type="untyped"/>
+		<element name="velocity" type="float"/>
+		<element name="vertpos" type="float"/>
+		<element name="vertvel" type="float"/>
+		<element name="currentGeometryAsF0" function="true" type="string"><arguments/></element>
+		<element name="getJoint" function="true" type="Joint">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getMechJoint" function="true" type="MechJoint">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getMechPart" function="true" type="MechPart">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getNeuro" function="true" type="Neuro">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getNeuroDef" function="true" type="NeuroDef">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getPart" function="true" type="Part">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="localToWorld" function="true" type="XYZ">
+			<description><![CDATA[Local coordinates are measured with respect to the position and orientation of the first Part]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="move" function="true" type="void">
+			<description><![CDATA[Shift the creature by a given vector.]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="moveAbs" function="true" type="void">
+			<description><![CDATA[Moves the creature so that its origin (pos_x,pos_y,pos_z) is placed at the given location. The origin is the point of minimal coordinates ("bottom left corner"), including imaginary part sizes (Part.s, usually 1.0).
+Assuming a simple single-stick creature "X" having parts at (0,0,0) and (1,0,0),
+
+origin (pos_x,pos_y,pos_z) = (-1,-1,-1)
+size (size_x,size_y,size_z) = (3,2,2)
+
+The following example places the bottom of a creature at a given location (x,y,z):
+Creature.moveAbs(x-(Creature.size_x/2),y-(Creature.size_y/2),z-1.0)
+(assuming that the part size is 1.0)]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="moveLocal" function="true" type="void">
+			<description><![CDATA[Local coordinates are measured with respect to the position and orientation of the first Part]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="rotate" function="true" type="void">
+			<description><![CDATA[Rotate the creature around X, Y and Z axes. Should only be used immediately after creating a new creature (before the first simulation step is performed for this creature), otherwise further simulation can be disturbed.]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="rotateLocal" function="true" type="void">
+			<description><![CDATA[Rotate the creature around (local) X, Y and Z axes. Should only be used immediately after creating a new creature (before the first simulation step is performed for this creature), otherwise further simulation can be disturbed.]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="worldToLocal" function="true" type="XYZ">
+			<description><![CDATA[Local coordinates are measured with respect to the position and orientation of the first Part]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="CreatureSettings" context="Global context">
+<description><![CDATA[Creature building parameters]]></description>
+		<element name="bnoise_struct" type="float" min="0" max="10" default="0">
+			<description><![CDATA[When >0, body constructs of creatures (position of Parts) will be randomly disturbed when they are created.]]></description>
+		</element>
+		<element name="bnoise_vel" type="float" min="0" max="10" default="0">
+			<description><![CDATA[Random velocities will be applied to all body Parts (in MechaStick) or rigid segments (in ODE) of newly created creatures.]]></description>
+		</element>
+		<element name="maxjoint" type="float" min="0" max="100" default="2"/>
+		<element name="minjoint" type="float" min="0" max="100" default="0"/>
+		<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 0 for deterministic initialization.]]></description>
+		</element>
+		<element name="touchrange" type="float" min="0" max="100" default="1"/>
+	</type>
+	<type name="CreaturesGroup" context="Global context">
+<description><![CDATA[A set of Creature objects, sharing some high level simulation properties (performance calculation, NN simulation, collision detection, event handling). The groups usually have different roles in the experiment (Creatures groups and Food group in standard.expdef).]]></description>
+		<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="colmask" type="integer" min="0" max="65535" default="0">
+			<description><![CDATA[DEPRECATED. You should use selfmask and othermask (these masks are also much easier to understand than the old colmask field).]]></description>
+		</element>
+		<element name="death" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Do creatures die when no energy?]]></description>
+		</element>
+		<element name="em_dyn" type="float" min="0" max="1" default="0">
+			<description><![CDATA[Energy requirements for a muscle
+moving a stick]]></description>
+		</element>
+		<element name="em_stat" type="float" min="0" max="1" default="0">
+			<description><![CDATA[Energy requirements for a muscle
+resisting an external force]]></description>
+		</element>
+		<element name="en_assim" type="float" min="0" max="1" default="0">
+			<description><![CDATA[Maximal energy gain produced by a vertical specialized stick.
+Horizontal specialized sticks get half of this value.]]></description>
+		</element>
+		<element name="enableperf" 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="energy" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[If turned off, creature's energy will be constant.]]></description>
+		</element>
+		<element name="index" type="integer"/>
+		<element name="killnostable" type="integer" min="0" max="10000000" default="1000000">
+			<description><![CDATA[Creatures that fail to stabilize after the specified waiting period (e.g. because they are continuously rolling) will be killed. 0 disables this feature.]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="nnsim" 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="othermask" type="integer" min="0" max="2147483647" default="0">
+			<description><![CDATA[See selfmask.]]></description>
+		</element>
+		<element name="perfperiod" type="integer" min="0" max="1000000" default="100">
+			<description><![CDATA[Defines how often onUpdate() events are called. Also used to compute partial performance of creatures (distance, speed, etc.) and to determine stabilization.]]></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>
+		<element name="selfmask" type="integer" min="0" max="2147483647" default="0">
+			<description><![CDATA[Collisions between objects can be handled in two ways:
+ - standard 'mechanical' collision (simple 'rebound' effect)
+ - special script handler (On[GROUPNAME]Collision function)
+
+In the script handler function, use the Collision object to access the two colliding parts of two creatures.
+The first part in the Collision object (i.e. Collision.Creature1) always concerns the creature that belongs to [GROUPNAME].
+The handler is called once for each creature that collides with the creature from [GROUPNAME].
+
+Collision masks determine which one will be used (none and both are also possible). On each collision, selfmask and othermask of the colliding objects are logically ANDed. 16 lower bits (0xffff) enable the standard handler. 16 higher bits (0xffff0000) enable the custom handler. 
+Examples:
+
+1.With one group, all possible combinations of the collision handlers are as follows:
+  - ignore collisions (e.g. selfmask=othermask=0)
+  - use standard handling (e.g. selfmask=othermask=1)
+  - use custom handling (e.g. selfmask=othermask=0x10000)
+  - use standard and custom handling (e.g. selfmask=othermask=0x10001)
+
+2.Two groups yield more interesting cases. Let us consider the 'standard.expdef' setting:
+  Creatures: selfmask=0x10001, othermask=0x20001
+  Food colmask = selfmask=0x20002, othermask=0x10002
+There are three possible scenarios:
+- creature and creature: collision value = 0x10001 & 0x20001 = 1 -> Standard handling will be used (1 is one of the lower 16 bits)
+- food and food: collision value = 0x20002 & 0x10002 = 2 -> As above.
+- creature and food: collision value = (0x10001 & 0x10002) or (0x20002 & 0x20001) = 0x10000 or 0x20000 -> Custom handling will be used (higher 16 bits).
+]]></description>
+		</element>
+		<element name="size" type="integer"/>
+		<element name="stabilperiod" type="integer" min="0" max="1000000" default="100">
+			<description><![CDATA["Performance sampling period" for the stabilization phase.]]></description>
+		</element>
+		<element name="stabledist" type="float" min="0" max="1" default="0.01">
+			<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="createFromGeno" function="true" type="Creature">
+			<description><![CDATA[Uses the supplied Geno object]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="createFromGenotype" function="true" type="Creature">
+			<description><![CDATA[Uses the selected Genotype object]]></description>
+<arguments/></element>
+		<element name="createFromString" function="true" type="Creature">
+			<description><![CDATA[Uses the supplied string argument]]></description>
+			<arguments>
+				<argument name="genotype" type="string"/>
+			</arguments>
+		</element>
+		<element name="delete" function="true" type="void">
+			<description><![CDATA[delete creature]]></description>
+			<arguments>
+				<argument name="creature index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="findCreatureAt" function="true" type="Creature">
+			<arguments>
+				<argument name="point" type="Vector"/>
+				<argument name="vector" type="Vector"/>
+			</arguments>
+		</element>
+		<element name="findUID" function="true" type="integer">
+			<arguments>
+				<argument name="uid" type="string"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="Creature">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="kill" function="true" type="void">
+			<description><![CDATA[kill creature]]></description>
+			<arguments>
+				<argument name="creature index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="senseCreaturesProperty" function="true" type="float">
+			<description><![CDATA[arguments:
+ - x,y,z (sensor position)
+ - property (name, name[index] or Class:id). name[index] can be used for Vector objects inside the user fields, eg "user2[10]"
+ - exclude (creature object)
+works like a smell sensor for a given property (for all creatures in this group except "exclude").
+The following function reproduces the "classic" framsticks "S" sensor:
+function smellReceptorValue(x,y,z,exclude)
+{
+var i,s=0; for(i=0;i<Populations.size;i++)
+	s+=Populations[0].senseCreaturesProperty(x,y,z,"energy",exclude);
+return s;
+}]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+				<argument name="propertyname" type="string"/>
+				<argument name="exclude" type="Creature"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="CreatureSignals" context="Global context">
+<description><![CDATA[Signal sources associated with the creature. See also: Signal, WorldSignals, NeuroSignals]]></description>
+		<element name="size" type="integer">
+			<description><![CDATA[Number of signals in this set]]></description>
+		</element>
+		<element name="add" function="true" type="Signal">
+			<description><![CDATA[Create a new signal]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+			</arguments>
+		</element>
+		<element name="addProperty" function="true" type="Signal">
+			<description><![CDATA[Create a signal that automatically reflects one of the creature's properties (i.e. its power is equal to the property value).
+Example:
+Creature.signals.addProperty("energy","energy"); //then, Neuro.signals.receive("energy") in custom neuron would work similarly to the built-in smell sensor]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="property" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true" type="void">
+			<description><![CDATA[Delete all signals]]></description>
+<arguments/></element>
+		<element name="get" function="true" type="Signal">
+			<description><![CDATA[Access individual signals (index=0 .. size-1)]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="receive" function="true" type="float">
+			<description><![CDATA[Receive the aggregated signal power in a given channel.]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+			</arguments>
+		</element>
+		<element name="receiveFilter" function="true" type="float">
+			<description><![CDATA[Receive the aggregated signal power in a given channel.
+
+Additional filtering options:
+- Max distance only receives the neighbor signals (based on their physical location)
+- Flavor filtering: only signals having the flavor close to the specified one will be received. The filter value is the maximum allowed difference.]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+				<argument name="flavor" type="float"/>
+				<argument name="filter" type="float"/>
+			</arguments>
+		</element>
+		<element name="receiveSet" function="true" type="Vector">
+			<description><![CDATA[Get all signals in the specified range. Returns a readonly vector object containing Signal objects (individual signals can be accessed as result[0], .., result[result.size-1]).]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+			</arguments>
+		</element>
+		<element name="receiveSingle" function="true" type="Signal">
+			<description><![CDATA[Find the signal source having the highest signal power (including the distance)]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Dictionary" context="Global context">
+<description><![CDATA[Dictionary associates stored values with string keys ("key" is the first argument in get/set/remove functions). Integer "key" can be used to enumerate all elements.
+Example: var d=Dictionary.new(); d.set("name","John"); d.set("age",44);
+var i,element; for(i=0;i<d.size;i++) element=d.get(i);]]></description>
+		<element name="size" type="integer"/>
+		<element name="toString" type="string"/>
+		<element name="clear" function="true" type="void"><arguments/></element>
+		<element name="find" function="true" type="string">
+			<description><![CDATA[returns the element key or null if not found]]></description>
+			<arguments>
+				<argument name="value" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="untyped">
+			<arguments>
+				<argument name="key" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="new" function="true" type="Dictionary"><arguments/></element>
+		<element name="remove" function="true" type="void">
+			<arguments>
+				<argument name="key" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="set" function="true" type="void">
+			<arguments>
+				<argument name="key" type="untyped"/>
+				<argument name="value" type="untyped"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="File" context="Global context">
+<description><![CDATA[Provides read/write access to the filesystem. Can be used in the experiment definition to save the experiment state (onExpSave). Files are created in the "scripts_output" subdirectory of the directory where the Framsticks executable is located.]]></description>
+		<element name="EOF" type="integer" min="0" max="1"/>
+		<element name="info" type="string"/>
+		<element name="name" type="string"/>
+		<element name="path" type="string"/>
+		<element name="pathseparator" type="string"/>
+		<element name="append" function="true" type="File ">
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="description" type="string"/>
+			</arguments>
+		</element>
+		<element name="appendDirect" function="true" type="File ">
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="description" type="string"/>
+			</arguments>
+		</element>
+		<element name="close" function="true" type="string">
+			<description><![CDATA[returns file contents if it has been buffered]]></description>
+<arguments/></element>
+		<element name="create" function="true" type="File">
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="description" type="string"/>
+			</arguments>
+		</element>
+		<element name="createDirect" function="true" type="File">
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="description" type="string"/>
+			</arguments>
+		</element>
+		<element name="exists" function="true" type="integer" min="0" max="1">
+			<description><![CDATA[Sample:
+File.exists("default.sim") -> return 0 or 1]]></description>
+<arguments/></element>
+		<element name="flush" function="true" type="void">
+			<description><![CDATA[useful for unbuffered disk files only (openDirect, appendDirect)]]></description>
+<arguments/></element>
+		<element name="new" function="true" type="File "><arguments/></element>
+		<element name="newFromString" function="true" type="File ">
+			<arguments>
+				<argument name="text" type="string"/>
+			</arguments>
+		</element>
+		<element name="open" function="true" type="File ">
+			<arguments>
+				<argument name="filename" type="string"/>
+			</arguments>
+		</element>
+		<element name="readLine" function="true" type="string"><arguments/></element>
+		<element name="readObject" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="readUntilEOF" function="true" type="string"><arguments/></element>
+		<element name="system" function="true" type="integer">
+			<description><![CDATA[Invokes a system command and returns its exit code (0 usually means the command was completed successfully).
+
+Example:
+File.system("wget",["-O","/tmp/filename","http://example.com/file"]);]]></description>
+			<arguments>
+				<argument name="executable" type="string"/>
+				<argument name="string arguments" type="Vector"/>
+			</arguments>
+		</element>
+		<element name="writeComment" function="true" type="void">
+			<arguments>
+				<argument name="anything" type="string"/>
+			</arguments>
+		</element>
+		<element name="writeNameObject" function="true" type="void">
+			<arguments>
+				<argument name="name" type="string"/>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="writeObject" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="writeObjectBegin" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="writeObjectEnd" function="true" type="void"><arguments/></element>
+		<element name="writeObjectField" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+				<argument name="field index or name" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="writeObjectFieldForce" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+				<argument name="field index or name" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="writeObjectFields" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="writeObjectFieldsForce" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="writeString" function="true" type="void">
+			<arguments>
+				<argument name="anything" type="untyped"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="GenePool" context="Global context">
+<description><![CDATA[The static GenePool object refers to the "selected group" as described in GenePools.]]></description>
+		<element name="fitfun" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[Enables fitness scaling.]]></description>
+		</element>
+		<element name="fitm" type="float" min="0" max="10" default="2">
+			<description><![CDATA[Lower threshold: how many standard deviations below average?
+(avg - n * stddev) - used for fitness shifting]]></description>
+		</element>
+		<element name="fitma" type="float" min="1" max="10" default="2">
+			<description><![CDATA[The best genotype is as many times
+better than the average one.]]></description>
+		</element>
+		<element name="fitness" type="string">
+			<description><![CDATA[(intended for advanced users)]]></description>
+		</element>
+		<element name="index" type="integer"/>
+		<element name="name" type="string"/>
+		<element name="size" type="integer">
+			<description><![CDATA[In standard.expdef, this is equivalent to the number of unique genotypes. Standard experiment definition uses the Genotype.instances field to indicate that some genotypes exist in multiple instances despite having only one item in the group. Other experiment definitions may create multiple copies of the same genotype.]]></description>
+		</element>
+		<element name="totalpop" type="integer">
+			<description><![CDATA[Takes into account the Genotype.instances field (which may give the total number of instances depending on the experiment definition).]]></description>
+		</element>
+		<element name="addGeno" function="true" type="Genotype">
+			<description><![CDATA[Creates a new Genotype from the supplied Geno object.
+Returns the created Genotype.]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="delete" function="true" type="void">
+			<description><![CDATA[Deletes a genotype.]]></description>
+			<arguments>
+				<argument name="genotype index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="findGeno" function="true" type="integer">
+			<description><![CDATA[Finds the Genotype matching the supplied Geno object.
+returns genotype index or -1 if not found.]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="findUID" function="true" type="integer">
+			<arguments>
+				<argument name="uid" type="string"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="Genotype">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="GenePools" context="Global context">
+<description><![CDATA[Manages all genotypes in the experiment, organized in one or more groups. Some functions refer to the "selected genotype" i.e. the genotype number "GenePools.genotype" in the pool number "GenePools.group". For example to access the first genoype in the first group you could do:
+GenePools.group=0; GenePools.genotype=0; var name=Genotype.name;
+However, the preferred way doesn't refer to the static Genotype object:
+ var name=GenePools[0][0].name;
+
+Apart from the Genotypes in the group, there is also one temporary Genotype object used by genetic operators and some functions from GenePools. Genotype points to that object when "GenePools.genotype"=-1. The following code accesses that object before adding it to the genotype group:
+GenePools.newGenotype("X");
+ //makes the temporary object from the "X" genotype, GenePools.genotype is now -1
+GenePools.mutateSelected();
+ //the temporary object is mutated
+Genotype.info="my favorite genotype";
+ //modify the temporary object
+GenePools.copySelected(0);
+ //copy the current, i.e. temporary genotype to the genotype group #0]]></description>
+		<element name="genotype" type="integer">
+			<description><![CDATA[Index of the currently selected genotype or -1 if no genotype is selected.]]></description>
+		</element>
+		<element name="group" type="integer">
+			<description><![CDATA[Index of the currently selected group (GenePool).]]></description>
+		</element>
+		<element name="size" type="integer"/>
+		<element name="addGroup" function="true" type="void">
+			<description><![CDATA[Adds a new gene pool.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="addPerformanceFromCreature" function="true" type="void">
+			<description><![CDATA[Updates the current Genotype's performance values merging them with the current Creture's performance. It assumes the Genotype.instances has a reasonable value and performs the proper weighting. Use your own function instead if these conditions are not met in your experiment.]]></description>
+<arguments/></element>
+		<element name="clear" function="true" type="void">
+			<description><![CDATA[Removes all gene pools except the first one.]]></description>
+<arguments/></element>
+		<element name="clearGroup" function="true" type="void">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="copySelected" function="true" type="void">
+			<description><![CDATA[Copies the selected genotype to another group.]]></description>
+			<arguments>
+				<argument name="groupindex" type="integer"/>
+			</arguments>
+		</element>
+		<element name="crossoverSelected" function="true" type="void">
+			<description><![CDATA[Crossovers the selected genotype with another one (from the genotype group). The resulting genotype is stored in the static Genotype object detached from the genotype group. After calling this function GenePools.genotype is -1 indicating that no genotype from the group is selected.]]></description>
+			<arguments>
+				<argument name="other index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="deleteGroup" function="true" type="void">
+			<description><![CDATA[Removes a gene pool.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="deleteOne" function="true" type="void">
+			<description><![CDATA[Deletes one individual from the gene pool = decreases 'instances' and deletes the genotype if the 'instances' goes to 0.]]></description>
+			<arguments>
+				<argument name="genotype index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="deleteSelected" function="true" type="void">
+			<description><![CDATA[Deletes selected genotype from the gene pool (uses the selected genotype object).]]></description>
+<arguments/></element>
+		<element name="findGenotype" function="true" type="integer">
+			<description><![CDATA[Finds a genotype matching the current genotype. It only makes sense when the current genotype is a result of the genetic operator.]]></description>
+<arguments/></element>
+		<element name="findGenotypeForCreature" function="true" type="integer">
+			<description><![CDATA[Finds a genotype matching the selected creature.]]></description>
+<arguments/></element>
+		<element name="get" function="true" type="GenePool">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getFromCreature" function="true" type="void">
+			<description><![CDATA[Copies a genotype from the selected creature. The resulting genotype is stored in the static Genotype object detached from the genotype group.]]></description>
+<arguments/></element>
+		<element name="getFromCreatureObject" function="true" type="void">
+			<description><![CDATA[Copies a genotype from the creature object passed in argument. The resulting genotype is stored in the static Genotype object detached from the genotype group.]]></description>
+			<arguments>
+				<argument type="Creature"/>
+			</arguments>
+		</element>
+		<element name="likeThisRoulette" function="true" type="integer">
+			<description><![CDATA[Gets a random genotype similar to the selected one, fitness-proportional.]]></description>
+			<arguments>
+				<argument name="minimum similarity" type="float"/>
+			</arguments>
+		</element>
+		<element name="mutateSelected" function="true" type="void">
+			<description><![CDATA[Mutates the selected genotype. The resulting genotype is stored in the static Genotype object detached from the genotype group. After calling this function GenePools.genotype is -1 indicating that no genotype from the group is selected.]]></description>
+<arguments/></element>
+		<element name="newGenotype" function="true" type="void">
+			<description><![CDATA[Makes a new genotype from the supplied string and select the genotype. The resulting genotype is stored in the static Genotype object detached from the genotype group. After calling this function GenePools.genotype is -1 indicating that no genotype from the group is selected. (call "copySelected" if you want to add this gentype to the genotype group).]]></description>
+			<arguments>
+				<argument name="genotype" type="string"/>
+			</arguments>
+		</element>
+		<element name="random" function="true" type="integer">
+			<description><![CDATA[Gets random genotype.]]></description>
+<arguments/></element>
+		<element name="randomLikeThis" function="true" type="integer">
+			<description><![CDATA[Gets a random genotype similar to the selected one.]]></description>
+			<arguments>
+				<argument name="minimum similarity" type="float"/>
+			</arguments>
+		</element>
+		<element name="revroulette" function="true" type="integer">
+			<description><![CDATA[Get reverse fitness-proportional genotype.]]></description>
+<arguments/></element>
+		<element name="roulette" function="true" type="integer">
+			<description><![CDATA[Gets fitness-proportional genotype.]]></description>
+<arguments/></element>
+		<element name="tournament" function="true" type="integer">
+			<description><![CDATA[Gets tournament winner genotype.]]></description>
+			<arguments>
+				<argument name="genotypes in tournament" type="integer"/>
+			</arguments>
+		</element>
+		<element name="worst" function="true" type="integer">
+			<description><![CDATA[Gets worst genotype.]]></description>
+<arguments/></element>
+	</type>
+	<type name="GenMan" context="Global context">
+<description><![CDATA[Manages various genetic operations, using appropriate operators for the argument genotype format.]]></description>
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="f0_c_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_c_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_c_wei" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_rsf" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_stf" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_stm" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_n_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_n_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_n_prp" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_nodel_tag" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[You can tag elements using their 'i' field and the i="mi=d" tag.
+Mutations will not delete such elements.
+The i="mi=dm" combination is allowed.]]></description>
+		</element>
+		<element name="f0_nomod_tag" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[You can tag elements using their 'i' field and the i="mi=m" tag.
+Mutations will not modify properties of such elements.
+The i="mi=md" combination is allowed.]]></description>
+		</element>
+		<element name="f0_p_asm" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_frc" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_ing" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_mas" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_pos" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_swp" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f1_mut_exmod" type="string">
+			<description><![CDATA[Modifiers that will not be added nor deleted during mutation
+(all: RrLlAaCcFfMmSsIiQqWwEe)]]></description>
+		</element>
+		<element name="f1_nmConn" type="float" min="0" max="100" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f1_nmNeu" type="float" min="0" max="100" default="0.05">
+			<description><![CDATA[Adds a (connected) neuron or removes a neuron]]></description>
+		</element>
+		<element name="f1_nmProp" type="float" min="0" max="100" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f1_nmVal" type="float" min="0" max="100" default="0.05"/>
+		<element name="f1_nmWei" type="float" min="0" max="100" default="1"/>
+		<element name="f1_smComma" type="float" min="0" max="100" default="0.02"/>
+		<element name="f1_smJunct" 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: RrLlAaCcFfMmSsIiQqWwEe]]></description>
+		</element>
+		<element name="f1_smX" type="float" min="0" max="100" default="0.05"/>
+		<element name="f1_xo_propor" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Cross over (exchange) corresponding segments of the two parent genotypes?
+
+f1 uses a two-point crossing over.
+If this option is turned on, cut points will be selected proportionally to neural genes.
+Thus, if both parents have the same number of neurons, then this will be preserved in their children.]]></description>
+		</element>
+		<element name="f2_mutAddOper" type="float" min="0" max="1" default="0.4">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutConnElem" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutDelOper" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutHandleOper" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutJointElem" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutNeuroElem" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutPropOper" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDelIns" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDelInsLength" type="integer" min="1" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDelInsPerChar" type="float" min="0" max="1" default="0.05">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDuplication" type="float" min="0" max="1" default="0.05">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutSubstitution" type="float" min="0" max="1" default="0.6">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutSubstPerChar" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutTranslocation" type="float" min="0" max="1" default="0.15">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_xovCrossingOver" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_xovGeneTransfer" type="float" min="0" max="1" default="0.8">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f4_mut_add" type="float" min="0" max="100" default="50">
+			<description><![CDATA[mutation: probability of adding a node]]></description>
+		</element>
+		<element name="f4_mut_add_conn" type="float" min="0" max="100" default="15">
+			<description><![CDATA[add node mutation: probability of adding a neural connection]]></description>
+		</element>
+		<element name="f4_mut_add_div" type="float" min="0" max="100" default="20">
+			<description><![CDATA[add node mutation: probability of adding a division]]></description>
+		</element>
+		<element name="f4_mut_add_neupar" type="float" min="0" max="100" default="5">
+			<description><![CDATA[add node mutation: probability of adding a neuron property/modifier]]></description>
+		</element>
+		<element name="f4_mut_add_rep" type="float" min="0" max="100" default="10">
+			<description><![CDATA[add node mutation: probability of adding a repetition]]></description>
+		</element>
+		<element name="f4_mut_add_simp" type="float" min="0" max="100" default="50">
+			<description><![CDATA[add node mutation: probability of adding a random, simple gene]]></description>
+		</element>
+		<element name="f4_mut_del" type="float" min="0" max="100" default="20">
+			<description><![CDATA[mutation: probability of deleting a node]]></description>
+		</element>
+		<element name="f4_mut_mod" type="float" min="0" max="100" default="30">
+			<description><![CDATA[mutation: probability of changing a node]]></description>
+		</element>
+		<element name="gen_extmutinfo" type="integer" min="0" max="2" default="0">
+			<description><![CDATA[If active, information about employed mutation method will be stored in the 'info' field of each mutated genotype.]]></description>
+		</element>
+		<element name="gen_hilite" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Use colors for genes?
+(slows down viewing/editing of huge genotypes)]]></description>
+		</element>
+		<element name="gen_hist" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[Required for phylogenetic analysis]]></description>
+		</element>
+		<element name="genoper_f0" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f1" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f2" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f3" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f4" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="neuadd_N" type="integer" min="0" max="1">
+			<description><![CDATA[Standard neuron
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="neuadd_Nu" type="integer" min="0" max="1">
+			<description><![CDATA[Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.
+Having 0 as one of the saturation states should help in "gate circuits", where input signal is passed through or blocked depending on the other singal.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="neuadd_G" type="integer" min="0" max="1">
+			<description><![CDATA[Equilibrium sensor.
+0=the stick is horizontal
++1/-1=the stick is vertical
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Joint
+]]></description>
+		</element>
+		<element name="neuadd_T" type="integer" min="0" max="1">
+			<description><![CDATA[Touch sensor.
+-1=no contact
+0=just touching
+>0=pressing, value depends on the force applied
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   Range (r) float 0..1]]></description>
+		</element>
+		<element name="neuadd_S" type="integer" min="0" max="1">
+			<description><![CDATA[Smell sensor. Aggregated "smell of energy" experienced from all energy objects (creatures and food pieces).
+Close objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="neuadd_*" type="integer" min="0" max="1">
+			<description><![CDATA[Constant value
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_|" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1
+   bending range (r) float 0..1]]></description>
+		</element>
+		<element name="neuadd_@" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="neuadd_D" type="integer" min="0" max="1">
+			<description><![CDATA[Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_Fuzzy" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of fuzzy sets (ns) integer
+   number of rules (nr) integer
+   fuzzy sets (fs) string
+   fuzzy rules (fr) string]]></description>
+		</element>
+		<element name="neuadd_VEye" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   uses single input
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   target.x (tx) float
+   target.y (ty) float
+   target.z (tz) float
+   target shape (ts) string
+   perspective (p) float 0.1..10
+   scale (s) float 0.1..100
+   show hidden lines (h) integer 0..1
+   output lines count (each line needs four channels) (o) integer 0..99
+   debug (d) integer 0..1]]></description>
+		</element>
+		<element name="neuadd_VMotor" type="integer" min="0" max="1">
+			<description><![CDATA[Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of basic features (noIF) integer
+   number of degrees of freedom (noDim) integer
+   parameters (params) string]]></description>
+		</element>
+		<element name="neuadd_Sti" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="neuadd_LMu" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="neuadd_Water" type="integer" min="0" max="1">
+			<description><![CDATA[Output signal:
+0=on or above water surface
+1=under water (deeper than 1)
+0..1=in the transient area just below water surface
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="neuadd_Energy" type="integer" min="0" max="1">
+			<description><![CDATA[The current energy level divided by the initial energy level.
+Usually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_Ch" type="integer" min="0" max="1">
+			<description><![CDATA[Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_ChMux" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)
+
+Characteristics:
+   uses 2 inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_ChSel" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs a single channel (selected by the "ch" parameter) from multichannel input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   channel (ch) integer]]></description>
+		</element>
+		<element name="neuadd_Rnd" type="integer" min="0" max="1">
+			<description><![CDATA[Generates random noise (subsequent random values in the range of -1..+1)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_Sin" type="integer" min="0" max="1">
+			<description><![CDATA[Output frequency = f0+input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   base frequency (f0) float -1..1
+   time (t) float 0..6.28319]]></description>
+		</element>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="crossOver" function="true" type="Geno">
+			<description><![CDATA[returns crossed over genotype]]></description>
+			<arguments>
+				<argument type="Geno"/>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="getSimplest" function="true" type="Geno">
+			<description><![CDATA[returns the simplest genotype for a given encoding (format). 0 means f0, 4 means f4, etc.]]></description>
+			<arguments>
+				<argument name="format" type="integer"/>
+			</arguments>
+		</element>
+		<element name="mutate" function="true" type="Geno">
+			<description><![CDATA[returns mutated Geno object from supplied Geno]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="operReport" function="true" type="void">
+			<description><![CDATA[Show available genetic operators]]></description>
+<arguments/></element>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+		<element name="toHTML" function="true" type="string">
+			<description><![CDATA[returns genotype expressed as colored HTML]]></description>
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="toHTMLshort" function="true" type="string">
+			<description><![CDATA[returns genotype (abbreviated if needed) expressed as colored HTML]]></description>
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="validate" function="true" type="Geno">
+			<description><![CDATA[returns validated (if possible) Geno object from supplied Geno]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="GenManStats" context="Global context">
+<description><![CDATA[Statistics for genetic operations.]]></description>
+		<element name="gen_count" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_mfailed" type="integer">
+			<description><![CDATA[couldn't be performed]]></description>
+		</element>
+		<element name="gen_minvalid" type="integer">
+			<description><![CDATA[couldn't be repaired]]></description>
+		</element>
+		<element name="gen_mutimpr" type="float">
+			<description><![CDATA[total cumulative mutation change]]></description>
+		</element>
+		<element name="gen_mvalid" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_mvalidated" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_xofailed" type="integer">
+			<description><![CDATA[couldn't be performed]]></description>
+		</element>
+		<element name="gen_xoimpr" type="float">
+			<description><![CDATA[total cumulative crossover change]]></description>
+		</element>
+		<element name="gen_xoinvalid" type="integer">
+			<description><![CDATA[couldn't be repaired]]></description>
+		</element>
+		<element name="gen_xovalid" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_xovalidated" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="clrstats" function="true" type="void">
+			<description><![CDATA[]]></description>
+<arguments/></element>
+	</type>
+	<type name="Geno" context="Global context">
+<description><![CDATA[All information about a single genotype.
+This is a genetics-only object which does not contain any performance data. See also: Genotype class]]></description>
+		<element name="autoname" type="string"/>
+		<element name="f0genotype" type="string">
+			<description><![CDATA[converted to f0 genotype]]></description>
+		</element>
+		<element name="format" type="integer">
+			<description><![CDATA[Genotype format]]></description>
+		</element>
+		<element name="genotype" type="string"/>
+		<element name="info" type="string">
+			<description><![CDATA[Additional information or comments]]></description>
+		</element>
+		<element name="isValid" type="integer" min="0" max="1"/>
+		<element name="name" type="string"/>
+		<element name="rawgenotype" type="string">
+			<description><![CDATA[Genotype, excluding the format specifier]]></description>
+		</element>
+		<element name="getConverted" function="true" type="Geno">
+			<arguments>
+				<argument name="format" type="integer"/>
+			</arguments>
+		</element>
+		<element name="new" function="true" type="Geno"><arguments/></element>
+		<element name="newFrom" function="true" type="Geno">
+			<arguments>
+				<argument name="genotype" type="string"/>
+				<argument name="format" type="integer"/>
+				<argument name="name" type="string"/>
+				<argument name="description" type="string"/>
+			</arguments>
+		</element>
+		<element name="newFromString" function="true" type="Geno">
+			<arguments>
+				<argument name="genotype" type="string"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Genotype" context="Global context">
+<description><![CDATA[A Genotype with the associated performance information. All but one Genotype objects are placed in Genotype Groups. There is also a single static Genotype object not associated with a group, which is used as a temporary storage by genetic operators and some functions from GenePools.]]></description>
+		<element name="convtrace1" type="string"/>
+		<element name="distance" type="float"/>
+		<element name="energ0" type="float"/>
+		<element name="f0genotype" type="string">
+			<description><![CDATA[converted to f0 genotype]]></description>
+		</element>
+		<element name="fit" type="float"/>
+		<element name="fit2" type="float">
+			<description><![CDATA[Fitness shifted by (avg-n*stddev)]]></description>
+		</element>
+		<element name="geno" type="Geno">
+			<description><![CDATA[Geno object for this Genotype]]></description>
+		</element>
+		<element name="genotype" type="string"/>
+		<element name="gnum" type="integer"/>
+		<element name="info" type="string">
+			<description><![CDATA[Additional information or comments]]></description>
+		</element>
+		<element name="instances" type="integer">
+			<description><![CDATA[Copies of this genotype]]></description>
+		</element>
+		<element name="isValid" type="integer" min="0" max="1"/>
+		<element name="lifespan" type="float">
+			<description><![CDATA[Average life span]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="nncon" type="float"/>
+		<element name="nnsiz" type="float"/>
+		<element name="num" type="integer"/>
+		<element name="numconnections" type="float"/>
+		<element name="numjoints" type="float"/>
+		<element name="numneurons" type="float"/>
+		<element name="numparts" type="float"/>
+		<element name="popsiz" type="integer"/>
+		<element name="simi" type="float"/>
+		<element name="strjoints" type="float"/>
+		<element name="strsiz" type="float"/>
+		<element name="uid" type="string">
+			<description><![CDATA[Unique identifier]]></description>
+		</element>
+		<element name="user1" type="untyped"/>
+		<element name="user2" type="untyped"/>
+		<element name="user3" type="untyped"/>
+		<element name="velocity" type="float">
+			<description><![CDATA[Average velocity]]></description>
+		</element>
+		<element name="vertpos" type="float"/>
+		<element name="vertvel" type="float"/>
+		<element name="getModel" function="true" type="Model"><arguments/></element>
+		<element name="getNormalized" function="true" type="float">
+			<arguments>
+				<argument name="property name or index" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="mutate" function="true" type="void"><arguments/></element>
+	</type>
+	<type name="GenotypeGroup" context="Global context">
+<description><![CDATA[The static GenePool object refers to the "selected group" as described in GenePools.]]></description>
+		<element name="fitfun" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[Enables fitness scaling.]]></description>
+		</element>
+		<element name="fitm" type="float" min="0" max="10" default="2">
+			<description><![CDATA[Lower threshold: how many standard deviations below average?
+(avg - n * stddev) - used for fitness shifting]]></description>
+		</element>
+		<element name="fitma" type="float" min="1" max="10" default="2">
+			<description><![CDATA[The best genotype is as many times
+better than the average one.]]></description>
+		</element>
+		<element name="fitness" type="string">
+			<description><![CDATA[(intended for advanced users)]]></description>
+		</element>
+		<element name="index" type="integer"/>
+		<element name="name" type="string"/>
+		<element name="size" type="integer">
+			<description><![CDATA[In standard.expdef, this is equivalent to the number of unique genotypes. Standard experiment definition uses the Genotype.instances field to indicate that some genotypes exist in multiple instances despite having only one item in the group. Other experiment definitions may create multiple copies of the same genotype.]]></description>
+		</element>
+		<element name="totalpop" type="integer">
+			<description><![CDATA[Takes into account the Genotype.instances field (which may give the total number of instances depending on the experiment definition).]]></description>
+		</element>
+		<element name="addGeno" function="true" type="Genotype">
+			<description><![CDATA[Creates a new Genotype from the supplied Geno object.
+Returns the created Genotype.]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="delete" function="true" type="void">
+			<description><![CDATA[Deletes a genotype.]]></description>
+			<arguments>
+				<argument name="genotype index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="findGeno" function="true" type="integer">
+			<description><![CDATA[Finds the Genotype matching the supplied Geno object.
+returns genotype index or -1 if not found.]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="findUID" function="true" type="integer">
+			<arguments>
+				<argument name="uid" type="string"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="Genotype">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<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>
+		<element name="groups" type="integer"/>
+		<element name="name" type="string"/>
+		<element name="properties" type="integer"/>
+		<element name="findGroupId" function="true" type="integer">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="findId" function="true" type="integer">
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="findIdInGroup" function="true" type="integer">
+			<arguments>
+				<argument name="name" type="string"/>
+				<argument name="group name or index" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="untyped">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getFlags" function="true" type="integer">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getGroup" function="true" type="integer">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getGroupName" function="true" type="string">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getHelp" function="true" type="string">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getId" function="true" type="string">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getName" function="true" type="string">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getType" function="true" type="string">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="invoke" function="true" type="void">
+			<arguments>
+				<argument name="function name or index" type="untyped"/>
+				<argument name="arguments" type="Vector"/>
+			</arguments>
+		</element>
+		<element name="makeFrom" function="true" type="Interface">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="set" function="true" type="void">
+			<arguments>
+				<argument name="index" type="integer"/>
+				<argument name="value" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="setAllDefault" function="true" type="void"><arguments/></element>
+		<element name="setDefault" function="true" type="void">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Joint" context="Global context">
+		<element name="dx" type="float" min="-2" max="2" default="0"/>
+		<element name="dy" type="float" min="-2" max="2" default="0"/>
+		<element name="dz" type="float" min="-2" max="2" default="0"/>
+		<element name="i" type="string"/>
+		<element name="p1" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="p2" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="rotstif" type="float" min="0" max="1" default="1"/>
+		<element name="rx" type="float"/>
+		<element name="ry" type="float"/>
+		<element name="rz" type="float"/>
+		<element name="stam" type="float" min="0" max="1" default="0.25"/>
+		<element name="stif" type="float" min="0" max="1" default="1"/>
+		<element name="Vstyle" type="string"/>
+	</type>
+	<type name="Loader" context="Global context">
+<description><![CDATA[Support for loading files in the Framsticks format. Used in the experiment definition to retrieve experiment state (see OnExpLoad function in standard.expdef). Registered objects (addClass) are handled automaticaly. Loader can call user functions defined by setBreakLabel.]]></description>
+		<element name="AfterObject" type="integer"/>
+		<element name="BeforeObject" type="integer"/>
+		<element name="BeforeUnknown" type="integer"/>
+		<element name="comment" type="string"/>
+		<element name="currentObject" type="Object"/>
+		<element name="firstComment" type="integer" min="0" max="1"/>
+		<element name="objectName" type="string"/>
+		<element name="OnComment" type="integer"/>
+		<element name="OnError" type="integer"/>
+		<element name="status" type="integer"/>
+		<element name="abort" function="true" type="void"><arguments/></element>
+		<element name="addClass" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="clearClasses" function="true" type="void"><arguments/></element>
+		<element name="go" function="true" type="integer"><arguments/></element>
+		<element name="loadObject" function="true" type="void"><arguments/></element>
+		<element name="removeClass" function="true" type="void">
+			<arguments>
+				<argument type="Object"/>
+			</arguments>
+		</element>
+		<element name="run" function="true" type="integer"><arguments/></element>
+		<element name="setBreak" function="true" type="void">
+			<arguments>
+				<argument name="break conditions" type="integer"/>
+			</arguments>
+		</element>
+		<element name="setBreakLabel" function="true" type="void">
+			<arguments>
+				<argument name="break condition" type="integer"/>
+				<argument name="label" type="string"/>
+			</arguments>
+		</element>
+		<element name="skipObject" function="true" type="void"><arguments/></element>
+	</type>
+	<type name="Math" context="Global context">
+<description><![CDATA[Mathematical functions library.]]></description>
+		<element name="pi" type="float"/>
+		<element name="pi2" type="float"/>
+		<element name="pi4" type="float"/>
+		<element name="rnd01" type="float"/>
+		<element name="rndGaussStd" type="float"/>
+		<element name="seed" type="integer">
+			<description><![CDATA[Random number generator seed.
+Note: Math.seed influences all future random activity in the simulator, not only Math.rnd01 results.]]></description>
+		</element>
+		<element name="time" type="float">
+			<description><![CDATA[Number of seconds since the Epoch (00:00:00 UTC/GMT, January 1, 1970)]]></description>
+		</element>
+		<element name="twopi" type="float"/>
+		<element name="abs" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="acos" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="asin" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="atan" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="atan2" function="true" type="float">
+			<arguments>
+				<argument name="y" type="float"/>
+				<argument name="x" type="float"/>
+			</arguments>
+		</element>
+		<element name="cos" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="exp" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="log" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="max" function="true" type="untyped">
+			<arguments>
+				<argument type="untyped"/>
+				<argument type="untyped"/>
+			</arguments>
+		</element>
+		<element name="min" function="true" type="untyped">
+			<arguments>
+				<argument type="untyped"/>
+				<argument type="untyped"/>
+			</arguments>
+		</element>
+		<element name="pow" function="true" type="float">
+			<arguments>
+				<argument name="a" type="float"/>
+				<argument name="b" type="float"/>
+			</arguments>
+		</element>
+		<element name="random" function="true" type="integer">
+			<description><![CDATA[0..num-1]]></description>
+			<arguments>
+				<argument name="num" type="integer"/>
+			</arguments>
+		</element>
+		<element name="rndCustom" function="true" type="float">
+			<description><![CDATA[the parameter describes the desired random distribution, being a sum of uniform distributions, eg. rndCustom([-10,-1, -1,1, 1,10]) defines 3 uniform distribution intervals [-1,10) [-1,1), [1,10)]]></description>
+			<arguments>
+				<argument type="Vector"/>
+			</arguments>
+		</element>
+		<element name="rndGauss" function="true" type="float">
+			<description><![CDATA[rndGaussStd is rndGauss(0,1)]]></description>
+			<arguments>
+				<argument name="center" type="float"/>
+				<argument name="stdandard deviation" type="float"/>
+			</arguments>
+		</element>
+		<element name="rndUni" function="true" type="float">
+			<description><![CDATA[[begin..end)]]></description>
+			<arguments>
+				<argument name="begin" type="float"/>
+				<argument name="end" type="float"/>
+			</arguments>
+		</element>
+		<element name="sigmoid" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="sign" function="true" type="integer">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="sin" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="sqrt" function="true" type="float">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="MechJoint" context="Global context">
+		<element name="dx" type="float"/>
+		<element name="dy" type="float"/>
+		<element name="dz" type="float"/>
+		<element name="part1" type="MechPart"/>
+		<element name="part2" type="MechPart"/>
+		<element name="rotstif" type="float"/>
+		<element name="rotstress" type="float"/>
+		<element name="rx" type="float"/>
+		<element name="ry" type="float"/>
+		<element name="rz" type="float"/>
+		<element name="stif" type="float"/>
+		<element name="stress" type="float"/>
+	</type>
+	<type name="MechPart" context="Global context">
+		<element name="fr" type="float"/>
+		<element name="m" type="float"/>
+		<element name="orient" type="Orient"/>
+		<element name="oxx" type="float"/>
+		<element name="oxy" type="float"/>
+		<element name="oxz" type="float"/>
+		<element name="oyx" type="float"/>
+		<element name="oyy" type="float"/>
+		<element name="oyz" type="float"/>
+		<element name="ozx" type="float"/>
+		<element name="ozy" type="float"/>
+		<element name="ozz" type="float"/>
+		<element name="pos" type="XYZ"/>
+		<element name="s" type="float"/>
+		<element name="v" type="XYZ"/>
+		<element name="vol" type="float"/>
+		<element name="vx" type="float"/>
+		<element name="vy" type="float"/>
+		<element name="vz" type="float"/>
+		<element name="x" type="float"/>
+		<element name="y" type="float"/>
+		<element name="z" type="float"/>
+		<element name="applyForce" function="true" type="void">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Model" context="Global context">
+		<element name="geno" type="Geno"/>
+		<element name="numconnections" type="integer"/>
+		<element name="numjoints" type="integer"/>
+		<element name="numneurons" type="integer"/>
+		<element name="numparts" type="integer"/>
+		<element name="se" type="float"/>
+		<element name="size_x" type="float">
+			<description><![CDATA[(size_x,size_y,size_z) are dimensions of the axis-aligned bounding box of the creature, including imaginary Part sizes (Part.s, usually 1.0). A creature consisting of a single default part has the size of (2.0,2.0,2.0) - twice the Part.s value (like a sphere diameter is twice its radius).
+See also: Creature.moveAbs]]></description>
+		</element>
+		<element name="size_y" type="float">
+			<description><![CDATA[See Model.size_x]]></description>
+		</element>
+		<element name="size_z" type="float">
+			<description><![CDATA[See Model.size_x]]></description>
+		</element>
+		<element name="Vstyle" type="string"/>
+		<element name="getJoint" function="true" type="Joint">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getNeuroDef" function="true" type="NeuroDef">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getPart" function="true" type="Part">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="newFromGeno" function="true" type="Model">
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="newFromString" function="true" type="Model">
+			<arguments>
+				<argument name="genotype" type="string"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Neuro" context="Global context">
+<description><![CDATA[Live Neuron object.]]></description>
+		<element name="channelCount" type="integer"/>
+		<element name="creature" type="Creature"/>
+		<element name="currState" type="float">
+			<description><![CDATA[The only difference from the "state" field is that currState, when written, changes the internal neuron state immediately (which disturbs the regular synchronous NN operation). This feature should only be used while controlling the neuron 'from outside' (like a neuro probe) and not in the neuron definition. See also: Neuro.hold]]></description>
+		</element>
+		<element name="def" type="NeuroDef"/>
+		<element name="fields" type="Fields">
+			<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.
+Examples:
+var c=Populations.createFromString("X[N]");
+Simulator.print("standard neuron inertia="+c.getNeuro(0).fields.in);
+c=Populations.createFromString("X[Nn,e:0.1]");
+Simulator.print("noisy neuron error rate="+c.getNeuro(0).fields.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 i;
+for(i=0;i<iobj.properties;i++)
+ Simulator.print(iobj.getId(i)+" ("+iobj.getName(i)+")");]]></description>
+		</element>
+		<element name="getInputCount" type="integer"/>
+		<element name="hold" type="integer" min="0" max="1">
+			<description><![CDATA["Holding" means keeping the neuron state as is, blocking the regular neuron operation. This is useful when your script needs to inject some control signals into the NN. Without "holding", live neurons would be constantly overwriting your changes, and the rest of the NN could see inconsistent states, depending on the connections. Setting hold=1 ensures the neuron state will be only set by you, and not by the neuron. The enforced signal value can be set using Neuro.currState before or after setting hold=1. Set hold=0 to resume normal operation.]]></description>
+		</element>
+		<element name="inputSum" type="float"/>
+		<element name="joint" type="MechJoint"/>
+		<element name="part" type="MechPart"/>
+		<element name="position_x" type="float"/>
+		<element name="position_y" type="float"/>
+		<element name="position_z" type="float"/>
+		<element name="signals" type="NeuroSignals"/>
+		<element name="state" type="float">
+			<description><![CDATA[When read, returns the current neuron state.
+When written, sets the next neuron state (for use in the neuron definition)]]></description>
+		</element>
+		<element name="weightedInputSum" type="float"/>
+		<element name="getInputChannelCount" function="true" type="integer">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputState" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputStateChannel" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+				<argument name="channel" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputSum" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputWeight" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getStateChannel" function="true" type="float">
+			<arguments>
+				<argument name="channel" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getWeightedInputState" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getWeightedInputStateChannel" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+				<argument name="channel" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getWeightedInputSum" function="true" type="float">
+			<description><![CDATA[Uses any number of inputs starting with the specified input. getWeightedInputSum(0)=weightedInputSum]]></description>
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="setCurrStateChannel" function="true" type="void">
+			<description><![CDATA[Analogous to "currState".]]></description>
+			<arguments>
+				<argument name="channel" type="integer"/>
+				<argument name="value" type="float"/>
+			</arguments>
+		</element>
+		<element name="setStateChannel" function="true" type="void">
+			<arguments>
+				<argument name="channel" type="integer"/>
+				<argument name="value" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="NeuroClass" context="Global context">
+<description><![CDATA[The static NeuroClass object refers to class selected in the NeuroClassLibrary.]]></description>
+		<element name="description" type="string"/>
+		<element name="glyph" type="string"/>
+		<element name="longname" type="string"/>
+		<element name="name" type="string"/>
+		<element name="prefinputs" type="integer"/>
+		<element name="preflocation" type="integer" min="0" max="2"/>
+		<element name="prefoutput" type="integer" min="0" max="1"/>
+		<element name="properties" type="Interface"/>
+		<element name="summary" type="string">
+			<description><![CDATA[Textual summary of all features]]></description>
+		</element>
+		<element name="visualhints" type="integer"/>
+	</type>
+	<type name="NeuroClassLibrary" context="Global context">
+<description><![CDATA[Set of Neuron classes. You can access the selected class in the static NeuroClass object.]]></description>
+		<element name="class" type="integer">
+			<description><![CDATA[0 ... count-1]]></description>
+		</element>
+		<element name="count" type="integer"/>
+		<element name="findClass" function="true" type="void">
+			<arguments>
+				<argument name="class name" type="string"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="NeuroDef" context="Global context">
+		<element name="d" type="string"/>
+		<element name="getInputCount" type="integer"/>
+		<element name="i" type="string"/>
+		<element name="j" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="p" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="Vstyle" type="string"/>
+		<element name="getInputNeuroDef" function="true" type="NeuroDef">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputNeuroIndex" function="true" type="integer">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputWeight" function="true" type="float">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="NeuronsSimEnabled" context="Global context">
+		<element name="ncl_N" type="integer" min="0" max="1">
+			<description><![CDATA[Standard neuron
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="ncl_Nu" type="integer" min="0" max="1">
+			<description><![CDATA[Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.
+Having 0 as one of the saturation states should help in "gate circuits", where input signal is passed through or blocked depending on the other singal.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="ncl_G" type="integer" min="0" max="1">
+			<description><![CDATA[Equilibrium sensor.
+0=the stick is horizontal
++1/-1=the stick is vertical
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Joint
+]]></description>
+		</element>
+		<element name="ncl_T" type="integer" min="0" max="1">
+			<description><![CDATA[Touch sensor.
+-1=no contact
+0=just touching
+>0=pressing, value depends on the force applied
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   Range (r) float 0..1]]></description>
+		</element>
+		<element name="ncl_S" type="integer" min="0" max="1">
+			<description><![CDATA[Smell sensor. Aggregated "smell of energy" experienced from all energy objects (creatures and food pieces).
+Close objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="ncl_*" type="integer" min="0" max="1">
+			<description><![CDATA[Constant value
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_|" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1
+   bending range (r) float 0..1]]></description>
+		</element>
+		<element name="ncl_@" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="ncl_D" type="integer" min="0" max="1">
+			<description><![CDATA[Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_Fuzzy" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of fuzzy sets (ns) integer
+   number of rules (nr) integer
+   fuzzy sets (fs) string
+   fuzzy rules (fr) string]]></description>
+		</element>
+		<element name="ncl_VEye" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   uses single input
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   target.x (tx) float
+   target.y (ty) float
+   target.z (tz) float
+   target shape (ts) string
+   perspective (p) float 0.1..10
+   scale (s) float 0.1..100
+   show hidden lines (h) integer 0..1
+   output lines count (each line needs four channels) (o) integer 0..99
+   debug (d) integer 0..1]]></description>
+		</element>
+		<element name="ncl_VMotor" type="integer" min="0" max="1">
+			<description><![CDATA[Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of basic features (noIF) integer
+   number of degrees of freedom (noDim) integer
+   parameters (params) string]]></description>
+		</element>
+		<element name="ncl_Sti" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="ncl_LMu" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="ncl_Water" type="integer" min="0" max="1">
+			<description><![CDATA[Output signal:
+0=on or above water surface
+1=under water (deeper than 1)
+0..1=in the transient area just below water surface
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="ncl_Energy" type="integer" min="0" max="1">
+			<description><![CDATA[The current energy level divided by the initial energy level.
+Usually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_Ch" type="integer" min="0" max="1">
+			<description><![CDATA[Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_ChMux" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)
+
+Characteristics:
+   uses 2 inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_ChSel" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs a single channel (selected by the "ch" parameter) from multichannel input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   channel (ch) integer]]></description>
+		</element>
+		<element name="ncl_Rnd" type="integer" min="0" max="1">
+			<description><![CDATA[Generates random noise (subsequent random values in the range of -1..+1)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_Sin" type="integer" min="0" max="1">
+			<description><![CDATA[Output frequency = f0+input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   base frequency (f0) float -1..1
+   time (t) float 0..6.28319]]></description>
+		</element>
+	</type>
+	<type name="NeuroSignals" context="Global context">
+<description><![CDATA[Signals attached to the neuron.
+See also: Signal, WorldSignals, CreatureSignals.
+scripts/light.neuro and scripts/seelight.neuro are simple custom neuron examples demonstrating how to send/receive signals between creatures.]]></description>
+		<element name="size" type="integer"/>
+		<element name="add" function="true" type="void">
+			<description><![CDATA[Create a new signal]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true" type="void"><arguments/></element>
+		<element name="get" function="true" type="Signal">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="receive" function="true" type="float">
+			<description><![CDATA[Receive the aggregated signal power in a given channel.]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+			</arguments>
+		</element>
+		<element name="receiveFilter" function="true" type="float">
+			<description><![CDATA[Receive the aggregated signal power in a given channel.
+
+Additional filtering options:
+- Max distance only receives the neighbor signals (based on their physical location)
+- Flavor filtering: only signals having the flavor close to the specified one will be received. The filter value is the maximum allowed difference.]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+				<argument name="flavor" type="float"/>
+				<argument name="filter" type="float"/>
+			</arguments>
+		</element>
+		<element name="receiveSet" function="true" type="Vector">
+			<description><![CDATA[Get all signals in the specified range. Returns a readonly vector object containing Signal objects (individual signals can be accessed as result[0] throught result[result.size-1]).]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+			</arguments>
+		</element>
+		<element name="receiveSingle" function="true" type="Signal">
+			<description><![CDATA[Find the signal source having the highest signal power (including the distance)]]></description>
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="range" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="ODE" context="Global context">
+<description><![CDATA[ODE Parameters.]]></description>
+		<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>
+		</element>
+		<element name="odecol2bounce" type="float" min="0" max="1" default="0.1"/>
+		<element name="odecol2bouncevel" type="float" min="0" max="1" default="0.01"/>
+		<element name="odecol2mumax" type="float" min="0" max="10" default="1">
+			<description><![CDATA[Mu coefficient for Parts with maximal friction (i.e. "FFFFF" in f1)]]></description>
+		</element>
+		<element name="odecol2mumin" type="float" min="0" max="10" default="0.1">
+			<description><![CDATA[Mu coefficient for Parts with minimal friction (i.e. "fffff" in f1)]]></description>
+		</element>
+		<element name="odecol2softcfm" type="float" min="0" max="1" default="0"/>
+		<element name="odecolbounce" type="float" min="0" max="1" default="0.1"/>
+		<element name="odecolbouncevel" type="float" min="0" max="1" default="0.01"/>
+		<element name="odecolmumax" type="float" min="0" max="10" default="5">
+			<description><![CDATA[Mu coefficient for Parts with maximal friction (i.e. "FFFFF" in f1)]]></description>
+		</element>
+		<element name="odecolmumin" type="float" min="0" max="10" default="0.1">
+			<description><![CDATA[Mu coefficient for Parts with minimal friction (i.e. "fffff" in f1)]]></description>
+		</element>
+		<element name="odecolsoftcfm" type="float" min="0" max="1" default="0"/>
+		<element name="odemusclemax" type="float" min="0" max="100" default="10">
+			<description><![CDATA[i.e. "MMMMM" if f1]]></description>
+		</element>
+		<element name="odemusclemin" type="float" min="0" max="100" default="0">
+			<description><![CDATA[i.e. "mmmmm" in f1]]></description>
+		</element>
+		<element name="odemusclespeed" type="float" min="0" max="10" default="1">
+			<description><![CDATA[Muscle state cannot change faster than the supplied value]]></description>
+		</element>
+		<element name="odeseed" type="integer" min="0" max="2">
+			<description><![CDATA[Affects collisions.
+- 'Truly random' is closest to the standard ODE operation. Use Math.seed to influence randomness in ODE collisions
+- 'Deterministic' automatically calculates random seed in each step based on the current simulation (world) state, which makes the simulation repeatable but more random than 'Fixed'
+- 'Fixed' is completely deterministic and does not depend on Math.seed. This might negatively affect ODE accuracy
+]]></description>
+		</element>
+		<element name="odeshape" type="integer" min="0" max="1"/>
+		<element name="odestep" type="float" min="0.001" max="1" default="0.05"/>
+		<element name="odewaterbuoy" type="float" min="0" max="2" default="1"/>
+		<element name="odewaterdrag" type="float" min="0.001" max="1" default="0.5"/>
+		<element name="rayIntersection" function="true" type="float">
+			<arguments>
+				<argument name="position x" type="float"/>
+				<argument name="position y" type="float"/>
+				<argument name="position z" type="float"/>
+				<argument name="direction x" type="float"/>
+				<argument name="direction y" type="float"/>
+				<argument name="direction z" type="float"/>
+				<argument name="max distance" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Orient" context="Global context">
+<description><![CDATA[3D orientation, stored as 3x3 matrix.]]></description>
+		<element name="x" type="XYZ"/>
+		<element name="xx" type="float"/>
+		<element name="xy" type="float"/>
+		<element name="xz" type="float"/>
+		<element name="y" type="XYZ"/>
+		<element name="yx" type="float"/>
+		<element name="yy" type="float"/>
+		<element name="yz" type="float"/>
+		<element name="z" type="XYZ"/>
+		<element name="zx" type="float"/>
+		<element name="zy" type="float"/>
+		<element name="zz" type="float"/>
+		<element name="between2" function="true" type="void">
+			<arguments>
+				<argument type="Orient"/>
+				<argument type="Orient"/>
+				<argument name="amount" type="float"/>
+			</arguments>
+		</element>
+		<element name="betweenOV" function="true" type="void">
+			<arguments>
+				<argument type="Orient"/>
+				<argument type="XYZ"/>
+				<argument name="amount" type="float"/>
+			</arguments>
+		</element>
+		<element name="clone" function="true" type="Orient"><arguments/></element>
+		<element name="localToWorld" function="true">
+			<arguments>
+				<argument name="point" type="XYZ"/>
+				<argument name="center" type="XYZ"/>
+			</arguments>
+		</element>
+		<element name="lookAt" function="true" type="void">
+			<arguments>
+				<argument name="direction" type="XYZ"/>
+				<argument name="up" type="XYZ"/>
+			</arguments>
+		</element>
+		<element name="new" function="true" type="Orient">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="normalize" function="true" type="void"><arguments/></element>
+		<element name="reset" function="true" type="void"><arguments/></element>
+		<element name="revRotate" function="true" type="void">
+			<arguments>
+				<argument type="Orient"/>
+			</arguments>
+		</element>
+		<element name="rotate" function="true" type="void">
+			<arguments>
+				<argument type="Orient"/>
+			</arguments>
+		</element>
+		<element name="rotate3" function="true" type="void">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="set" function="true" type="void">
+			<arguments>
+				<argument type="Orient"/>
+			</arguments>
+		</element>
+		<element name="worldToLocal" function="true">
+			<arguments>
+				<argument name="point" type="XYZ"/>
+				<argument name="center" type="XYZ"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Part" context="Global context">
+		<element name="as" type="float" min="0" max="1" default="0.25"/>
+		<element name="dn" type="float" min="0.2" max="5" default="1"/>
+		<element name="fr" type="float" min="0" max="4" default="0.4"/>
+		<element name="i" type="string"/>
+		<element name="ing" type="float" min="0" max="1" default="0.25"/>
+		<element name="m" type="float" min="0.1" max="999" default="1"/>
+		<element name="rx" type="float"/>
+		<element name="ry" type="float"/>
+		<element name="rz" type="float"/>
+		<element name="s" type="float" min="0.1" max="10" default="1"/>
+		<element name="Vstyle" type="string"/>
+		<element name="x" type="float"/>
+		<element name="y" type="float"/>
+		<element name="z" type="float"/>
+	</type>
+	<type name="Population" context="Global context">
+<description><![CDATA[A set of Creature objects, sharing some high level simulation properties (performance calculation, NN simulation, collision detection, event handling). The groups usually have different roles in the experiment (Creatures groups and Food group in standard.expdef).]]></description>
+		<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="colmask" type="integer" min="0" max="65535" default="0">
+			<description><![CDATA[DEPRECATED. You should use selfmask and othermask (these masks are also much easier to understand than the old colmask field).]]></description>
+		</element>
+		<element name="death" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Do creatures die when no energy?]]></description>
+		</element>
+		<element name="em_dyn" type="float" min="0" max="1" default="0">
+			<description><![CDATA[Energy requirements for a muscle
+moving a stick]]></description>
+		</element>
+		<element name="em_stat" type="float" min="0" max="1" default="0">
+			<description><![CDATA[Energy requirements for a muscle
+resisting an external force]]></description>
+		</element>
+		<element name="en_assim" type="float" min="0" max="1" default="0">
+			<description><![CDATA[Maximal energy gain produced by a vertical specialized stick.
+Horizontal specialized sticks get half of this value.]]></description>
+		</element>
+		<element name="enableperf" 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="energy" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[If turned off, creature's energy will be constant.]]></description>
+		</element>
+		<element name="index" type="integer"/>
+		<element name="killnostable" type="integer" min="0" max="10000000" default="1000000">
+			<description><![CDATA[Creatures that fail to stabilize after the specified waiting period (e.g. because they are continuously rolling) will be killed. 0 disables this feature.]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="nnsim" 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="othermask" type="integer" min="0" max="2147483647" default="0">
+			<description><![CDATA[See selfmask.]]></description>
+		</element>
+		<element name="perfperiod" type="integer" min="0" max="1000000" default="100">
+			<description><![CDATA[Defines how often onUpdate() events are called. Also used to compute partial performance of creatures (distance, speed, etc.) and to determine stabilization.]]></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>
+		<element name="selfmask" type="integer" min="0" max="2147483647" default="0">
+			<description><![CDATA[Collisions between objects can be handled in two ways:
+ - standard 'mechanical' collision (simple 'rebound' effect)
+ - special script handler (On[GROUPNAME]Collision function)
+
+In the script handler function, use the Collision object to access the two colliding parts of two creatures.
+The first part in the Collision object (i.e. Collision.Creature1) always concerns the creature that belongs to [GROUPNAME].
+The handler is called once for each creature that collides with the creature from [GROUPNAME].
+
+Collision masks determine which one will be used (none and both are also possible). On each collision, selfmask and othermask of the colliding objects are logically ANDed. 16 lower bits (0xffff) enable the standard handler. 16 higher bits (0xffff0000) enable the custom handler. 
+Examples:
+
+1.With one group, all possible combinations of the collision handlers are as follows:
+  - ignore collisions (e.g. selfmask=othermask=0)
+  - use standard handling (e.g. selfmask=othermask=1)
+  - use custom handling (e.g. selfmask=othermask=0x10000)
+  - use standard and custom handling (e.g. selfmask=othermask=0x10001)
+
+2.Two groups yield more interesting cases. Let us consider the 'standard.expdef' setting:
+  Creatures: selfmask=0x10001, othermask=0x20001
+  Food colmask = selfmask=0x20002, othermask=0x10002
+There are three possible scenarios:
+- creature and creature: collision value = 0x10001 & 0x20001 = 1 -> Standard handling will be used (1 is one of the lower 16 bits)
+- food and food: collision value = 0x20002 & 0x10002 = 2 -> As above.
+- creature and food: collision value = (0x10001 & 0x10002) or (0x20002 & 0x20001) = 0x10000 or 0x20000 -> Custom handling will be used (higher 16 bits).
+]]></description>
+		</element>
+		<element name="size" type="integer"/>
+		<element name="stabilperiod" type="integer" min="0" max="1000000" default="100">
+			<description><![CDATA["Performance sampling period" for the stabilization phase.]]></description>
+		</element>
+		<element name="stabledist" type="float" min="0" max="1" default="0.01">
+			<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="createFromGeno" function="true" type="Creature">
+			<description><![CDATA[Uses the supplied Geno object]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="createFromGenotype" function="true" type="Creature">
+			<description><![CDATA[Uses the selected Genotype object]]></description>
+<arguments/></element>
+		<element name="createFromString" function="true" type="Creature">
+			<description><![CDATA[Uses the supplied string argument]]></description>
+			<arguments>
+				<argument name="genotype" type="string"/>
+			</arguments>
+		</element>
+		<element name="delete" function="true" type="void">
+			<description><![CDATA[delete creature]]></description>
+			<arguments>
+				<argument name="creature index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="findCreatureAt" function="true" type="Creature">
+			<arguments>
+				<argument name="point" type="Vector"/>
+				<argument name="vector" type="Vector"/>
+			</arguments>
+		</element>
+		<element name="findUID" function="true" type="integer">
+			<arguments>
+				<argument name="uid" type="string"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="Creature">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="kill" function="true" type="void">
+			<description><![CDATA[kill creature]]></description>
+			<arguments>
+				<argument name="creature index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="senseCreaturesProperty" function="true" type="float">
+			<description><![CDATA[arguments:
+ - x,y,z (sensor position)
+ - property (name, name[index] or Class:id). name[index] can be used for Vector objects inside the user fields, eg "user2[10]"
+ - exclude (creature object)
+works like a smell sensor for a given property (for all creatures in this group except "exclude").
+The following function reproduces the "classic" framsticks "S" sensor:
+function smellReceptorValue(x,y,z,exclude)
+{
+var i,s=0; for(i=0;i<Populations.size;i++)
+	s+=Populations[0].senseCreaturesProperty(x,y,z,"energy",exclude);
+return s;
+}]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+				<argument name="propertyname" type="string"/>
+				<argument name="exclude" type="Creature"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Populations" context="Global context">
+<description><![CDATA[Manages all Creature objects in the experiment, organized in one or more groups. See also: Creature, Population.]]></description>
+		<element name="creature" type="integer"/>
+		<element name="group" type="integer">
+			<description><![CDATA[Index of the currently selected group (Population).]]></description>
+		</element>
+		<element name="size" type="integer"/>
+		<element name="addGroup" function="true" type="void">
+			<description><![CDATA[Adds a new population.]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true" type="void">
+			<description><![CDATA[Removes all populations except the first one.]]></description>
+<arguments/></element>
+		<element name="clearGroup" function="true" type="void">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="creatBBCollisions" function="true" type="integer">
+			<description><![CDATA[Checks approximate collisions for the selected creature.
+Returns the collision mask calculated as in the regular simulation. The argument is the collision mask substituted for the selected creature (defaults to group colmask for 0).]]></description>
+			<arguments>
+				<argument name="mask" type="integer"/>
+			</arguments>
+		</element>
+		<element name="createFromGenotype" function="true" type="Creature">
+			<description><![CDATA[Uses the selected Genotype object.]]></description>
+<arguments/></element>
+		<element name="createFromString" function="true" type="Creature">
+			<description><![CDATA[Uses the supplied string argument.]]></description>
+			<arguments>
+				<argument name="genotype" type="string"/>
+			</arguments>
+		</element>
+		<element name="deleteGroup" function="true" type="void">
+			<description><![CDATA[Removes a population.]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="deleteSelected" function="true" type="void">
+			<description><![CDATA[Applies to the selected Creature.]]></description>
+<arguments/></element>
+		<element name="findCreatureAt" function="true" type="Creature">
+			<arguments>
+				<argument name="point" type="Vector"/>
+				<argument name="vector" type="Vector"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="Population">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="killSelected" function="true" type="void">
+			<description><![CDATA[Applies to the selected Creature.]]></description>
+<arguments/></element>
+	</type>
+	<type name="Ref" context="Global context">
+<description><![CDATA[Reference objects. Useful for returning things from functions.
+
+Example:
+var x=111;
+square(&x);// '&' creates the Reference object
+Simulator.print(x);//x is now 12321
+
+function square(r)
+{r.value=r.value*r.value;}
+//square receives the Reference objects and changes its 'value' field]]></description>
+		<element name="toString" type="string"/>
+		<element name="value" type="untyped"/>
+		<element name="copyFrom" function="true" type="void">
+			<description><![CDATA[make the reference point to the same target,]]></description>
+			<arguments>
+				<argument type="Ref"/>
+			</arguments>
+		</element>
+		<element name="newO" function="true">
+			<description><![CDATA[(for internal use only) use &variablename to create Ref objects.]]></description>
+		</element>
+		<element name="newS" function="true">
+			<description><![CDATA[(for internal use only) use &variablename to create Ref objects.]]></description>
+		</element>
+	</type>
+	<type name="Shapes" context="Global context">
+<description><![CDATA[This object defines appearance of the elements of creatures (applies to the 'wireframe' display mode). Default shape definitions make food's "p:" look like a sphere, and manipulator's "p:" look like a robot hand. The model's Vstyle property is the name of the shape. Developers of experiment definitions can introduce new Vstyle(s) for their expdef and provide appropriate shape definitions by calling Shapes.set(...) in the onExpDefLoad() function.]]></description>
+		<element name="clear" function="true" type="void"><arguments/></element>
+		<element name="set" function="true" type="void">
+			<description><![CDATA[Arguments:
+
+- "id" - can be
+  "1p_STYLENAME": affects a single-Part creature (without Joints)
+  "p_STYLENAME": affects all normal Parts
+  "j_STYLENAME": affects Joints
+     (STYLENAME corresponds to the Model.Vstyle value, and it can be empty).
+
+- "definition" is a genotype describing the object shape
+
+- "color" can be 0xRRGGBB or one of the special values: -3 = default creature color, -4 = default food color, -5 = default manipulator color
+
+Examples:
+Shapes.set("j_predator","X",0xff0000);//make all predators (i.e. creatures with Vstyle=predator) red
+Shapes.set("1p_food","...some...genotype...",-4);//change food appearance
+Shapes.set("p_","//0\np:0,0,0\np:-0.1,0,0\np:0.1,0,0\np:0,-0.1,0\np:0,0.1,0\np:0,0,-0.1\np:0,0,0.1\nj:0,1\nj:0,2\nj:0,3\nj:0,4\nj:0,5\nj:0,6\n",0);//make Parts' orientation axes visible]]></description>
+			<arguments>
+				<argument name="id" type="string"/>
+				<argument name="definition" type="string"/>
+				<argument name="color" type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Signal" context="Global context">
+<description><![CDATA[Signals broadcast information in a channel (being an abstract communication medium that could be imagined as sound, smell, vision or anything else). There are no sender-receiver associations, although the receiving party can filter out signals (two standard filtering methods are: physical neighborhood and one-dimensional attribute called flavor). Signals attached to neurons and creatures (created in Creature.signals and Neuro.signals) automatically follow the owner's location. Environmental signals (in World.signals) are stationary.
+
+Receiving: 
+There are 2 kinds of data you can receive:
+1. aggregating functions (receive and receiveFilter) calculate the overall power of the received signal (based on the distance and the source power).
+2. receiveSet and receiveSingle fetch the individual Signal object(s) so it is possible to transmit something else than just a single number (by using Signal.value) and do more sophisticated processing.
+
+Creating: Use "add" in Creature.signals, Neuro.signals, or World.signals.]]></description>
+		<element name="channel" type="string">
+			<description><![CDATA[Channel name, readonly.]]></description>
+		</element>
+		<element name="flavor" type="float">
+			<description><![CDATA[Signal flavor is can be used to differentiate between signals in a single channel. ]]></description>
+		</element>
+		<element name="pos" type="XYZ">
+			<description><![CDATA[Signal position, readonly.]]></description>
+		</element>
+		<element name="power" type="float">
+			<description><![CDATA[Signal power affects the aggregated signal value returned from receive() and receiveFilter().]]></description>
+		</element>
+		<element name="value" type="untyped">
+			<description><![CDATA[Signal value can be any type. On the receiver side it is only available by accessing the individual Signal objects, i.e. after calling receiveSet() or receiveSingle(). The aggregating function receive() and receiveFilter() ignore this attribute.]]></description>
+		</element>
+		<element name="remove" function="true">
+			<description><![CDATA[Deletes the signal]]></description>
+		</element>
+	</type>
+	<type name="SignalView" context="Global context">
+		<element name="labels" type="string">
+			<description><![CDATA[The label formula should return text to be displayed over the signal source, presumably by reading some values from the supplied Signal object. It is especially useful for more sophisticated signal usage scenarios, when Signal.value keeps a reference to an object (the default signal label only shows <XXX Object at xxxxx> in such cases).
+
+Examples: (switch to "Automatic" mode to see labels, then remove the label formula and compare the effect)
+
+return "x";
+return "val="+Signal.value;
+return "power="+Signal.power;]]></description>
+		</element>
+		<element name="mode" type="integer" min="0" max="2">
+			<description><![CDATA["Automatic" labels all signal sources in all channels and shows the intensity map of the first channel. This is sufficient for many simple setups, but as the number of signals and channels grows, the display becomes cluttered. In such cases, the experiment definition can define "Custom" signal visualization tailored for the particular experiment.]]></description>
+		</element>
+		<element name="addMap" function="true" type="void">
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="color" type="integer"/>
+			</arguments>
+		</element>
+		<element name="addSignals" function="true" type="void">
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="color" type="integer"/>
+				<argument name="angle_x" type="integer"/>
+				<argument name="angle_y" type="integer"/>
+				<argument name="angle_z" type="integer"/>
+			</arguments>
+		</element>
+		<element name="addSignalsFilter" function="true" type="void">
+			<arguments>
+				<argument name="channel" type="string"/>
+				<argument name="color" type="integer"/>
+				<argument name="angle_x" type="integer"/>
+				<argument name="angle_y" type="integer"/>
+				<argument name="angle_z" type="integer"/>
+				<argument name="flavor" type="integer"/>
+				<argument name="filter" type="integer"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true">
+			<description><![CDATA[Removes custom display settings that might have been defined by various scripts (expdef or show).]]></description>
+		</element>
+	</type>
+	<type name="sim_params" context="Global context">
+<description><![CDATA[This object groups all simulator parameters so they can be loaded or saved with a single call (see scripts/standard_loadsave.inc). For other purposes please use specific objects, like Simulator, World, Populations, etc.]]></description>
+		<element name="autosaveperiod" type="integer" min="0" max="100000">
+			<description><![CDATA[Save simulation state once every n-th event
+(events are defined by the script. For 'standard.expdef' it is after each death).
+Save EXPT file first to initialize name for autosave files.]]></description>
+		</element>
+		<element name="bnoise_struct" type="float" min="0" max="10" default="0">
+			<description><![CDATA[When >0, body constructs of creatures (position of Parts) will be randomly disturbed when they are created.]]></description>
+		</element>
+		<element name="bnoise_vel" type="float" min="0" max="10" default="0">
+			<description><![CDATA[Random velocities will be applied to all body Parts (in MechaStick) or rigid segments (in ODE) of newly created creatures.]]></description>
+		</element>
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="createrr" type="integer" min="0" max="2" default="1"/>
+		<element name="creatwarnfail" type="integer" min="0" max="1">
+			<description><![CDATA[Creatures grown with warnings will not be simulated.]]></description>
+		</element>
+		<element name="expdef" type="string">
+			<description><![CDATA[Choose the experiment framework
+(in Windows GUI, confirm by pressing 'Apply')
+
+Stop the simulation before selecting another experiment definition.
+It is a good practice to initialize the experiment before running the simulation.]]></description>
+		</element>
+		<element name="expdef_info" type="string"/>
+		<element name="expdef_title" type="string"/>
+		<element name="f0_c_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_c_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_c_wei" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_rsf" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_stf" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_j_stm" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_n_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_n_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_n_prp" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_nodel_tag" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[You can tag elements using their 'i' field and the i="mi=d" tag.
+Mutations will not delete such elements.
+The i="mi=dm" combination is allowed.]]></description>
+		</element>
+		<element name="f0_nomod_tag" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[You can tag elements using their 'i' field and the i="mi=m" tag.
+Mutations will not modify properties of such elements.
+The i="mi=md" combination is allowed.]]></description>
+		</element>
+		<element name="f0_p_asm" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_del" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_frc" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_ing" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_mas" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_new" type="float" min="0" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_pos" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f0_p_swp" type="float" min="0" max="100" default="10">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f1_mut_exmod" type="string">
+			<description><![CDATA[Modifiers that will not be added nor deleted during mutation
+(all: RrLlAaCcFfMmSsIiQqWwEe)]]></description>
+		</element>
+		<element name="f1_nmConn" type="float" min="0" max="100" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f1_nmNeu" type="float" min="0" max="100" default="0.05">
+			<description><![CDATA[Adds a (connected) neuron or removes a neuron]]></description>
+		</element>
+		<element name="f1_nmProp" type="float" min="0" max="100" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f1_nmVal" type="float" min="0" max="100" default="0.05"/>
+		<element name="f1_nmWei" type="float" min="0" max="100" default="1"/>
+		<element name="f1_smComma" type="float" min="0" max="100" default="0.02"/>
+		<element name="f1_smJunct" 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: RrLlAaCcFfMmSsIiQqWwEe]]></description>
+		</element>
+		<element name="f1_smX" type="float" min="0" max="100" default="0.05"/>
+		<element name="f1_xo_propor" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Cross over (exchange) corresponding segments of the two parent genotypes?
+
+f1 uses a two-point crossing over.
+If this option is turned on, cut points will be selected proportionally to neural genes.
+Thus, if both parents have the same number of neurons, then this will be preserved in their children.]]></description>
+		</element>
+		<element name="f2_mutAddOper" type="float" min="0" max="1" default="0.4">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutConnElem" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutDelOper" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutHandleOper" type="float" min="0" max="1" default="0.3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutJointElem" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutNeuroElem" type="float" min="0" max="1" default="0.33">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f2_mutPropOper" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDelIns" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDelInsLength" type="integer" min="1" max="100" default="5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDelInsPerChar" type="float" min="0" max="1" default="0.05">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutDuplication" type="float" min="0" max="1" default="0.05">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutSubstitution" type="float" min="0" max="1" default="0.6">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutSubstPerChar" type="float" min="0" max="1" default="0.1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_mutTranslocation" type="float" min="0" max="1" default="0.15">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_xovCrossingOver" type="float" min="0" max="1" default="0.2">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f3_xovGeneTransfer" type="float" min="0" max="1" default="0.8">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="f4_mut_add" type="float" min="0" max="100" default="50">
+			<description><![CDATA[mutation: probability of adding a node]]></description>
+		</element>
+		<element name="f4_mut_add_conn" type="float" min="0" max="100" default="15">
+			<description><![CDATA[add node mutation: probability of adding a neural connection]]></description>
+		</element>
+		<element name="f4_mut_add_div" type="float" min="0" max="100" default="20">
+			<description><![CDATA[add node mutation: probability of adding a division]]></description>
+		</element>
+		<element name="f4_mut_add_neupar" type="float" min="0" max="100" default="5">
+			<description><![CDATA[add node mutation: probability of adding a neuron property/modifier]]></description>
+		</element>
+		<element name="f4_mut_add_rep" type="float" min="0" max="100" default="10">
+			<description><![CDATA[add node mutation: probability of adding a repetition]]></description>
+		</element>
+		<element name="f4_mut_add_simp" type="float" min="0" max="100" default="50">
+			<description><![CDATA[add node mutation: probability of adding a random, simple gene]]></description>
+		</element>
+		<element name="f4_mut_del" type="float" min="0" max="100" default="20">
+			<description><![CDATA[mutation: probability of deleting a node]]></description>
+		</element>
+		<element name="f4_mut_mod" type="float" min="0" max="100" default="30">
+			<description><![CDATA[mutation: probability of changing a node]]></description>
+		</element>
+		<element name="filecomm" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Display comments encountered in opened files]]></description>
+		</element>
+		<element name="gen_extmutinfo" type="integer" min="0" max="2" default="0">
+			<description><![CDATA[If active, information about employed mutation method will be stored in the 'info' field of each mutated genotype.]]></description>
+		</element>
+		<element name="gen_hilite" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Use colors for genes?
+(slows down viewing/editing of huge genotypes)]]></description>
+		</element>
+		<element name="gen_hist" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[Required for phylogenetic analysis]]></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="genolib" type="GenePools"/>
+		<element name="genoper_f0" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f1" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f2" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f3" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="genoper_f4" type="integer" min="0" max="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="groupchk" type="integer" min="0" max="1"/>
+		<element name="importchk" type="integer" min="0" max="1"/>
+		<element name="livelib" type="Populations"/>
+		<element name="loadchk" type="integer" min="0" max="1"/>
+		<element name="maxjoint" type="float" min="0" max="100" default="2"/>
+		<element name="minjoint" type="float" min="0" max="100" default="0"/>
+		<element name="neuadd_N" type="integer" min="0" max="1">
+			<description><![CDATA[Standard neuron
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="neuadd_Nu" type="integer" min="0" max="1">
+			<description><![CDATA[Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.
+Having 0 as one of the saturation states should help in "gate circuits", where input signal is passed through or blocked depending on the other singal.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="neuadd_G" type="integer" min="0" max="1">
+			<description><![CDATA[Equilibrium sensor.
+0=the stick is horizontal
++1/-1=the stick is vertical
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Joint
+]]></description>
+		</element>
+		<element name="neuadd_T" type="integer" min="0" max="1">
+			<description><![CDATA[Touch sensor.
+-1=no contact
+0=just touching
+>0=pressing, value depends on the force applied
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   Range (r) float 0..1]]></description>
+		</element>
+		<element name="neuadd_S" type="integer" min="0" max="1">
+			<description><![CDATA[Smell sensor. Aggregated "smell of energy" experienced from all energy objects (creatures and food pieces).
+Close objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="neuadd_*" type="integer" min="0" max="1">
+			<description><![CDATA[Constant value
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_|" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1
+   bending range (r) float 0..1]]></description>
+		</element>
+		<element name="neuadd_@" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="neuadd_D" type="integer" min="0" max="1">
+			<description><![CDATA[Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_Fuzzy" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of fuzzy sets (ns) integer
+   number of rules (nr) integer
+   fuzzy sets (fs) string
+   fuzzy rules (fr) string]]></description>
+		</element>
+		<element name="neuadd_VEye" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   uses single input
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   target.x (tx) float
+   target.y (ty) float
+   target.z (tz) float
+   target shape (ts) string
+   perspective (p) float 0.1..10
+   scale (s) float 0.1..100
+   show hidden lines (h) integer 0..1
+   output lines count (each line needs four channels) (o) integer 0..99
+   debug (d) integer 0..1]]></description>
+		</element>
+		<element name="neuadd_VMotor" type="integer" min="0" max="1">
+			<description><![CDATA[Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of basic features (noIF) integer
+   number of degrees of freedom (noDim) integer
+   parameters (params) string]]></description>
+		</element>
+		<element name="neuadd_Sti" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="neuadd_LMu" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="neuadd_Water" type="integer" min="0" max="1">
+			<description><![CDATA[Output signal:
+0=on or above water surface
+1=under water (deeper than 1)
+0..1=in the transient area just below water surface
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="neuadd_Energy" type="integer" min="0" max="1">
+			<description><![CDATA[The current energy level divided by the initial energy level.
+Usually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_Ch" type="integer" min="0" max="1">
+			<description><![CDATA[Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_ChMux" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)
+
+Characteristics:
+   uses 2 inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_ChSel" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs a single channel (selected by the "ch" parameter) from multichannel input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   channel (ch) integer]]></description>
+		</element>
+		<element name="neuadd_Rnd" type="integer" min="0" max="1">
+			<description><![CDATA[Generates random noise (subsequent random values in the range of -1..+1)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="neuadd_Sin" type="integer" min="0" max="1">
+			<description><![CDATA[Output frequency = f0+input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   base frequency (f0) float -1..1
+   time (t) float 0..6.28319]]></description>
+		</element>
+		<element name="ncl_N" type="integer" min="0" max="1">
+			<description><![CDATA[Standard neuron
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="ncl_Nu" type="integer" min="0" max="1">
+			<description><![CDATA[Works like standard neuron (N) but the output value is scaled to 0...+1 instead of -1...+1.
+Having 0 as one of the saturation states should help in "gate circuits", where input signal is passed through or blocked depending on the other singal.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   Inertia (in) float 0..1
+   Force (fo) float 0..999
+   Sigmoid (si) float -99999..99999
+   State (s) float -1..1]]></description>
+		</element>
+		<element name="ncl_G" type="integer" min="0" max="1">
+			<description><![CDATA[Equilibrium sensor.
+0=the stick is horizontal
++1/-1=the stick is vertical
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Joint
+]]></description>
+		</element>
+		<element name="ncl_T" type="integer" min="0" max="1">
+			<description><![CDATA[Touch sensor.
+-1=no contact
+0=just touching
+>0=pressing, value depends on the force applied
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   Range (r) float 0..1]]></description>
+		</element>
+		<element name="ncl_S" type="integer" min="0" max="1">
+			<description><![CDATA[Smell sensor. Aggregated "smell of energy" experienced from all energy objects (creatures and food pieces).
+Close objects have bigger influence than the distant ones: for each energy source, its partial feeling is proportional to its energy/(distance^2)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="ncl_*" type="integer" min="0" max="1">
+			<description><![CDATA[Constant value
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_|" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1
+   bending range (r) float 0..1]]></description>
+		</element>
+		<element name="ncl_@" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="ncl_D" type="integer" min="0" max="1">
+			<description><![CDATA[Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_Fuzzy" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of fuzzy sets (ns) integer
+   number of rules (nr) integer
+   fuzzy sets (fs) string
+   fuzzy rules (fr) string]]></description>
+		</element>
+		<element name="ncl_VEye" type="integer" min="0" max="1">
+			<description><![CDATA[Refer to publications to learn more about this neuron.
+
+Characteristics:
+   uses single input
+   provides output value
+   should be located on a Part
+
+
+Properties:
+   target.x (tx) float
+   target.y (ty) float
+   target.z (tz) float
+   target shape (ts) string
+   perspective (p) float 0.1..10
+   scale (s) float 0.1..100
+   show hidden lines (h) integer 0..1
+   output lines count (each line needs four channels) (o) integer 0..99
+   debug (d) integer 0..1]]></description>
+		</element>
+		<element name="ncl_VMotor" type="integer" min="0" max="1">
+			<description><![CDATA[Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+
+
+Properties:
+   number of basic features (noIF) integer
+   number of degrees of freedom (noDim) integer
+   parameters (params) string]]></description>
+		</element>
+		<element name="ncl_Sti" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="ncl_LMu" type="integer" min="0" max="1">
+			<description><![CDATA[Characteristics:
+   uses single input
+   does not provide output value
+   should be located on a Joint
+
+
+Properties:
+   power (p) float 0.01..1]]></description>
+		</element>
+		<element name="ncl_Water" type="integer" min="0" max="1">
+			<description><![CDATA[Output signal:
+0=on or above water surface
+1=under water (deeper than 1)
+0..1=in the transient area just below water surface
+
+Characteristics:
+   does not use inputs
+   provides output value
+   should be located on a Part
+]]></description>
+		</element>
+		<element name="ncl_Energy" type="integer" min="0" max="1">
+			<description><![CDATA[The current energy level divided by the initial energy level.
+Usually falls from initial 1.0 down to 0.0 and then the creature dies. It can rise above 1.0 if enough food is ingested
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_Ch" type="integer" min="0" max="1">
+			<description><![CDATA[Combines all input signals into a single multichannel output; Note: ChSel and ChMux are the only neurons which support multiple channels. Other neurons discard everything except the first channel.
+
+Characteristics:
+   supports any number of inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_ChMux" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs the selected channel from the second (multichannel) input. The first input is used as the selector value (-1=select first channel, .., 1=last channel)
+
+Characteristics:
+   uses 2 inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_ChSel" type="integer" min="0" max="1">
+			<description><![CDATA[Outputs a single channel (selected by the "ch" parameter) from multichannel input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   channel (ch) integer]]></description>
+		</element>
+		<element name="ncl_Rnd" type="integer" min="0" max="1">
+			<description><![CDATA[Generates random noise (subsequent random values in the range of -1..+1)
+
+Characteristics:
+   does not use inputs
+   provides output value
+   does not require location in body
+]]></description>
+		</element>
+		<element name="ncl_Sin" type="integer" min="0" max="1">
+			<description><![CDATA[Output frequency = f0+input
+
+Characteristics:
+   uses single input
+   provides output value
+   does not require location in body
+
+
+Properties:
+   base frequency (f0) float -1..1
+   time (t) float 0..6.28319]]></description>
+		</element>
+		<element name="nnspeed" type="float" min="0" max="1000" default="1">
+			<description><![CDATA[Number of neural network simulation steps in each physics simulation step]]></description>
+		</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>
+		</element>
+		<element name="odecol2bounce" type="float" min="0" max="1" default="0.1"/>
+		<element name="odecol2bouncevel" type="float" min="0" max="1" default="0.01"/>
+		<element name="odecol2mumax" type="float" min="0" max="10" default="1">
+			<description><![CDATA[Mu coefficient for Parts with maximal friction (i.e. "FFFFF" in f1)]]></description>
+		</element>
+		<element name="odecol2mumin" type="float" min="0" max="10" default="0.1">
+			<description><![CDATA[Mu coefficient for Parts with minimal friction (i.e. "fffff" in f1)]]></description>
+		</element>
+		<element name="odecol2softcfm" type="float" min="0" max="1" default="0"/>
+		<element name="odecolbounce" type="float" min="0" max="1" default="0.1"/>
+		<element name="odecolbouncevel" type="float" min="0" max="1" default="0.01"/>
+		<element name="odecolmumax" type="float" min="0" max="10" default="5">
+			<description><![CDATA[Mu coefficient for Parts with maximal friction (i.e. "FFFFF" in f1)]]></description>
+		</element>
+		<element name="odecolmumin" type="float" min="0" max="10" default="0.1">
+			<description><![CDATA[Mu coefficient for Parts with minimal friction (i.e. "fffff" in f1)]]></description>
+		</element>
+		<element name="odecolsoftcfm" type="float" min="0" max="1" default="0"/>
+		<element name="odemusclemax" type="float" min="0" max="100" default="10">
+			<description><![CDATA[i.e. "MMMMM" if f1]]></description>
+		</element>
+		<element name="odemusclemin" type="float" min="0" max="100" default="0">
+			<description><![CDATA[i.e. "mmmmm" in f1]]></description>
+		</element>
+		<element name="odemusclespeed" type="float" min="0" max="10" default="1">
+			<description><![CDATA[Muscle state cannot change faster than the supplied value]]></description>
+		</element>
+		<element name="odeseed" type="integer" min="0" max="2">
+			<description><![CDATA[Affects collisions.
+- 'Truly random' is closest to the standard ODE operation. Use Math.seed to influence randomness in ODE collisions
+- 'Deterministic' automatically calculates random seed in each step based on the current simulation (world) state, which makes the simulation repeatable but more random than 'Fixed'
+- 'Fixed' is completely deterministic and does not depend on Math.seed. This might negatively affect ODE accuracy
+]]></description>
+		</element>
+		<element name="odeshape" type="integer" min="0" max="1"/>
+		<element name="odestep" type="float" min="0.001" max="1" default="0.05"/>
+		<element name="odewaterbuoy" type="float" min="0" max="2" default="1"/>
+		<element name="odewaterdrag" type="float" min="0.001" max="1" default="0.5"/>
+		<element name="overwrite" type="integer" min="0" max="1">
+			<description><![CDATA[Overwite existing files or create their backups]]></description>
+		</element>
+		<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 0 for deterministic initialization.]]></description>
+		</element>
+		<element name="resetonexpdef" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[If turned on: when a new experiment definition is selected, default values are loaded for most of the simulator parameters, and gene pools and populations are cleared.
+When turned off: parameters from previous experiment definition will remain.]]></description>
+		</element>
+		<element name="running" type="integer" min="0" max="1">
+			<description><![CDATA[for synchronizing the user interface state]]></description>
+		</element>
+		<element name="signals" type="WorldSignals"/>
+		<element name="simil_method" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_neuro" type="float" min="0" max="100" default="0.5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_partdeg" type="float" min="0" max="100" default="1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_parts" type="float" min="0" max="100" default="0">
+			<description><![CDATA[Differing number of parts is also handled by the 'part degree' similarity component.]]></description>
+		</element>
+		<element name="simspeed" type="integer">
+			<description><![CDATA[steps/second]]></description>
+		</element>
+		<element name="simtype" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[MechaStick is a fast and simple primary Framsticks simulation engine.
+ODE is Open Dynamics Engine by Russel Smith et al.
+
+NOTE: switching between simulation engines causes removal of all objects in the world (e.g. creatures).]]></description>
+		</element>
+		<element name="symAlphaSteps" type="integer" min="2" max="50" default="20">
+			<description><![CDATA[Default number of samples per full angle (#1)]]></description>
+		</element>
+		<element name="symBetaSteps" type="integer" min="2" max="50" default="20">
+			<description><![CDATA[Default number of samples per full angle (#2)]]></description>
+		</element>
+		<element name="symPosSteps" type="integer" min="2" max="50" default="10">
+			<description><![CDATA[Default number of samples per stick length]]></description>
+		</element>
+		<element name="symResultA" type="float"/>
+		<element name="symResultB" type="float"/>
+		<element name="symResultC" type="float"/>
+		<element name="symResultD" type="float"/>
+		<element name="time" type="integer"/>
+		<element name="touchrange" type="float" min="0" max="100" default="1"/>
+		<element name="usercode" type="string">
+			<description><![CDATA[This script overrides the experiment definition]]></description>
+		</element>
+		<element name="vmdebug" type="integer" min="0" max="1"/>
+		<element name="world" type="World"/>
+		<element name="wrldbnd" type="integer" min="0" max="2" default="1"/>
+		<element name="wrldg" type="float" min="0" max="10" default="1">
+			<description><![CDATA[You can adjust gravity for your experiments.
+The "official" setting used to evaluate and compare creatures is 1.]]></description>
+		</element>
+		<element name="wrldmap" type="string">
+			<description><![CDATA[Description of the world (Type: Blocks or Heighfield). Enter
+   r <sizex> <sizey> [seed]
+to generate a random landscape, or
+   m <sizex> <sizey> digits
+   M <sizex> <sizey> numbers
+to provide height values.
+
+See also the WorldMap object.]]></description>
+		</element>
+		<element name="wrldsiz" type="float" min="10" max="1000" default="20">
+			<description><![CDATA[Side length of the world]]></description>
+		</element>
+		<element name="wrldtyp" type="integer" min="0" max="2" default="0"/>
+		<element name="wrldwat" type="float" min="-20" max="30" default="-1"/>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="beep" function="true" type="void">
+			<description><![CDATA[Plays a default system sound]]></description>
+<arguments/></element>
+		<element name="calculateSymmetry" function="true" type="float">
+			<description><![CDATA[Returns bilateral symmetry (0.0 .. 1.0) for a given Model using default precision parameters (symPosSteps,symAlphaSteps,symBetaSteps). Returns the symmetry plane, too (sets symResultA,B,C,D).
+Note: may take a long time for large creatures.]]></description>
+			<arguments>
+				<argument name="model" type="Model"/>
+			</arguments>
+		</element>
+		<element name="calculateSymmetry2" function="true" type="float">
+			<description><![CDATA[Returns bilateral symmetry (0.0 .. 1.0) for a given Model using specified precision parameters. Returns the symmetry plane, too (sets symResultA,B,C,D).
+Note: may take a long time for large creatures.]]></description>
+			<arguments>
+				<argument name="model" type="Model"/>
+				<argument name="posSteps" type="integer"/>
+				<argument name="alphaSteps" type="integer"/>
+				<argument name="betaSteps" type="integer"/>
+			</arguments>
+		</element>
+		<element name="calculateSymmetryForPlane" function="true" type="float">
+			<description><![CDATA[Returns bilateral symmetry (0.0 .. 1.0) for a given Model and given a specific plane defined by coefficients A, B, C, D.]]></description>
+			<arguments>
+				<argument name="model" type="Model"/>
+				<argument name="A" type="float"/>
+				<argument name="B" type="float"/>
+				<argument name="C" type="float"/>
+				<argument name="D" type="float"/>
+			</arguments>
+		</element>
+		<element name="checkpoint" function="true" type="void">
+			<description><![CDATA[This function was previously called "autosave".]]></description>
+<arguments/></element>
+		<element name="clear" function="true"/>
+		<element name="crossOver" function="true" type="Geno">
+			<description><![CDATA[returns crossed over genotype]]></description>
+			<arguments>
+				<argument type="Geno"/>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="eval" function="true" type="void">
+			<arguments>
+				<argument name="script expression" type="string"/>
+			</arguments>
+		</element>
+		<element name="evaluateDistance" function="true" type="float">
+			<description><![CDATA[calculate dissimilarity between two models created from Geno objects]]></description>
+			<arguments>
+				<argument type="Geno"/>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="export" function="true" type="void">
+			<description><![CDATA[Save some data to file. arguments:
+- filename
+- flags: composed of the following bit values:
+   1 - experiment (works like "save" and all other bits are ignored)
+   2 - genotypes
+   4 - simulator parameters
+   8 - simulator stats
+   16 - genepool settings
+   32 - population settings
+   64 - do autosave
+- selected genepool
+- selected population]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="options" type="integer"/>
+				<argument name="genepool" type="integer"/>
+				<argument name="population" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getSimplest" function="true" type="Geno">
+			<description><![CDATA[returns the simplest genotype for a given encoding (format). 0 means f0, 4 means f4, etc.]]></description>
+			<arguments>
+				<argument name="format" type="integer"/>
+			</arguments>
+		</element>
+		<element name="import" function="true" type="void">
+			<description><![CDATA[Load some data from file. The second optional argument selects what section(s) will be imported:
+ 1 - experiment (works like "load" and can reset the simulator state!)
+ 2 - genotypes
+ 4 - simulator parameters
+ 8 - genepool settings
+ 16 - population settings
+ 32 - new groups will be created for imported genepools and populations
+64 - allow switching to a different expdef while importing parameters (4)
+
+The standard behavior (without the second argument) is to import genotypes, parameters, and genepool and population settings (2+4+8+16). Note that "64" is not included by default, because the expdef change resets all simulator parameters, which contradicts the usual meaning of "import" in Framsticks ("add data", as opposed to "load" meaning "replace data"). Moreover, using the "64" option in scripts can be dengerous, especially all expdef and show scripts should always declare the proper expdef name in their header rather than change the expdef directly. Without the "64" option, it is always safe to "import" any file in a script regardless of the current simulator state.]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="options" type="integer"/>
+			</arguments>
+		</element>
+		<element name="init" function="true" type="void">
+			<description><![CDATA[Performs initialization procedures, like resetting counters, states, gene pools, etc.]]></description>
+<arguments/></element>
+		<element name="load" function="true" type="void">
+			<description><![CDATA[Load experiment file (calls onExpLoad() in the current experiment definition). This function is intended to replace the simulator state; the old state is cleared by automatically calling "resetToDefaults()" (only if "resetonexpdef" is enabled). Use "import" if you don't want to loose the old simulator state.]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+			</arguments>
+		</element>
+		<element name="loadexpdef" function="true" type="void"><arguments/></element>
+		<element name="loadNeurons" function="true" type="void">
+			<arguments>
+				<argument name="directory path" type="string"/>
+			</arguments>
+		</element>
+		<element name="message" function="true" type="void">
+			<description><![CDATA[The second argument can be:
+ -1 = debugging message
+ 0 = information
+ 1 = warning
+ 2 = error
+ 3 = critical error]]></description>
+			<arguments>
+				<argument name="text" type="string"/>
+				<argument name="level" type="integer"/>
+			</arguments>
+		</element>
+		<element name="mutate" function="true" type="Geno">
+			<description><![CDATA[returns mutated Geno object from supplied Geno]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="new" function="true" type="Simulator"><arguments/></element>
+		<element name="operReport" function="true" type="void">
+			<description><![CDATA[Show available genetic operators]]></description>
+<arguments/></element>
+		<element name="print" function="true" type="void">
+			<description><![CDATA[One argument: message to be printed]]></description>
+			<arguments>
+				<argument name="text" type="string"/>
+			</arguments>
+		</element>
+		<element name="rayIntersection" function="true" type="float">
+			<arguments>
+				<argument name="position x" type="float"/>
+				<argument name="position y" type="float"/>
+				<argument name="position z" type="float"/>
+				<argument name="direction x" type="float"/>
+				<argument name="direction y" type="float"/>
+				<argument name="direction z" type="float"/>
+				<argument name="max distance" type="float"/>
+			</arguments>
+		</element>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+		<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="save" function="true" type="void">
+			<description><![CDATA[Save experiment file (calls onExpSave() in the current experiment definition)]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+			</arguments>
+		</element>
+		<element name="sleep" function="true" type="void">
+			<description><![CDATA[Suspends the execution for a specified interval]]></description>
+			<arguments>
+				<argument name="milliseconds" type="integer"/>
+			</arguments>
+		</element>
+		<element name="sound" function="true" type="void">
+			<description><![CDATA[Generates a simple tone on the speaker]]></description>
+			<arguments>
+				<argument name="freqency in Hz" type="integer"/>
+				<argument name="length in milliseconds" type="integer"/>
+			</arguments>
+		</element>
+		<element name="start" function="true" type="void">
+			<description><![CDATA[called by the user interface]]></description>
+<arguments/></element>
+		<element name="step" function="true" type="void"><arguments/></element>
+		<element name="stop" function="true" type="void">
+			<description><![CDATA[the expdef script calls this to stop simulation]]></description>
+<arguments/></element>
+		<element name="toHTML" function="true" type="string">
+			<description><![CDATA[returns genotype expressed as colored HTML]]></description>
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="toHTMLshort" function="true" type="string">
+			<description><![CDATA[returns genotype (abbreviated if needed) expressed as colored HTML]]></description>
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="validate" function="true" type="Geno">
+			<description><![CDATA[returns validated (if possible) Geno object from supplied Geno]]></description>
+			<arguments>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+		<element name="wrldchg" function="true" type="void"><arguments/></element>
+	</type>
+	<type name="Similarity" context="Global context">
+		<element name="simil_method" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_neuro" type="float" min="0" max="100" default="0.5">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_partdeg" type="float" min="0" max="100" default="1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="simil_parts" type="float" min="0" max="100" default="0">
+			<description><![CDATA[Differing number of parts is also handled by the 'part degree' similarity component.]]></description>
+		</element>
+		<element name="evaluateDistance" function="true" type="float">
+			<description><![CDATA[calculate dissimilarity between two models created from Geno objects]]></description>
+			<arguments>
+				<argument type="Geno"/>
+				<argument type="Geno"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Simulator" context="Global context">
+<description><![CDATA[The Framsticks simulator.]]></description>
+		<element name="autosaveperiod" type="integer" min="0" max="100000">
+			<description><![CDATA[Save simulation state once every n-th event
+(events are defined by the script. For 'standard.expdef' it is after each death).
+Save EXPT file first to initialize name for autosave files.]]></description>
+		</element>
+		<element name="createrr" type="integer" min="0" max="2" default="1"/>
+		<element name="creatwarnfail" type="integer" min="0" max="1">
+			<description><![CDATA[Creatures grown with warnings will not be simulated.]]></description>
+		</element>
+		<element name="expdef" type="string">
+			<description><![CDATA[Choose the experiment framework
+(in Windows GUI, confirm by pressing 'Apply')
+
+Stop the simulation before selecting another experiment definition.
+It is a good practice to initialize the experiment before running the simulation.]]></description>
+		</element>
+		<element name="expdef_info" type="string"/>
+		<element name="expdef_title" type="string"/>
+		<element name="filecomm" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[Display comments encountered in opened files]]></description>
+		</element>
+		<element name="genolib" type="GenePools"/>
+		<element name="groupchk" type="integer" min="0" max="1"/>
+		<element name="importchk" type="integer" min="0" max="1"/>
+		<element name="livelib" type="Populations"/>
+		<element name="loadchk" type="integer" min="0" max="1"/>
+		<element name="overwrite" type="integer" min="0" max="1">
+			<description><![CDATA[Overwite existing files or create their backups]]></description>
+		</element>
+		<element name="resetonexpdef" type="integer" min="0" max="1" default="1">
+			<description><![CDATA[If turned on: when a new experiment definition is selected, default values are loaded for most of the simulator parameters, and gene pools and populations are cleared.
+When turned off: parameters from previous experiment definition will remain.]]></description>
+		</element>
+		<element name="running" type="integer" min="0" max="1">
+			<description><![CDATA[for synchronizing the user interface state]]></description>
+		</element>
+		<element name="simspeed" type="integer">
+			<description><![CDATA[steps/second]]></description>
+		</element>
+		<element name="time" type="integer"/>
+		<element name="usercode" type="string">
+			<description><![CDATA[This script overrides the experiment definition]]></description>
+		</element>
+		<element name="vmdebug" type="integer" min="0" max="1"/>
+		<element name="world" type="World"/>
+		<element name="beep" function="true" type="void">
+			<description><![CDATA[Plays a default system sound]]></description>
+<arguments/></element>
+		<element name="checkpoint" function="true" type="void">
+			<description><![CDATA[This function was previously called "autosave".]]></description>
+<arguments/></element>
+		<element name="eval" function="true" type="void">
+			<arguments>
+				<argument name="script expression" type="string"/>
+			</arguments>
+		</element>
+		<element name="export" function="true" type="void">
+			<description><![CDATA[Save some data to file. arguments:
+- filename
+- flags: composed of the following bit values:
+   1 - experiment (works like "save" and all other bits are ignored)
+   2 - genotypes
+   4 - simulator parameters
+   8 - simulator stats
+   16 - genepool settings
+   32 - population settings
+   64 - do autosave
+- selected genepool
+- selected population]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="options" type="integer"/>
+				<argument name="genepool" type="integer"/>
+				<argument name="population" type="integer"/>
+			</arguments>
+		</element>
+		<element name="import" function="true" type="void">
+			<description><![CDATA[Load some data from file. The second optional argument selects what section(s) will be imported:
+ 1 - experiment (works like "load" and can reset the simulator state!)
+ 2 - genotypes
+ 4 - simulator parameters
+ 8 - genepool settings
+ 16 - population settings
+ 32 - new groups will be created for imported genepools and populations
+64 - allow switching to a different expdef while importing parameters (4)
+
+The standard behavior (without the second argument) is to import genotypes, parameters, and genepool and population settings (2+4+8+16). Note that "64" is not included by default, because the expdef change resets all simulator parameters, which contradicts the usual meaning of "import" in Framsticks ("add data", as opposed to "load" meaning "replace data"). Moreover, using the "64" option in scripts can be dengerous, especially all expdef and show scripts should always declare the proper expdef name in their header rather than change the expdef directly. Without the "64" option, it is always safe to "import" any file in a script regardless of the current simulator state.]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+				<argument name="options" type="integer"/>
+			</arguments>
+		</element>
+		<element name="init" function="true" type="void">
+			<description><![CDATA[Performs initialization procedures, like resetting counters, states, gene pools, etc.]]></description>
+<arguments/></element>
+		<element name="load" function="true" type="void">
+			<description><![CDATA[Load experiment file (calls onExpLoad() in the current experiment definition). This function is intended to replace the simulator state; the old state is cleared by automatically calling "resetToDefaults()" (only if "resetonexpdef" is enabled). Use "import" if you don't want to loose the old simulator state.]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+			</arguments>
+		</element>
+		<element name="loadexpdef" function="true" type="void"><arguments/></element>
+		<element name="loadNeurons" function="true" type="void">
+			<arguments>
+				<argument name="directory path" type="string"/>
+			</arguments>
+		</element>
+		<element name="message" function="true" type="void">
+			<description><![CDATA[The second argument can be:
+ -1 = debugging message
+ 0 = information
+ 1 = warning
+ 2 = error
+ 3 = critical error]]></description>
+			<arguments>
+				<argument name="text" type="string"/>
+				<argument name="level" type="integer"/>
+			</arguments>
+		</element>
+		<element name="new" function="true" type="Simulator"><arguments/></element>
+		<element name="print" function="true" type="void">
+			<description><![CDATA[One argument: message to be printed]]></description>
+			<arguments>
+				<argument name="text" type="string"/>
+			</arguments>
+		</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="save" function="true" type="void">
+			<description><![CDATA[Save experiment file (calls onExpSave() in the current experiment definition)]]></description>
+			<arguments>
+				<argument name="filename" type="string"/>
+			</arguments>
+		</element>
+		<element name="sleep" function="true" type="void">
+			<description><![CDATA[Suspends the execution for a specified interval]]></description>
+			<arguments>
+				<argument name="milliseconds" type="integer"/>
+			</arguments>
+		</element>
+		<element name="sound" function="true" type="void">
+			<description><![CDATA[Generates a simple tone on the speaker]]></description>
+			<arguments>
+				<argument name="freqency in Hz" type="integer"/>
+				<argument name="length in milliseconds" type="integer"/>
+			</arguments>
+		</element>
+		<element name="start" function="true" type="void">
+			<description><![CDATA[called by the user interface]]></description>
+<arguments/></element>
+		<element name="step" function="true" type="void"><arguments/></element>
+		<element name="stop" function="true" type="void">
+			<description><![CDATA[the expdef script calls this to stop simulation]]></description>
+<arguments/></element>
+	</type>
+	<type name="stats" context="Global context">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="gen_count" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_mfailed" type="integer">
+			<description><![CDATA[couldn't be performed]]></description>
+		</element>
+		<element name="gen_minvalid" type="integer">
+			<description><![CDATA[couldn't be repaired]]></description>
+		</element>
+		<element name="gen_mutimpr" type="float">
+			<description><![CDATA[total cumulative mutation change]]></description>
+		</element>
+		<element name="gen_mvalid" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_mvalidated" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_xofailed" type="integer">
+			<description><![CDATA[couldn't be performed]]></description>
+		</element>
+		<element name="gen_xoimpr" type="float">
+			<description><![CDATA[total cumulative crossover change]]></description>
+		</element>
+		<element name="gen_xoinvalid" type="integer">
+			<description><![CDATA[couldn't be repaired]]></description>
+		</element>
+		<element name="gen_xovalid" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="gen_xovalidated" type="integer">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="st_avg_c_velocity" type="float"/>
+		<element name="st_avg_c_vertpos" type="float"/>
+		<element name="st_avg_c_vertvelocity" type="float"/>
+		<element name="st_avg_center_x" type="float"/>
+		<element name="st_avg_center_y" type="float"/>
+		<element name="st_avg_center_z" type="float"/>
+		<element name="st_avg_distance" type="float"/>
+		<element name="st_avg_fit" type="float"/>
+		<element name="st_avg_fit2" type="float"/>
+		<element name="st_avg_gnum" type="float"/>
+		<element name="st_avg_instances" type="float"/>
+		<element name="st_avg_lifespan" type="float"/>
+		<element name="st_avg_num" type="float"/>
+		<element name="st_avg_numconnections" type="float"/>
+		<element name="st_avg_numjoints" type="float"/>
+		<element name="st_avg_numneurons" type="float"/>
+		<element name="st_avg_numparts" type="float"/>
+		<element name="st_avg_pos_x" type="float"/>
+		<element name="st_avg_pos_y" type="float"/>
+		<element name="st_avg_pos_z" type="float"/>
+		<element name="st_avg_size_x" type="float"/>
+		<element name="st_avg_size_y" type="float"/>
+		<element name="st_avg_size_z" type="float"/>
+		<element name="st_avg_velocity" type="float"/>
+		<element name="st_avg_vertpos" type="float"/>
+		<element name="st_avg_vertvel" type="float"/>
+		<element name="st_count" type="integer"/>
+		<element name="st_max_c_velocity" type="float"/>
+		<element name="st_max_c_vertpos" type="float"/>
+		<element name="st_max_c_vertvelocity" type="float"/>
+		<element name="st_max_center_x" type="float"/>
+		<element name="st_max_center_y" type="float"/>
+		<element name="st_max_center_z" type="float"/>
+		<element name="st_max_distance" type="float"/>
+		<element name="st_max_fit" type="float"/>
+		<element name="st_max_fit2" type="float"/>
+		<element name="st_max_gnum" type="float"/>
+		<element name="st_max_instances" type="float"/>
+		<element name="st_max_lifespan" type="float"/>
+		<element name="st_max_num" type="float"/>
+		<element name="st_max_numconnections" type="float"/>
+		<element name="st_max_numjoints" type="float"/>
+		<element name="st_max_numneurons" type="float"/>
+		<element name="st_max_numparts" type="float"/>
+		<element name="st_max_pos_x" type="float"/>
+		<element name="st_max_pos_y" type="float"/>
+		<element name="st_max_pos_z" type="float"/>
+		<element name="st_max_size_x" type="float"/>
+		<element name="st_max_size_y" type="float"/>
+		<element name="st_max_size_z" type="float"/>
+		<element name="st_max_velocity" type="float"/>
+		<element name="st_max_vertpos" type="float"/>
+		<element name="st_max_vertvel" type="float"/>
+		<element name="st_min_c_velocity" type="float"/>
+		<element name="st_min_c_vertpos" type="float"/>
+		<element name="st_min_c_vertvelocity" type="float"/>
+		<element name="st_min_center_x" type="float"/>
+		<element name="st_min_center_y" type="float"/>
+		<element name="st_min_center_z" type="float"/>
+		<element name="st_min_distance" type="float"/>
+		<element name="st_min_fit" type="float"/>
+		<element name="st_min_fit2" type="float"/>
+		<element name="st_min_gnum" type="float"/>
+		<element name="st_min_instances" type="float"/>
+		<element name="st_min_lifespan" type="float"/>
+		<element name="st_min_num" type="float"/>
+		<element name="st_min_numconnections" type="float"/>
+		<element name="st_min_numjoints" type="float"/>
+		<element name="st_min_numneurons" type="float"/>
+		<element name="st_min_numparts" type="float"/>
+		<element name="st_min_pos_x" type="float"/>
+		<element name="st_min_pos_y" type="float"/>
+		<element name="st_min_pos_z" type="float"/>
+		<element name="st_min_size_x" type="float"/>
+		<element name="st_min_size_y" type="float"/>
+		<element name="st_min_size_z" type="float"/>
+		<element name="st_min_velocity" type="float"/>
+		<element name="st_min_vertpos" type="float"/>
+		<element name="st_min_vertvel" type="float"/>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="clrstats" function="true" type="void">
+			<description><![CDATA[]]></description>
+<arguments/></element>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+	</type>
+	<type name="String" context="Global context">
+<description><![CDATA[String functions library.]]></description>
+		<element name="char" function="true" type="string">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+		<element name="code" function="true" type="integer">
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="format" function="true" type="string">
+			<description><![CDATA[Works like the standard C library "sprintf()" but only one %-argument is accepted.
+Format string: %[-][+][0][width[.precision]]type
+ -: left adjust (default is right adjust)
+ +: place a sign (+ or -) before a number
+ 0: the value should be zero padded
+ width: minimum field width
+ precision: minimum number of decimal digits
+ type: d=decimal integer, x/X=hexadecimal integer, f/g=floating point number, e="scientific" style floating point, t=time
+Examples:
+ String.format("|%07.2f|",Math.pi) -> ="|0003.14|"
+ String.format("|%04x|",255) -> ="|00ff|"
+ String.format("|%7s|","text") -> ="|   text|"
+ String.format("|%-7d|",12345) -> ="|12345  |"
+ String.format("%t",Math.time) -> ="Sun Apr 29 19:22:02 2007"
+ String.format("%T",Math.time) -> ="2007-05-29 19:22:02"
+]]></description>
+			<arguments>
+				<argument name="format" type="string"/>
+				<argument name="value" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="indexOf" function="true" type="integer">
+			<description><![CDATA[String.indexOf("abcdef","cd") -> 2
+String.indexOf("abcdef","dc") -> -1
+]]></description>
+			<arguments>
+				<argument type="string"/>
+				<argument name="substring" type="string"/>
+			</arguments>
+		</element>
+		<element name="indexOfStart" function="true" type="integer">
+			<description><![CDATA[String.indexOfStart("abcdef","cd",1) -> 2
+String.indexOfStart("abcdef","cd",3) -> -1
+]]></description>
+			<arguments>
+				<argument type="string"/>
+				<argument name="substring" type="string"/>
+				<argument name="start index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="left" function="true" type="string">
+			<description><![CDATA[String.left("abcdef",3) -> ="abc"]]></description>
+			<arguments>
+				<argument type="string"/>
+				<argument name="number of characters" type="integer"/>
+			</arguments>
+		</element>
+		<element name="len" function="true" type="integer">
+			<description><![CDATA[String.len("abcdef") -> 6]]></description>
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="parseFloat" function="true" type="float">
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="parseInt" function="true" type="integer">
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="replace" function="true" type="string">
+			<description><![CDATA[String.replace("abcdef","cd","X") -> "abXef"]]></description>
+			<arguments>
+				<argument name="search" type="string"/>
+				<argument name="substitute" type="string"/>
+			</arguments>
+		</element>
+		<element name="right" function="true" type="string">
+			<description><![CDATA[String.right("abcdef",3) -> ="def"]]></description>
+			<arguments>
+				<argument type="string"/>
+				<argument name="number of characters" type="integer"/>
+			</arguments>
+		</element>
+		<element name="split" function="true" type="Vector">
+			<description><![CDATA[return the vector of substrings, cut at separator positions.
+subsequent separators give empty words: split("word1---word2-word3","-") -> ["word1","","","word2","word3"]]]></description>
+			<arguments>
+				<argument type="string"/>
+				<argument name="word separator" type="string"/>
+			</arguments>
+		</element>
+		<element name="split2" function="true" type="Vector">
+			<description><![CDATA[return the vector of substrings, cut at separator positions.
+subsequent separators are treated as one: split2("word1---word2-word3","-") -> ["word1","word2","word3"]]]></description>
+			<arguments>
+				<argument type="string"/>
+				<argument name="word separator" type="string"/>
+			</arguments>
+		</element>
+		<element name="substr" function="true" type="string">
+			<description><![CDATA[String.substr("abcdef",3,2) -> ="de"]]></description>
+			<arguments>
+				<argument type="string"/>
+				<argument name="first character" type="integer"/>
+				<argument name="number of characters" type="integer"/>
+			</arguments>
+		</element>
+		<element name="toLower" function="true" type="string">
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+		<element name="toUpper" function="true" type="string">
+			<arguments>
+				<argument type="string"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Symmetry" context="Global context">
+		<element name="symAlphaSteps" type="integer" min="2" max="50" default="20">
+			<description><![CDATA[Default number of samples per full angle (#1)]]></description>
+		</element>
+		<element name="symBetaSteps" type="integer" min="2" max="50" default="20">
+			<description><![CDATA[Default number of samples per full angle (#2)]]></description>
+		</element>
+		<element name="symPosSteps" type="integer" min="2" max="50" default="10">
+			<description><![CDATA[Default number of samples per stick length]]></description>
+		</element>
+		<element name="symResultA" type="float"/>
+		<element name="symResultB" type="float"/>
+		<element name="symResultC" type="float"/>
+		<element name="symResultD" type="float"/>
+		<element name="calculateSymmetry" function="true" type="float">
+			<description><![CDATA[Returns bilateral symmetry (0.0 .. 1.0) for a given Model using default precision parameters (symPosSteps,symAlphaSteps,symBetaSteps). Returns the symmetry plane, too (sets symResultA,B,C,D).
+Note: may take a long time for large creatures.]]></description>
+			<arguments>
+				<argument name="model" type="Model"/>
+			</arguments>
+		</element>
+		<element name="calculateSymmetry2" function="true" type="float">
+			<description><![CDATA[Returns bilateral symmetry (0.0 .. 1.0) for a given Model using specified precision parameters. Returns the symmetry plane, too (sets symResultA,B,C,D).
+Note: may take a long time for large creatures.]]></description>
+			<arguments>
+				<argument name="model" type="Model"/>
+				<argument name="posSteps" type="integer"/>
+				<argument name="alphaSteps" type="integer"/>
+				<argument name="betaSteps" type="integer"/>
+			</arguments>
+		</element>
+		<element name="calculateSymmetryForPlane" function="true" type="float">
+			<description><![CDATA[Returns bilateral symmetry (0.0 .. 1.0) for a given Model and given a specific plane defined by coefficients A, B, C, D.]]></description>
+			<arguments>
+				<argument name="model" type="Model"/>
+				<argument name="A" type="float"/>
+				<argument name="B" type="float"/>
+				<argument name="C" type="float"/>
+				<argument name="D" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="UserScripts" context="Global context">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+	</type>
+	<type name="Vector" context="Global context">
+<description><![CDATA[Vector is 1-dimensional array, indexed by integer value (starting from 0). Multidimensional arrays can be simulated by putting other Vector objects into the Vector.
+Example:
+var v=Vector.new();
+v.add(123); v.add("string");]]></description>
+		<element name="avg" type="float"/>
+		<element name="size" type="integer"/>
+		<element name="stdev" type="float">
+			<description><![CDATA[=sqrt(sum((element[i]-avg)^2)/(size-1)) which is estimated population std.dev. from sample std.dev.]]></description>
+		</element>
+		<element name="toString" type="string"/>
+		<element name="add" function="true" type="void">
+			<arguments>
+				<argument name="value" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true" type="void"><arguments/></element>
+		<element name="find" function="true" type="integer">
+			<description><![CDATA[returns the element index or -1 if not found]]></description>
+			<arguments>
+				<argument name="value" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="get" function="true" type="untyped">
+			<arguments>
+				<argument name="position" type="integer"/>
+			</arguments>
+		</element>
+		<element name="new" function="true" type="Vector"><arguments/></element>
+		<element name="remove" function="true" type="void">
+			<arguments>
+				<argument name="position" type="integer"/>
+			</arguments>
+		</element>
+		<element name="set" function="true" type="void">
+			<arguments>
+				<argument name="position" type="integer"/>
+				<argument name="value" type="untyped"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="World" context="Global context">
+<description><![CDATA[Environment properties.]]></description>
+		<element name="nnspeed" type="float" min="0" max="1000" default="1">
+			<description><![CDATA[Number of neural network simulation steps in each physics simulation step]]></description>
+		</element>
+		<element name="signals" type="WorldSignals"/>
+		<element name="simtype" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[MechaStick is a fast and simple primary Framsticks simulation engine.
+ODE is Open Dynamics Engine by Russel Smith et al.
+
+NOTE: switching between simulation engines causes removal of all objects in the world (e.g. creatures).]]></description>
+		</element>
+		<element name="wrldbnd" type="integer" min="0" max="2" default="1"/>
+		<element name="wrldg" type="float" min="0" max="10" default="1">
+			<description><![CDATA[You can adjust gravity for your experiments.
+The "official" setting used to evaluate and compare creatures is 1.]]></description>
+		</element>
+		<element name="wrldmap" type="string">
+			<description><![CDATA[Description of the world (Type: Blocks or Heighfield). Enter
+   r <sizex> <sizey> [seed]
+to generate a random landscape, or
+   m <sizex> <sizey> digits
+   M <sizex> <sizey> numbers
+to provide height values.
+
+See also the WorldMap object.]]></description>
+		</element>
+		<element name="wrldsiz" type="float" min="10" max="1000" default="20">
+			<description><![CDATA[Side length of the world]]></description>
+		</element>
+		<element name="wrldtyp" type="integer" min="0" max="2" default="0"/>
+		<element name="wrldwat" type="float" min="-20" max="30" default="-1"/>
+		<element name="wrldchg" function="true" type="void"><arguments/></element>
+	</type>
+	<type name="WorldMap" context="Global context">
+<description><![CDATA[Environment details for "Blocks" and "Heightfield" world type. The most important concept is a "Map", which is the array of Map elements. Internally, Maps have more elements than could be deduced from the user-supplied World.wrldsiz, as additional rows of element are added to provide smooth transitions to the flat surroundings.
+
+Blocks: x/ysize=World.wrldsiz+4 rows of blocks (from which only 2+World.wrldsiz rows are placed within the world boundaries)
+
+Smooth: x/ysize=World.wrldsiz+2 rows of vertices (creating World.wrldsiz+1 rows of triangles, everything within the world boundaries)
+]]></description>
+		<element name="xsize" type="integer"/>
+		<element name="ysize" type="integer"/>
+		<element name="getHeight" function="true" type="float">
+			<description><![CDATA[Height at any 2d coordinate]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+			</arguments>
+		</element>
+		<element name="getMap" function="true" type="Object">
+			<description><![CDATA[retrieve map cell object]]></description>
+			<arguments>
+				<argument name="x" type="integer"/>
+				<argument name="y" type="integer"/>
+			</arguments>
+		</element>
+		<element name="intersect" function="true" type="Vector">
+			<description><![CDATA[Calculate the intersection point between the world surface and the ray projected from "3d point" towards the given direction. 3D points are actually 3-elements Vector objects. The resulting vector contains the additional fourth element - the intersection point distance. The function returns null if there is no intersection.
+
+See "standard_events.inc" file, which uses "intersect" for calculating the world coordinates corresponding to the user-clicked screen location.
+Bugs: This function does not currently handle the heightfield environment correctly (works as if it was flat)]]></description>
+			<arguments>
+				<argument name="3d point" type="Vector"/>
+				<argument name="3d direction" type="Vector"/>
+				<argument name="range" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="WorldSignals" context="Global context">
+<description><![CDATA[Use this object to create stationary signals, not associated with any moving object and receive signals from any location in the world. There are Creature and Neuro-based variants of this object that automatically operate from the creature's or neuron's position.
+
+See also: Signal]]></description>
+		<element name="size" type="integer">
+			<description><![CDATA[Number of signals in this set.]]></description>
+		</element>
+		<element name="add" function="true" type="Signal">
+			<description><![CDATA[Create a new signal]]></description>
+			<arguments>
+				<argument name="position" type="XYZ"/>
+				<argument name="channel" type="string"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true" type="void">
+			<description><![CDATA[Delete all signals]]></description>
+<arguments/></element>
+		<element name="get" function="true" type="Signal">
+			<description><![CDATA[Access individual signals (index=0 .. size-1)]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="receive" function="true" type="float">
+			<description><![CDATA[Receive the aggregated signal power in a given channel.]]></description>
+			<arguments>
+				<argument name="position" type="XYZ"/>
+				<argument name="channel" type="string"/>
+			</arguments>
+		</element>
+		<element name="receiveFilter" function="true" type="float">
+			<description><![CDATA[Receive the aggregated signal power in a given channel.
+
+Additional filtering options:
+- Max distance only receives the neighbor signals (based on their physical location)
+- Flavor filtering: only signals having the flavor close to the specified one will be received. The filter value is the maximum allowed difference.]]></description>
+			<arguments>
+				<argument name="position" type="XYZ"/>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+				<argument name="flavor" type="float"/>
+				<argument name="filter" type="float"/>
+			</arguments>
+		</element>
+		<element name="receiveSet" function="true" type="Vector">
+			<description><![CDATA[Get all signals in the specified range. Returns a readonly vector object containing Signal objects (individual signals can be accessed as result[0] throught result[result.size-1]).]]></description>
+			<arguments>
+				<argument name="position" type="XYZ"/>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+			</arguments>
+		</element>
+		<element name="receiveSingle" function="true" type="Signal">
+			<description><![CDATA[Find the signal source having the highest signal power (including the distance)]]></description>
+			<arguments>
+				<argument name="position" type="XYZ"/>
+				<argument name="channel" type="string"/>
+				<argument name="max distance" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="XYZ" context="Global context">
+<description><![CDATA[3D vector]]></description>
+		<element name="length" type="float"/>
+		<element name="toString" type="string"/>
+		<element name="x" type="float"/>
+		<element name="y" type="float"/>
+		<element name="z" type="float"/>
+		<element name="add" function="true" type="void">
+			<description><![CDATA[Note: it does not return a new object, just modifies the existing one]]></description>
+			<arguments>
+				<argument type="XYZ"/>
+			</arguments>
+		</element>
+		<element name="clone" function="true" type="XYZ">
+			<description><![CDATA[Note: copying object references does not create new objects. Use clone() if a new object is needed.
+
+Example:
+var o1=(1,2,3), o2=o1, o3=o1.clone();
+o1.y=9999;
+//o2 is now (1,9999,3) but o3 is still (1,2,3)]]></description>
+<arguments/></element>
+		<element name="get" function="true" type="float">
+			<description><![CDATA[this function makes the XYZ objects "indexable" (so you can use [] for accessing subsequent fields, like in Vector)]]></description>
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="new" function="true" type="XYZ">
+			<description><![CDATA[3D vectors objects can be also created using the (x,y,z) notation, i.e. var v=(1,2,3) is the same as var v=XYZ.new(1,2,3);]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="normalize" function="true" type="void">
+			<description><![CDATA[scales the vector length to 1.0]]></description>
+<arguments/></element>
+		<element name="revRotate" function="true" type="void">
+			<arguments>
+				<argument type="Orient"/>
+			</arguments>
+		</element>
+		<element name="rotate" function="true" type="void">
+			<arguments>
+				<argument type="Orient"/>
+			</arguments>
+		</element>
+		<element name="scale" function="true" type="void">
+			<arguments>
+				<argument type="float"/>
+			</arguments>
+		</element>
+		<element name="set" function="true" type="void">
+			<arguments>
+				<argument type="XYZ"/>
+			</arguments>
+		</element>
+		<element name="set3" function="true" type="void">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="sub" function="true" type="void">
+			<description><![CDATA[Note: it does not return a new object, just modifies the existing one]]></description>
+			<arguments>
+				<argument type="XYZ"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="ExpParams" context="Experiment definition">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+	</type>
+	<type name="ExpState" context="Experiment definition">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+	</type>
+	<type name="n" context="Neuron definitions">
+		<element name="d" type="string"/>
+		<element name="getInputCount" type="integer"/>
+		<element name="i" type="string"/>
+		<element name="j" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="p" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="Vstyle" type="string"/>
+		<element name="getInputNeuroDef" function="true" type="NeuroDef">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputNeuroIndex" function="true" type="integer">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputWeight" function="true" type="float">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Neuro" context="Neuron definitions">
+<description><![CDATA[Live Neuron object.]]></description>
+		<element name="channelCount" type="integer"/>
+		<element name="creature" type="Creature"/>
+		<element name="currState" type="float">
+			<description><![CDATA[The only difference from the "state" field is that currState, when written, changes the internal neuron state immediately (which disturbs the regular synchronous NN operation). This feature should only be used while controlling the neuron 'from outside' (like a neuro probe) and not in the neuron definition. See also: Neuro.hold]]></description>
+		</element>
+		<element name="def" type="NeuroDef"/>
+		<element name="fields" type="Fields">
+			<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.
+Examples:
+var c=Populations.createFromString("X[N]");
+Simulator.print("standard neuron inertia="+c.getNeuro(0).fields.in);
+c=Populations.createFromString("X[Nn,e:0.1]");
+Simulator.print("noisy neuron error rate="+c.getNeuro(0).fields.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 i;
+for(i=0;i<iobj.properties;i++)
+ Simulator.print(iobj.getId(i)+" ("+iobj.getName(i)+")");]]></description>
+		</element>
+		<element name="getInputCount" type="integer"/>
+		<element name="hold" type="integer" min="0" max="1">
+			<description><![CDATA["Holding" means keeping the neuron state as is, blocking the regular neuron operation. This is useful when your script needs to inject some control signals into the NN. Without "holding", live neurons would be constantly overwriting your changes, and the rest of the NN could see inconsistent states, depending on the connections. Setting hold=1 ensures the neuron state will be only set by you, and not by the neuron. The enforced signal value can be set using Neuro.currState before or after setting hold=1. Set hold=0 to resume normal operation.]]></description>
+		</element>
+		<element name="inputSum" type="float"/>
+		<element name="joint" type="MechJoint"/>
+		<element name="part" type="MechPart"/>
+		<element name="position_x" type="float"/>
+		<element name="position_y" type="float"/>
+		<element name="position_z" type="float"/>
+		<element name="signals" type="NeuroSignals"/>
+		<element name="state" type="float">
+			<description><![CDATA[When read, returns the current neuron state.
+When written, sets the next neuron state (for use in the neuron definition)]]></description>
+		</element>
+		<element name="weightedInputSum" type="float"/>
+		<element name="getInputChannelCount" function="true" type="integer">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputState" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputStateChannel" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+				<argument name="channel" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputSum" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputWeight" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getStateChannel" function="true" type="float">
+			<arguments>
+				<argument name="channel" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getWeightedInputState" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getWeightedInputStateChannel" function="true" type="float">
+			<arguments>
+				<argument name="input" type="integer"/>
+				<argument name="channel" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getWeightedInputSum" function="true" type="float">
+			<description><![CDATA[Uses any number of inputs starting with the specified input. getWeightedInputSum(0)=weightedInputSum]]></description>
+			<arguments>
+				<argument name="input" type="integer"/>
+			</arguments>
+		</element>
+		<element name="setCurrStateChannel" function="true" type="void">
+			<description><![CDATA[Analogous to "currState".]]></description>
+			<arguments>
+				<argument name="channel" type="integer"/>
+				<argument name="value" type="float"/>
+			</arguments>
+		</element>
+		<element name="setStateChannel" function="true" type="void">
+			<arguments>
+				<argument name="channel" type="integer"/>
+				<argument name="value" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="this" context="Fitness formula">
+<description><![CDATA[A Genotype with the associated performance information. All but one Genotype objects are placed in Genotype Groups. There is also a single static Genotype object not associated with a group, which is used as a temporary storage by genetic operators and some functions from GenePools.]]></description>
+		<element name="convtrace1" type="string"/>
+		<element name="distance" type="float"/>
+		<element name="energ0" type="float"/>
+		<element name="f0genotype" type="string">
+			<description><![CDATA[converted to f0 genotype]]></description>
+		</element>
+		<element name="fit" type="float"/>
+		<element name="fit2" type="float">
+			<description><![CDATA[Fitness shifted by (avg-n*stddev)]]></description>
+		</element>
+		<element name="geno" type="Geno">
+			<description><![CDATA[Geno object for this Genotype]]></description>
+		</element>
+		<element name="genotype" type="string"/>
+		<element name="gnum" type="integer"/>
+		<element name="info" type="string">
+			<description><![CDATA[Additional information or comments]]></description>
+		</element>
+		<element name="instances" type="integer">
+			<description><![CDATA[Copies of this genotype]]></description>
+		</element>
+		<element name="isValid" type="integer" min="0" max="1"/>
+		<element name="lifespan" type="float">
+			<description><![CDATA[Average life span]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="nncon" type="float"/>
+		<element name="nnsiz" type="float"/>
+		<element name="num" type="integer"/>
+		<element name="numconnections" type="float"/>
+		<element name="numjoints" type="float"/>
+		<element name="numneurons" type="float"/>
+		<element name="numparts" type="float"/>
+		<element name="popsiz" type="integer"/>
+		<element name="simi" type="float"/>
+		<element name="strjoints" type="float"/>
+		<element name="strsiz" type="float"/>
+		<element name="uid" type="string">
+			<description><![CDATA[Unique identifier]]></description>
+		</element>
+		<element name="user1" type="untyped"/>
+		<element name="user2" type="untyped"/>
+		<element name="user3" type="untyped"/>
+		<element name="velocity" type="float">
+			<description><![CDATA[Average velocity]]></description>
+		</element>
+		<element name="vertpos" type="float"/>
+		<element name="vertvel" type="float"/>
+		<element name="getModel" function="true" type="Model"><arguments/></element>
+		<element name="getNormalized" function="true" type="float">
+			<arguments>
+				<argument name="property name or index" type="untyped"/>
+			</arguments>
+		</element>
+		<element name="mutate" function="true" type="void"><arguments/></element>
+	</type>
+	<type name="Creature" context="Visual style definition">
+<description><![CDATA[The object inside the simulated world, including its physical structure, neural network and performance data. Food pieces, obstacles and other movable objects can be implemented as Creatures even though the are not "alive". See also: Population.]]></description>
+		<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.
+
+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="buildproblems" type="integer"/>
+		<element name="c_velocity" type="float"/>
+		<element name="c_vertpos" type="float"/>
+		<element name="c_vertvelocity" type="float"/>
+		<element name="center_x" type="float">
+			<description><![CDATA[Center of gravity]]></description>
+		</element>
+		<element name="center_y" type="float">
+			<description><![CDATA[Center of gravity]]></description>
+		</element>
+		<element name="center_z" type="float">
+			<description><![CDATA[Center of gravity]]></description>
+		</element>
+		<element name="distance" type="float"/>
+		<element name="drive" type="XYZ">
+			<description><![CDATA[Measured in global coordinates]]></description>
+		</element>
+		<element name="energ0" type="float"/>
+		<element name="energy" type="float"/>
+		<element name="energy_b" type="float"/>
+		<element name="energy_m" type="float"/>
+		<element name="energy_p" type="float"/>
+		<element name="geno" type="Geno">
+			<description><![CDATA[Source genotype for this creature]]></description>
+		</element>
+		<element name="genotype" type="string"/>
+		<element name="gnum" type="integer"/>
+		<element name="group" type="untyped"/>
+		<element name="idleen" type="float"/>
+		<element name="index" type="integer">
+			<description><![CDATA[Index of this Creature in its Population.]]></description>
+		</element>
+		<element name="info" type="string">
+			<description><![CDATA[Additional info or comments]]></description>
+		</element>
+		<element name="lifespan" type="integer"/>
+		<element name="liveModel" type="Model">
+			<description><![CDATA[A Model object that is a copy of the current (temporary) geometry of this creature]]></description>
+		</element>
+		<element name="localDrive" type="XYZ">
+			<description><![CDATA[Measured in local coordinates, that is, with respect to the current orientation of the creature.
+See also: Creature.orient]]></description>
+		</element>
+		<element name="model" type="Model">
+			<description><![CDATA[Source Model for this creature]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="nnenabled" type="integer" min="0" max="1"/>
+		<element name="numjoints" type="integer"/>
+		<element name="numneurons" type="integer"/>
+		<element name="numparts" type="integer"/>
+		<element name="orient" type="Orient">
+			<description><![CDATA[By convention, the orientation of the creature is equal to the orientation of its first Part]]></description>
+		</element>
+		<element name="othermask" type="integer" min="0" max="2147483647" default="0"/>
+		<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="pos_x" type="float">
+			<description><![CDATA[(pos_x,pos_y,pos_z) is the point of minimal coordinates ("bottom left corner") of the creature, including imaginary Part sizes (Part.s, usually 1.0). See also: Creature.moveAbs]]></description>
+		</element>
+		<element name="pos_y" type="float">
+			<description><![CDATA[See Creature.pos_x]]></description>
+		</element>
+		<element name="pos_z" type="float">
+			<description><![CDATA[See Creature.pos_x]]></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" type="integer" min="0" max="1">
+			<description><![CDATA[Current self-collision state]]></description>
+		</element>
+		<element name="selfmask" type="integer" min="0" max="2147483647" default="0"/>
+		<element name="signals" type="CreatureSignals"/>
+		<element name="size_x" type="float">
+			<description><![CDATA[(size_x,size_y,size_z) are dimensions of the axis-aligned bounding box of the creature, including the imaginary part sizes (Part.s, usually 1.0). A creature consisting of a single default Part has the size of (2.0,2.0,2.0) - twice the Part.s value (like a sphere diameter is twice its radius).
+See also: Creature.moveAbs]]></description>
+		</element>
+		<element name="size_y" type="float">
+			<description><![CDATA[See Creature.size_x]]></description>
+		</element>
+		<element name="size_z" type="float">
+			<description><![CDATA[See Creature.size_x]]></description>
+		</element>
+		<element name="uid" type="string"/>
+		<element name="user1" type="untyped"/>
+		<element name="user2" type="untyped"/>
+		<element name="user3" type="untyped"/>
+		<element name="velocity" type="float"/>
+		<element name="vertpos" type="float"/>
+		<element name="vertvel" type="float"/>
+		<element name="currentGeometryAsF0" function="true" type="string"><arguments/></element>
+		<element name="getJoint" function="true" type="Joint">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getMechJoint" function="true" type="MechJoint">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getMechPart" function="true" type="MechPart">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getNeuro" function="true" type="Neuro">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getNeuroDef" function="true" type="NeuroDef">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getPart" function="true" type="Part">
+			<arguments>
+				<argument name="index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="localToWorld" function="true" type="XYZ">
+			<description><![CDATA[Local coordinates are measured with respect to the position and orientation of the first Part]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="move" function="true" type="void">
+			<description><![CDATA[Shift the creature by a given vector.]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="moveAbs" function="true" type="void">
+			<description><![CDATA[Moves the creature so that its origin (pos_x,pos_y,pos_z) is placed at the given location. The origin is the point of minimal coordinates ("bottom left corner"), including imaginary part sizes (Part.s, usually 1.0).
+Assuming a simple single-stick creature "X" having parts at (0,0,0) and (1,0,0),
+
+origin (pos_x,pos_y,pos_z) = (-1,-1,-1)
+size (size_x,size_y,size_z) = (3,2,2)
+
+The following example places the bottom of a creature at a given location (x,y,z):
+Creature.moveAbs(x-(Creature.size_x/2),y-(Creature.size_y/2),z-1.0)
+(assuming that the part size is 1.0)]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="moveLocal" function="true" type="void">
+			<description><![CDATA[Local coordinates are measured with respect to the position and orientation of the first Part]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="rotate" function="true" type="void">
+			<description><![CDATA[Rotate the creature around X, Y and Z axes. Should only be used immediately after creating a new creature (before the first simulation step is performed for this creature), otherwise further simulation can be disturbed.]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="rotateLocal" function="true" type="void">
+			<description><![CDATA[Rotate the creature around (local) X, Y and Z axes. Should only be used immediately after creating a new creature (before the first simulation step is performed for this creature), otherwise further simulation can be disturbed.]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="worldToLocal" function="true" type="XYZ">
+			<description><![CDATA[Local coordinates are measured with respect to the position and orientation of the first Part]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Element" context="Visual style definition">
+<description><![CDATA[Information about current visual element: Part, Joint or Neuro. To be used in _build() or _update() functions.
+
+This is a link between a creature's element (part/joint/neuron) and the geometry object (Element.node).
+Calling Element.useXXX() functions connects the static object references (Creature, Model, Part, Joint, Neuro, MechPart, MechJoint) to the proper creature elements. All these objects are invalid before doing that! E.g. you have to call "Element.useCreature()" before referring to "Creature.energy" in your _build() and _update() functions.]]></description>
+		<element name="node" type="integer"/>
+		<element name="useCreature" function="true"/>
+		<element name="useJoint" function="true"/>
+		<element name="useJointPart1" function="true"/>
+		<element name="useJointPart2" function="true"/>
+		<element name="useMechJoint" function="true"/>
+		<element name="useMechJointPart1" function="true"/>
+		<element name="useMechJointPart2" function="true"/>
+		<element name="useMechPart" function="true"/>
+		<element name="useModel" function="true"/>
+		<element name="useNeuro" function="true"/>
+		<element name="useNeuroJoint" function="true"/>
+		<element name="useNeuroPart" function="true"/>
+		<element name="usePart" function="true"/>
+	</type>
+	<type name="GeomBuilder" context="Visual style definition">
+<description><![CDATA[Scene graph access (build and manipulate the 3d object tree)]]></description>
+		<element name="code" type="string"/>
+		<element name="currentNode" type="integer"/>
+		<element name="defaultStyle" type="string"/>
+		<element name="matrix00" type="float"/>
+		<element name="matrix01" type="float"/>
+		<element name="matrix02" type="float"/>
+		<element name="matrix03" type="float"/>
+		<element name="matrix10" type="float"/>
+		<element name="matrix11" type="float"/>
+		<element name="matrix12" type="float"/>
+		<element name="matrix13" type="float"/>
+		<element name="matrix20" type="float"/>
+		<element name="matrix21" type="float"/>
+		<element name="matrix22" type="float"/>
+		<element name="matrix23" type="float"/>
+		<element name="matrix30" type="float"/>
+		<element name="matrix31" type="float"/>
+		<element name="matrix32" type="float"/>
+		<element name="matrix33" type="float"/>
+		<element name="rootNode" type="integer"/>
+		<element name="updatingNode" type="integer"/>
+		<element name="add" function="true" type="void">
+			<description><![CDATA[add a child node to the current node]]></description>
+			<arguments>
+				<argument name="node" type="integer"/>
+			</arguments>
+		</element>
+		<element name="addBranch" function="true">
+			<description><![CDATA[create the branch node as a child of the current node and make it the new current node]]></description>
+		</element>
+		<element name="addTransform" function="true">
+			<description><![CDATA[create the transform node as a child of the current node and make it the new current node.]]></description>
+		</element>
+		<element name="dump" function="true" type="void">
+			<arguments>
+				<argument name="node" type="integer"/>
+				<argument name="level" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getBranch" function="true" type="integer">
+			<arguments>
+				<argument name="branch node" type="integer"/>
+				<argument name="branch index" type="integer"/>
+			</arguments>
+		</element>
+		<element name="matrixMove" function="true" type="void">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="matrixMove1" function="true" type="void">
+			<description><![CDATA[MechPart.pos can be used here]]></description>
+			<arguments>
+				<argument name="xyz" type="integer"/>
+			</arguments>
+		</element>
+		<element name="matrixOrient" function="true" type="void">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="matrixOrient1" function="true" type="void">
+			<description><![CDATA[MechPart.orient can be used here]]></description>
+			<arguments>
+				<argument name="xyz" type="integer"/>
+			</arguments>
+		</element>
+		<element name="matrixReset" function="true"/>
+		<element name="matrixRotate" function="true" type="void">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="matrixRotate1" function="true" type="void">
+			<arguments>
+				<argument name="xyz" type="integer"/>
+			</arguments>
+		</element>
+		<element name="matrixScale" function="true" type="void">
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+				<argument name="z" type="float"/>
+			</arguments>
+		</element>
+		<element name="setMatrix" function="true" type="void">
+			<description><![CDATA[copy current matrix into specified node]]></description>
+			<arguments>
+				<argument name="transform node" type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="GL" context="Visual style definition">
+<description><![CDATA[OpenGL constants used in GeomBuilder and Material functions.]]></description>
+		<element name="ALPHA_TEST" type="integer"/>
+		<element name="AMBIENT" type="integer"/>
+		<element name="AMBIENT_AND_DIFFUSE" type="integer"/>
+		<element name="BLEND" type="integer"/>
+		<element name="COLOR_MATERIAL" type="integer"/>
+		<element name="CULL_FACE" type="integer"/>
+		<element name="DIFFUSE" type="integer"/>
+		<element name="EMISSION" type="integer"/>
+		<element name="LIGHTING" type="integer"/>
+		<element name="LINE_LOOP" type="integer"/>
+		<element name="LINE_STRIP" type="integer"/>
+		<element name="LINES" type="integer"/>
+		<element name="POINTS" type="integer"/>
+		<element name="QUAD_STRIP" type="integer"/>
+		<element name="QUADS" type="integer"/>
+		<element name="SPECULAR" type="integer"/>
+		<element name="TEXTURE_2D" type="integer"/>
+		<element name="TRIANGLE_FAN" type="integer"/>
+		<element name="TRIANGLE_STRIP" type="integer"/>
+		<element name="TRIANGLES" type="integer"/>
+	</type>
+	<type name="j" context="Visual style definition">
+		<element name="dx" type="float" min="-2" max="2" default="0"/>
+		<element name="dy" type="float" min="-2" max="2" default="0"/>
+		<element name="dz" type="float" min="-2" max="2" default="0"/>
+		<element name="i" type="string"/>
+		<element name="p1" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="p2" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="rotstif" type="float" min="0" max="1" default="1"/>
+		<element name="rx" type="float"/>
+		<element name="ry" type="float"/>
+		<element name="rz" type="float"/>
+		<element name="stam" type="float" min="0" max="1" default="0.25"/>
+		<element name="stif" type="float" min="0" max="1" default="1"/>
+		<element name="Vstyle" type="string"/>
+	</type>
+	<type name="Loader" context="Visual style definition">
+<description><![CDATA[Loads 3d objects files.
+Visual styles placed in subdirectories (like "matrix") automatically access the parent directory if the file is not found in their subdirectory.]]></description>
+		<element name="loaded" type="integer"/>
+		<element name="load" function="true"/>
+	</type>
+	<type name="m" context="Visual style definition">
+		<element name="se" type="float"/>
+		<element name="Vstyle" type="string"/>
+	</type>
+	<type name="Material" context="Visual style definition">
+<description><![CDATA[Manipulate 3d objects surface properties (Material objects can be associated with geometry nodes).]]></description>
+		<element name="ambient" type="integer"/>
+		<element name="colormat" type="integer"/>
+		<element name="diffuse" type="integer"/>
+		<element name="emission" type="integer"/>
+		<element name="object" type="Object"/>
+		<element name="shininess" type="float"/>
+		<element name="specular" type="integer"/>
+		<element name="texture" type="string"/>
+		<element name="translucent" type="integer"/>
+		<element name="care" function="true"/>
+		<element name="disable" function="true"/>
+		<element name="dontcare" function="true"/>
+		<element name="enable" function="true"/>
+		<element name="new" function="true"/>
+		<element name="setFlat" function="true"/>
+		<element name="setSmooth" function="true"/>
+	</type>
+	<type name="MechJoint" context="Visual style definition">
+<description><![CDATA[Current joint properties during the simulation]]></description>
+		<element name="absorient" type="integer"/>
+		<element name="calcorient" type="integer"/>
+		<element name="dx" type="float"/>
+		<element name="dy" type="float"/>
+		<element name="dz" type="float"/>
+		<element name="length" type="float"/>
+		<element name="orient" type="integer"/>
+		<element name="rotstif" type="float"/>
+		<element name="rotstress" type="float"/>
+		<element name="rx" type="float"/>
+		<element name="ry" type="float"/>
+		<element name="rz" type="float"/>
+		<element name="stif" type="float"/>
+		<element name="stress" type="float"/>
+	</type>
+	<type name="MechPart" context="Visual style definition">
+<description><![CDATA[Current part properties during the simulation]]></description>
+		<element name="fr" type="float"/>
+		<element name="m" type="float"/>
+		<element name="orient" type="integer"/>
+		<element name="pos" type="integer"/>
+		<element name="s" type="float"/>
+		<element name="vol" type="float"/>
+		<element name="x" type="float"/>
+		<element name="y" type="float"/>
+		<element name="z" type="float"/>
+	</type>
+	<type name="n" context="Visual style definition">
+		<element name="class" type="string"/>
+		<element name="d" type="string"/>
+		<element name="getInputCount" type="integer"/>
+		<element name="i" type="string"/>
+		<element name="j" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="p" type="integer" min="-1" max="999999" default="-1"/>
+		<element name="state" type="float"/>
+		<element name="Vstyle" type="string"/>
+		<element name="getInputNeuroDef" function="true" type="NeuroDef">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputNeuroIndex" function="true" type="integer">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+		<element name="getInputWeight" function="true" type="float">
+			<arguments>
+				<argument type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="p" context="Visual style definition">
+		<element name="as" type="float" min="0" max="1" default="0.25"/>
+		<element name="dn" type="float" min="0.2" max="5" default="1"/>
+		<element name="fr" type="float" min="0" max="4" default="0.4"/>
+		<element name="i" type="string"/>
+		<element name="ing" type="float" min="0" max="1" default="0.25"/>
+		<element name="m" type="float" min="0.1" max="999" default="1"/>
+		<element name="rx" type="float"/>
+		<element name="ry" type="float"/>
+		<element name="rz" type="float"/>
+		<element name="s" type="float" min="0.1" max="10" default="1"/>
+		<element name="Vstyle" type="string"/>
+		<element name="x" type="float"/>
+		<element name="y" type="float"/>
+		<element name="z" type="float"/>
+	</type>
+	<type name="Scene" context="Visual style definition">
+<description><![CDATA[Additional properties to be used in the current view, currently only the background settings]]></description>
+		<element name="backcolor" type="integer"/>
+		<element name="worldtexture" type="string"/>
+	</type>
+	<type name="VertexBuilder" context="Visual style definition">
+		<element name="material" type="Object"/>
+		<element name="node" type="integer">
+			<description><![CDATA[This field returns the geometry node for use in GeomBuilder. You have to set all relevant geometry properties before using this field. The usual sequence:
+1. newXXX - selects the geometry type (see your OpenGL manual for explanation)
+2. Set all properties (add vertices, normals, colors, texture coordinates, material). All unspecified properties are assumed to have default values.
+3. Use the resulting node ( GeomBuilder.add(VertexBuilder.node) )]]></description>
+		</element>
+		<element name="twosided" type="integer" min="0" max="1"/>
+		<element name="addCalculatedNormal" function="true">
+			<description><![CDATA[calculate the normal vector from 3 coordinates. integer arguments are the vertices' indices. 0,1,2... = first, second, third vertex, -1,-2,-3,... = last, last-1, last-2 vertex]]></description>
+		</element>
+		<element name="addColor" function="true"/>
+		<element name="addNormal" function="true"/>
+		<element name="addNormal_1" function="true">
+			<description><![CDATA[use addNormal instead of this function]]></description>
+		</element>
+		<element name="addTexCoord" function="true"/>
+		<element name="addVertex" function="true"/>
+		<element name="genTexCoords" function="true"/>
+		<element name="genTexCoordsXY" function="true"/>
+		<element name="genTexCoordsXZ" function="true"/>
+		<element name="genTexCoordsYZ" function="true"/>
+		<element name="new" function="true" type="void">
+			<arguments>
+				<argument name="type" type="integer"/>
+			</arguments>
+		</element>
+		<element name="newLineLoop" function="true"/>
+		<element name="newLines" function="true"/>
+		<element name="newLineStrip" function="true"/>
+		<element name="newPoints" function="true"/>
+		<element name="newPolygon" function="true"/>
+		<element name="newQuads" function="true"/>
+		<element name="newQuadStrip" function="true"/>
+		<element name="newTriangleFan" function="true"/>
+		<element name="newTriangles" function="true"/>
+		<element name="newTriangleStrip" function="true"/>
+	</type>
+	<type name="VisParams" context="Visual style definition">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="modelpan" type="integer" min="0" max="3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="shownames" type="integer" min="0" max="1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="worldpan" type="integer" min="0" max="3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+	</type>
+	<type name="VisualModel" context="Visual style definition">
+<description><![CDATA[Visual representation of the Creature object.]]></description>
+		<element name="args" type="string">
+			<description><![CDATA[style parameters: Vstyle=name(args)]]></description>
+		</element>
+		<element name="color" type="integer">
+			<description><![CDATA[0xBBGGRR, 0x808080=normal, 0x000000=black, 0xffffff=extra bright]]></description>
+		</element>
+		<element name="jointshadow" type="float"/>
+		<element name="partshadow" type="float"/>
+		<element name="rootNode" type="integer"/>
+		<element name="style" type="string">
+			<description><![CDATA[visual style applied to this object]]></description>
+		</element>
+		<element name="getArg" function="true" type="string">
+			<description><![CDATA[retrieve single style argument, as in:
+Vstyle=name(a=1,b=3)
+VisualModel.getArg("a") returns 1]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="VisualStyle" context="Visual style definition">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="code" type="string"/>
+		<element name="info" type="string"/>
+		<element name="modelpan" type="integer" min="0" max="3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="neurons" type="integer" min="0" max="1"/>
+		<element name="shownames" type="integer" min="0" max="1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="smooth" type="integer" min="0" max="1"/>
+		<element name="style" type="string"/>
+		<element name="tex" type="integer" min="0" max="2"/>
+		<element name="worldpan" type="integer" min="0" max="3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="rebuild" function="true"/>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+		<element name="streload" function="true"/>
+	</type>
+	<type name="World" context="Visual style definition">
+<description><![CDATA[Environment properties.]]></description>
+		<element name="nnspeed" type="float" min="0" max="1000" default="1">
+			<description><![CDATA[Number of neural network simulation steps in each physics simulation step]]></description>
+		</element>
+		<element name="signals" type="WorldSignals"/>
+		<element name="simtype" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[MechaStick is a fast and simple primary Framsticks simulation engine.
+ODE is Open Dynamics Engine by Russel Smith et al.
+
+NOTE: switching between simulation engines causes removal of all objects in the world (e.g. creatures).]]></description>
+		</element>
+		<element name="wrldbnd" type="integer" min="0" max="2" default="1"/>
+		<element name="wrldg" type="float" min="0" max="10" default="1">
+			<description><![CDATA[You can adjust gravity for your experiments.
+The "official" setting used to evaluate and compare creatures is 1.]]></description>
+		</element>
+		<element name="wrldmap" type="string">
+			<description><![CDATA[Description of the world (Type: Blocks or Heighfield). Enter
+   r <sizex> <sizey> [seed]
+to generate a random landscape, or
+   m <sizex> <sizey> digits
+   M <sizex> <sizey> numbers
+to provide height values.
+
+See also the WorldMap object.]]></description>
+		</element>
+		<element name="wrldsiz" type="float" min="10" max="1000" default="20">
+			<description><![CDATA[Side length of the world]]></description>
+		</element>
+		<element name="wrldtyp" type="integer" min="0" max="2" default="0"/>
+		<element name="wrldwat" type="float" min="-20" max="30" default="-1"/>
+		<element name="wrldchg" function="true" type="void"><arguments/></element>
+	</type>
+	<type name="WorldMap" context="Visual style definition">
+<description><![CDATA[Environment details for "Blocks" and "Heightfield" world type. The most important concept is a "Map", which is the array of Map elements. Internally, Maps have more elements than could be deduced from the user-supplied World.wrldsiz, as additional rows of element are added to provide smooth transitions to the flat surroundings.
+
+Blocks: x/ysize=World.wrldsiz+4 rows of blocks (from which only 2+World.wrldsiz rows are placed within the world boundaries)
+
+Smooth: x/ysize=World.wrldsiz+2 rows of vertices (creating World.wrldsiz+1 rows of triangles, everything within the world boundaries)
+]]></description>
+		<element name="xsize" type="integer"/>
+		<element name="ysize" type="integer"/>
+		<element name="getHeight" function="true" type="float">
+			<description><![CDATA[Height at any 2d coordinate]]></description>
+			<arguments>
+				<argument name="x" type="float"/>
+				<argument name="y" type="float"/>
+			</arguments>
+		</element>
+		<element name="getMap" function="true" type="Object">
+			<description><![CDATA[retrieve map cell object]]></description>
+			<arguments>
+				<argument name="x" type="integer"/>
+				<argument name="y" type="integer"/>
+			</arguments>
+		</element>
+		<element name="intersect" function="true" type="Vector">
+			<description><![CDATA[Calculate the intersection point between the world surface and the ray projected from "3d point" towards the given direction. 3D points are actually 3-elements Vector objects. The resulting vector contains the additional fourth element - the intersection point distance. The function returns null if there is no intersection.
+
+See "standard_events.inc" file, which uses "intersect" for calculating the world coordinates corresponding to the user-clicked screen location.
+Bugs: This function does not currently handle the heightfield environment correctly (works as if it was flat)]]></description>
+			<arguments>
+				<argument name="3d point" type="Vector"/>
+				<argument name="3d direction" type="Vector"/>
+				<argument name="range" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="Signal" context="Signal label formula">
+		<element name="channel" type="string">
+			<description><![CDATA[Channel name, readonly.]]></description>
+		</element>
+		<element name="flavor" type="float">
+			<description><![CDATA[Signal flavor is can be used to differentiate between signals in a single channel. ]]></description>
+		</element>
+		<element name="pos" type="XYZ">
+			<description><![CDATA[Signal position, readonly.]]></description>
+		</element>
+		<element name="power" type="float">
+			<description><![CDATA[Signal power affects the aggregated signal value returned from receive() and receiveFilter().]]></description>
+		</element>
+		<element name="value" type="untyped">
+			<description><![CDATA[Signal value can be any type. On the receiver side it is only available by accessing the individual Signal objects, i.e. after calling receiveSet() or receiveSingle(). The aggregating function receive() and receiveFilter() ignore this attribute.]]></description>
+		</element>
+	</type>
+	<type name="ClassBrowser" context="Command line interface">
+<description><![CDATA[Object reference, can be used to provide online hints.]]></description>
+		<element name="resultCount" type="integer"/>
+		<element name="getLabel" function="true" type="string">
+			<description><![CDATA[Short texual label of the search result.]]></description>
+			<arguments>
+				<argument name="item" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getText" function="true" type="string">
+			<description><![CDATA[Complete result text.]]></description>
+			<arguments>
+				<argument name="item" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getType" function="true" type="integer">
+			<description><![CDATA[0 = Unknown
+1 = Context
+2 = Class
+3 = Member
+4 = Integer field
+5 = Float field
+6 = String field
+7 = Object field
+8 = Function]]></description>
+			<arguments>
+				<argument name="item" type="integer"/>
+			</arguments>
+		</element>
+		<element name="getTypeName" function="true" type="string">
+			<arguments>
+				<argument name="item" type="integer"/>
+			</arguments>
+		</element>
+		<element name="search" function="true" type="integer">
+			<description><![CDATA[Searches the class reference and returns the number of  hits (results). getXXX(item) function can be used to retrieve the results.]]></description>
+			<arguments>
+				<argument name="Text" type="string"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="CLI" context="Command line interface">
+<description><![CDATA[Commandline support functions.]]></description>
+		<element name="cmdhandler" type="string"/>
+		<element name="msgtype" type="integer" min="0" max="1"/>
+		<element name="script" type="string"/>
+		<element name="stdin" type="Object"/>
+		<element name="stdout" type="Object"/>
+		<element name="addMacro" function="true" type="void">
+			<arguments>
+				<argument name="name" type="string"/>
+				<argument name="numargs" type="integer"/>
+				<argument name="definition" type="string"/>
+				<argument name="helptext" type="string"/>
+			</arguments>
+		</element>
+		<element name="execute" function="true" type="void">
+			<arguments>
+				<argument name="command" type="string"/>
+			</arguments>
+		</element>
+		<element name="listMacros" function="true" type="void"><arguments/></element>
+		<element name="print" function="true" type="void">
+			<arguments>
+				<argument name="text" type="string"/>
+			</arguments>
+		</element>
+		<element name="println" function="true" type="void">
+			<arguments>
+				<argument name="text" type="string"/>
+			</arguments>
+		</element>
+		<element name="quit" function="true"/>
+		<element name="removeMacro" function="true" type="void">
+			<description><![CDATA[(numargs==-2) means remove all macros matching the name, otherwise only one definition is removed]]></description>
+			<arguments>
+				<argument name="name" type="string"/>
+				<argument name="numargs" type="integer"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="CreatureCharts" context="Command line interface">
+<description><![CDATA[Manages charts for monitoring creatures performance.
+This class has no corresponding static object. If you want to use it, you have to create an object or get a reference to the existing object.]]></description>
+		<element name="creature" type="untyped"/>
+		<element name="selected" type="integer"/>
+		<element name="add" function="true">
+			<description><![CDATA[return the new Window object with chart as its client
+arguments: property to be tracked]]></description>
+		</element>
+		<element name="addSelected" function="true">
+			<description><![CDATA[Add the chart for currenly selected property]]></description>
+		</element>
+		<element name="createChart" function="true">
+			<description><![CDATA[return the new chart object (can be client for Window)
+arguments: property to be tracked]]></description>
+		</element>
+		<element name="removeAll" function="true"/>
+		<element name="resetAll" function="true">
+			<description><![CDATA[Removes all data from the chart windows.]]></description>
+		</element>
+	</type>
+	<type name="CreatureSelection" context="Command line interface">
+		<element name="count" type="integer"/>
+		<element name="add" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="get" function="true"/>
+		<element name="remove" function="true"/>
+	</type>
+	<type name="DynaChart" context="Command line interface">
+<description><![CDATA[Line chart (visual object). Can be used as the client object in the Window.]]></description>
+		<element name="xscale" type="integer" min="1" max="20"/>
+		<element name="add" function="true">
+			<description><![CDATA[add new value]]></description>
+		</element>
+		<element name="clear" function="true" type="void"><arguments/></element>
+		<element name="new" function="true" type="DynaChart"><arguments/></element>
+	</type>
+	<type name="DynaChart2D" context="Command line interface">
+<description><![CDATA[2D Line chart (visual object). Can be used as the client object in the Window.]]></description>
+		<element name="memory" type="integer" min="1" max="1000" default="100">
+			<description><![CDATA[maximum number of (x,y) pairs drawn in the graph.]]></description>
+		</element>
+		<element name="add" function="true" type="void">
+			<description><![CDATA[add (x,y) values for the next graph point]]></description>
+			<arguments>
+				<argument name="x coordinate" type="float"/>
+				<argument name="y coordinate" type="float"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true" type="void"><arguments/></element>
+		<element name="new" function="true" type="DynaChart2D"><arguments/></element>
+	</type>
+	<type name="GLDisplay" context="Command line interface">
+<description><![CDATA[OpenGL display for the Framsticks Theater application.]]></description>
+		<element name="active" type="integer" min="0" max="1"/>
+		<element name="banner" type="string"/>
+		<element name="desiredsimspeed" type="float" min="0" max="999999" default="0">
+			<description><![CDATA[Desired simulation speed in steps/second. 0 = simulation is disabled.]]></description>
+		</element>
+		<element name="fps" type="float">
+			<description><![CDATA[Frames Per Second (measured)]]></description>
+		</element>
+		<element name="fpsvisible" type="integer" min="0" max="1"/>
+		<element name="maxfps" type="integer" min="1" max="100" default="30"/>
+		<element name="messagesVisible" type="integer" min="0" max="1"/>
+		<element name="messagesWindow" type="Object">
+			<description><![CDATA[get window object (class Window)]]></description>
+		</element>
+		<element name="minfps" type="integer" min="1" max="100" default="5"/>
+		<element name="simsteps" type="integer" min="0" max="999999" default="0">
+			<description><![CDATA[0 = simulation is disabled. In most cases you should use desiredsimspeed as it ensures automatic throttle control.]]></description>
+		</element>
+		<element name="size_x" type="integer"/>
+		<element name="size_y" type="integer"/>
+		<element name="userspeed" type="float" min="0" max="100" default="1">
+			<description><![CDATA[User interface sets this property to adjust simulation speed.]]></description>
+		</element>
+		<element name="clearMessages" function="true"/>
+		<element name="createWindow" function="true" type="Window">
+			<description><![CDATA[create and return the new window object.]]></description>
+			<arguments>
+				<argument name="style" type="integer"/>
+				<argument name="title" type="string"/>
+				<argument name="client" type="Object"/>
+			</arguments>
+		</element>
+		<element name="deleteWindow" function="true" type="void">
+			<arguments>
+				<argument type="Window"/>
+			</arguments>
+		</element>
+		<element name="draw" function="true"/>
+		<element name="newCreatureCharts" function="true"/>
+		<element name="newSimStatsCharts" function="true"/>
+		<element name="quit" function="true"/>
+		<element name="resume" function="true"/>
+		<element name="stop" function="true"/>
+	</type>
+	<type name="NeuroDiagram" context="Command line interface">
+<description><![CDATA[Can be used as the client object in the Window.]]></description>
+		<element name="hide" function="true" type="void"><arguments/></element>
+		<element name="new" function="true"/>
+		<element name="showCreature" function="true" type="void">
+			<arguments>
+				<argument type="Creature"/>
+			</arguments>
+		</element>
+		<element name="showModel" function="true" type="void">
+			<arguments>
+				<argument type="Model"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="RowFormat" context="Command line interface">
+<description><![CDATA[Used for creating simple listings of objects (in command line applications). There is only one shared RowFormat object. In order to use RowFormat you should first configure it, by adding column definitions (prepare or addColumn), i.e. defining column names and widths. Then, the "format" method can be invoked on a number of objects (of the same class) returning the formatted rows of the table.
+
+Example:
+RowFormat.clear();
+RowFormat.prepare(Genotype.*,"name/20,strsiz/5,nnsiz/5,fit/6");
+CLI.println(RowFormat.format(Genotype.*));]]></description>
+		<element name="fieldsep" type="string">
+			<description><![CDATA[The character used for separating columns]]></description>
+		</element>
+		<element name="fillchar" type="string">
+			<description><![CDATA[The characted used for padding the columns contents]]></description>
+		</element>
+		<element name="header" type="string">
+			<description><![CDATA[Contains the field names with the same formatting applied (i.e. with fill and separators)]]></description>
+		</element>
+		<element name="addColumn" function="true" type="void">
+			<description><![CDATA[Low level call, adds a single column. "prepare" is better.]]></description>
+			<arguments>
+				<argument name="Field#" type="integer"/>
+				<argument name="Column width" type="integer"/>
+			</arguments>
+		</element>
+		<element name="clear" function="true" type="void">
+			<description><![CDATA[Remove all existing column definitions.]]></description>
+<arguments/></element>
+		<element name="format" function="true" type="string">
+			<description><![CDATA[Returns the formatted string taking data from the supplied object.]]></description>
+			<arguments>
+				<argument name="Object" type="Object"/>
+			</arguments>
+		</element>
+		<element name="prepare" function="true" type="void">
+			<description><![CDATA[Adds a number of columns, described as FIELD_NAME/WIDTH, columns are separated by "," (comma). Existing column definitions are not removed. Usually you will need to call "clear()" before "prepare".]]></description>
+			<arguments>
+				<argument name="Object" type="Object"/>
+				<argument name="Column Descriptions" type="string"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="ShowManager" context="Command line interface">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="code" type="string"/>
+		<element name="dispinfo" type="integer" min="0" max="2"/>
+		<element name="expdef" type="string"/>
+		<element name="info" type="string"/>
+		<element name="mode" type="integer" min="0" max="2"/>
+		<element name="name" type="string"/>
+		<element name="regname" type="string"/>
+		<element name="show" type="string"/>
+		<element name="showlog" type="integer" min="0" max="1"/>
+		<element name="switchmode" type="integer" min="0" max="2"/>
+		<element name="switchshows" type="string">
+			<description><![CDATA[names of the shows participating in automatic switching (comma separated). Use * as a wildcard.]]></description>
+		</element>
+		<element name="switchtime" type="integer" min="0" max="9999">
+			<description><![CDATA[time between switching (seconds)]]></description>
+		</element>
+		<element name="userspeed" type="integer" min="0" max="5" default="3"/>
+		<element name="about" function="true"/>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="dummy" function="true">
+			<description><![CDATA[This is the empty item in the Theater's menu]]></description>
+		</element>
+		<element name="reload" function="true"/>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+	</type>
+	<type name="SimStatsCharts" context="Command line interface">
+<description><![CDATA[Manages charts for monitoring simulator statistics.
+This class has no corresponding static object. If you want to use it, you have to create an object or get a reference to the existing object.]]></description>
+		<element name="selected" type="integer"/>
+		<element name="add" function="true"/>
+		<element name="createChart" function="true"/>
+		<element name="removeAll" function="true"/>
+		<element name="resetAll" function="true">
+			<description><![CDATA[Removes all data from the chart windows.]]></description>
+		</element>
+		<element name="sscAddSelected" function="true"/>
+	</type>
+	<type name="TrackingCam" context="Command line interface">
+<description><![CDATA[Camera object with the automatic target tracking ability.]]></description>
+		<element name="cam_change" type="integer" min="0" max="5" default="3"/>
+		<element name="cam_chspeed" type="float" min="0.1" max="10" default="1"/>
+		<element name="cam_dir" type="float" min="0" max="360" default="30"/>
+		<element name="cam_distrac" type="integer" min="0" max="1" default="0">
+			<description><![CDATA[Suspend automatic tracking when the camera is moved manually]]></description>
+		</element>
+		<element name="cam_h" type="float" min="0" max="360" default="45">
+			<description><![CDATA[0=side view, 90=top view]]></description>
+		</element>
+		<element name="cam_restrac" type="integer" min="0" max="100" default="10">
+			<description><![CDATA[Restore automatic tracking after some period of time
+(0 to never restore automatic tracking)]]></description>
+		</element>
+		<element name="cam_tracking" type="integer" min="0" max="3" default="1"/>
+		<element name="cam_trspeed" type="float" min="0.1" max="10" default="5"/>
+		<element name="cam_zoom" type="float" min="0.2" max="3" default="0.8"/>
+		<element name="cam_restore" function="true" type="void">
+			<description><![CDATA[Update camera position and restore automatic tracking]]></description>
+<arguments/></element>
+		<element name="moveTarget" function="true" type="void">
+			<description><![CDATA[notify about the target location/size change]]></description>
+			<arguments>
+				<argument name="location x" type="float"/>
+				<argument name="location y" type="float"/>
+				<argument name="location z" type="float"/>
+				<argument name="target size" type="float"/>
+			</arguments>
+		</element>
+		<element name="setTarget" function="true" type="void">
+			<description><![CDATA[select a new target for the camera]]></description>
+			<arguments>
+				<argument name="location x" type="float"/>
+				<argument name="location y" type="float"/>
+				<argument name="location z" type="float"/>
+				<argument name="target size" type="float"/>
+			</arguments>
+		</element>
+		<element name="setViewDir" function="true" type="void">
+			<description><![CDATA[heading: 0..360, height: -90..+90]]></description>
+			<arguments>
+				<argument name="heading angle" type="float"/>
+				<argument name="height angle" type="float"/>
+			</arguments>
+		</element>
+	</type>
+	<type name="VisualStyle" context="Command line interface">
+		<element name="changedProperty" type="integer"/>
+		<element name="changedPropertyId" type="string"/>
+		<element name="code" type="string"/>
+		<element name="info" type="string"/>
+		<element name="modelpan" type="integer" min="0" max="3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="name" type="string"/>
+		<element name="neurons" type="integer" min="0" max="1"/>
+		<element name="shownames" type="integer" min="0" max="1">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="smooth" type="integer" min="0" max="1"/>
+		<element name="style" type="string"/>
+		<element name="tex" type="integer" min="0" max="2"/>
+		<element name="worldpan" type="integer" min="0" max="3">
+			<description><![CDATA[]]></description>
+		</element>
+		<element name="add" function="true"/>
+		<element name="addGroup" function="true"/>
+		<element name="clear" function="true"/>
+		<element name="rebuild" function="true"/>
+		<element name="remove" function="true"/>
+		<element name="removeGroup" function="true"/>
+		<element name="streload" function="true"/>
+	</type>
+	<type name="Window" context="Command line interface">
+<description><![CDATA[Window object, used in the Framsticks Theater application.
+This class has no corresponding static object. If you want to use it, you have to create an object or get a reference to the existing object.
+ See also: GLDisplay]]></description>
+		<element name="backcolor" type="integer">
+			<description><![CDATA[format: 0xAABBGGRR (alpha,blue,green,red)]]></description>
+		</element>
+		<element name="client" type="Object">
+			<description><![CDATA[what is displayed in the window]]></description>
+		</element>
+		<element name="pos_x" type="integer"/>
+		<element name="pos_y" type="integer"/>
+		<element name="size_x" type="integer"/>
+		<element name="size_y" type="integer"/>
+		<element name="style" type="integer">
+			<description><![CDATA[bitfield:
+1 - border
+2 - title
+4 - Opaque background
+8 - Close button
+16 - resizable]]></description>
+		</element>
+		<element name="title" type="string"/>
+	</type>
+</framscript>
Index: /java/Framclipse/com.framsticks.framclipse/res/framscript.xsl
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/res/framscript.xsl	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/res/framscript.xsl	(revision 437)
@@ -0,0 +1,47 @@
+<?xml version="1.0"?>
+<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
+
+<xsl:template match="/">
+  <html><body>
+      <xsl:apply-templates select="//framscript"/>
+  </body></html>
+</xsl:template>
+
+<xsl:template match="framscript">
+  <h1>Framscript Objects</h1>
+  <xsl:apply-templates select="//framscript/type"/>
+</xsl:template>
+
+<xsl:template match="type">
+  <hr/>
+  <table width="100%"><tr><td width="50%" valign="top">
+  <h2><xsl:value-of select="@name"/></h2>
+  <i>defined in <xsl:value-of select="@context"/></i><br/><br/>
+  <xsl:value-of select="description/."/>
+  </td><td valign="top">
+  <ul><xsl:apply-templates select="element"/></ul>
+  </td></tr></table>
+</xsl:template>
+
+<xsl:template match="element">
+  <li><b><xsl:value-of select="@name"/></b> - 
+   <xsl:if test="@function='true'">
+    function <xsl:if test="@type!=''">returning <xsl:value-of select="@type"/></xsl:if>
+    <br/><xsl:value-of select="description/."/>
+    
+    <xsl:if test="count(arguments)!='0'">
+     <ul><xsl:if test="count(arguments/argument)='0'"><u>No arguments</u></xsl:if>
+        <xsl:if test="count(arguments/argument)!='0'"><u>Arguments:</u><xsl:apply-templates select="arguments/argument"/></xsl:if></ul></xsl:if>
+    </xsl:if>
+   <xsl:if test="not(@function='true')">
+    <xsl:value-of select="@type"/> field
+    <xsl:if test="description/. != ''"><br/><xsl:value-of select="description/."/></xsl:if>
+   </xsl:if>
+  </li>
+</xsl:template>
+
+<xsl:template match="argument">
+  <li><b><xsl:value-of select="@name"/></b> - <xsl:value-of select="@type"/></li>
+</xsl:template>
+
+</xsl:stylesheet>
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScript.properties
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScript.properties	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScript.properties	(revision 437)
@@ -0,0 +1,1 @@
+file.extensions=neuro,expdef,style,show,script,inc
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScript.xtext
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScript.xtext	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScript.xtext	(revision 437)
@@ -0,0 +1,288 @@
+grammar com.framsticks.framclipse.FramScript with org.eclipse.xtext.common.Terminals
+
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+
+generate framScript "http://www.framsticks.com/framclipse/FramScript"
+
+Model :
+	(Neuro|Expdef|Style|Show|Script|Include) ;
+	
+FramclipseClass :
+	(Neuro|Expdef|Style|Show|Script|Property|State) ;
+	
+Neuro :
+	'class:' 
+//	'name:' name=ID
+	headers+=NeuroHeader+
+	code=CodeSection
+	(propertyImports+=PropertyIncludeDeclaration |
+	properties+=Property)*
+	;
+
+Expdef :
+	'expdef:' 
+	headers+=Header+
+	code=CodeSection
+	(propertyImports+=PropertyIncludeDeclaration |
+	properties+=Property |
+	states+=State)*
+	;
+	
+Style :
+	'style:'
+	headers+=Header+
+	code=CodeSection
+	(propertyImports+=PropertyIncludeDeclaration |
+	properties+=Property)*
+	;
+	
+Show :
+	'show:'
+	headers+=ShowHeader+
+	code=CodeSection
+	(propertyImports+=PropertyIncludeDeclaration |
+	properties+=Property)*
+	;
+	
+Script :
+	'script:'
+	headers+=Header+
+	code=CodeSection
+	;
+	
+Property :
+	'prop:'
+	headers += PropertyHeader*
+	'id:' name=ID 
+	headers += PropertyHeader+
+	;
+	
+State :
+	'state:' 
+	headers += PropertyHeader*
+	'id:' name=ID 
+	headers += PropertyHeader+
+	;
+	
+Include : {Include}
+	code=Code?
+	(properties+=Property |
+	states+=State)*
+;
+	
+Header :
+	name=ID value=HEADER_VALUE ;
+	
+NeuroHeader returns Header :
+{IntHeader}		name=('prefinputs:' | 'prefoutput:' | 'preflocation:' | 'vhints:') intValue=IntValue |
+{IconHeader}	name='icon:' icon=Icon |
+{IconHeader}	name='icon:~' icon=Icon '~' |
+				Header ;
+				
+Icon : 
+	INT (',' INT)+ ;
+	
+PropertyHeader returns Header :
+	TypeHeader |
+	FlagsHeader |
+	Header ;
+	
+ShowHeader returns Header :
+	name='expdef:' value=ID |
+	Header ;
+	
+FlagsHeader returns Header :
+{IntHeader}	name='flags:' intValue=INT ;
+	
+TypeHeader :
+	name='type:' type=PropertyType ;
+	
+PropertyType :
+	name=ID (min=Number (max=Number default=Number?)? enums+=ENUM_LITERAL* )? ;
+	
+terminal ENUM_LITERAL :
+	'~' !('~'|'\r'|'\n')+ ;
+
+Number :
+	'-'? (INT | DOUBLE) ;
+	
+CodeSection returns Code :
+	'code:~' Code '~' ;
+
+Code :
+	(includes += IncludeDeclaration |
+	globals += Global |
+	functions += Function)+;
+	
+Global returns VariableDeclarations :
+	'global' vars+=VariableDeclaration (',' vars+=VariableDeclaration)* ';' ;
+	
+Function :
+	'function' name=ID (',' aliases+=ID)* '(' (params+=VariableDeclaration (',' params+=VariableDeclaration)*)? ')' code=Block ;
+	
+IncludeDeclaration :
+	'@include' importURI=STRING ;
+	
+PropertyIncludeDeclaration :
+	'#include' importURI=STRING ;
+	
+Block :
+{Block}	'{' statements+=Statement* '}' ;
+	
+Statement :	
+	( VariableDeclarationStatement |
+	ExpressionStatement |
+	DoStatement |
+	ContinueStatement |
+	BreakStatement |
+	ReturnStatement |
+	GotoStatment ) ';' |
+	IncludeDeclaration |
+	Block |
+	SwitchStatement |
+	LabeledStatement |
+	IfStatement |
+	WhileStatement |
+	ForStatement |
+{EmptyStatement} ';' ;
+
+VariableDeclarationStatement returns VariableDeclarations :
+	'var' vars+=VariableDeclaration (',' vars+=VariableDeclaration)* ;
+
+VariableDeclaration :
+	name=ID ('=' value=Expression)?;
+	
+IfStatement :
+	'if' '(' condition=Expression ')' if=Statement ('else' else=Statement)? ;
+	
+ForStatement : 
+	'for' '(' init=Assignment? ';' condition=Expression? ';' step=Assignment? ')' body=Statement ;
+	
+WhileStatement :
+	'while' '(' condition=Expression ')' body=Statement ;
+	
+DoStatement :
+	'do' body=Statement 'while' condition=ParExpression ;
+	
+LabeledStatement :
+	name=ID ':' body=Statement ;
+	
+GotoStatment :
+	'goto' dest=[LabeledStatement] ;
+	
+ReturnStatement :
+{ReturnStatement} 'return' (expr=Expression)? ;
+	
+ContinueStatement :
+{ContinueStatement}	'continue' (dest=[LabeledStatement])? ;
+	
+BreakStatement :
+{BreakStatement} 'break' (dest=[LabeledStatement])? ;
+	
+SwitchStatement :
+	'switch' condition=ParExpression '{' labels+=SwitchGroup* '}' ;
+	
+SwitchGroup : 
+	label=SwitchLabel body=SwitchBlock ;
+	
+SwitchBlock returns Block :
+{Block}	statements+=Statement* ;
+
+SwitchLabel:
+  	'case' expr = Expression ':' |
+{DefaultSwitchLabel} 'default' ':' ;
+	
+ExpressionStatement :
+	Assignment ;
+	
+AssignmentOperator :
+	'=' | '+=' | '-=' | '*=' | '/=' ;
+	
+ParExpression returns Expression:
+	'(' Expression ')' ;
+	
+Assignment :
+	Expression ( {Assignment.left=current} op=AssignmentOperator right=Assignment)? ;
+
+Expression :
+	UnaryExpression ({Expression.left=current} op=Operator right=Expression)? | 
+	WildcardExpression ;
+	
+UnaryExpression  :
+	QualifiedExpression2 ({UnaryExpression.arg=current} op = IncrementOperator)? |
+	op = (IncrementOperator | UnaryOperator) arg = QualifiedExpression2 |
+	Literal ;
+	
+QualifiedExpression2 returns QualifiedExpression :
+	QualifiedExpression |
+	(PropertyAccess|StateAccess) ({QualifiedExpression.parent=current}'.' child=QualifiedExpression )? ;
+	
+QualifiedExpression :
+	ArrayElementExpression ({QualifiedExpression.parent=current}'.' child=QualifiedExpression )? ;
+	
+ArrayElementExpression :
+	TerminalExpression ({ArrayElementExpression.array=current} ('[' indexes+=Expression ']')+ )? ;
+ 
+TerminalExpression:
+				Invocation |
+				Array |
+				Vector | 
+{VariableRef} 	var=[VariableDeclaration];
+ 				
+Invocation :
+	function=[Function] '(' (args+=Expression (',' args+=Expression)*)? ')' ;
+	
+WildcardExpression :
+	value=ID '.*' ;
+	
+PropertyAccess returns QualifiedExpression :
+	('Fields.'|'ExpParams.'|'ShowParams.'|'VisParams.') property=[Property] ;
+	
+StateAccess returns QualifiedExpression :
+	'ExpState.' state=[State] ;
+	
+Literal:
+{IntLiteral}	value=IntValue | 
+{DoubleLiteral}	value=DoubleValue | 
+{StringLiteral}	value=STRING | 
+{HexLiteral}	value=HEX | 
+{NullLiteral}	'null' ;
+
+Array :
+	'[' elements+=Expression (',' elements+=Expression)* ']' ;
+
+Vector  :
+	'(' elements+=Expression (',' elements+=Expression)* ')' ;
+
+Operator : 
+	'+' | '-' | '*'| '/' | 
+	'&'| '|' | '%' |
+	'==' | '!=' | '>=' | '<=' | '<' | '>' |
+	'&&' | '||' ;
+	
+UnaryOperator :
+	'!' | '+' | '-' | 'typeof';
+	
+IncrementOperator :
+	'++' | '--' ;
+	
+IntValue returns ecore::EInt hidden() :
+	('+'|'-')? INT ;
+	
+DoubleValue hidden() :
+	('+'|'-')? DOUBLE ;
+	
+terminal DOUBLE : 
+	('0'..'9')*'.'('0'..'9')+ ('e' INT)? |
+	INT 'e' INT ;
+	
+terminal HEX : 
+	'0x' (('0'..'9')|('a'..'f')|('A'..'F'))+ ;
+	
+terminal HEADER_VALUE : 
+	':' !('~'|' '|'\t'|'\r'|'\n') !('\n'|'\r')* ('\r'? '\n') |
+	':~' -> '~'('\r'? '\n') 
+	;
+	
+terminal SL_COMMENT : ('//' | '# ')  !('\n'|'\r')* ('\r'? '\n')?;
+
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptRuntimeModule.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptRuntimeModule.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptRuntimeModule.java	(revision 437)
@@ -0,0 +1,58 @@
+/*
+ * generated by Xtext
+ */
+package com.framsticks.framclipse;
+
+import org.eclipse.xtext.conversion.IValueConverterService;
+import org.eclipse.xtext.resource.IResourceDescription;
+import org.eclipse.xtext.scoping.impl.ImportUriResolver;
+import org.eclipse.xtext.service.SingletonBinding;
+
+import com.framsticks.framclipse.resource.FramScriptResourceDescriptionManager;
+import com.framsticks.framclipse.scoping.FramScriptImportUriResolver;
+import com.framsticks.framclipse.script.ConstantProvider;
+import com.framsticks.framclipse.script.ExpressionTraverser;
+import com.framsticks.framclipse.script.XMLConstantProvider;
+import com.framsticks.framclipse.script.context.Framscontext;
+import com.framsticks.framclipse.script.model.Framscript;
+import com.thoughtworks.xstream.XStream;
+
+/**
+ * Use this class to register components to be used within the IDE.
+ */
+public class FramScriptRuntimeModule extends com.framsticks.framclipse.AbstractFramScriptRuntimeModule {
+
+	@SingletonBinding
+	public Class<? extends ExpressionTraverser> bindExpressionTraverser() {
+		return ExpressionTraverser.class;
+	}
+
+	@SingletonBinding
+	public Class<? extends ConstantProvider> bindConstantProvider() {
+		return XMLConstantProvider.class;
+	}
+
+	@SingletonBinding
+	public XStream bindXStream() {
+		XStream xstream = new XStream();
+		xstream.processAnnotations(Framscript.class);
+		xstream.processAnnotations(Framscontext.class);
+		return xstream;
+	}
+	
+	@SingletonBinding
+	public Class<? extends IResourceDescription.Manager> bindIResourceDescription$Manager() {
+		return FramScriptResourceDescriptionManager.class;
+	}
+	
+	@SingletonBinding
+	public Class<? extends ImportUriResolver> bindImportUriResolver() {
+		return FramScriptImportUriResolver.class;
+	}
+	
+	@Override
+	public Class<? extends IValueConverterService> bindIValueConverterService() {
+		return FramScriptValueConverterService.class;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptStandaloneSetup.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptStandaloneSetup.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptStandaloneSetup.java	(revision 437)
@@ -0,0 +1,14 @@
+
+package com.framsticks.framclipse;
+
+/**
+ * Initialization support for running Xtext languages 
+ * without equinox extension registry
+ */
+public class FramScriptStandaloneSetup extends FramScriptStandaloneSetupGenerated{
+
+	public static void doSetup() {
+		new FramScriptStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+}
+
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptValueConverterService.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptValueConverterService.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/FramScriptValueConverterService.java	(revision 437)
@@ -0,0 +1,30 @@
+package com.framsticks.framclipse;
+
+import org.eclipse.xtext.common.services.DefaultTerminalConverters;
+import org.eclipse.xtext.conversion.IValueConverter;
+import org.eclipse.xtext.conversion.ValueConverter;
+import org.eclipse.xtext.conversion.ValueConverterException;
+import org.eclipse.xtext.conversion.impl.AbstractToStringConverter;
+import org.eclipse.xtext.parsetree.AbstractNode;
+
+public class FramScriptValueConverterService extends DefaultTerminalConverters {
+
+	@ValueConverter(rule = "HEADER_VALUE")
+	public IValueConverter<String> HEADER_VALUE() {
+
+		return new AbstractToStringConverter<String>() {
+
+			@Override
+			protected String internalToValue(String s, AbstractNode node)
+					throws ValueConverterException {
+				if (s.startsWith(":~")) {
+					return s.substring(2, s.lastIndexOf('~')).trim();
+				} else {
+					return s.substring(1).trim();
+				}
+			}
+
+		};
+	}
+	
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/GenerateFramScript.mwe2
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/GenerateFramScript.mwe2	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/GenerateFramScript.mwe2	(revision 437)
@@ -0,0 +1,107 @@
+module com.framsticks.framclipse.FramScript
+
+import org.eclipse.emf.mwe.utils.*
+import org.eclipse.xtext.generator.*
+import org.eclipse.xtext.ui.generator.*
+
+var grammarURI = "classpath:/com/framsticks/framclipse/FramScript.xtext"
+var file.extensions = "neuro, expdef, style, show, script, inc"
+var projectName = "com.framsticks.framclipse"
+var runtimeProject = "../${projectName}"
+
+Workflow {
+    bean = StandaloneSetup {
+		platformUri = "${runtimeProject}/.."
+	}
+	
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}/src-gen"
+	}
+	
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}.ui/src-gen"
+	}
+	
+	component = Generator {
+		pathRtProject = runtimeProject
+		pathUiProject = "${runtimeProject}.ui"
+		projectNameRt = projectName
+		projectNameUi = "${projectName}.ui"
+		
+		language = {
+			uri = grammarURI
+			fileExtensions = file.extensions
+			
+			// Java API to access grammar elements (required by several other fragments)
+			fragment = grammarAccess.GrammarAccessFragment {}
+			
+			// generates Java API for the generated EPackages 
+			fragment = ecore.EcoreGeneratorFragment {
+			// referencedGenModels = "uri to genmodel, uri to next genmodel"
+			}
+			
+			// the serialization component
+			fragment = parseTreeConstructor.ParseTreeConstructorFragment {}
+			
+			// a custom ResourceFactory for use with EMF 
+			fragment = resourceFactory.ResourceFactoryFragment {
+				fileExtensions = file.extensions
+			}
+				
+			// the following fragment tries to use the Antlr Generator fragment which can be installed via update manager from http://download.itemis.com/updates/
+			fragment = AntlrDelegatingFragment {}
+			
+			// java-based API for validation 
+			fragment = validation.JavaValidatorFragment {
+                composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
+                composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+                // registerForImportedPackages = true
+            }
+            
+			// scoping and exporting API
+			/*
+			fragment = scoping.ImportURIScopingFragment {}
+			fragment = exporting.SimpleNamesFragment {}
+			*/
+			
+			// scoping and exporting API 
+			fragment = scoping.ImportURIScopingFragment {}
+			fragment = exporting.QualifiedNamesFragment {}
+			
+			// formatter API 
+			fragment = formatting.FormatterFragment {}
+
+			// labeling API 
+			fragment = labeling.LabelProviderFragment {}
+
+			// outline API 
+			fragment = outline.TransformerFragment {}
+			fragment = outline.OutlineNodeAdapterFactoryFragment {}
+			fragment = outline.QuickOutlineFragment {}
+
+			// java-based API for content assistance 
+			fragment = contentAssist.JavaBasedContentAssistFragment {}
+			
+			// the following fragment tries to use the Antlr based content assist 
+			//     fragment which can be downloaded from http://www.itemis.com 
+			//     and will be ignored if it's not available. 
+			fragment = DelegatingGeneratorFragment { 
+				delegate = "de.itemis.xtext.antlr.XtextAntlrUiGeneratorFragment"
+				message="You are generating without ANTLR. It is highly recommended to download and use the plugin \'de.itemis.xtext.antlr\' \n\t using the update site http:\//download.itemis.com/updates/."
+			}
+
+			fragment = builder.BuilderIntegrationFragment {}
+
+			// project wizard (optional) 
+			/*
+			fragment = projectWizard.SimpleProjectWizardFragment {
+				generatorProjectName = "${projectName}.generator" 
+				modelFileExtension = file.extensions
+			}
+			*/
+			
+			// quickfix API 
+			fragment = quickfix.QuickfixProviderFragment {}			
+		}
+	}
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/formatting/FramScriptFormatter.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/formatting/FramScriptFormatter.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/formatting/FramScriptFormatter.java	(revision 437)
@@ -0,0 +1,167 @@
+/*
+ * generated by Xtext
+ */
+package com.framsticks.framclipse.formatting;
+
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
+import org.eclipse.xtext.formatting.impl.FormattingConfig;
+
+import com.framsticks.framclipse.services.FramScriptGrammarAccess;
+import com.framsticks.framclipse.services.FramScriptGrammarAccess.ArrayElementExpressionElements;
+import com.framsticks.framclipse.services.FramScriptGrammarAccess.BlockElements;
+import com.framsticks.framclipse.services.FramScriptGrammarAccess.ForStatementElements;
+import com.framsticks.framclipse.services.FramScriptGrammarAccess.FunctionElements;
+import com.framsticks.framclipse.services.FramScriptGrammarAccess.IfStatementElements;
+import com.framsticks.framclipse.services.FramScriptGrammarAccess.WhileStatementElements;
+
+/**
+ * This class contains custom formatting description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
+ * on how and when to use it
+ * 
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an
+ * example
+ */
+public class FramScriptFormatter extends AbstractDeclarativeFormatter {
+	
+	@Override
+	protected FramScriptGrammarAccess getGrammarAccess() {
+		return (FramScriptGrammarAccess) super.getGrammarAccess();
+	}
+
+	@Override
+	protected void configureFormatting(FormattingConfig c) {
+		FramScriptGrammarAccess f = getGrammarAccess();
+		
+		//Headers
+		c.setLinewrap().after(f.getNeuroAccess().getClassKeyword_0());
+		
+		c.setLinewrap().after(f.getExpdefAccess().getExpdefKeyword_0());
+		
+		c.setLinewrap().before(f.getPropertyAccess().getPropKeyword_0());
+		c.setLinewrap().after(f.getPropertyAccess().getPropKeyword_0());
+		c.setLinewrap().after(f.getPropertyAccess().getNameAssignment_3());
+		c.setNoSpace().before(f.getPropertyAccess().getNameAssignment_3());
+		
+		c.setLinewrap().before(f.getStateAccess().getStateKeyword_0());
+		c.setLinewrap().after(f.getStateAccess().getStateKeyword_0());
+		c.setLinewrap().after(f.getStateAccess().getNameAssignment_3());
+		c.setNoSpace().before(f.getStateAccess().getNameAssignment_3());
+		
+		c.setNoSpace().before(f.getHeaderAccess().getValueAssignment_1());
+		
+		c.setLinewrap().after(f.getNeuroHeaderAccess().getIntValueAssignment_0_2());
+		c.setNoSpace().after(f.getNeuroHeaderAccess().getNameAssignment_0_1());
+		
+		c.setLinewrap().after(f.getNeuroHeaderAccess().getIconAssignment_1_2());
+		c.setNoSpace().before(f.getNeuroHeaderAccess().getIconAssignment_2_2());
+		
+		c.setLinewrap().after(f.getNeuroHeaderAccess().getNameIconKeyword_2_1_0());
+		c.setLinewrap().after(f.getNeuroHeaderAccess().getIconAssignment_2_2());
+		c.setLinewrap().after(f.getNeuroHeaderAccess().getTildeKeyword_2_3());
+		
+		c.setNoSpace().around(f.getIconAccess().getCommaKeyword_1_0());
+		
+		c.setLinewrap().after(f.getFlagsHeaderAccess().getIntValueAssignment_2());
+		c.setNoSpace().before(f.getFlagsHeaderAccess().getIntValueAssignment_2());
+		
+		c.setNoSpace().after(f.getTypeHeaderAccess().getNameTypeKeyword_0_0());
+		c.setLinewrap().after(f.getTypeHeaderAccess().getTypeAssignment_1());
+		
+		c.setLinewrap().after(f.getCodeSectionAccess().getCodeKeyword_0());
+		c.setLinewrap().after(f.getCodeSectionAccess().getCodeParserRuleCall_1());
+		c.setLinewrap(2).after(f.getCodeSectionAccess().getTildeKeyword_2());
+		
+		//Members
+		c.setLinewrap(2).before(f.getFunctionAccess().getFunctionKeyword_0());
+		c.setLinewrap(2).before(f.getGlobalAccess().getGlobalKeyword_0());
+
+		// Line
+		Keyword semicolon = f.getStatementAccess().getSemicolonKeyword_0_1();
+		c.setLinewrap().after(semicolon);
+		c.setNoSpace().before(semicolon);
+		c.setNoLinewrap().before(semicolon);
+		
+		//Function
+		FunctionElements function = f.getFunctionAccess();
+		c.setNoSpace().around(function.getLeftParenthesisKeyword_3());
+		c.setNoSpace().around(function.getRightParenthesisKeyword_5());
+		c.setNoSpace().before(function.getCommaKeyword_2_0());
+		c.setNoSpace().before(function.getCommaKeyword_4_1_0());
+
+		// BlockIndentation
+		BlockElements block = f.getBlockAccess();
+		c.setIndentation(block.getLeftCurlyBracketKeyword_1(), 
+				block.getRightCurlyBracketKeyword_3());
+		c.setLinewrap().before(block.getLeftCurlyBracketKeyword_1());
+		c.setLinewrap().after(block.getLeftCurlyBracketKeyword_1());
+		c.setLinewrap().after(block.getRightCurlyBracketKeyword_3());
+
+		// Param
+		Keyword fullStop = f.getQualifiedExpressionAccess().getFullStopKeyword_1_1();
+		c.setNoLinewrap().around(fullStop);
+		c.setNoSpace().around(fullStop);
+		c.setNoSpace().after(f.getPropertyAccessAccess().getAlternatives_0());
+		
+		// Invocation
+		c.setNoSpace().around(f.getInvocationAccess().getLeftParenthesisKeyword_1());
+		c.setNoSpace().around(f.getInvocationAccess().getRightParenthesisKeyword_3());
+		c.setNoSpace().before(f.getInvocationAccess().getCommaKeyword_2_1_0());
+		
+		// Array element access
+		ArrayElementExpressionElements arrayElement = f.getArrayElementExpressionAccess();
+		c.setNoSpace().around(arrayElement.getLeftSquareBracketKeyword_1_1_0());
+		c.setNoSpace().around(arrayElement.getRightSquareBracketKeyword_1_1_2());
+		
+		//Arrays
+		c.setNoSpace().after(f.getArrayAccess().getLeftSquareBracketKeyword_0());
+		c.setNoSpace().before(f.getArrayAccess().getRightSquareBracketKeyword_3());
+		c.setNoSpace().before(f.getArrayAccess().getCommaKeyword_2_0());
+		
+		// Unary expression
+		c.setNoSpace().before(f.getUnaryExpressionAccess().getOpAssignment_0_1_1());
+		c.setNoSpace().after(f.getUnaryExpressionAccess().getOpAssignment_1_0());
+		
+		// Parenthesis
+		c.setNoSpace().after(f.getParExpressionAccess().getLeftParenthesisKeyword_0());
+		c.setNoSpace().before(f.getParExpressionAccess().getRightParenthesisKeyword_2());
+		
+		// If
+		IfStatementElements ifStmt = f.getIfStatementAccess();
+		configureParenthesis(c, ifStmt.getLeftParenthesisKeyword_1(), 
+				ifStmt.getRightParenthesisKeyword_3());
+		
+		// For
+		ForStatementElements forStmt = f.getForStatementAccess();
+		configureParenthesis(c, forStmt.getLeftParenthesisKeyword_1(), 
+				forStmt.getRightParenthesisKeyword_7());
+		c.setNoSpace().before(forStmt.getSemicolonKeyword_3());
+		c.setNoSpace().before(forStmt.getSemicolonKeyword_5());
+		
+		// While
+		WhileStatementElements whileStmt = f.getWhileStatementAccess();
+		configureParenthesis(c, whileStmt.getLeftParenthesisKeyword_1(), 
+			whileStmt.getRightParenthesisKeyword_3());
+		
+		// comments
+		c.setNoLinewrap().before(f.getSL_COMMENTRule());
+		
+//		c.setNoSpace().before(f.getVariableDeclarationsAccess().getCommaKeyword_1_1());
+		c.setNoLinewrap().after(f.getExpressionAccess().getOpAssignment_0_1_1());
+		
+		configureParenthesis(c, f.getVectorAccess().getLeftParenthesisKeyword_0(), 
+				f.getVectorAccess().getRightParenthesisKeyword_3());
+		c.setNoSpace().before(f.getVectorAccess().getCommaKeyword_2_0());
+		
+		c.setNoSpace().before(f.getWildcardExpressionAccess().getFullStopAsteriskKeyword_1());
+	}
+
+	private void configureParenthesis(FormattingConfig c, Keyword left,
+			Keyword right) {
+		c.setNoSpace().after(left);
+		c.setNoSpace().before(right);
+//		c.setLinewrap().after(right);
+	}
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/Proposable.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/Proposable.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/Proposable.java	(revision 437)
@@ -0,0 +1,14 @@
+package com.framsticks.framclipse.framScript;
+
+import java.util.Map;
+
+
+public interface Proposable {
+
+	String display();
+
+	String proposal();
+
+	Map<String, String> description();
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/ProposableFunctionImpl.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/ProposableFunctionImpl.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/ProposableFunctionImpl.java	(revision 437)
@@ -0,0 +1,55 @@
+package com.framsticks.framclipse.framScript;
+
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.framsticks.framclipse.framScript.impl.FunctionImpl;
+import com.framsticks.framclipse.script.model.Argument;
+import com.framsticks.framclipse.script.model.Element;
+
+public class ProposableFunctionImpl extends FunctionImpl implements Proposable {
+
+	private final String display;
+	private final String proposal;
+	private final Map<String, String> description = new LinkedHashMap<String, String>();
+
+	public ProposableFunctionImpl(Element element) {
+		assert element.isFunction();
+		name = element.getName();
+		display = name + element.argumentsString(true) + " : " + element.returnType();
+		proposal = name + element.argumentsString(false) + ("void".equals(element.returnType()) ? ";" : "");
+		createDescription(element);
+	}
+
+	private void createDescription(Element element) {
+		description.put("Description", element.getDescription());
+		description.put("Returns", element.returnType());
+		description.put("Arguments", createArguments(element.getArguments()));
+	}
+
+	private String createArguments(List<Argument> args) {
+		StringBuilder builder = new StringBuilder();
+		for (int i = 0; i < args.size(); i++) {
+			Argument a = args.get(i);
+			builder.append(a.getName(i) + " : " + a.getType() + "\n");
+		}
+		return builder.toString();
+	}
+
+	@Override
+	public String display() {
+		return display;
+	}
+
+	@Override
+	public String proposal() {
+		return proposal;
+	}
+
+	@Override
+	public Map<String, String> description() {
+		return description;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/ProposableVariableDeclarationImpl.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/ProposableVariableDeclarationImpl.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/framScript/ProposableVariableDeclarationImpl.java	(revision 437)
@@ -0,0 +1,62 @@
+package com.framsticks.framclipse.framScript;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+import com.framsticks.framclipse.framScript.impl.VariableDeclarationImpl;
+import com.framsticks.framclipse.script.model.Element;
+import com.framsticks.framclipse.script.model.Type;
+
+public class ProposableVariableDeclarationImpl extends VariableDeclarationImpl implements Proposable {
+
+	private final boolean type;
+	private final String display, proposal;
+	private final Map<String, String> description = new LinkedHashMap<String, String>();
+
+	public ProposableVariableDeclarationImpl(Element element) {
+		assert !element.isFunction();
+		type = false;
+		name = element.getName();
+		proposal = name;
+		display = name + " : " + element.returnType();
+		createDescription(element);
+	}
+
+	public ProposableVariableDeclarationImpl(Type type) {
+		this.type = true;
+		name = type.getName();
+		proposal = name + ".";
+		display = name;
+		createDescription(type);
+	}
+
+	private void createDescription(Element element) {
+		description.put("Description", element.getDescription());
+		description.put("Returns", element.returnType());
+	}
+
+	private void createDescription(Type type) {
+		description.put("Description", type.getDescription());
+		description.put("Context", type.getContext());
+	}
+
+	@Override
+	public String display() {
+		return display;
+	}
+
+	@Override
+	public String proposal() {
+		return proposal;
+	}
+
+	@Override
+	public Map<String, String> description() {
+		return description;
+	}
+	
+	public boolean isType() {
+		return type;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/resource/FramScriptResourceDescription.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/resource/FramScriptResourceDescription.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/resource/FramScriptResourceDescription.java	(revision 437)
@@ -0,0 +1,56 @@
+package com.framsticks.framclipse.resource;
+
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.naming.IQualifiedNameProvider;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.impl.DefaultResourceDescription;
+
+import com.framsticks.framclipse.framScript.Code;
+import com.framsticks.framclipse.framScript.Property;
+import com.framsticks.framclipse.framScript.State;
+import com.framsticks.framclipse.framScript.VariableDeclaration;
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+import com.google.common.collect.Lists;
+
+public class FramScriptResourceDescription extends DefaultResourceDescription {
+
+	public FramScriptResourceDescription(Resource resource,
+			IQualifiedNameProvider nameProvider) {
+		super(resource, nameProvider);
+	}
+
+	@Override
+	protected List<IEObjectDescription> computeExportedObjects() {
+		List<IEObjectDescription> objects = super.computeExportedObjects();
+		Iterable<IEObjectDescription> filter = Iterables.filter(objects,
+				new Predicate<IEObjectDescription>() {
+
+					@Override
+					public boolean apply(IEObjectDescription desc) {
+						EObject input = desc.getEObjectOrProxy();
+						return shouldExport(input);
+					}
+
+				});
+		return Lists.newArrayList(filter);
+	}
+
+	protected boolean shouldExport(EObject input) {
+		return input instanceof com.framsticks.framclipse.framScript.Function
+				|| input instanceof Property || input instanceof State
+				|| isGlobal(input);
+	}
+
+	private boolean isGlobal(EObject input) {
+		if (input instanceof VariableDeclaration) {
+			VariableDeclaration dec = (VariableDeclaration) input;
+			return dec.eContainer().eContainer() instanceof Code;
+		}
+		return false;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/resource/FramScriptResourceDescriptionManager.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/resource/FramScriptResourceDescriptionManager.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/resource/FramScriptResourceDescriptionManager.java	(revision 437)
@@ -0,0 +1,21 @@
+package com.framsticks.framclipse.resource;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.resource.IResourceDescription;
+import org.eclipse.xtext.resource.impl.DefaultResourceDescriptionManager;
+
+import com.google.inject.Provider;
+
+public class FramScriptResourceDescriptionManager extends
+		DefaultResourceDescriptionManager {
+
+	private static final String CACHE_KEY = FramScriptResourceDescriptionManager.class.getName() + "#getResourceDescription";
+	
+	public IResourceDescription getResourceDescription(final Resource resource) {
+		return getCache().get(CACHE_KEY, resource, new Provider<IResourceDescription>(){
+			public IResourceDescription get() {
+				return new FramScriptResourceDescription(resource, getNameProvider());
+			}});
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/scoping/FramScriptImportUriResolver.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/scoping/FramScriptImportUriResolver.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/scoping/FramScriptImportUriResolver.java	(revision 437)
@@ -0,0 +1,19 @@
+package com.framsticks.framclipse.scoping;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.scoping.impl.ImportUriResolver;
+
+import com.framsticks.framclipse.framScript.Header;
+
+public class FramScriptImportUriResolver extends ImportUriResolver {
+	@Override
+	public String apply(EObject from) {
+		if (from instanceof Header) {
+			Header header = (Header) from;
+			if (header.getName().equals("expdef:")) {
+				return header.getValue() + ".expdef";
+			}
+		}
+		return super.apply(from);
+	}
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/scoping/FramScriptScopeProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/scoping/FramScriptScopeProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/scoping/FramScriptScopeProvider.java	(revision 437)
@@ -0,0 +1,273 @@
+/*
+ * generated by Xtext
+ */
+package com.framsticks.framclipse.scoping;
+
+import static com.framsticks.framclipse.framScript.FramScriptPackage.Literals.ARRAY_ELEMENT_EXPRESSION__ARRAY;
+import static com.framsticks.framclipse.framScript.FramScriptPackage.Literals.QUALIFIED_EXPRESSION__CHILD;
+import static com.framsticks.framclipse.framScript.FramScriptPackage.Literals.QUALIFIED_EXPRESSION__PARENT;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.emf.ecore.EStructuralFeature;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.resource.impl.ResourceImpl;
+import org.eclipse.xtext.resource.EObjectDescription;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.scoping.IScope;
+import org.eclipse.xtext.scoping.Scopes;
+import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
+import org.eclipse.xtext.scoping.impl.SimpleScope;
+
+import com.framsticks.framclipse.framScript.Block;
+import com.framsticks.framclipse.framScript.Code;
+import com.framsticks.framclipse.framScript.FramScriptFactory;
+import com.framsticks.framclipse.framScript.Function;
+import com.framsticks.framclipse.framScript.GotoStatment;
+import com.framsticks.framclipse.framScript.Invocation;
+import com.framsticks.framclipse.framScript.LabeledStatement;
+import com.framsticks.framclipse.framScript.Model;
+import com.framsticks.framclipse.framScript.ProposableFunctionImpl;
+import com.framsticks.framclipse.framScript.ProposableVariableDeclarationImpl;
+import com.framsticks.framclipse.framScript.QualifiedExpression;
+import com.framsticks.framclipse.framScript.Statement;
+import com.framsticks.framclipse.framScript.VariableDeclaration;
+import com.framsticks.framclipse.framScript.VariableDeclarations;
+import com.framsticks.framclipse.framScript.VariableRef;
+import com.framsticks.framclipse.script.ConstantProvider;
+import com.framsticks.framclipse.script.ExpressionTraverser;
+import com.framsticks.framclipse.script.model.Element;
+import com.framsticks.framclipse.script.model.Type;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Maps;
+import com.google.inject.Inject;
+
+/**
+ * This class contains custom scoping description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#scoping
+ * on how and when to use it 
+ *
+ */
+public class FramScriptScopeProvider extends AbstractDeclarativeScopeProvider {
+	
+	private final ConstantProvider provider;
+	
+	private final ExpressionTraverser traverser;
+	
+	private Resource resource;
+	
+	private Map<String, IScope> typesScopes = Maps.newHashMap();
+	private Map<Type, IScope> functionScopes = Maps.newHashMap();
+	private Map<Type, IScope> fieldScopes = Maps.newHashMap();
+	
+	@Inject
+	public FramScriptScopeProvider(ConstantProvider provider, ExpressionTraverser traverser) {
+		this.provider = provider;
+		this.traverser = traverser;
+		this.resource = new ResourceImpl(URI.createURI("/"));
+		initTypes();
+	}
+	
+	protected void initTypes() {
+		List<Function> allFunctions = Lists.newArrayList();
+		List<VariableDeclaration> allFields = Lists.newArrayList();
+		
+		for (Entry<String, Map<String, Type>> entry : provider.getTypes().entrySet()) {
+			List<VariableDeclaration> types = Lists.newArrayList();	
+			for (Type type : entry.getValue().values()) {
+				types.add(createType(type));
+				
+				ArrayList<Function> functions = Lists.newArrayList();
+				ArrayList<VariableDeclaration> fields = Lists.newArrayList();
+				for (Element element : type.getElements()) {
+					if (element.isFunction()) {
+						functions.add(createFunction(element));
+					} else {
+						fields.add(createField(element));
+					}
+				}
+				functionScopes.put(type, Scopes.scopeFor(functions));
+				fieldScopes.put(type, Scopes.scopeFor(fields));
+				allFunctions.addAll(functions);
+				allFields.addAll(fields);
+			}
+			typesScopes.put(entry.getKey(), Scopes.scopeFor(types));
+		}
+		
+		functionScopes.put(null, Scopes.scopeFor(allFunctions));
+		fieldScopes.put(null, Scopes.scopeFor(allFields));
+	}
+	
+	protected IScope scope_Invocation_function(Invocation inv, EReference ref) {
+		QualifiedExpression parent = getParent(inv);
+		IScope scope;
+		if (parent != null) {
+			scope = scope_Invocation_function(parent, ref);
+		} else {
+			scope = scope_Invocation_function(getFunction(inv), ref);
+		}
+		scope = filterByArgumentsCount(scope, inv.getArgs().size());
+		return scope;
+	}
+
+	protected IScope scope_Invocation_function(QualifiedExpression inv, EReference ref) {
+		Type type = traverser.getLastType(inv);
+		IScope scope = functionScopes.get(type);
+		return scope != null ? scope : IScope.NULLSCOPE;
+	}
+
+	protected IScope scope_Invocation_function(Function f, EReference ref) {
+		IScope scope = delegateGetScope(f, ref);
+		scope = addAliases(scope);
+		return scope;
+	}
+
+	private IScope filterByArgumentsCount(IScope scope, int size) {
+		List<IEObjectDescription> filtered = Lists.newArrayList();
+		for (IEObjectDescription desc : scope.getContents()) {
+			Function function = (Function) desc.getEObjectOrProxy();
+			if (function.getParams().size() == size) {
+				filtered.add(desc);
+			}
+		}
+		return new SimpleScope(scope.getOuterScope(), filtered);
+	}
+	
+	private IScope addAliases(IScope scope) {
+		Iterable<IEObjectDescription> contents = scope.getContents();
+		List<IEObjectDescription> withAliases = Lists.newArrayList(contents);
+		for (IEObjectDescription desc : contents) {
+			Function function = (Function) desc.getEObjectOrProxy();
+			for (String string : function.getAliases()) {
+				withAliases.add(EObjectDescription.create(string, function));
+			}
+		}
+		return new SimpleScope(scope.getOuterScope(), withAliases);
+	}
+
+	protected IScope scope_VariableRef_var(VariableRef var, EReference ref) {
+		QualifiedExpression parent = getParent(var);
+		if (parent != null) {
+			return scope_VariableRef_var(parent, ref);
+		} else {
+			return scope_VariableRef_var(getBlock(var), ref);
+		}
+	}
+
+	protected IScope scope_VariableRef_var(QualifiedExpression var, EReference ref) {
+		Type type = traverser.getLastType(var);
+		IScope scope = fieldScopes.get(type);
+		return scope != null ? scope : IScope.NULLSCOPE;
+	}
+	
+	protected IScope scope_VariableRef_var(Block block, EReference ref) {
+		List<VariableDeclaration> vars = Lists.newArrayList();
+		for (Statement stmt : block.getStatements()) {
+			if (stmt instanceof VariableDeclarations) {
+				vars.addAll(((VariableDeclarations) stmt).getVars());
+			}
+		}
+		return Scopes.scopeFor(vars, getScope(block.eContainer(), ref));
+	}
+	
+	protected IScope scope_VariableRef_var(Function f, EReference ref) {
+		List<VariableDeclaration> vars = Lists.newArrayList();
+		vars.addAll(f.getParams());
+		return Scopes.scopeFor(vars, getScope(f.eContainer(), ref));
+	}
+	
+	protected IScope scope_VariableRef_var(Code code, EReference ref) {
+		List<VariableDeclaration> vars = Lists.newArrayList();
+		for (VariableDeclarations declarations : code.getGlobals()) {
+			vars.addAll(declarations.getVars());
+		}
+		return Scopes.scopeFor(vars, getScope(code.eContainer(), ref));
+	}
+	
+	protected IScope scope_VariableRef_var(Model model, EReference ref) {
+		IScope outerScope = delegateGetScope(model, ref).getOuterScope();
+		IScope types = typesScopes.get(getExtension(model));
+		return new SimpleScope(outerScope, types.getContents());
+	}
+
+	protected IScope scope_GotoStatment_dest(GotoStatment stmt, EReference ref) {
+		Block code = getFunction(stmt).getCode();
+		List<LabeledStatement> labels = Lists.newArrayList();
+		for (TreeIterator<EObject> i = code.eAllContents(); i.hasNext();) {
+			EObject object = i.next();
+			if (object instanceof LabeledStatement) {
+				labels.add((LabeledStatement) object);
+			}
+		}
+		return Scopes.scopeFor(labels);
+	}
+	
+	private Function createFunction(Element element) {
+		Function function = new ProposableFunctionImpl(element);
+		EList<VariableDeclaration> params = function.getParams();
+		for (int i = 0; i < element.getArguments().size(); i++) {
+			params.add(createVariableDeclaration(element.getArguments().get(i).getName(i)));
+		}
+		resource.getContents().add(function);
+		return function;
+	}
+
+	private VariableDeclaration createField(Element element) {
+		VariableDeclaration field = new ProposableVariableDeclarationImpl(element);
+		resource.getContents().add(field);
+		return field;
+	}
+
+	private VariableDeclaration createType(Type type) {
+		VariableDeclaration global = new ProposableVariableDeclarationImpl(type);
+		resource.getContents().add(global);
+		return global;
+	}
+	
+	private VariableDeclaration createVariableDeclaration(String name) {
+		VariableDeclaration var = FramScriptFactory.eINSTANCE.createVariableDeclaration();
+		var.setName(name);
+		resource.getContents().add(var);
+		return var;
+	}
+	
+	private QualifiedExpression getParent(QualifiedExpression expr) {
+		EStructuralFeature feature = expr.eContainingFeature();
+		if (feature.equals(QUALIFIED_EXPRESSION__CHILD)) {
+			return (QualifiedExpression) expr.eContainer();
+		} else if (feature.equals(QUALIFIED_EXPRESSION__PARENT) 
+				|| feature.equals(ARRAY_ELEMENT_EXPRESSION__ARRAY)) {
+			return getParent((QualifiedExpression) expr.eContainer());
+		} else {
+			return null;
+		}
+	}
+	
+	private Block getBlock(EObject object) {
+		while (object != null && !(object instanceof Block)) {
+			object = object.eContainer();
+		}
+		return (Block) object;
+	}
+	
+	private Function getFunction(EObject object) {
+		while (object != null && !(object instanceof Function)) {
+			object = object.eContainer();
+		}
+		return (Function) object;
+	}
+	
+	private String getExtension(EObject object) {
+		return object.eResource().getURI().fileExtension();
+	}
+	
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/ConstantProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/ConstantProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/ConstantProvider.java	(revision 437)
@@ -0,0 +1,13 @@
+package com.framsticks.framclipse.script;
+
+import java.util.Map;
+
+import com.framsticks.framclipse.script.model.Type;
+
+public interface ConstantProvider {
+
+	Type getType(String name, String extension);
+	
+	Map<String, Map<String, Type>> getTypes();
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/ExpressionTraverser.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/ExpressionTraverser.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/ExpressionTraverser.java	(revision 437)
@@ -0,0 +1,104 @@
+package com.framsticks.framclipse.script;
+
+import java.util.ArrayDeque;
+import java.util.Queue;
+
+import org.eclipse.emf.ecore.EObject;
+
+import com.framsticks.framclipse.framScript.ArrayElementExpression;
+import com.framsticks.framclipse.framScript.Invocation;
+import com.framsticks.framclipse.framScript.QualifiedExpression;
+import com.framsticks.framclipse.framScript.VariableRef;
+import com.framsticks.framclipse.script.model.Element;
+import com.framsticks.framclipse.script.model.Type;
+import com.google.inject.Inject;
+
+public class ExpressionTraverser {
+
+	@Inject
+	private ConstantProvider provider;
+
+	public Type getLastType(QualifiedExpression expr) {
+		String ext = getExtension(expr);
+		Queue<String> fragments = getExpressionFragments(expr);
+		Type type = provider.getType(fragments.poll(), ext);
+
+		while (!fragments.isEmpty() && type != null) {
+			Element element = type.getElement(fragments.poll());
+			type = element != null ? provider.getType(element.getType(), ext) : null;
+		}
+		return type;
+	}
+
+	public Element getLastElement(QualifiedExpression expression) {
+		if (expression.eContainer() instanceof QualifiedExpression) {
+			QualifiedExpression container = (QualifiedExpression) expression.eContainer();
+			if (expression == container.getChild()) { // last part of complex expression
+				String last = getFragmentName(expression);
+				Type type = getLastType(container);
+				return type != null ? type.getElement(last) : null;
+			} else {
+				Element element = getLastElement(container);
+				if (element != null) {
+					return element;
+				}
+			}
+		}
+		return null;
+	}
+
+	public Element getLastElementFromContainer(QualifiedExpression container) {
+		String ext = getExtension(container);
+		Queue<String> fragments = getExpressionFragments(container);
+		Type type = provider.getType(fragments.poll(), ext);
+		Element element = type != null ? type.getElement(fragments.poll()) : null;
+
+		while (!fragments.isEmpty() && element != null) {
+			type = element != null ? provider.getType(element.getType(), ext) : null;
+			element = type.getElement(fragments.poll());
+		}
+		return element;
+	}
+
+	public Queue<String> getExpressionFragments(QualifiedExpression expr) {
+		return getExpressionFragments(expr, new ArrayDeque<String>());
+	}
+
+	protected Queue<String> getExpressionFragments(QualifiedExpression expr, Queue<String> fragments) {
+		QualifiedExpression parent = expr.getParent();
+		if (expr != null && parent != null) {
+			EObject eContainer = expr.eContainer();
+			if (eContainer instanceof QualifiedExpression) {
+				getExpressionFragments((QualifiedExpression) eContainer, fragments);
+			}
+			if (parent instanceof ArrayElementExpression) {
+				ArrayElementExpression ae = (ArrayElementExpression) parent;
+				if (ae.getArray() != null) {
+					fragments.add(getFragmentName(ae.getArray()));
+					for (int i = 0; i < ae.getIndexes().size(); i++) {
+						fragments.add("get");
+					}
+				}
+			}
+			String name = getFragmentName(parent);
+			if (name != null) {
+				fragments.add(name);
+			}
+		}
+		return fragments;
+	}
+
+	public String getFragmentName(QualifiedExpression expr) {
+		if (expr instanceof VariableRef) {
+			return ((VariableRef) expr).getVar().getName();
+		} else if (expr instanceof Invocation) {
+			return ((Invocation) expr).getFunction().getName();
+		}
+		return null; // FIXME azer staf
+	}
+	
+	private String getExtension(EObject object) {
+		return object.eResource().getURI().fileExtension();
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/XMLConstantProvider.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/XMLConstantProvider.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/XMLConstantProvider.java	(revision 437)
@@ -0,0 +1,118 @@
+package com.framsticks.framclipse.script;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.commons.io.IOUtils;
+import org.eclipse.core.runtime.ILog;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.osgi.framework.Bundle;
+
+import com.framsticks.framclipse.script.context.Context;
+import com.framsticks.framclipse.script.context.File;
+import com.framsticks.framclipse.script.context.Framscontext;
+import com.framsticks.framclipse.script.model.Framscript;
+import com.framsticks.framclipse.script.model.Type;
+import com.google.common.collect.Maps;
+import com.google.common.collect.Multimap;
+import com.google.common.collect.Multimaps;
+import com.google.inject.Inject;
+import com.thoughtworks.xstream.XStream;
+
+public class XMLConstantProvider implements ConstantProvider {
+
+	private static final Bundle BUNDLE = Platform.getBundle("com.framsticks.framclipse");
+	private static final ILog LOG = Platform.getLog(BUNDLE);
+
+	private final static Map<String, Type> COMMON_TYPES;
+	static {
+		Map<String, Type> nullContext = new HashMap<String, Type>(Type.BUILT_IN.length);
+		for (Type t : Type.BUILT_IN) {
+			nullContext.put(t.getName(), t);
+		}
+		COMMON_TYPES = Collections.unmodifiableMap(nullContext);
+	}
+
+	private final Map<String, Map<String, Type>> types;
+
+	@Inject
+	public XMLConstantProvider(XStream xstream) {
+		Framscript framscript = loadFile(xstream, "framscript.xml");
+		Framscontext framscontext = loadFile(xstream, "framscontext.xml");
+		if (framscript != null && framscontext != null) {
+			types = createTypeMappings(framscontext, framscript);
+		} else {
+			types = Collections.emptyMap();
+		}
+	}
+
+	@SuppressWarnings("unchecked")
+	private <T> T loadFile(XStream xstream, String filename) {
+		InputStream input = null;
+		try {
+			input = BUNDLE.getResource(filename).openStream();
+			return (T) xstream.fromXML(input);
+		} catch (IOException e) {
+			LOG.log(new Status(IStatus.ERROR, BUNDLE.getSymbolicName(), e.getLocalizedMessage()));
+			return null;
+		} finally {
+			IOUtils.closeQuietly(input);
+		}
+	}
+
+	private Map<String, Map<String, Type>> createTypeMappings(Framscontext framscontext, Framscript framscript) {
+		Map<String, Map<String, Type>> types = Maps.newHashMap();
+		Multimap<String, String> ext2ctx = ext2Ctx(framscontext);
+		Multimap<String, Type> ctx2type = ctx2Type(framscript);
+		for (String ext : ext2ctx.keySet()) {
+			HashMap<String, Type> map = new HashMap<String, Type>();
+			types.put(ext, map);
+			for (String ctx : ext2ctx.get(ext)) {
+				for (Type type : ctx2type.get(ctx)) {
+					map.put(type.getName(), type);
+				}
+			}
+		}
+		return types;
+	}
+
+	private Multimap<String, String> ext2Ctx(Framscontext framscontext) {
+		Multimap<String, String> ext2ctx = Multimaps.newHashMultimap();
+		for (File file : framscontext.getFiles()) {
+			String ext = file.getPattern();
+			ext = ext.substring(ext.indexOf('.') + 1, ext.length());
+			if (file.getCode() != null) {
+				for (Context context : file.getCode().getContexts()) {
+					ext2ctx.put(ext, context.getName());
+				}
+			}
+		}
+		return ext2ctx;
+	}
+
+	private Multimap<String, Type> ctx2Type(Framscript framscript) {
+		Multimap<String, Type> ctx2type = Multimaps.newHashMultimap();
+		for (Type type : framscript.getTypes()) {
+			ctx2type.put(type.getContext(), type);
+		}
+		return ctx2type;
+	}
+
+	@Override
+	public Type getType(String name, String extension) {
+		Map<String, Type> types = this.types.get(extension);
+		Type result = types != null ? types.get(name) : null;
+		return result != null ? result : COMMON_TYPES.get(name);
+	}
+
+	@Override
+	public Map<String, Map<String, Type>> getTypes() {
+		return types;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Code.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Code.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Code.java	(revision 437)
@@ -0,0 +1,44 @@
+package com.framsticks.framclipse.script.context;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+public class Code {
+
+	@XStreamAsAttribute
+	private String object;
+
+	@XStreamAsAttribute
+	private String member;
+
+	@XStreamImplicit(itemFieldName = "context")
+	private List<Context> contexts;
+
+	public String getObject() {
+		return object;
+	}
+
+	public void setObject(String object) {
+		this.object = object;
+	}
+
+	public String getMember() {
+		return member;
+	}
+
+	public void setMember(String member) {
+		this.member = member;
+	}
+
+	public List<Context> getContexts() {
+		return contexts != null ? contexts : Collections.<Context> emptyList();
+	}
+
+	public void setContexts(List<Context> contexts) {
+		this.contexts = contexts;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Context.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Context.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Context.java	(revision 437)
@@ -0,0 +1,18 @@
+package com.framsticks.framclipse.script.context;
+
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+public class Context {
+
+	@XStreamAsAttribute
+	private String name;
+
+	public String getName() {
+		return name;
+	}
+
+	public void setName(String name) {
+		this.name = name;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/File.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/File.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/File.java	(revision 437)
@@ -0,0 +1,76 @@
+package com.framsticks.framclipse.script.context;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+public class File {
+
+	@XStreamAsAttribute
+	private String pattern;
+
+	@XStreamAsAttribute
+	private String label;
+
+	@XStreamImplicit(itemFieldName = "objects")
+	private List<Objects> objects = new ArrayList<Objects>();
+
+	private Code code;
+
+	@XStreamImplicit(itemFieldName = "script")
+	private List<Script> scripts = new ArrayList<Script>();
+
+	@XStreamImplicit(itemFieldName = "properties")
+	private List<Properties> properties = new ArrayList<Properties>();
+
+	public String getPattern() {
+		return pattern;
+	}
+
+	public void setPattern(String pattern) {
+		this.pattern = pattern;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	public List<Objects> getObjects() {
+		return objects;
+	}
+
+	public void setObjects(List<Objects> objects) {
+		this.objects = objects;
+	}
+
+	public Code getCode() {
+		return code;
+	}
+
+	public void setCode(Code code) {
+		this.code = code;
+	}
+
+	public List<Script> getScripts() {
+		return scripts;
+	}
+
+	public void setScripts(List<Script> scripts) {
+		this.scripts = scripts;
+	}
+
+	public List<Properties> getProperties() {
+		return properties;
+	}
+
+	public void setProperties(List<Properties> properties) {
+		this.properties = properties;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Framscontext.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Framscontext.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Framscontext.java	(revision 437)
@@ -0,0 +1,24 @@
+package com.framsticks.framclipse.script.context;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+@XStreamAlias("framscontext")
+public class Framscontext {
+
+	@XStreamImplicit(itemFieldName = "file")
+	private List<File> files = new ArrayList<File>();
+
+	public List<File> getFiles() {
+		return files;
+	}
+
+	public void setFiles(List<File> files) {
+		this.files = files != null ? files : Collections.<File> emptyList();
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Objects.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Objects.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Objects.java	(revision 437)
@@ -0,0 +1,18 @@
+package com.framsticks.framclipse.script.context;
+
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+public class Objects {
+
+	@XStreamAsAttribute
+	private String context;
+
+	public String getContext() {
+		return context;
+	}
+
+	public void setContext(String context) {
+		this.context = context;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Properties.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Properties.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Properties.java	(revision 437)
@@ -0,0 +1,29 @@
+package com.framsticks.framclipse.script.context;
+
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+public class Properties {
+
+	@XStreamAsAttribute
+	private String from;
+
+	@XStreamAsAttribute
+	private String to;
+
+	public String getFrom() {
+		return from;
+	}
+
+	public void setFrom(String from) {
+		this.from = from;
+	}
+
+	public String getTo() {
+		return to;
+	}
+
+	public void setTo(String to) {
+		this.to = to;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Script.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Script.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/context/Script.java	(revision 437)
@@ -0,0 +1,18 @@
+package com.framsticks.framclipse.script.context;
+
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+public class Script {
+
+	@XStreamAsAttribute
+	private String context;
+
+	public String getContext() {
+		return context;
+	}
+
+	public void setContext(String context) {
+		this.context = context;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Argument.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Argument.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Argument.java	(revision 437)
@@ -0,0 +1,24 @@
+package com.framsticks.framclipse.script.model;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+@XStreamAlias("argument")
+public class Argument {
+
+	@XStreamAsAttribute
+	private String name, type;
+
+	public String getName() {
+		return name;
+	}
+	
+	public String getName(int nr) {
+		return name != null ? name : "arg" + nr;
+	}	
+
+	public String getType() {
+		return type != null ? type : "?";
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Element.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Element.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Element.java	(revision 437)
@@ -0,0 +1,84 @@
+package com.framsticks.framclipse.script.model;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+
+public class Element {
+
+	@XStreamAsAttribute
+	private String name, type;
+
+	@XStreamAsAttribute
+	private boolean function;
+
+	@XStreamAsAttribute
+	private Double min, max;
+
+	@XStreamAlias("default")
+	@XStreamAsAttribute
+	private Double def;
+
+	private String description;
+
+	private List<Argument> arguments = new ArrayList<Argument>(0);
+
+	public String getName() {
+		return name;
+	}
+
+	public String getType() {
+		return type;
+	}
+
+	public boolean isFunction() {
+		return function;
+	}
+
+	public Double getMin() {
+		return min;
+	}
+
+	public Double getMax() {
+		return max;
+	}
+
+	public Double getDef() {
+		return def;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public List<Argument> getArguments() {
+		return arguments != null ? arguments : Collections.<Argument> emptyList();
+	}
+
+	public String toString() {
+		return name + " : " + type;
+	};
+
+	public String argumentsString(boolean includeType) {
+		StringBuilder builder = new StringBuilder("(");
+		if (!getArguments().isEmpty()) {
+			for (int i = 0; i < getArguments().size(); i++) {
+				Argument a = arguments.get(i);
+				if (includeType) {
+					builder.append(a.getType() + " ");
+				}
+				builder.append(a.getName(i) + ", ");
+			}
+			builder.delete(builder.length() - 2, builder.length());
+		}
+		return builder.append(")").toString();
+	}
+
+	public String returnType() {
+		return type != null ? type : "?";
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Framscript.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Framscript.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Framscript.java	(revision 437)
@@ -0,0 +1,18 @@
+package com.framsticks.framclipse.script.model;
+
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAlias;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+@XStreamAlias("framscript")
+public class Framscript {
+
+	@XStreamImplicit(itemFieldName = "type")
+	private List<Type> types;
+
+	public List<Type> getTypes() {
+		return types;
+	}
+
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Type.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Type.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/script/model/Type.java	(revision 437)
@@ -0,0 +1,61 @@
+package com.framsticks.framclipse.script.model;
+
+import java.util.Collections;
+import java.util.List;
+
+import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
+import com.thoughtworks.xstream.annotations.XStreamImplicit;
+
+public class Type {
+
+	public static final Type[] BUILT_IN = {
+			createBuiltInType("void"), createBuiltInType("integer"),
+			createBuiltInType("float")
+	};
+
+	@XStreamAsAttribute
+	private String name, context;
+
+	private String description;
+
+	@XStreamImplicit(itemFieldName = "element")
+	private List<Element> elements;
+
+	public String getName() {
+		return name;
+	}
+
+	public String getContext() {
+		return context;
+	}
+
+	public String getDescription() {
+		return description;
+	}
+
+	public List<Element> getElements() {
+		return elements != null ? elements : Collections.<Element> emptyList();
+	}
+
+	@Override
+	public String toString() {
+		return name;
+	}
+
+	public Element getElement(String name) {
+		for (Element e : getElements()) {
+			if (e.getName().equals(name)) {
+				return e;
+			}
+		}
+		return null;
+	}
+
+	public static Type createBuiltInType(String name) {
+		Type type = new Type();
+		type.name = name;
+		type.context = null;
+		type.description = "built-in type";
+		return type;
+	}
+}
Index: /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/validation/FramScriptJavaValidator.java
===================================================================
--- /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/validation/FramScriptJavaValidator.java	(revision 437)
+++ /java/Framclipse/com.framsticks.framclipse/src/com/framsticks/framclipse/validation/FramScriptJavaValidator.java	(revision 437)
@@ -0,0 +1,6 @@
+package com.framsticks.framclipse.validation;
+
+
+public class FramScriptJavaValidator extends AbstractFramScriptJavaValidator {
+
+}
