Index: cpp/frams/genetics/f4/f4_oper.cpp
===================================================================
--- cpp/frams/genetics/f4/f4_oper.cpp	(revision 967)
+++ cpp/frams/genetics/f4/f4_oper.cpp	(revision 968)
@@ -451,5 +451,5 @@
 	}
 	// weight
-	nn->f1 = GenoOperators::getMutatedNeuroClassProperty(nn->f1, NULL, -1);
+	nn->f1 = GenoOperators::getMutatedNeuronConnectionWeight(nn->f1);
 	//nn->f1 = 10.0f * (rndDouble(1) - 0.5f);
 }
@@ -488,5 +488,5 @@
 		break;
 	case 2: // change weight
-		nn->f1 = GenoOperators::getMutatedNeuroClassProperty(nn->f1, NULL, -1);
+		nn->f1 = GenoOperators::getMutatedNeuronConnectionWeight(nn->f1);
 		//nn->f1 += 1.0f * (rndDouble(1) - 0.5f);
 		break;
Index: cpp/frams/genetics/fH/fH_oper.cpp
===================================================================
--- cpp/frams/genetics/fH/fH_oper.cpp	(revision 967)
+++ cpp/frams/genetics/fH/fH_oper.cpp	(revision 968)
@@ -390,5 +390,5 @@
 			// if it is weight, then method needs to use mutateNeuProperty
 			double current = par.getDouble(id);
-			par.setDouble(id, getMutatedNeuroClassProperty(current, NULL, -1));
+			par.setDouble(id, getMutatedNeuronConnectionWeight(current));
 		}
 	}
Index: cpp/frams/genetics/genooperators.cpp
===================================================================
--- cpp/frams/genetics/genooperators.cpp	(revision 967)
+++ cpp/frams/genetics/genooperators.cpp	(revision 968)
@@ -9,4 +9,7 @@
 #include <frams/util/rndutil.h>
 
+//
+// custom distributions for mutations of various parameters
+//
 static double distrib_force[] =   // for '!'
 {
@@ -31,5 +34,15 @@
 	-1, 1,         // ~linear
 };
-
+/*
+static double distrib_weight[] =
+{
+5,                 // distribution -999 _-^_^-_ +999
+-999, 999,         // each weight value may be useful, especially...
+-5, -0.3,          // ...little non-zero values
+-3, -0.6,
+0.6, 3,
+0.3, 5,
+};
+*/
 
 int GenoOperators::roulette(const double *probtab, const int count)
@@ -108,5 +121,9 @@
 double GenoOperators::getMutatedNeuroClassProperty(double current, Neuro *n, int i)
 {
-	if (i == -1) return mutateCreepNoLimit('f', current, 2, true); //i==-1: mutating weight of neural connection
+	if (i == -1)
+	{
+		logPrintf("GenoOperators", "getMutatedNeuroClassProperty", LOG_WARN, "Deprecated usage in C++ source: to mutate connection weight, use getMutatedNeuronConnectionWeight().");
+		return getMutatedNeuronConnectionWeight(current);
+	}
 	Param p;
 	if (i >= NEUROCLASS_PROP_OFFSET) { i -= NEUROCLASS_PROP_OFFSET; p = n->getClass()->getProperties(); }
@@ -117,4 +134,9 @@
 }
 
+double GenoOperators::getMutatedNeuronConnectionWeight(double current)
+{
+	return mutateCreepNoLimit('f', current, 2, true);
+}
+
 bool GenoOperators::mutatePropertyNaive(ParamInterface &p, int i)
 {
@@ -145,7 +167,7 @@
 	if (p.type(i)[0] != 'f' && p.type(i)[0] != 'd') return false; //don't know how to mutate
 	const char *n = p.id(i), *na = p.name(i);
-	if (strcmp(n, "si") == 0 && strcmp(na, "Sigmoid") == 0) newval = CustomRnd(distrib_sigmo); else
-		if (strcmp(n, "in") == 0 && strcmp(na, "Inertia") == 0) newval = CustomRnd(distrib_inertia); else
-			if (strcmp(n, "fo") == 0 && strcmp(na, "Force") == 0) newval = CustomRnd(distrib_force); else
+	if (strcmp(n, "si") == 0 && strcmp(na, "Sigmoid") == 0) newval = round(CustomRnd(distrib_sigmo), 3); else
+		if (strcmp(n, "in") == 0 && strcmp(na, "Inertia") == 0) newval = round(CustomRnd(distrib_inertia), 3); else
+			if (strcmp(n, "fo") == 0 && strcmp(na, "Force") == 0) newval = round(CustomRnd(distrib_force), 3); else
 			{
 				double mn, mx, df;
@@ -167,5 +189,5 @@
 	{
 		if (limit_precision_3digits)
-			result = floor(result * 1000 + 0.5) / 1000.0; //round
+			result = round(result, 3);
 	}
 	return result;
@@ -186,5 +208,5 @@
 		{
 			//reflect and wrap above may have changed the (limited) precision, so try to round again (maybe unnecessarily, because we don't know if reflect+wrap above were triggered)
-			double result_try = floor(result * 1000 + 0.5) / 1000.0; //round
+			double result_try = round(result, 3);
 			if (mn <= result_try && result_try <= mx) result = result_try; //after rounding still witin allowed range, so keep rounded value
 		}
@@ -375,5 +397,5 @@
 			int l = (int)strlen(n);
 			if (len >= l && l > Len && (strncmp(s, n, l) == 0)) { I = NEUROCLASS_PROP_OFFSET + i; Len = l; }
-			if (also_v1_N_props) //recognize old properties symbols /=!
+			if (also_v1_N_props) //recognize old symbols of properties:  /=!
 			{
 				if (strcmp(n, "si") == 0) n = "/"; else
Index: cpp/frams/genetics/genooperators.h
===================================================================
--- cpp/frams/genetics/genooperators.h	(revision 967)
+++ cpp/frams/genetics/genooperators.h	(revision 968)
@@ -187,5 +187,6 @@
 	static bool mutateRandomNeuroClassProperty(Neuro* n); ///<high-level neuron mutation function, will select and mutate a random property of Neuron's NeuroClass. Returns true if successful and some property was actually mutated. Could return false when the NeuroClass of the Neuron have no properties, or when a randomly selected property was not suitable for mutation (for example a string or another non-number type).
 	static int selectRandomNeuroClassProperty(Neuro* n); ///<selects random property (either 0-based extraproperty of NeuroClass or NEUROCLASS_PROP_OFFSET-based standard property of NeuroClass). -1 if Neuroclass has no properties.
-	static double getMutatedNeuroClassProperty(double current, Neuro *n, int propindex); ///<returns value \e current mutated for the property \e propindex of Neuron's NeuroClass or for extraproperty (\e propindex - NEUROCLASS_PROP_OFFSET) of Neuron's NeuroClass. Neuro \e n is used as read-only. Use \e propindex == -1 to mutate connection weight (\e n and \e i are then ignored).
+	static double getMutatedNeuroClassProperty(double current, Neuro *n, int propindex); ///<returns value \e current mutated for the property \e propindex of Neuron's NeuroClass or for extraproperty (\e propindex - NEUROCLASS_PROP_OFFSET) of Neuron's NeuroClass. Neuro \e n is used as read-only.
+	static double getMutatedNeuronConnectionWeight(double current); ///<returns mutated value of \e current.
 	static bool mutatePropertyNaive(ParamInterface &p, int propindex); ///<creep-mutate selected property. Returns true when success. mutateProperty() should be used instead of this function.
 	static bool mutateProperty(ParamInterface &p, int propindex); ///<like mutatePropertyNaive(), but uses special probability distributions for some neuron properties.
@@ -216,19 +217,3 @@
 };
 
-
-//
-// custom distributions for mutations of various parameters
-//
-/*
-static double distrib_weight[]=
-{
-5,                 // distribution -999 _-^_^-_ +999
--999, 999,         // each weight value may be useful, especially...
--5, -0.3,        // ...little non-zero values
--3, -0.6,
-0.6, 3,
-0.3, 5,
-};
-*/
-
 #endif
