Index: cpp/frams/_demos/geometry/apices_test.cpp
===================================================================
--- cpp/frams/_demos/geometry/apices_test.cpp	(revision 999)
+++ cpp/frams/_demos/geometry/apices_test.cpp	(revision 1045)
@@ -14,5 +14,5 @@
 	Model resultModel;
 	resultModel.open();
-	GeometryTestUtils::addAnchorToModel(resultModel);
+	GeometryUtils::addAnchorToModel(resultModel);
 	
 	// Creating instance of Iterator class (MeshBuilder::ModelApices in this case). Object is
@@ -31,5 +31,5 @@
 		// Processing points created by iterator. In this case, they are added to result model as
 		// small spheres.
-		GeometryTestUtils::addPointToModel(point, resultModel);
+		GeometryUtils::addPointToModel(point, resultModel);
 	}
 	
Index: cpp/frams/_demos/geometry/geometrytestutils.cpp
===================================================================
--- cpp/frams/_demos/geometry/geometrytestutils.cpp	(revision 999)
+++ cpp/frams/_demos/geometry/geometrytestutils.cpp	(revision 1045)
@@ -4,9 +4,9 @@
 
 #include "geometrytestutils.h"
-
 #include "../genotypeloader.h"
 #include "frams/genetics/preconfigured.h"
 #include <common/virtfile/stdiofile.h>
 #include <common/loggers/loggertostdout.h>
+#include <frams/model/geometry/geometryutils.h>
 #include <math.h>
 #include <stdio.h>
@@ -99,5 +99,5 @@
 
 	Part *part = model.addNewPart(Part::Shape(shape));
-	GeometryTestUtils::randomizePositionScaleAndOrient(part);
+	GeometryUtils::randomizePositionScaleAndOrient(part);
 
 	model.close();
@@ -233,77 +233,4 @@
 }
 
-void GeometryTestUtils::addAnchorToModel(Model &model)
-{
-	Part *part = model.addNewPart(Part::SHAPE_ELLIPSOID);
-
-	part->p = Pt3D(0);
-	part->scale = Pt3D(0.1);
-	part->vcolor = Pt3D(1.0, 0.0, 1.0);
-
-	addAxesToModel(Pt3D(0.5), Orient(Orient_1), Pt3D(0.0), model);
-}
-
-void GeometryTestUtils::addPointToModel(const Pt3D &markerLocation, Model &model)
-{
-	Part *anchor = model.getPart(0);
-	Part *part = model.addNewPart(Part::SHAPE_ELLIPSOID);
-
-	part->p = Pt3D(markerLocation);
-	part->scale = Pt3D(0.05);
-	part->vcolor = Pt3D(1.0, 1.0, 0.0);
-
-	model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);
-}
-
-void GeometryTestUtils::addAxesToModel(const Pt3D &sizes, const Orient &axes, const Pt3D &center,
-	Model &model)
-{
-	Part *anchor = model.getPart(0);
-	Part *part;
-
-	part = model.addNewPart(Part::SHAPE_CUBOID);
-	part->scale = Pt3D(sizes.x, 0.05, 0.05);
-	part->setOrient(axes);
-	part->p = center;
-	part->vcolor = Pt3D(1.0, 0.0, 0.0);
-	model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);
-
-	part = model.addNewPart(Part::SHAPE_CUBOID);
-	part->scale = Pt3D(0.05, sizes.y, 0.05);
-	part->setOrient(axes);
-	part->p = center;
-	part->vcolor = Pt3D(0.0, 1.0, 0.0);
-	model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);
-
-	part = model.addNewPart(Part::SHAPE_CUBOID);
-	part->scale = Pt3D(0.05, 0.05, sizes.z);
-	part->setOrient(axes);
-	part->p = center;
-	part->vcolor = Pt3D(0.0, 0.0, 1.0);
-	model.addNewJoint(anchor, part, Joint::SHAPE_FIXED);
-}
-
-void GeometryTestUtils::mergeModels(Model &target, Model &source)
-{
-	Part *targetAnchor = target.getPart(0);
-	Part *sourceAnchor = source.getPart(0);
-
-	target.moveElementsFrom(source);
-
-	target.addNewJoint(targetAnchor, sourceAnchor, Joint::SHAPE_FIXED);
-}
-
-double frand(double from, double width)
-{
-	return from + width * ((rand() % 10000) / 10000.0);
-}
-
-void GeometryTestUtils::randomizePositionScaleAndOrient(Part *part)
-{
-	part->p = Pt3D(frand(1.5, 1.0), frand(1.5, 1.0), frand(1.5, 1.0));
-	part->scale = Pt3D(frand(0.1, 0.9), frand(0.1, 0.9), frand(0.1, 0.9));
-	part->setRot(Pt3D(frand(0.0, M_PI), frand(0.0, M_PI), frand(0.0, M_PI)));
-}
-
 void GeometryTestUtils::describePart(const Part *part, FILE *output)
 {
Index: cpp/frams/_demos/geometry/geometrytestutils.h
===================================================================
--- cpp/frams/_demos/geometry/geometrytestutils.h	(revision 999)
+++ cpp/frams/_demos/geometry/geometrytestutils.h	(revision 1045)
@@ -47,57 +47,5 @@
 	 */
 	int execute(const SString header, int argc, char *argv[], void (*test)(Model &, const double));
-	
-	/**
-	 * @brief Adds anchor to the specified Model.
-	 * @details An anchor has two functions. First is to provide Model consistency. Some functions in
-	 *     GeometryTestUtils namespace requires Model passed to them as an argument to contain at
-	 *     least one Part. All new Parts are bonded to the rest of Model using Joint connecting them
-	 *     with first Part of Model. Second is to provide reference which helps to understand Model
-	 *     position, scale and orientation. Anchor is built from four Parts: small sphere placed in
-	 *     global coordinate system origin and three cuboids visualising global coordinate system
-	 *     axes.
-	 * @see addAxesToModel.
-	 * @param[in] model Owner of Parts to be created.
-	 */
-	void addAnchorToModel(Model &model);
-	
-	/**
-	 * @brief Adds point marker to Model.
-	 * @details Marker of point is a small sphere (radius = 0.05).
-	 * @param[in] point Location of marker.
-	 * @param[in] model Owner of Part to be created, must contain at least one part.
-	 */
-	void addPointToModel(const Pt3D &point, Model &model);
-	
-	/**
-	 * @brief Adds axes markers to Model.
-	 * @details Axes markers are three streched (one of scales = 0.5, others = 0.05) and colored
-	 *     cuboids. Cuboid visualising OX axis is red, OY - green, and OZ - blue.
-	 * @param[in] sizes Axes visual lengths.
-	 * @param[in] axes Axes orientation, relatively to global coordinate system axes.
-	 * @param[in] center Axes intersection point, relatively to global coordinate system origin.
-	 * @param[in] model Owner of Parts to be created, must contain at least one part.
-	 */
-	void addAxesToModel(const Pt3D &sizes, const Orient &axes, const Pt3D &center, Model &model);
-	
-	/**
-	 * @brief Merges two Models.
-	 * @details Moves all parts from source Model to target Model and - to provide Model
-	 *     consistency - creates Joint between firsts Parts of each of them. Each model must contain
-	 *     at least one Part.
-	 * @param[in] target Target Model, must contain at least one part.
-	 * @param[in] source Source Model, must contain at least one part.
-	 */
-	void mergeModels(Model &target, Model &source);
-	
-	/**
-	 * @brief Randomizes position, scale and rotations of Part.
-	 * @details Sets coords of Part position to random values from range (1.5, 2.5), scales to
-	 *     random values from range (0.1, 1.0), and rotations around each axis to random values from
-	 *     range (0, M_PI).
-	 * @param[in] part Part which position, scale and orient should be randomized.
-	 */
-	void randomizePositionScaleAndOrient(Part *part);
-	
+
 	/**
 	 * @brief Prints description of given Part to specified file.
Index: cpp/frams/_demos/geometry/info_test.cpp
===================================================================
--- cpp/frams/_demos/geometry/info_test.cpp	(revision 999)
+++ cpp/frams/_demos/geometry/info_test.cpp	(revision 1045)
@@ -51,5 +51,5 @@
 	Model resultModel;
 	resultModel.open();
-	GeometryTestUtils::addAnchorToModel(resultModel);
+	GeometryUtils::addAnchorToModel(resultModel);
 	
 	// Adding bounding markers of bounding box apices.
@@ -60,13 +60,13 @@
 		apex.y = Octants::isPositiveY(o) ? upperBoundary.y : lowerBoundary.y;
 		apex.z = Octants::isPositiveZ(o) ? upperBoundary.z : lowerBoundary.z;
-		GeometryTestUtils::addPointToModel(apex, resultModel);
+		GeometryUtils::addPointToModel(apex, resultModel);
 	}
 	
 	// Adding markers of axes (intersection of axes is in the center of bounding box).
 	Pt3D intersection = (lowerBoundary + upperBoundary) * 0.5;
-	GeometryTestUtils::addAxesToModel(sizes, axes, intersection, resultModel);
+	GeometryUtils::addAxesToModel(sizes, axes, intersection, resultModel);
 	
 	// Merging with original model.
-	GeometryTestUtils::mergeModels(resultModel, model);
+	GeometryUtils::mergeModels(resultModel, model);
 	
 	// Finishing result Model and printing its genotype.
Index: cpp/frams/_demos/geometry/surface_test.cpp
===================================================================
--- cpp/frams/_demos/geometry/surface_test.cpp	(revision 999)
+++ cpp/frams/_demos/geometry/surface_test.cpp	(revision 1045)
@@ -4,4 +4,5 @@
 
 #include "geometrytestutils.h"
+#include <frams/model/geometry/geometryutils.h>
 #include <frams/model/geometry/meshbuilder.h>
 #include <frams/model/model.h>
@@ -14,5 +15,5 @@
 	Model resultModel;
 	resultModel.open();
-	GeometryTestUtils::addAnchorToModel(resultModel);
+	GeometryUtils::addAnchorToModel(resultModel);
 	
 	// Creating instance of Iterator class (MeshBuilder::ModelSurface in this case). Object is
@@ -31,5 +32,5 @@
 		// Processing points created by iterator. In this case, they are added to result model as
 		// small spheres.
-		GeometryTestUtils::addPointToModel(point, resultModel);
+		GeometryUtils::addPointToModel(point, resultModel);
 	}
 	
Index: cpp/frams/_demos/geometry/volume_test.cpp
===================================================================
--- cpp/frams/_demos/geometry/volume_test.cpp	(revision 999)
+++ cpp/frams/_demos/geometry/volume_test.cpp	(revision 1045)
@@ -14,5 +14,5 @@
 	Model resultModel;
 	resultModel.open();
-	GeometryTestUtils::addAnchorToModel(resultModel);
+	GeometryUtils::addAnchorToModel(resultModel);
 	
 	// Creating instance of Iterator class (MeshBuilder::ModelApices in this case). Object is
@@ -33,5 +33,5 @@
 		if (GeometryUtils::isPointInsideModel(point, model))
 		{
-			GeometryTestUtils::addPointToModel(point, resultModel);
+			GeometryUtils::addPointToModel(point, resultModel);
 		}
 	}
