Index: cpp/frams/model/geometry/geometryutils.cpp
===================================================================
--- cpp/frams/model/geometry/geometryutils.cpp	(revision 372)
+++ cpp/frams/model/geometry/geometryutils.cpp	(revision 375)
@@ -82,5 +82,5 @@
 			break;
 	}
-	Hprintf("GeometryUtils", "isPointInsidePart", HMLV_ERROR, "Part shape=%d not supported", part->shape);
+	logPrintf("GeometryUtils", "isPointInsidePart", LOG_ERROR, "Part shape=%d not supported", part->shape);
 	return false;
 }
@@ -102,5 +102,5 @@
 			break;
 	}
-	Hprintf("GeometryUtils", "isPointStrictlyInsidePart", HMLV_ERROR, "Part shape=%d not supported", part->shape);
+	logPrintf("GeometryUtils", "isPointStrictlyInsidePart", LOG_ERROR, "Part shape=%d not supported", part->shape);
 	return false;
 }
Index: cpp/frams/model/geometry/meshbuilder.cpp
===================================================================
--- cpp/frams/model/geometry/meshbuilder.cpp	(revision 372)
+++ cpp/frams/model/geometry/meshbuilder.cpp	(revision 375)
@@ -639,5 +639,5 @@
 
 		default:
-			Hprintf("MeshBuilder::PartSurface", "initialize", HMLV_WARN, "Part shape=%d not supported, skipping...", part->shape);
+			logPrintf("MeshBuilder::PartSurface", "initialize", LOG_WARN, "Part shape=%d not supported, skipping...", part->shape);
 	}
 }
@@ -725,5 +725,5 @@
 
 		default:
-			Hprintf("MeshBuilder::PartApices", "initialize", HMLV_WARN, "Part shape=%d not supported, skipping...", part->shape);
+			logPrintf("MeshBuilder::PartApices", "initialize", LOG_WARN, "Part shape=%d not supported, skipping...", part->shape);
 	}
 }
Index: cpp/frams/model/geometry/modelgeometryinfo.cpp
===================================================================
--- cpp/frams/model/geometry/modelgeometryinfo.cpp	(revision 372)
+++ cpp/frams/model/geometry/modelgeometryinfo.cpp	(revision 375)
@@ -16,5 +16,5 @@
 	if (points.size() < 1) //maybe 1 or 2 points are also not enough for findSizesAndAxesOfPointsGroup() to work...
 	{
-		Hprintf("ModelGeometryInfo", "findSizesAndAxesOfModel", HMLV_ERROR, "Empty points sample for model with %d part(s)", model.getPartCount());
+		logPrintf("ModelGeometryInfo", "findSizesAndAxesOfModel", LOG_ERROR, "Empty points sample for model with %d part(s)", model.getPartCount());
 		sizes = Pt3D_0;
 		axes = Orient_1;
@@ -116,5 +116,5 @@
 			return externalAreaOfCylinder(model, partIndex, density);
 	}
-	Hprintf("ModelGeometryInfo", "externalAreaOfPart", HMLV_ERROR, "Part shape=%d not supported", part->shape);
+	logPrintf("ModelGeometryInfo", "externalAreaOfPart", LOG_ERROR, "Part shape=%d not supported", part->shape);
 	return 0;
 }
Index: cpp/frams/model/model.cpp
===================================================================
--- cpp/frams/model/model.cpp	(revision 372)
+++ cpp/frams/model/model.cpp	(revision 375)
@@ -5,7 +5,7 @@
 #include <common/nonstd_math.h>
 #include "model.h"
-#include <common/hmessage.h>
+#include <common/log.h>
 #include <frams/util/multimap.h>
-#include <frams/mhandlers/mhandlers.h>
+#include <frams/loggers/loggers.h>
 
 Model::Model()
@@ -317,5 +317,5 @@
 SString line;
 MultiRange frommap;
-MessageHandlerToMemory mh(MessageHandlerBase::Enable | MessageHandlerBase::DontBlock);
+LoggerToMemory mh(LoggerBase::Enable | LoggerBase::DontBlock);
 for (;f0txt.getNextToken(pos,line,'\n');lnum++)
 	{
@@ -329,5 +329,5 @@
 		{
 		buildstatus=invalid;
-		Hprintf("Model","build",HMLV_ERROR,
+		logPrintf("Model","build",LOG_ERROR,
 			 geno.getName().len()?"illegal f0 code at line %d (%s)":"illegal f0 code at line %d",
 			 lnum,geno.getName().c_str());
@@ -513,5 +513,5 @@
 {
 if (buildstatus!=building)
-	Hprintf("Model","close",HMLV_WARN,"unexpected close() - no open()");
+	logPrintf("Model","close",LOG_WARN,"unexpected close() - no open()");
 if (internalcheck(1)>0)
 	{
@@ -609,5 +609,5 @@
 		{
 		delete j;
-		Hprintf("Model","build",HMLV_ERROR,
+		logPrintf("Model","build",LOG_ERROR,
 			 "invalid part reference for joint #%d",getJointCount()-1);
 		return -1;
@@ -694,5 +694,5 @@
 		return 0;
 		}
-	Hprintf("Model","build",HMLV_ERROR,
+	logPrintf("Model","build",LOG_ERROR,
 		 "invalid neuron connection #%d <- #%d",c.n1_refno,c.n2_refno);
 	return -1;
@@ -782,5 +782,5 @@
 			else
 				{
-				Hprintf("Model","internalCheck",HMLV_ERROR,
+				logPrintf("Model","internalCheck",LOG_ERROR,
 					 "illegal N-N connection #%d (reference to #%d) (%s)",
 					 i,n->conn_refno,(const char*)geno.getName());
@@ -853,8 +853,8 @@
 if (var -> field < getMin ## template () . field) \
 	{ var->field= getMin ## template () . field; \
-	Hprintf("Model","internalCheck",HMLV_WARN,# field " too small in " # template "#%d (adjusted)",i);} \
+	logPrintf("Model","internalCheck",LOG_WARN,# field " too small in " # template "#%d (adjusted)",i);} \
 else if (var -> field > getMax ## template () . field) \
 	{ var->field= getMax ## template ()  . field; \
-	Hprintf("Model","internalCheck",HMLV_WARN,# field " too big in " # template "#%d (adjusted)",i);}
+	logPrintf("Model","internalCheck",LOG_WARN,# field " too big in " # template "#%d (adjusted)",i);}
 
 #define LINKFLAG 0x8000000
@@ -912,5 +912,5 @@
 			{
 			shape=SHAPE_ILLEGAL;
-			Hprintf("Model","internalCheck",HMLV_WARN,"Inconsistent part shapes (mixed old and new shapes)");
+			logPrintf("Model","internalCheck",LOG_WARN,"Inconsistent part shapes (mixed old and new shapes)");
 			}
 		}
@@ -941,5 +941,5 @@
 				{
 				ret=0;
-				Hprintf("Model","internalCheck",HMLV_ERROR,
+				logPrintf("Model","internalCheck",LOG_ERROR,
 					 "delta joint cycle detected at joint#%d (%s)",
 					 i,geno.getName().c_str());
@@ -978,5 +978,5 @@
 			{
 			ret=0;
-			Hprintf("Model","internalCheck",HMLV_ERROR,"delta too big in joint #%d (%s)",
+			logPrintf("Model","internalCheck",LOG_ERROR,"delta too big in joint #%d (%s)",
 				 i,geno.getName().c_str());
 			}
@@ -984,5 +984,5 @@
 			{
 			ret=0;
-			Hprintf("Model","internalCheck",HMLV_ERROR,"delta too small in joint #%d (%s)",
+			logPrintf("Model","internalCheck",LOG_ERROR,"delta too small in joint #%d (%s)",
 				 i,geno.getName().c_str());
 			}
@@ -992,5 +992,5 @@
 	else
 		{
-		Hprintf("Model","internalCheck",HMLV_ERROR,"illegal part references in joint #%d (%s)",
+		logPrintf("Model","internalCheck",LOG_ERROR,"illegal part references in joint #%d (%s)",
 			 i,geno.getName().c_str());
 		ret=0;
@@ -1001,5 +1001,5 @@
 			{
 			shape=SHAPE_ILLEGAL;
-			Hprintf("Model","internalCheck",HMLV_WARN,"Inconsistent joint shapes (mixed old and new shapes)");
+			logPrintf("Model","internalCheck",LOG_WARN,"Inconsistent joint shapes (mixed old and new shapes)");
 			}
 		}
@@ -1071,5 +1071,5 @@
 		if (!(p->flags&LINKFLAG))
 			{
-			Hprintf("Model","internalCheck",HMLV_ERROR,"not all parts connected (eg.#0-#%d) (%s)",
+			logPrintf("Model","internalCheck",LOG_ERROR,"not all parts connected (eg.#0-#%d) (%s)",
 				 i,geno.getName().c_str());
 			ret=0;
@@ -1084,5 +1084,5 @@
 	if (j->p1_refno==j->p2_refno)
 		{
-		Hprintf("Model","internalCheck",HMLV_ERROR,"illegal self connection, joint #%d (%s)",
+		logPrintf("Model","internalCheck",LOG_ERROR,"illegal self connection, joint #%d (%s)",
 			 i,geno.getName().c_str());
 		ret=0;
@@ -1095,5 +1095,5 @@
 		    || ((j->p1_refno==j2->p2_refno)&&(j->p2_refno==j2->p1_refno)))
 			{
-			Hprintf("Model","internalCheck",HMLV_ERROR,"illegal duplicate joints #%d and #%d (%s)",
+			logPrintf("Model","internalCheck",LOG_ERROR,"illegal duplicate joints #%d and #%d (%s)",
 				 i,k,geno.getName().c_str());
 			ret=0;
@@ -1125,5 +1125,5 @@
 {
 if (buildstatus==building)
-	Hprintf("Model","getGeno",HMLV_WARN,"model was not completed - missing close()");
+	logPrintf("Model","getGeno",LOG_WARN,"model was not completed - missing close()");
 if (buildstatus!=valid)
 	return Geno("",'0',"","invalid");
