Index: /cpp/gdk/Makefile
===================================================================
--- /cpp/gdk/Makefile	(revision 88)
+++ /cpp/gdk/Makefile	(revision 89)
@@ -18,5 +18,5 @@
 all: $(TARGETS)
 
-CXXOPTS= -DGDK_WITHOUT_FRAMS -DEASYMAPDEBUG -g -Wno-parentheses -Wno-overloaded-virtual -Wno-format
+CXXOPTS= -DGDK_WITHOUT_FRAMS -DNEURO_IMPL_FILES=\"neuroimplfiles.h\" -DNEURO_CLS_FACTORY=\"neurocls-factory.h\" -DNEURO_CLS_LIBRARY=\"neurocls-library.h\" -DGEN_CONFIG_FILE=\"gen-config.h\" -DEASYMAPDEBUG -g -Wno-parentheses -Wno-overloaded-virtual -Wno-format
 # -DEASYMAPDEBUG is required for convtest
 
@@ -28,5 +28,5 @@
 GDKOBJS=list.o advlist.o param.o sstring.o 3d.o model.o modelparts.o errmanager.o \
 	neurolibrary.o geno.o genoconv.o extvalue.o framsg.o callbacks.o syntparam.o \
-	multirange.o multimap.o paramtabobj.o defgenoconv.o sstringutils.o paramobj.o \
+	multirange.o multimap.o paramtabobj.o defgenoconv.o sstringutils.o paramobj.o rndutil.o \
 	$(CONVMODULES)
 
@@ -54,5 +54,5 @@
 	g++ $(NEUROTESTOBJS) -L. -lgdk -o $@
 
-LOADERTESTOBJS=genotypeloader.o loadertest.o virtfile.o multiparamload.o stdiofile-autoinit.o stdiofile.o
+LOADERTESTOBJS=genotypeloader.o loadertest.o virtfile.o multiparamload.o stdiofile-autoinit.o stdiofile.o nonstd_stdio.cpp
 
 loadertest: libgdk.a $(LOADERTESTOBJS)
Index: /cpp/gdk/defassign-f0_joint.h
===================================================================
--- /cpp/gdk/defassign-f0_joint.h	(revision 88)
+++ /cpp/gdk/defassign-f0_joint.h	(revision 89)
@@ -1,2 +1,3 @@
+
 
 
@@ -42,4 +43,2 @@
 
 
-
-
Index: /cpp/gdk/defassign-f0_neuro.h
===================================================================
--- /cpp/gdk/defassign-f0_neuro.h	(revision 88)
+++ /cpp/gdk/defassign-f0_neuro.h	(revision 89)
@@ -1,2 +1,3 @@
+
 
 
@@ -34,4 +35,2 @@
 
 
-
-
Index: /cpp/gdk/defassign-f0_neuroconn.h
===================================================================
--- /cpp/gdk/defassign-f0_neuroconn.h	(revision 88)
+++ /cpp/gdk/defassign-f0_neuroconn.h	(revision 89)
@@ -1,2 +1,3 @@
+
 
 
@@ -33,4 +34,2 @@
 
 
-
-
Index: /cpp/gdk/defassign-f0_part.h
===================================================================
--- /cpp/gdk/defassign-f0_part.h	(revision 88)
+++ /cpp/gdk/defassign-f0_part.h	(revision 89)
@@ -1,2 +1,3 @@
+
 
 
@@ -41,4 +42,2 @@
 
 
-
-
Index: /cpp/gdk/f0.def
===================================================================
--- /cpp/gdk/f0.def	(revision 88)
+++ /cpp/gdk/f0.def	(revision 89)
@@ -156,23 +156,4 @@
 ENDNEUROCLASS
 
-NEUROCLASS(VectorEye,VEye,Vector Eye [EXPERIMENTAL!],Refer to publications to learn more about this neuron.,1,1,1)
-SYMBOL(`11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24')
-NEUROPROP(tx,0,0,target.x,f,,,,target.x)
-NEUROPROP(ty,0,0,target.y,f,,,,target.y)
-NEUROPROP(tz,0,0,target.z,f,,,,target.z)
-NEUROPROP(ts,0,0,target shape,s,0,-1,0,targetShape)
-NEUROPROP(p,0,0,perspective,f,0.1,10.0,1.0,perspz)
-NEUROPROP(s,0,0,scale,f,0.1,100.0,1.0,perspscale)
-NEUROPROP(h,0,0,show hidden lines,d,0,1,0,showhidden)
-NEUROPROP(o,0,0,`output lines count (each line needs four channels)',d,0,99,0,outputcount)
-NEUROPROP(d,0,0,debug,d,0,1,0,showdebug)
-ENDNEUROCLASS
-
-NEUROCLASS(VisualMotorNeuron,VMotor,Visual-Motor Cortex [EXPERIMENTAL!],`Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.',-1,1,0)
-NEUROPROP(noIF,0,0,number of basic features,d,,,,noIF)
-NEUROPROP(noDim,0,0,number of degrees of freedom,d,,,,noDim)
-NEUROPROP(params,0,0,parameters,s,,,,params)
-ENDNEUROCLASS 
-
 NEUROCLASS(Sticky,Sti,Sticky [EXPERIMENTAL!],,1,0,1)
 VISUALHINTS(EffectorClass)
Index: /cpp/gdk/f0classes.h
===================================================================
--- /cpp/gdk/f0classes.h	(revision 88)
+++ /cpp/gdk/f0classes.h	(revision 89)
@@ -1,2 +1,18 @@
+
+#define FIELDSTRUCT Model
+ParamEntry f0_model_paramtab[]=
+{
+ {"Properties",2,2,"m" },
+ {"Visual",},
+ {"se",0,1024,"startenergy","f",FIELD(startenergy),},
+ {"Vstyle",1,0,"vis_style","s 0 -1 ",FIELD(vis_style),},
+ {0,0,0,}
+};
+ParamEntry f0_model_xtra_paramtab[]=
+{
+ {"Extra properties",1,0,"m"},
+ {0,0,0,}
+};
+#undef FIELDSTRUCT
 
 
@@ -178,4 +194,2 @@
 
 
-
-
Index: /cpp/gdk/f0def.xml
===================================================================
--- /cpp/gdk/f0def.xml	(revision 88)
+++ /cpp/gdk/f0def.xml	(revision 89)
@@ -144,23 +144,4 @@
  </NEUROCLASS>
 
- <NEUROCLASS ID="VEye" NAME="Vector Eye [EXPERIMENTAL!]" DESCRIPTION="Refer to publications to learn more about this neuron." INPUTS="1" OUTPUT="1" LOCATION="1"  SYMBOL="11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24"  >
-
-  <NEUROPROP ID="tx" NAME="target.x" TYPE="f" MIN="" MAX="" DEF="" />
-  <NEUROPROP ID="ty" NAME="target.y" TYPE="f" MIN="" MAX="" DEF="" />
-  <NEUROPROP ID="tz" NAME="target.z" TYPE="f" MIN="" MAX="" DEF="" />
-  <NEUROPROP ID="ts" NAME="target shape" TYPE="s" MIN="0" MAX="-1" DEF="0" />
-  <NEUROPROP ID="p" NAME="perspective" TYPE="f" MIN="0.1" MAX="10.0" DEF="1.0" />
-  <NEUROPROP ID="s" NAME="scale" TYPE="f" MIN="0.1" MAX="100.0" DEF="1.0" />
-  <NEUROPROP ID="h" NAME="show hidden lines" TYPE="d" MIN="0" MAX="1" DEF="0" />
-  <NEUROPROP ID="o" NAME="output lines count (each line needs four channels)" TYPE="d" MIN="0" MAX="99" DEF="0" />
-  <NEUROPROP ID="d" NAME="debug" TYPE="d" MIN="0" MAX="1" DEF="0" />
- </NEUROCLASS>
-
- <NEUROCLASS ID="VMotor" NAME="Visual-Motor Cortex [EXPERIMENTAL!]" DESCRIPTION="Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron." INPUTS="-1" OUTPUT="1" LOCATION="0"  >
-  <NEUROPROP ID="noIF" NAME="number of basic features" TYPE="d" MIN="" MAX="" DEF="" />
-  <NEUROPROP ID="noDim" NAME="number of degrees of freedom" TYPE="d" MIN="" MAX="" DEF="" />
-  <NEUROPROP ID="params" NAME="parameters" TYPE="s" MIN="" MAX="" DEF="" />
- </NEUROCLASS> 
-
  <NEUROCLASS ID="Sti" NAME="Sticky [EXPERIMENTAL!]" DESCRIPTION="" INPUTS="1" OUTPUT="0" LOCATION="1"  VISUALHINTS="16"  >
 
Index: /cpp/gdk/gen-config.h
===================================================================
--- /cpp/gdk/gen-config.h	(revision 88)
+++ /cpp/gdk/gen-config.h	(revision 89)
@@ -1,5 +1,4 @@
 // This file is a part of the Framsticks GDK library. See LICENSE.txt for details.
 // Refer to http://www.framsticks.com/ for further information.
-
 
 /**
@@ -8,35 +7,18 @@
  USE_GENCONV_xxx - configure converters
  USE_GENMAN_xxx - configure genman
-*/
 
-#define BASIC_GENETICS //excludes f0-fuzzy and f8 (which is not stable for incorrect genotypes) 
+ */
 
 #define USE_GENCONV_F10
-#define USE_GENCONV_F20
-#define USE_GENCONV_F32
-#define USE_GENCONV_F40
+//#define USE_GENCONV_F21
+//#define USE_GENCONV_F30
+//#define USE_GENCONV_F40
 //#define USE_GENCONV_F41_TEST
 //#define USE_GENCONV_F50
-//#define USE_GENCONV_F60
-#define USE_GENCONV_F70
-#ifndef BASIC_GENETICS
- #define USE_GENCONV_F81
-#endif
-#define USE_GENCONV_F90
 
-#define USE_GENMAN_F0
-#ifndef BASIC_GENETICS
- #define USE_GENMAN_F0FUZZY
-#endif
-#define USE_GENMAN_F1
-#define USE_GENMAN_F2
-#define USE_GENMAN_F3
-#define USE_GENMAN_F4
+//#define USE_GENMAN_F0
+//#define USE_GENMAN_F1
+//#define USE_GENMAN_F2
+//#define USE_GENMAN_F3
+//#define USE_GENMAN_F4
 //#define USE_GENMAN_F5
-//#define USE_GENMAN_F6
-#define USE_GENMAN_F7
-#ifndef BASIC_GENETICS
- #define USE_GENMAN_F8
-#endif
-#define USE_GENMAN_F9
-
Index: /cpp/gdk/model.cpp
===================================================================
--- /cpp/gdk/model.cpp	(revision 88)
+++ /cpp/gdk/model.cpp	(revision 89)
@@ -8,14 +8,4 @@
 #include "multimap.h"
 #include "errmanager.h"
-
-#define FIELDSTRUCT Model
-ParamEntry f0_model_paramtab[]=
-{
-{"Model",1,2,"m",},
-{"se",2,0,"startenergy","f",FIELD(startenergy),},
-{"Vstyle",2,0,"vis_style","s",FIELD(vis_style),},
-{0,0,0,},
-};
-#undef FIELDSTRUCT
 
 Model::Model()
Index: /cpp/gdk/model.def
===================================================================
--- /cpp/gdk/model.def	(revision 88)
+++ /cpp/gdk/model.def	(revision 89)
@@ -3,4 +3,11 @@
 class:id=m,name="Model"
 prop:id=se,name="starting energy",group="x",flags=1024,type="f -999999 999999 0 "
+
+class:id=m,name="Model" 
+
+
+prop:id=se,name="startenergy",group="Properties",flags=1024,type="f   "
+prop:id=Vstyle,name="vis_style",group="Visual",flags=0,type="s 0 -1 "
+
 
 class:id=p,name="Part" 
@@ -22,4 +29,8 @@
 prop:id=i,name="info",group="Other properties",flags=0,type="s   "
 prop:id=Vstyle,name="vis_style",group="Visual",flags=0,type="s 0 -1 part"
+prop:id=vs,xtra=1,name="visual thickness",group="Visual",flags=0,type="f 0.05 0.7 0.2"
+prop:id=vr,xtra=1,name="red component",group="Visual",flags=0,type="f 0.0 1.0 0.5"
+prop:id=vg,xtra=1,name="green component",group="Visual",flags=1024,type="f 0.0 1.0 0.5"
+prop:id=vb,xtra=1,name="blue component",group="Visual",flags=1024,type="f 0.0 1.0 0.5"
 
 
@@ -42,4 +53,7 @@
 prop:id=i,name="info",group="Other properties",flags=0,type="s   "
 prop:id=Vstyle,name="vis_style",group="Visual",flags=0,type="s 0 -1 joint"
+prop:id=vr,xtra=1,name="red component",group="Visual",flags=0,type="f 0.0 1.0 0.5"
+prop:id=vg,xtra=1,name="green component",group="Visual",flags=1024,type="f 0.0 1.0 0.5"
+prop:id=vb,xtra=1,name="blue component",group="Visual",flags=1024,type="f 0.0 1.0 0.5"
 
 
@@ -52,5 +66,5 @@
 prop:id=p,name="part ref#",group="Connections",flags=0,type="d -1 999999 -1"
 prop:id=j,name="joint ref#",group="Connections",flags=0,type="d -1 999999 -1"
-prop:id=d,name="item details",group="Other",flags=0,type="s   "
+prop:id=d,name="item details",group="Other",flags=0,type="s   N"
 prop:id=i,name="info",group="Other",flags=0,type="s   "
 prop:id=Vstyle,name="vis_style",group="Visual",flags=0,type="s 0 -1 neuro"
@@ -59,4 +73,5 @@
 prop:id=getInputNeuroIndex,name="get input neuron index",group="Connections",flags=1+2,type="p d(d)   "
 prop:id=getInputWeight,name="get input weight",group="Connections",flags=1+2,type="p f(d)   "
+prop:id=classObject,name="neuron class",group="Connections",flags=1+2,type="o NeuroClass   "
 
 
@@ -101,5 +116,5 @@
 
 
-neuro: id=*,name="Constant",info="Constant value",inputs=0,output=1,location=0  ,vhints=1  ,symbol="3,6,100,50,90,50,90,40,70,40,70,60,90,60,90,50,1,85,50,75,50,1,80,45,80,55" 
+neuro: id=*,name="Constant",info="Constant value",inputs=0,output=1,location=0  ,vhints=1  ,symbol="4,4,26,27,26,73,73,73,73,27,26,27,1,73,50,100,50,1,56,68,46,68,2,41,47,51,32,51,68" 
 
 
@@ -119,8 +134,9 @@
 
 
-neuro: id=D,name="Differentiate",info="Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",inputs=-1,output=1,location=0 
+neuro: id=D,name="Differentiate",info="Calculate the difference between the current and previous input value. Multiple inputs are aggregated with respect to their weights",inputs=-1,output=1,location=0  ,symbol="3,3,25,0,25,100,75,50,25,0,1,75,50,100,50,3,44,42,51,57,36,57,44,42" 
 
 
-neuro: id=Fuzzy,name="Fuzzy system [EXPERIMENTAL!]",info="Refer to publications to learn about this neuron",inputs=-1,output=1,location=0  ,symbol="5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65" 
+
+neuro: id=Fuzzy,name="Fuzzy system [EXPERIMENTAL!]",info="Refer to publications to learn more about this neuron.",inputs=-1,output=1,location=0  ,symbol="5,2,30,65,37,37,44,65,3,37,65,44,37,51,37,58,65,2,51,65,58,37,65,65,6,100,50,70,50,70,25,25,10,25,90,70,75,70,50,1,70,65,25,65" 
 
 prop:id=ns,name="number of fuzzy sets",type="d 1  "
@@ -130,28 +146,9 @@
 
 
-neuro: id=VEye,name="Vector Eye [EXPERIMENTAL!]",info="",inputs=1,output=1,location=1  ,symbol="11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24" 
-
-prop:id=tx,name="target.x",type="f   "
-prop:id=ty,name="target.y",type="f   "
-prop:id=tz,name="target.z",type="f   "
-prop:id=ts,name="target shape",type="s 0 -1 0"
-prop:id=p,name="perspective",type="f 0.1 10.0 1.0"
-prop:id=s,name="scale",type="f 0.1 100.0 1.0"
-prop:id=h,name="show hidden lines",type="d 0 1 0"
-prop:id=o,name="output lines count (each line needs four channels)",type="d 0 99 0"
-prop:id=d,name="debug",type="d 0 1 0"
-
-
-neuro: id=VMotor,name="Visual-Motor Cortex [EXPERIMENTAL!]",info="Must be connected to the VEye and properly set up.",inputs=-1,output=1,location=0 
-prop:id=noIF,name="number of basic features",type="d   "
-prop:id=noDim,name="number of degrees of freedom",type="d   "
-prop:id=params,name="parameters",type="s   "
- 
-
-neuro: id=Sti,name="Sticky [EXPERIMENTAL!]",info="",inputs=1,output=0,location=1  ,vhints=32 
+neuro: id=Sti,name="Sticky [EXPERIMENTAL!]",info="",inputs=1,output=0,location=1  ,vhints=16 
 
 
 
-neuro: id=LMu,name="Length muscle [EXPERIMENTAL!]",info="",inputs=1,output=0,location=2  ,vhints=16 
+neuro: id=LMu,name="Linear muscle [EXPERIMENTAL!]",info="",inputs=1,output=0,location=2  ,vhints=16 
 
 prop:id=p,name="power",type="f 0.01 1.0 1.0"
@@ -166,11 +163,14 @@
 
 
-neuro: id=Ch,name="Channelize",info="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.",inputs=-1,output=1,location=0 
+neuro: id=Ch,name="Channelize",info="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.",inputs=-1,output=1,location=0  ,symbol="10,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,1,30,80,55,50,1,30,20,55,50,1,30,35,55,50,1,30,45,55,50,1,30,55,55,50,1,61,53,65,47,1,30,65,55,50" 
 
 
-neuro: id=ChMux,name="Channel multiplexer",info="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)",inputs=2,output=1,location=0 
+
+neuro: id=ChMux,name="Channel multiplexer",info="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)",inputs=2,output=1,location=0  ,symbol="7,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,3,30,67,45,67,45,50,50,50,1,35,70,39,64,2,30,33,53,33,53,48" 
 
 
-neuro: id=ChSel,name="Channel selector",info="Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",inputs=1,output=1,location=0 
+
+neuro: id=ChSel,name="Channel selector",info="Outputs a single channel (selected by the \"ch\" parameter) from multichannel input",inputs=1,output=1,location=0  ,symbol="6,4,25,0,25,100,75,70,75,30,25,0,1,75,50,100,50,1,70,50,55,50,3,50,55,55,50,50,45,50,55,1,30,50,50,50,1,35,53,39,47" 
+
 prop:id=ch,name="channel",type="d   "
 
@@ -185,3 +185,4 @@
 
 
+
 # EOF
Index: /cpp/gdk/neurocls-factory.h
===================================================================
--- /cpp/gdk/neurocls-factory.h	(revision 88)
+++ /cpp/gdk/neurocls-factory.h	(revision 89)
@@ -84,28 +84,4 @@
 #undef FIELDSTRUCT
 
-#define FIELDSTRUCT NI_VectorEye 
-ParamEntry NI_VectorEye_tab []={
-{"Vector Eye [EXPERIMENTAL!]",1, 9 ,"VEye",},
-{"tx",0,0,"target.x","f   ",FIELD(target.x),},
-{"ty",0,0,"target.y","f   ",FIELD(target.y),},
-{"tz",0,0,"target.z","f   ",FIELD(target.z),},
-{"ts",0,0,"target shape","s 0 -1 0",FIELD(targetShape),},
-{"p",0,0,"perspective","f 0.1 10.0 1.0",FIELD(perspz),},
-{"s",0,0,"scale","f 0.1 100.0 1.0",FIELD(perspscale),},
-{"h",0,0,"show hidden lines","d 0 1 0",FIELD(showhidden),},
-{"o",0,0,"output lines count (each line needs four channels)","d 0 99 0",FIELD(outputcount),},
-{"d",0,0,"debug","d 0 1 0",FIELD(showdebug),},
- {0,0,0,},};
-#undef FIELDSTRUCT
-
-#define FIELDSTRUCT NI_VisualMotorNeuron 
-ParamEntry NI_VisualMotorNeuron_tab []={
-{"Visual-Motor Cortex [EXPERIMENTAL!]",1, 3 ,"VMotor",},
-{"noIF",0,0,"number of basic features","d   ",FIELD(noIF),},
-{"noDim",0,0,"number of degrees of freedom","d   ",FIELD(noDim),},
-{"params",0,0,"parameters","s   ",FIELD(params),},
- {0,0,0,},};
-#undef FIELDSTRUCT 
-
 #define FIELDSTRUCT NI_Sticky 
 ParamEntry NI_Sticky_tab []={
@@ -178,6 +154,4 @@
 setImplementation("D",new NI_Diff); \
 setImplementation("Fuzzy",new NI_FuzzyNeuro); \
-setImplementation("VEye",new NI_VectorEye); \
-setImplementation("VMotor",new NI_VisualMotorNeuron); \
 setImplementation("Sti",new NI_Sticky); \
 setImplementation("LMu",new NI_LinearMuscle); \
Index: /cpp/gdk/neurocls-library.h
===================================================================
--- /cpp/gdk/neurocls-library.h	(revision 88)
+++ /cpp/gdk/neurocls-library.h	(revision 89)
@@ -109,31 +109,4 @@
 addClass(new NeuroClass(NI_FuzzyNeuro_tab,"Refer to publications to learn more about this neuron.",-1,1,0, FuzzyNeuro_xy,0,0));
 
-     static int VectorEye_xy[]={122,11,7,100,50,90,50,90,40,70,40,80,50,70,60,90,60,90,50,14,70,50,65,40,60,35,45,30,30,30,15,35,10,40,5,50,10,60,15,65,30,70,45,70,60,65,65,60,70,50,8,38,67,28,62,23,52,28,42,38,37,48,42,53,52,48,62,38,67,4,33,52,38,47,43,52,38,57,33,52,5,70,50,60,40,45,35,30,35,15,40,5,50,1,53,33,58,22,1,62,36,68,26,1,45,30,47,19,1,35,30,35,19,1,27,31,24,20,1,18,34,12,24};   
-static ParamEntry NI_VectorEye_tab[]={
-{"Vector Eye [EXPERIMENTAL!]",1, 9 ,"VEye",},
-
-{"tx",0,0,"target.x","f   ",},
-{"ty",0,0,"target.y","f   ",},
-{"tz",0,0,"target.z","f   ",},
-{"ts",0,0,"target shape","s 0 -1 0",},
-{"p",0,0,"perspective","f 0.1 10.0 1.0",},
-{"s",0,0,"scale","f 0.1 100.0 1.0",},
-{"h",0,0,"show hidden lines","d 0 1 0",},
-{"o",0,0,"output lines count (each line needs four channels)","d 0 99 0",},
-{"d",0,0,"debug","d 0 1 0",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_VectorEye_tab,"Refer to publications to learn more about this neuron.",1,1,1, VectorEye_xy,0,0));
-
-     
-static ParamEntry NI_VisualMotorNeuron_tab[]={
-{"Visual-Motor Cortex [EXPERIMENTAL!]",1, 3 ,"VMotor",},
-{"noIF",0,0,"number of basic features","d   ",},
-{"noDim",0,0,"number of degrees of freedom","d   ",},
-{"params",0,0,"parameters","s   ",},
- 
-{0,0,0,},};
-addClass(new NeuroClass(NI_VisualMotorNeuron_tab,"Must be connected to the VEye and properly set up. Refer to publications to learn more about this neuron.",-1,1,0, 0,0)); 
-
      
 static ParamEntry NI_Sticky_tab[]={
Index: /cpp/gdk/rndutil.cpp
===================================================================
--- /cpp/gdk/rndutil.cpp	(revision 89)
+++ /cpp/gdk/rndutil.cpp	(revision 89)
@@ -0,0 +1,43 @@
+#include "rndutil.h"
+#include "nonstd_math.h"
+#include <stdlib.h>
+
+unsigned short pseudornd(short x)
+{
+static long seed=0;
+long y;
+if (x<=0) {seed=-x; return 0;}
+seed=(y=(3677*seed+3680)&0x7fffffff)-1;
+return ((unsigned short)y)%(x);
+}
+
+double CustomRnd(double *tab)
+{
+double *range=tab+1+2*randomN((int)(0.5+tab[0]));
+return range[0]+rnd0N(range[1]-range[0]);
+};
+
+double RandomGener::Uni(float begin, float end)
+{
+return begin+(double)rand()*(end-begin)/RAND_MAX;
+}
+
+double RandomGener::GaussStd()
+{
+if (isNextGauss) {isNextGauss=0; return nextGauss;}
+double v1,v2,s;
+do {
+v1=2*rnd01-1; //-1..1
+v2=2*rnd01-1; //-1..1
+s=v1*v1+v2*v2;
+} while (s>=1);
+double mult=sqrt(-2*log(s)/s);
+nextGauss=v2*mult;
+isNextGauss=1;
+return v1*mult;
+}
+
+double RandomGener::Gauss(float m,float s)
+{return m+s*GaussStd();}
+
+RandomGener RndGen;
Index: /cpp/gdk/rndutil.h
===================================================================
--- /cpp/gdk/rndutil.h	(revision 89)
+++ /cpp/gdk/rndutil.h	(revision 89)
@@ -0,0 +1,35 @@
+#ifndef _RNDUTIL_H_
+#define _RNDUTIL_H_
+
+#include "nonstd.h"
+#include "math.h"
+
+/** @file rndutil.h various functions */
+
+/** @param x change seed if x<=0
+    @return random value [0..x-1] if x>0 */
+unsigned short pseudornd(short x);
+
+double CustomRnd(double*);
+// the parameter is a table which describes the random distribution:
+// e.g.
+// double x[]={ 3,     // 3 intervals
+//  -10,-1,            // (each of them has always uniform distribution and equal probability of being selected)
+//  -1, 1,
+//   1,10, };
+
+class RandomGener
+{
+   public:
+      RandomGener() {isNextGauss=0;}
+      static double Uni(float begin, float end); ///< uniform excluding boundaries
+      double GaussStd();
+      double Gauss(float m,float s); ///< usually will not return further than 5*stdd
+   private:
+      int isNextGauss;
+      double nextGauss;
+};
+
+extern RandomGener RndGen;
+
+#endif
