diff --git a/src/util/util.hpp b/src/util/util.hpp
new file mode 100644
index 0000000000000000000000000000000000000000..f46137ba30972114e1b29f91c73c534f4fd78085
--- /dev/null
+++ b/src/util/util.hpp
@@ -0,0 +1,179 @@
+/*
+ * util.hpp
+ *
+ *  Created on: May 7, 2015
+ *      Author: Pietro Incardona
+ */
+
+#include "config.h"
+
+#include "util/SimpleRNG.hpp"
+
+#ifndef UTIL_HPP_
+#define UTIL_HPP_
+
+#include <boost/iostreams/device/mapped_file.hpp>
+
+
+/*! \brief Compare two files, return true if they match
+ *
+ * \param file1 path1
+ * \param file2 path2
+ *
+ * \return true if they match
+ *
+ */
+static inline bool compare(std::string file1, std::string file2)
+{
+    boost::iostreams::mapped_file_source f1(file1);
+    boost::iostreams::mapped_file_source f2(file2);
+
+    if( f1.size() == f2.size() && std::equal(f1.data(), f1.data() + f1.size(), f2.data()) )
+        return true;
+    else
+        return false;
+}
+
+//! RGB color struct
+struct RGB
+{
+	//! Red
+	float R;
+
+	//! Green
+	float G;
+
+	//! Blue
+	float B;
+
+	//! Return the color as string
+	std::string toString()
+	{
+		return std::to_string(R) + " " + std::to_string(G) + " " + std::to_string(B);
+	}
+};
+
+/*! \brief Return the color sampled from one group
+ *
+ * groups:
+ *
+ * 0: Red
+ * 1: Green
+ * 2: Blue
+ * 3: Yellow
+ * 4: Cyan
+ * 5: Magenta
+ * 6: Orange
+ * 7: Chartreuse-Green
+ * 8: Spring Green
+ * 9: Azure
+ * 10: Violet
+ * 11: Rose
+ *
+ * \param group
+ *
+ */
+
+static inline struct RGB getColor(int group, SimpleRNG & d)
+{
+	struct RGB col;
+
+	float s = (float)d.GetUniform();
+
+	group = group % 12;
+
+#ifdef ON_IO_UNIT_TESTS
+	s = 0.5;
+#endif
+
+	if (group == 0)
+	{
+		col.R = s/2 + 0.5;
+		col.G = 0.0;
+		col.B = 0.0;
+	}
+	else if (group == 1)
+	{
+		col.R = 0.0;
+		col.G = s/2 + 0.5;
+		col.B = 0.0;
+	}
+	else if (group == 2)
+	{
+		col.R = 0.0;
+		col.G = 0.0;
+		col.B = s;
+	}
+	else if (group == 3)
+	{
+		col.R = s/2 + 0.5;
+		col.G = s/2 + 0.5;
+		col.B = 0.0;
+	}
+	else if (group == 4)
+	{
+		col.R = s/2 + 0.5;
+		col.G = 0.0;
+		col.B = s/2 + 0.5;
+	}
+	else if (group == 5)
+	{
+		col.R = 0.0;
+		col.G = s/2 + 0.5;
+		col.B = s/2 + 0.5;
+	}
+	else if (group == 6)
+	{
+		col.R = s/2 + 0.5;
+		col.G = s/4 + 0.5;
+		col.B = 0.0;
+	}
+	else if (group == 7)
+	{
+		col.R = s/4 + 0.5;
+		col.G = s/2 + 0.5;
+		col.B = 0.0;
+	}
+	else if (group == 8)
+	{
+		col.R = 0.0;
+		col.G = s/2 + 0.5;
+		col.B = s/4 + 0.5;
+	}
+	else if (group == 9)
+	{
+		col.R = 0.0;
+		col.G = s/4 + 0.5;
+		col.B = s/2 + 0.5;
+	}
+	else if (group == 10)
+	{
+		col.R = s/4 + 0.5;
+		col.G = 0.0;
+		col.B = s/2 + 0.5;
+	}
+	else
+	{
+		col.R = s/2 + 0.5;
+		col.G = 0.0;
+		col.B = s/4 + 0.5;
+	}
+
+	return col;
+}
+
+/*! \brief Check if one string end with a particular string
+ *
+ * \param fullString string to check
+ * \param ending ending string to check
+ *
+ */
+static inline bool hasEnding (std::string const &fullString, std::string const &ending)
+{
+    if (fullString.length() >= ending.length())
+    {return (0 == fullString.compare (fullString.length() - ending.length(), ending.length(), ending));}
+    else
+    {return false;}
+}
+
+#endif /* UTIL_HPP_ */