diff --git a/FileIO/XmlIO/XMLInterface.cpp b/FileIO/XmlIO/XMLInterface.cpp
index ca6faae63aaed4522dadf88a536a418447aa65d3..d6c9e65132fc216b953f0cf5c07b06c74335adac 100644
--- a/FileIO/XmlIO/XMLInterface.cpp
+++ b/FileIO/XmlIO/XMLInterface.cpp
@@ -10,6 +10,8 @@
  * Created on 2010-18-02 by Karsten Rink
  */
 
+#include <fstream>
+
 #include "ProjectData.h"
 #include "XMLInterface.h"
 
diff --git a/GeoLib/Color.cpp b/GeoLib/Color.cpp
index 0b3bd8cec8fb21ab6be382cc2eb9b4d17d41d8b0..92a164acfc410ee4f9097f565ac603b3308f3930 100644
--- a/GeoLib/Color.cpp
+++ b/GeoLib/Color.cpp
@@ -13,6 +13,9 @@
 #include <iostream>
 #include <sstream>
 
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 #include "Color.h"
 #include "StringTools.h"
 
@@ -31,17 +34,17 @@ int readColorLookupTable(std::map<std::string, Color*> &colors, const std::strin
 
 	if (!in.is_open())
 	{
-		std::cout << "Color::readLookupTable() - Could not open file..."  << std::endl;
+		WARN("Color::readLookupTable() - Could not open file %s.", filename.c_str());
 		return 0;
 	}
 
 	while ( getline(in, line) )
 	{
 		std::list<std::string> fields = BaseLib::splitString(line, '\t');
-		Color *c = new Color();
 
 		if (fields.size()>=4)
 		{
+			Color *c = new Color();
 			id = fields.front();
 			fields.pop_front();
 			(*c)[0] = atoi(fields.front().c_str());
@@ -51,7 +54,6 @@ int readColorLookupTable(std::map<std::string, Color*> &colors, const std::strin
 			(*c)[2] = atoi(fields.front().c_str());
 			colors.insert(std::pair<std::string, Color*>(id, c));
 		}
-		else delete c;
 	}
 
 	return 1;
@@ -64,7 +66,7 @@ const Color* getColor(const std::string &id, std::map<std::string, Color*> &colo
 		if (id.compare(it->first) == 0)
 			return it->second;
 	}
-	std::cout << "Key \"" << id << "\" not found in color lookup table..." << std::endl;
+	WARN("Key \"%s\" not found in color lookup table.", id.c_str());
 	Color* c = getRandomColor();
 	colors.insert(std::pair<std::string, Color*>(id, c));
 	return c;
diff --git a/GeoLib/GEOObjects.cpp b/GeoLib/GEOObjects.cpp
index 6b64e508d372f8dec6a2340bd21eb60f936361f5..7d8660a3c8b7cb2e3ddc0a1614ab843921f26ca6 100644
--- a/GeoLib/GEOObjects.cpp
+++ b/GeoLib/GEOObjects.cpp
@@ -10,14 +10,17 @@
  * Created on 2010-01-21 by Thomas Fischer / Karsten Rink
  */
 
+#include <fstream>
+
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 // GeoLib
 #include "GEOObjects.h"
 
 // BaseLib
 #include "StringTools.h"
 
-#include <fstream>
-
 namespace GeoLib
 {
 GEOObjects::GEOObjects()
@@ -95,7 +98,7 @@ const std::vector<Point*>* GEOObjects::getPointVec(const std::string &name) cons
 		if (_pnt_vecs[i]->getName().compare(name) == 0)
 			return _pnt_vecs[i]->getVector();
 */
-	std::cout << "GEOObjects::getPointVec() - No entry found with name \"" << name << "\"." << std::endl;
+	INFO("GEOObjects::getPointVec() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -109,7 +112,7 @@ const PointVec* GEOObjects::getPointVecObj(const std::string &name) const
 		if (_pnt_vecs[i]->getName().compare(name) == 0)
 			return _pnt_vecs[i];
 */
-	std::cout << "GEOObjects::getPointVecObj() - No entry found with name \"" << name << "\"." << std::endl;
+	INFO("GEOObjects::getPointVecObj() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -117,9 +120,7 @@ bool GEOObjects::removePointVec(const std::string &name)
 {
 	if (isPntVecUsed (name))
 	{
-		std::cout <<
-		"GEOObjects::removePointVec() - There are still Polylines or Surfaces depending on these points."
-		          << std::endl;
+		INFO("GEOObjects::removePointVec() - There are still Polylines or Surfaces depending on these points.");
 		return false;
 	}
 
@@ -131,8 +132,7 @@ bool GEOObjects::removePointVec(const std::string &name)
 			_pnt_vecs.erase(it);
 			return true;
 		}
-	std::cout << "GEOObjects::removePointVec() - No entry found with name \"" << name << "." <<
-	std::endl;
+	INFO("GEOObjects::removePointVec() - No entry found with name \"%s\".", name.c_str());
 	return false;
 }
 
@@ -151,8 +151,7 @@ std::vector<Point*>* GEOObjects::filterStationVec(const std::string &name,
 		    == PointVec::STATION)
 			return (*it)->filterStations(bounds);
 
-	std::cout << "GEOObjects:: filterStations() - No entry found with name \""
-	          << name << "." << std::endl;
+	INFO("GEOObjects::filterStations() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -164,8 +163,7 @@ const std::vector<Point*>* GEOObjects::getStationVec(const std::string &name) co
 			return (*it)->getVector();
 		}
 	}
-	std::cout << "GEOObjects::getStationVec() - No entry found with name \""
-	          << name << "." << std::endl;
+	INFO("GEOObjects::getStationVec() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -219,10 +217,7 @@ const std::vector<Polyline*>* GEOObjects::getPolylineVec(const std::string &name
 		if (_ply_vecs[i]->getName().compare(name) == 0)
 			return _ply_vecs[i]->getVector();
 
-#ifndef NDEBUG
-	std::cout << "DEB: GEOObjects::getPolylineVec() - No entry found with name \"" << name <<
-	"." << std::endl;
-#endif
+	INFO("GEOObjects::getPolylineVec() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -233,10 +228,7 @@ const PolylineVec* GEOObjects::getPolylineVecObj(const std::string &name) const
 		if (_ply_vecs[i]->getName().compare(name) == 0)
 			return _ply_vecs[i];
 
-#ifndef NDEBUG
-	std::cout << "DEB: GEOObjects::getPolylineVecObj() - No entry found with name \"" << name <<
-	"\"." << std::endl;
-#endif
+	INFO("GEOObjects::getPolylineVecObj() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -251,10 +243,7 @@ bool GEOObjects::removePolylineVec(const std::string &name)
 			return true;
 		}
 
-#ifndef NDEBUG
-	std::cout << "GEOObjects::removePolylineVec() - No entry found with name \""
-	          << name << "\"." << std::endl;
-#endif
+	INFO("GEOObjects::removePolylineVec() - No entry found with name \"%s\".", name.c_str());
 	return false;
 }
 
@@ -292,8 +281,7 @@ const std::vector<Surface*>* GEOObjects::getSurfaceVec(const std::string &name)
 	for (size_t i = 0; i < size; i++)
 		if (_sfc_vecs[i]->getName().compare(name) == 0)
 			return _sfc_vecs[i]->getVector();
-	std::cout << "GEOObjects::getSurfaceVec() - No entry found with name \"" << name << "." <<
-	std::endl;
+	INFO("GEOObjects::getSurfaceVec() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -308,10 +296,7 @@ bool GEOObjects::removeSurfaceVec(const std::string &name)
 			return true;
 		}
 
-#ifndef NDEBUG
-	std::cout << "GEOObjects::removeSurfaceVec() - No entry found with name \""
-	          << name << "\"." << std::endl;
-#endif
+	INFO("GEOObjects::removeSurfaceVec() - No entry found with name \"%s\".", name.c_str());
 	return false;
 }
 
@@ -321,8 +306,7 @@ const SurfaceVec* GEOObjects::getSurfaceVecObj(const std::string &name) const
 	for (size_t i = 0; i < size; i++)
 		if (_sfc_vecs[i]->getName().compare(name) == 0)
 			return _sfc_vecs[i];
-	std::cout << "GEOObjects::getSurfaceVecObj() - No entry found with name \"" << name <<
-	"\"." << std::endl;
+	INFO("GEOObjects::getSurfaceVecObj() - No entry found with name \"%s\".", name.c_str());
 	return NULL;
 }
 
@@ -412,7 +396,7 @@ const std::string GEOObjects::getElementNameByID(const std::string &geometry_nam
 			this->getSurfaceVecObj(geometry_name)->getNameOfElementByID(id, name);
 			break;
 		default:
-			std::cout << "No valid GEOTYPE given." << std::endl;
+			INFO("GEOObjects::getElementNameByID() - No valid GEOTYPE given.");
 	}
 	return name;
 }
diff --git a/GeoLib/GEOObjects.h b/GeoLib/GEOObjects.h
index aeae70e66e50a7d3cac61655cdcca5630d290d2d..6719124d6ce3d15f6afc3891b3b68162020e7718 100644
--- a/GeoLib/GEOObjects.h
+++ b/GeoLib/GEOObjects.h
@@ -24,7 +24,6 @@
 #include "Surface.h"
 #include "SurfaceVec.h"
 
-#include "Color.h"
 #include "Station.h"
 
 #include "GeoType.h"
diff --git a/GeoLib/Grid.h b/GeoLib/Grid.h
index f25d94ebaa89a5d1d24b3e1bfa6548610e2ffd91..a14065e21ef4af51cf1d1b75d77a6b4e300ec01b 100644
--- a/GeoLib/Grid.h
+++ b/GeoLib/Grid.h
@@ -15,6 +15,9 @@
 
 #include <vector>
 
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 // GeoLib
 #include "AABB.h"
 #include "GEOObjects.h"
@@ -137,11 +140,11 @@ public:
 			const std::size_t j(static_cast<std::size_t> ((pnt[1] - this->_min_pnt[1]) * _inverse_step_sizes[1]));
 			const std::size_t k(static_cast<std::size_t> ((pnt[2] - this->_min_pnt[2]) * _inverse_step_sizes[2]));
 
-			if (i >= _n_steps[0] || j >= _n_steps[1] || k >= _n_steps[2]) {
-				std::cout << "error computing indices " << std::endl;
+			if (i < _n_steps[0] && j < _n_steps[1] && k < _n_steps[2]) {
+				_grid_cell_nodes_map[i + j * _n_steps[0] + k * n_plane].push_back(const_cast<POINT*>(copyOrAddress(*it)));
+			} else {
+				ERR("Grid constructor: error computing indices [%d, %d, %d], max indices [%d, %d, %d].", i, j, k, _n_steps[0], _n_steps[1], _n_steps[2]);
 			}
-
-			_grid_cell_nodes_map[i + j * _n_steps[0] + k * n_plane].push_back(const_cast<POINT*>(copyOrAddress(*it)));
 			it++;
 		}
 
diff --git a/GeoLib/PointVec.cpp b/GeoLib/PointVec.cpp
index 6da3a7b1db2d627c2d874b0c0622c5a63ce1f74a..671cfaf1a99a109823cae5917749ea3747021374 100644
--- a/GeoLib/PointVec.cpp
+++ b/GeoLib/PointVec.cpp
@@ -10,6 +10,9 @@
  * Created on 2010-06-11 by Thomas Fischer
  */
 
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 // GeoLib
 #include "BruteForceClosestPair.h"
 #include "PointVec.h"
@@ -35,8 +38,7 @@ PointVec::PointVec (const std::string& name, std::vector<Point*>* points,
 	makePntsUnique (_data_vec, _pnt_id_map, rel_eps);
 
 	if (number_of_all_input_pnts - _data_vec->size() > 0)
-		std::cerr << "WARNING: there are " << number_of_all_input_pnts -
-		_data_vec->size() << " double points" << std::endl;
+		WARN("PointVec::PointVec(): there are %d double points.", number_of_all_input_pnts - _data_vec->size());
 }
 
 PointVec::~PointVec ()
@@ -57,7 +59,7 @@ void PointVec::push_back (Point* pnt, std::string const*const name)
 
 	std::map<std::string,size_t>::const_iterator it (_name_id_map->find (*name));
 	if (it != _name_id_map->end()) {
-		std::cerr << "ERROR: PointVec::push_back (): two points with the same name" << std::endl;
+		WARN("PointVec::push_back(): two points share the name %s.", name->c_str());
 		return;
 	}
 
diff --git a/GeoLib/Polygon.cpp b/GeoLib/Polygon.cpp
index 5f4d4bc833c3fd4db5e45689e4d23f9f3e634a02..555abcd7fb683d644375cae7bf76460b8cb6bfc9 100644
--- a/GeoLib/Polygon.cpp
+++ b/GeoLib/Polygon.cpp
@@ -12,6 +12,9 @@
 #include <cmath>
 #include <cstdlib> // for exit
 
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 #ifndef M_PI
 #define M_PI 3.14159265358979323846
 #endif
@@ -23,7 +26,7 @@
 #include "MathTools.h"
 #include "Vector3.h"
 
-// Base
+// BaseLib
 #include "quicksort.h"
 
 namespace GeoLib
@@ -51,8 +54,7 @@ bool Polygon::initialise ()
 		ensureCWOrientation();
 		return true;
 	} else {
-		std::cerr << "ERROR in Polygon::initialise() - base polyline is not closed" <<
-		std::endl;
+		WARN("Polygon::initialise(): base polyline is not closed.");
 		return false;
 	}
 }
@@ -327,9 +329,7 @@ void Polygon::splitPolygonAtIntersection (std::list<Polygon*>::iterator polygon_
 				polygon0->addPoint ((*polygon_it)->getPointID (k));
 			if (!polygon0->initialise())
 			{
-				std::cerr <<
-				"ERROR in Polygon::splitPolygonAtIntersection polygon0" <<
-				std::endl;
+				ERR("Polygon::splitPolygonAtIntersection(): Initialization of polygon0 failed.");
 				exit (1);
 			}
 
@@ -341,9 +341,7 @@ void Polygon::splitPolygonAtIntersection (std::list<Polygon*>::iterator polygon_
 			polygon1->addPoint (intersection_pnt_id);
 			if (!polygon1->initialise())
 			{
-				std::cerr <<
-				"ERROR in Polygon::splitPolygonAtIntersection polygon1" <<
-				std::endl;
+				ERR("Polygon::splitPolygonAtIntersection(): Initialization of polygon1 failed.");
 				exit (1);
 			}
 
@@ -487,7 +485,7 @@ bool operator==(Polygon const& lhs, Polygon const& rhs)
 	} else {
 		// opposite direction with start point of first polygon at arbitrary position
 		// *** ATTENTION
-		std::cerr << "operator==(Polygon const& lhs, Polygon const& rhs) - not tested case (implementation is probably buggy) - please contact thomas.fischer@ufz.de mentioning the problem" << std::endl;
+		WARN("operator==(Polygon const& lhs, Polygon const& rhs) - not tested case (implementation is probably buggy) - please contact thomas.fischer@ufz.de mentioning the problem.");
 		// in second polygon
 		if (lhs.getPointID(1) == rhs.getPointID(k-1)) {
 			size_t j(k-2);
diff --git a/GeoLib/Polyline.cpp b/GeoLib/Polyline.cpp
index af683e5775fd3ef20bfd005f2c2f736773c09163..7068d8b80e6c8c380c75b965ea319757b801ca27 100644
--- a/GeoLib/Polyline.cpp
+++ b/GeoLib/Polyline.cpp
@@ -9,7 +9,8 @@
  *  Created on 2010-06-21 by Thomas Fischer
  */
 
-// Base
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
 
 // GeoLib
 #include "Polyline.h"
@@ -291,18 +292,12 @@ Polyline* Polyline::constructPolylineFromSegments(const std::vector<Polyline*> &
 				}
 			}
 			else
-				std::cout
-				<<
-				"Error in Polyline::contructPolylineFromSegments() - Line segments use different point vectors..."
-				<< std::endl;
+				ERR("Error in Polyline::contructPolylineFromSegments() - Line segments use different point vectors.");
 		}
 
 		if (!ply_found)
 		{
-			std::cout
-			<<
-			"Error in Polyline::contructPolylineFromSegments() - Not all segments are connected..."
-			<< std::endl;
+			ERR("Error in Polyline::contructPolylineFromSegments() - Not all segments are connected.");
 			new_ply = NULL;
 			break;
 		}
@@ -330,9 +325,7 @@ Polyline* Polyline::closePolyline(const Polyline& ply)
 		new_ply->addPoint(new_ply->getPointID(0));
 		return new_ply;
 	}
-	std::cout <<
-	"Error in Polyline::closePolyline() - Input polyline needs to be composed of at least three points..."
-	          << std::endl;
+	ERR("Error in Polyline::closePolyline() - Input polyline needs to be composed of at least three points.");
 	return NULL;
 }
 
@@ -372,7 +365,7 @@ bool containsEdge (const Polyline& ply, size_t id0, size_t id1)
 {
 	if (id0 == id1)
 	{
-		std::cerr << "no valid edge id0 == id1 == " << id0 << std::endl;
+		ERR("no valid edge id0 == id1 == %d.", id0);
 		return false;
 	}
 	if (id0 > id1)
diff --git a/GeoLib/QuadTree.h b/GeoLib/QuadTree.h
index 641112765bad2af2549cc2f101dc3783293fa1c8..b8af9156a8e798ac0a9dc9763bb17c4873878a96 100644
--- a/GeoLib/QuadTree.h
+++ b/GeoLib/QuadTree.h
@@ -14,6 +14,9 @@
 
 #include <limits>
 
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 namespace GeoLib
 {
 /**
@@ -56,9 +59,8 @@ public:
 			_ur[1] = _ll[1] + _ur[0] - _ll[0];
 		else
 			_ur[0] = _ll[0] + _ur[1] - _ll[1];
-		//#ifndef NDEBUG
-//		std::cerr << "lower left: " << _ll << ", upper right: " << _ur << ", depth " << _depth << std::endl;
-//#endif
+
+		DBUG("QuadTree(): lower left: (%f,%f,%f), upper right: (%f,%f,%f), depth: %d", _ll[0], _ll[1], _ll[2], _ur[0], _ur[1], _ur[2], _depth);
 	}
 
 	/**
diff --git a/GeoLib/Raster.cpp b/GeoLib/Raster.cpp
index ee12946616164dac3496f7a85f64fa0c87772918..f9aa8b72ccdf439058e2da1fd24707f8e533fec6 100644
--- a/GeoLib/Raster.cpp
+++ b/GeoLib/Raster.cpp
@@ -77,7 +77,7 @@ Raster* Raster::getRasterFromSurface(Surface const& sfc, double cell_size, doubl
 	const size_t n_triangles (sfc.getNTriangles());
 	double *z_vals (new double[n_cols*n_rows]);
 	if (!z_vals) {
-		std::cout << "DEBUG: CreateRaster::getRaster " << n_cols << " x " << n_rows << " to big" << std::endl;
+		WARN("CreateRaster::getRaster not enough memory for %d x %d raster", n_cols, n_rows);
 		return NULL;
 	}
 	size_t k(0);
@@ -128,7 +128,7 @@ Raster* Raster::getRasterFromASCFile(std::string const& fname)
 	std::ifstream in(fname.c_str());
 
 	if (!in.is_open()) {
-		std::cout << "Raster::getRasterFromASCFile() - Could not open file..." << fname << std::endl;
+		WARN("Raster::getRasterFromASCFile(): Could not open file %s.", fname.c_str());
 		return NULL;
 	}
 
@@ -154,7 +154,7 @@ Raster* Raster::getRasterFromASCFile(std::string const& fname)
 		delete [] values;
 		return raster;
 	} else {
-		std::cout << "Raster::getRasterFromASCFile() - could not read header of file " << fname << std::endl;
+		WARN("Raster::getRasterFromASCFile(): Could not read header of file %s", fname.c_str());
 		return NULL;
 	}
 }
diff --git a/GeoLib/SensorData.cpp b/GeoLib/SensorData.cpp
index 62aad65f0b4bbab836df791db57c3ea53fd49ee3..de5afa88f3753ce1ca5b2285c82c874d867c79ea 100644
--- a/GeoLib/SensorData.cpp
+++ b/GeoLib/SensorData.cpp
@@ -10,12 +10,16 @@
  * Created on 2012-08-01 by Karsten Rink
  */
 
+#include <cstdlib>
+#include <fstream>
+
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 #include "SensorData.h"
 
 #include "StringTools.h"
 #include "DateTools.h"
-#include <cstdlib>
-#include <fstream>
 
 
 SensorData::SensorData(const std::string &file_name)
@@ -30,7 +34,7 @@ SensorData::SensorData(std::vector<size_t> time_steps)
 	for (size_t i=1; i<time_steps.size(); i++)
 	{
 		if (time_steps[i-1]>=time_steps[i])
-			std::cout << "Error in SensorData() - Time series has no order!" << std::endl;
+			ERR("Error in SensorData() - Time series has no order!");
 	}
 }
 
@@ -51,19 +55,21 @@ void SensorData::addTimeSeries( const std::string &data_name, std::vector<float>
 
 void SensorData::addTimeSeries( SensorDataType::type data_name, std::vector<float> *data, const std::string &data_unit_string )
 {
-	if (_step_size>0)
-	{
-		if (((_end-_start)/_step_size) != data->size())
-			std::cout << "Warning in SensorData::addTimeSeries() - Lengths of time series does not match number of time steps." << std::endl;
-	}
-	else if  (data->size() != _time_steps.size())
-		std::cout << "Warning in SensorData::addTimeSeries() - Lengths of time series does not match number of time steps." << std::endl;
-	else
-	{
-		_vec_names.push_back(data_name);
-		_data_vecs.push_back(data);
-		_data_unit_string.push_back(data_unit_string);
+	if (_step_size>0) {
+		if (((_end-_start)/_step_size) != data->size()) {
+			WARN("Warning in SensorData::addTimeSeries() - Lengths of time series does not match number of time steps.");
+			return;
+		}
+	} else {
+		if  (data->size() != _time_steps.size()) {
+			WARN("Warning in SensorData::addTimeSeries() - Lengths of time series does not match number of time steps.");
+			return;
+		}
 	}
+
+	_vec_names.push_back(data_name);
+	_data_vecs.push_back(data);
+	_data_unit_string.push_back(data_unit_string);
 }
 
 const std::vector<float>* SensorData::getTimeSeries(SensorDataType::type time_series_name) const
@@ -73,18 +79,18 @@ const std::vector<float>* SensorData::getTimeSeries(SensorDataType::type time_se
 		if (time_series_name == _vec_names[i])
 			return _data_vecs[i];
 	}
-	std::cout << "Error in SensorData::getTimeSeries() - Time series \"" << time_series_name << "\" not found." << std::endl;
+	ERR("Error in SensorData::getTimeSeries() - Time series \"%d\" not found.", time_series_name);
 	return NULL;
 }
 
-const std::string SensorData::getDataUnit(SensorDataType::type time_series_name) const
+std::string SensorData::getDataUnit(SensorDataType::type time_series_name) const
 {
 	for (size_t i=0; i<_vec_names.size(); i++)
 	{
 		if (time_series_name == _vec_names[i])
 			return _data_unit_string[i];
 	}
-	std::cout << "Error in SensorData::getDataUnit() - Time series \"" << time_series_name << "\" not found." << std::endl;
+	ERR("Error in SensorData::getDataUnit() - Time series \"%d\" not found.", time_series_name);
 	return "";
 }
 
@@ -94,7 +100,7 @@ int SensorData::readDataFromFile(const std::string &file_name)
 
 	if (!in.is_open())
 	{
-		std::cout << "SensorData::readDataFromFile() - Could not open file...\n";
+		INFO("SensorData::readDataFromFile() - Could not open file %s.", file_name.c_str());
 		return 0;
 	}
 
diff --git a/GeoLib/SensorData.h b/GeoLib/SensorData.h
index 287c2801d3eca2bd179b73e812bf744c81d5d3ba..800923704b7082067cfca9d43096a34e09f6e82f 100644
--- a/GeoLib/SensorData.h
+++ b/GeoLib/SensorData.h
@@ -110,7 +110,7 @@ public:
 	TimeStepType::type getTimeUnit() const { return _time_unit; };
 
 	/// Returns the data unit of the given time series
-	const std::string getDataUnit(SensorDataType::type t) const;
+	std::string getDataUnit(SensorDataType::type t) const;
 
 	/// Converts Sensor Data Types to Strings
 	static std::string convertSensorDataType2String(SensorDataType::type t);
diff --git a/GeoLib/Station.cpp b/GeoLib/Station.cpp
index 6328e530d0eb22eaabfbb42f640a6218383d2278..a5415afb4c386264ee185af5ffcc98fae5ebfb11 100644
--- a/GeoLib/Station.cpp
+++ b/GeoLib/Station.cpp
@@ -15,7 +15,11 @@
 #include <cstdlib>
 #include <fstream>
 #include <iomanip>
-// Base
+
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
+// BaseLib
 #include "DateTools.h"
 #include "StringTools.h"
 // GeoLib
@@ -79,7 +83,7 @@ Station* Station::createStation(const std::string & line)
 	}
 	else
 	{
-		std::cout << "Station::createStation() - Unexpected file format..." << std::endl;
+		INFO("Station::createStation() - Unexpected file format.");
 		delete station;
 		return NULL;
 	}
@@ -168,8 +172,7 @@ int StationBorehole::readStratigraphyFile(const std::string &path,
 
 	if (!in.is_open())
 	{
-		std::cout << "StationBorehole::readStratigraphyFile() - Could not open file..." <<
-		std::endl;
+		WARN("StationBorehole::readStratigraphyFile() - Could not open file %s.", path.c_str());
 		return 0;
 	}
 
@@ -195,7 +198,7 @@ int StationBorehole::addStratigraphy(const std::string &path, StationBorehole* b
 
 		// check if a layer is missing
 		size = borehole->_soilName.size();
-		std::cout << "StationBorehole::addStratigraphy ToDo" << std::endl;
+		INFO("StationBorehole::addStratigraphy ToDo");
 		//	for (size_t i=0; i<size; i++)
 		//	{
 		//		if ((borehole->_soilLayerThickness[i] == -1) ||(borehole->_soilName[i].compare("") == 0))
@@ -203,7 +206,7 @@ int StationBorehole::addStratigraphy(const std::string &path, StationBorehole* b
 		//			borehole->_soilLayerThickness.clear();
 		//			borehole->_soilName.clear();
 		//
-		//			cout << "StationBorehole::addStratigraphy() - Profile incomplete (Borehole " << borehole->_name << ", Layer " << (i+1) << " missing).\n";
+		//			WARN("StationBorehole::addStratigraphy() - Profile incomplete (Borehole %s, Layer %d missing)", borehole->_name.c_str(), i+1);
 		//
 		//			return 0;
 		//		}
@@ -226,8 +229,7 @@ int StationBorehole::addLayer(std::list<std::string> fields, StationBorehole* bo
 			// int layer = atoi(fields.front().c_str());
 			fields.pop_front();
 
-			std::cerr << "StationBorehole::addLayer - assuming correct order" <<
-			std::endl;
+			ERR("StationBorehole::addLayer - assuming correct order");
 			double thickness(strtod(BaseLib::replaceString(",", ".", fields.front()).c_str(), 0));
 			fields.pop_front();
 			borehole->addSoilLayer(thickness, fields.front());
@@ -235,9 +237,7 @@ int StationBorehole::addLayer(std::list<std::string> fields, StationBorehole* bo
 	}
 	else
 	{
-		std::cout
-		<< "StationBorehole::addLayer() - Unexpected file format (Borehole "
-		<< borehole->_name << ")..." << std::endl;
+		WARN("StationBorehole::addLayer() - Unexpected file format (Borehole %s).", borehole->_name.c_str());
 		return 0;
 	}
 	return 1;
@@ -257,7 +257,7 @@ int StationBorehole::addStratigraphy(const std::vector<Point*> &profile, const s
 		return 1;
 	}
 
-	std::cout << "Error in StationBorehole::addStratigraphy() - Length of parameter vectors does not match." << std::endl;
+	ERR("Error in StationBorehole::addStratigraphy() - Length of parameter vectors does not match.");
 	return 0;
 }
 
@@ -295,9 +295,7 @@ int StationBorehole::addStratigraphies(const std::string &path, std::vector<Poin
 				        soil_name);
 			}
 			else
-				std::cout <<
-				"StationBorehole::addStratigraphies() - Unexpected file format..."
-				          << std::endl;
+				ERR("Error in StationBorehole::addStratigraphies() - Unexpected file format.");
 				//return 0;
 		}
 	}
@@ -334,7 +332,7 @@ StationBorehole* StationBorehole::createStation(const std::string &line)
 	}
 	else
 	{
-		std::cout << "Station::createStation() - Unexpected file format..." << std::endl;
+		WARN("Station::createStation() - Unexpected file format.");
 		delete borehole;
 		return NULL;
 	}
diff --git a/GeoLib/Surface.cpp b/GeoLib/Surface.cpp
index 80a37b5e30f820af5958079300f26c496b53a0db..6c71c5afb09162ca7f03eb560ef8b00da9633a1c 100644
--- a/GeoLib/Surface.cpp
+++ b/GeoLib/Surface.cpp
@@ -12,6 +12,9 @@
 
 #include <list>
 
+// ThirdParty/logog
+#include "logog/include/logog.hpp"
+
 // GeoLib
 #include "Surface.h"
 #include "AABB.h"
@@ -57,7 +60,7 @@ void Surface::addTriangle (std::size_t pnt_a, std::size_t pnt_b, std::size_t pnt
 Surface* Surface::createSurface(const Polyline &ply)
 {
 	if (!ply.isClosed()) {
-		std::cout << "Error in Surface::createSurface() - Polyline is not closed..." << std::endl;
+		WARN("Error in Surface::createSurface() - Polyline is not closed.");
 		return NULL;
 	}
 
@@ -74,9 +77,9 @@ Surface* Surface::createSurface(const Polyline &ply)
 			simple_polygon_it != list_of_simple_polygons.end(); ++simple_polygon_it) {
 
 			std::list<GeoLib::Triangle> triangles;
-			std::cout << "triangulation of surface: ... " << std::flush;
+			INFO("triangulation of surface: ... ");
 			MathLib::EarClippingTriangulation(*simple_polygon_it, triangles);
-			std::cout << "done - " << triangles.size () << " triangles " << std::endl;
+			INFO("\tdone - %d triangles", triangles.size());
 
 			// add Triangles to Surface
 			std::list<GeoLib::Triangle>::const_iterator it (triangles.begin());
@@ -88,7 +91,7 @@ Surface* Surface::createSurface(const Polyline &ply)
 		delete polygon;
 		return sfc;
 	} else {
-		std::cout << "Error in Surface::createSurface() - Polyline consists of less than three points and therefore cannot be triangulated..." << std::endl;
+		WARN("Error in Surface::createSurface() - Polyline consists of less than three points and therefore cannot be triangulated.");
 		return NULL;
 	}
 
diff --git a/Gui/VtkVis/VtkConditionSource.cpp b/Gui/VtkVis/VtkConditionSource.cpp
index 4448c1134fca098fc8ba04858e78225ec81d1973..b07db85fa88eb8712aa25ee92e2832ded6030a06 100644
--- a/Gui/VtkVis/VtkConditionSource.cpp
+++ b/Gui/VtkVis/VtkConditionSource.cpp
@@ -10,7 +10,10 @@
  */
 
 // ** INCLUDES **
+// GeoLib
 #include "AABB.h"
+#include "Color.h"
+
 #include "FEMCondition.h"
 #include "VtkConditionSource.h"
 
diff --git a/Gui/VtkVis/VtkConditionSource.h b/Gui/VtkVis/VtkConditionSource.h
index 1d7ca33ba7d2bccaf530c20df82500c11e7d14b8..84d18ebe8e5895664e8b4f60f3f3217b14feb129 100644
--- a/Gui/VtkVis/VtkConditionSource.h
+++ b/Gui/VtkVis/VtkConditionSource.h
@@ -16,7 +16,9 @@
 #include "VtkAlgorithmProperties.h"
 #include <vtkPolyDataAlgorithm.h>
 
-#include "GEOObjects.h"
+// GeoLib
+#include "Point.h"
+
 //#include <vtkSmartPointer.h>
 
 class FEMCondition;
diff --git a/Gui/VtkVis/VtkPointsSource.cpp b/Gui/VtkVis/VtkPointsSource.cpp
index 68a0336ed1de1209d95a76ad84b7cad3d9e1afbb..477f4cbea370563287a62a3c3a1803a466bb8576 100644
--- a/Gui/VtkVis/VtkPointsSource.cpp
+++ b/Gui/VtkVis/VtkPointsSource.cpp
@@ -10,6 +10,9 @@
  */
 
 // ** INCLUDES **
+// GeoLib
+#include "Color.h"
+
 #include "VtkPointsSource.h"
 
 #include <vtkCellArray.h>
@@ -35,6 +38,7 @@ VtkPointsSource::VtkPointsSource()
 
 	const GeoLib::Color* c = GeoLib::getRandomColor();
 	GetProperties()->SetColor((*c)[0] / 255.0,(*c)[1] / 255.0,(*c)[2] / 255.0);
+	delete c;
 }
 
 void VtkPointsSource::PrintSelf( ostream& os, vtkIndent indent )
diff --git a/Gui/VtkVis/VtkPointsSource.h b/Gui/VtkVis/VtkPointsSource.h
index 21c511caf4d208157b17368a72a4c1d610ff447a..0ad5891444d947dfe5cc95f425039d15b49c8067 100644
--- a/Gui/VtkVis/VtkPointsSource.h
+++ b/Gui/VtkVis/VtkPointsSource.h
@@ -16,7 +16,8 @@
 #include "VtkAlgorithmProperties.h"
 #include <vtkPolyDataAlgorithm.h>
 
-#include "GEOObjects.h"
+// GeoLib
+#include "Point.h"
 
 /**
  * \brief VtkPointsSource is a VTK source object for the visualization
diff --git a/Gui/VtkVis/VtkPolylinesSource.cpp b/Gui/VtkVis/VtkPolylinesSource.cpp
index 1f7cadf327dff353ecf69af1b21910f633e24077..583ea0370e76eb563f56deabf71301f378f475d3 100644
--- a/Gui/VtkVis/VtkPolylinesSource.cpp
+++ b/Gui/VtkVis/VtkPolylinesSource.cpp
@@ -10,6 +10,10 @@
  */
 
 // ** INCLUDES **
+// GeoLib
+#include "Color.h"
+#include "Polyline.h"
+
 #include "VtkPolylinesSource.h"
 
 #include <vtkCellArray.h>
diff --git a/Gui/VtkVis/VtkPolylinesSource.h b/Gui/VtkVis/VtkPolylinesSource.h
index 43ec7bbde9ba84f41bbc2d58b053362635dad883..3f843503545b0c254127048ebaa6c5b825274093 100644
--- a/Gui/VtkVis/VtkPolylinesSource.h
+++ b/Gui/VtkVis/VtkPolylinesSource.h
@@ -16,7 +16,11 @@
 #include "VtkAlgorithmProperties.h"
 #include <vtkPolyDataAlgorithm.h>
 
-#include "GEOObjects.h"
+// forward declaration
+namespace GeoLib {
+class Polyline;
+}
+
 
 /**
  * \brief VtkPolylinesSource is a VTK source object for the visualisation of
diff --git a/Gui/VtkVis/VtkStationSource.h b/Gui/VtkVis/VtkStationSource.h
index eae7abcdbd2e6cf5b0cb1fe115aa0e4a78797675..236ce7dcd61194f3bad85d0d828a7ec6dee0a607 100644
--- a/Gui/VtkVis/VtkStationSource.h
+++ b/Gui/VtkVis/VtkStationSource.h
@@ -16,7 +16,8 @@
 #include "VtkAlgorithmProperties.h"
 #include <vtkPolyDataAlgorithm.h>
 
-#include "GEOObjects.h"
+// GeoLib
+#include "Color.h"
 
 /**
  * \brief VTK source object for the visualisation of station data (including boreholes)