Index: cpp/frams/genetics/f1/conv_f1.cpp
===================================================================
--- cpp/frams/genetics/f1/conv_f1.cpp	(revision 372)
+++ cpp/frams/genetics/f1/conv_f1.cpp	(revision 375)
@@ -5,5 +5,5 @@
 #include "conv_f1.h"
 #include <common/nonstd_stl.h>
-#include <common/hmessage.h>
+#include <common/log.h>
 #include <frams/util/multirange.h>
 #include <frams/util/multimap.h>
@@ -63,5 +63,5 @@
 		if ((n1<0) || (n2<0) || (n1>=neuro_f1_to_f0.size()) || (n2>=neuro_f1_to_f0.size()))
 			{
-			if (final) Hprintf("GenoConvF1","addInput",HMLV_WARN,
+			if (final) logPrintf("GenoConvF1","addInput",LOG_WARN,
 					    "illegal neuron connection %d <- %d (ignored)",n1,n2);
 			return 0;
@@ -178,5 +178,5 @@
 		else
 			{
-			Hmessage("GenoConv_F1","grow","Illegal neuron position (ignored)",1);
+			logMessage("GenoConv_F1","grow",1,"Illegal neuron position (ignored)");
 			g=skipNeuro(g+1);
 			}
Index: cpp/frams/genetics/f4/conv_f4.cpp
===================================================================
--- cpp/frams/genetics/f4/conv_f4.cpp	(revision 372)
+++ cpp/frams/genetics/f4/conv_f4.cpp	(revision 375)
@@ -6,5 +6,5 @@
 
 #include "conv_f4.h"
-#include <common/hmessage.h>
+#include <common/log.h>
 #include "../oper_fx.h" //for GENOPER_OK constant
 
@@ -110,5 +110,5 @@
 		if (res)
 		{
-			Hmessage("f4_Model", "buildModelRec", "Error in building Model", 2);
+			logMessage("f4_Model", "buildModelRec", 2, "Error in building Model");
 			error = res;
 			break;
@@ -134,5 +134,5 @@
 			return cells->C[i];
 	// none!
-	Hmessage("f4_Model", "getStick", "Not a single stick", 2);
+	logMessage("f4_Model", "getStick", 2, "Not a single stick");
 	return NULL;
 }
Index: cpp/frams/genetics/f4/f4_general.cpp
===================================================================
--- cpp/frams/genetics/f4/f4_general.cpp	(revision 372)
+++ cpp/frams/genetics/f4/f4_general.cpp	(revision 375)
@@ -7,5 +7,5 @@
 #include "f4_general.h"
 #include <common/nonstd_stl.h>
-#include <common/hmessage.h>
+#include <common/log.h>
 #include <frams/model/model.h> // for min and max attributes
 #include "../oper_fx.h" //for GENOPER_ constants
@@ -581,5 +581,5 @@
 			char buf[40];
 			sprintf(buf, "unknown code '%c'", gcur->name);
-			Hmessage("f4_Cell", "onestep", buf, 2);
+			logMessage("f4_Cell", "onestep", 2, buf);
 			// fix: delete it
 			org->setRepairRemove(gcur->pos, gcur);
Index: cpp/frams/genetics/f4/oper_f4.cpp
===================================================================
--- cpp/frams/genetics/f4/oper_f4.cpp	(revision 372)
+++ cpp/frams/genetics/f4/oper_f4.cpp	(revision 375)
@@ -8,5 +8,5 @@
 #include "oper_f4.h"
 #include <frams/util/sstring.h>
-#include <common/hmessage.h>
+#include <common/log.h>
 
 #include <stdio.h>
@@ -51,5 +51,5 @@
 	mutation_method_names[index++] = "deleted a node";
 	mutation_method_names[index++] = "modified a node";
-	if (index != F4_COUNT + F4_ADD_COUNT - 1) Hmessage("Geno_f4", "Constructor", "Mutation names init error", 3);
+	if (index != F4_COUNT + F4_ADD_COUNT - 1) logMessage("Geno_f4", "Constructor", 3, "Mutation names init error");
 }
 
Index: cpp/frams/genetics/genman.cpp
===================================================================
--- cpp/frams/genetics/genman.cpp	(revision 372)
+++ cpp/frams/genetics/genman.cpp	(revision 375)
@@ -6,8 +6,8 @@
 #include <frams/vm/classes/genoobj.h>
 #include GEN_CONFIG_FILE //configuration of active genetic operators
-#include "common/hmessage.h"
+#include "common/log.h"
 #include "common/nonstd_math.h"
 #include "common/stl-util.h"
-#include <frams/mhandlers/mhandlers.h>
+#include <frams/loggers/loggers.h>
 
 
@@ -267,5 +267,5 @@
 		if (gf->mutate(gn, chg, method) == GENOPER_OK)
 		{
-			MessageHandlerToMemory eh(MessageHandlerBase::Enable | MessageHandlerToMemory::StoreFirstMessage); //mute testValidity()
+			LoggerToMemory eh(LoggerBase::Enable | LoggerToMemory::StoreFirstMessage); //mute testValidity()
 			Geno G(gn, gv.getFormat(), "", "");
 			canvalidate = true;
@@ -284,5 +284,5 @@
 		if (!ok && (count - pcount > 100))
 		{
-			Hprintf("GenMan", "Mutate", 2, "Tried 100x and failed: %s", g.getGene().c_str());
+			logPrintf("GenMan", "Mutate", 2, "Tried 100x and failed: %s", g.getGene().c_str());
 			return Geno("", -1, "", "GENOPER_OPFAIL: Mutate() tried 100x and failed");
 		}
@@ -308,5 +308,5 @@
 
 	{
-		MessageHandlerToMemory eh(MessageHandlerBase::Enable | MessageHandlerToMemory::StoreFirstMessage); //mute testValidity()
+		LoggerToMemory eh(LoggerBase::Enable | LoggerToMemory::StoreFirstMessage); //mute testValidity()
 		bool canvalidate = true;
 		if (testValidity(g1v, canvalidate) > 0 && canvalidate == false)
@@ -333,5 +333,5 @@
 			if (g1n[0]) { gn = g1n; chg = chg1; }
 			else { gn = g2n; chg = chg2; }
-			MessageHandlerToMemory eh(MessageHandlerBase::Enable | MessageHandlerToMemory::StoreFirstMessage); //mute testValidity()
+			LoggerToMemory eh(LoggerBase::Enable | LoggerToMemory::StoreFirstMessage); //mute testValidity()
 			Geno G(gn, g1v.getFormat(), "", "");
 			bool canvalidate = true;
@@ -351,5 +351,5 @@
 		if (!ok && (count - pcount > 100))
 		{
-			Hprintf("GenMan", "CrossOver", 2, "Tried 100x and failed: %s and %s", g1.getGene().c_str(), g2.getGene().c_str());
+			logPrintf("GenMan", "CrossOver", 2, "Tried 100x and failed: %s and %s", g1.getGene().c_str(), g2.getGene().c_str());
 			return Geno("", -1, "", "GENOPER_OPFAIL: CrossOver() tried 100x and failed");
 		}
@@ -500,5 +500,5 @@
 	l.chg = chg;
 	l.fit = 0; //temporarily. Will be set when the genotype dies
-	//Hprintf("GenMan","saveLink",0,"#%d: [%d] '%s' + '%s' -> '%s'",GenoLinkList.size(),count,parent1.c_str(),parent2.c_str(),child.c_str());
+	//logPrintf("GenMan","saveLink",0,"#%d: [%d] '%s' + '%s' -> '%s'",GenoLinkList.size(),count,parent1.c_str(),parent2.c_str(),child.c_str());
 	GenoLinkList.push_back(l);
 }
@@ -533,5 +533,5 @@
 	float f1, f2;
 	int m;
-	Hmessage("GenMan", "Report", "The following genetic operators are available:", 0);
+	logMessage("GenMan", "Report", 0, "The following genetic operators are available:");
 	for (unsigned int i = 0; i < oper_fx_list.size(); i++)
 	{
@@ -549,5 +549,5 @@
 		}
 		//      if (oper_fx_list[i]->similarity("","")!=GENOPER_NOOPER) l+=" similarity";
-		Hprintf("GenMan", "Report", 0, "format f%c (%s):%s",
+		logPrintf("GenMan", "Report", 0, "format f%c (%s):%s",
 			oper_fx_list[i]->supported_format, oper_fx_list[i]->name.c_str(), l.c_str());
 	}
Index: cpp/frams/genetics/geno.cpp
===================================================================
--- cpp/frams/genetics/geno.cpp	(revision 372)
+++ cpp/frams/genetics/geno.cpp	(revision 375)
@@ -250,5 +250,5 @@
 		}
 	isvalid = 0;
-	Hprintf("Geno", "validate", HMLV_WARN, "Wrong configuration? No genotype validators defined for genetic format f%c.", format);
+	logPrintf("Geno", "validate", LOG_WARN, "Wrong configuration? No genotype validators defined for genetic format f%c.", format);
 }
 
Index: cpp/frams/genetics/oper_fx.cpp
===================================================================
--- cpp/frams/genetics/oper_fx.cpp	(revision 372)
+++ cpp/frams/genetics/oper_fx.cpp	(revision 375)
@@ -5,5 +5,5 @@
 #include <ctype.h>  //isupper()
 #include "oper_fx.h"
-#include <common/hmessage.h>
+#include <common/log.h>
 #include <common/nonstd_math.h>
 #include <frams/util/rndutil.h>
@@ -173,5 +173,5 @@
 		}
 		else
-			Hprintf("GenoOperators", "linearMix", HMLV_WARN, "Cannot mix values of types '%c' and '%c'", type1, type2);
+			logPrintf("GenoOperators", "linearMix", LOG_WARN, "Cannot mix values of types '%c' and '%c'", type1, type2);
 }
 
@@ -250,5 +250,5 @@
 {
 	if (s == NULL)
-		Hmessage("GenoOperators", "skipWS", "NULL reference!", HMLV_WARN);
+		logMessage("GenoOperators", "skipWS", LOG_WARN, "NULL reference!");
 	else
 	while (isWS(*s)) s++;
