diff --git a/Applications/DataHolderLib/Color.cpp b/Applications/DataHolderLib/Color.cpp
index 6604d7150be3d9de7c3ce41b1ff7311c21f79741..b9e82fa687d978ad4f2015b6eb117980930b3a80 100644
--- a/Applications/DataHolderLib/Color.cpp
+++ b/Applications/DataHolderLib/Color.cpp
@@ -23,6 +23,16 @@
 
 namespace DataHolderLib {
 
+Color createColor(unsigned char r, unsigned char g, unsigned char b)
+{
+    return Color{{r,g,b,255}};
+}
+
+Color createColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a)
+{
+    return Color{{r,g,b,a}};
+}
+
 Color getRandomColor()
 {
     Color col;
diff --git a/Applications/DataHolderLib/Color.h b/Applications/DataHolderLib/Color.h
index 6e59d79240e0ee843733f25a41c7118b04e262fa..6ce16e57838aed243a6a56e1e8019035ee5edab0 100644
--- a/Applications/DataHolderLib/Color.h
+++ b/Applications/DataHolderLib/Color.h
@@ -24,6 +24,10 @@ namespace DataHolderLib
 {
 using Color = std::array<unsigned char, 4>;
 
+Color createColor(unsigned char r, unsigned char g, unsigned char b);
+
+Color createColor(unsigned char r, unsigned char g, unsigned char b, unsigned char a);
+
 /// Returns a random RGB colour.
 Color getRandomColor();
 
diff --git a/Applications/DataHolderLib/ColorLookupTable.cpp b/Applications/DataHolderLib/ColorLookupTable.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..2bc98e1504466deb2f9db56883a935ccccf1359b
--- /dev/null
+++ b/Applications/DataHolderLib/ColorLookupTable.cpp
@@ -0,0 +1,41 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#include "ColorLookupTable.h"
+
+#include <limits>
+
+namespace DataHolderLib
+{
+
+ColorLookupTable::ColorLookupTable()
+: _range(std::make_pair<double, double>(std::numeric_limits<double>::lowest(), std::numeric_limits<double>::max())),
+  _type(DataHolderLib::LUTType::LINEAR)
+{}
+
+void ColorLookupTable::setTableRange(double min, double max)
+{
+    if (min<max)
+        _range = std::make_pair(min, max);
+}
+
+void ColorLookupTable::setColor(double id, DataHolderLib::Color color)
+{
+    if ((id>_range.first) && (id<_range.second))
+        _lut.push_back(std::make_tuple(id, color, ""));
+}
+
+void ColorLookupTable::setColor(std::string const& name, DataHolderLib::Color color)
+{
+    _lut.push_back(std::make_tuple(0, color, name));
+}
+
+
+
+} // namespace
diff --git a/Applications/DataHolderLib/ColorLookupTable.h b/Applications/DataHolderLib/ColorLookupTable.h
new file mode 100644
index 0000000000000000000000000000000000000000..5dea7d99f5fece91c0c93c5d7efbfaf6fa744934
--- /dev/null
+++ b/Applications/DataHolderLib/ColorLookupTable.h
@@ -0,0 +1,71 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2016, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#ifndef COLORLOOKUPTABLE_H
+#define COLORLOOKUPTABLE_H
+
+#include <cassert>
+#include <tuple>
+#include <utility>
+#include <vector>
+
+#include "Applications/DataHolderLib/Color.h"
+
+namespace DataHolderLib
+{
+
+/// Interpolation methods
+enum class LUTType {
+    NONE = 0,
+    LINEAR = 1,
+    EXPONENTIAL = 2,
+    SIGMOID = 3 // not yet implemented
+};
+
+/**
+ * A colour look-up table stored as a vector containing for each entry
+ *    id     - value for which the colour is stored
+ *    colour - RGBA value
+ *    name   - a name referencing the colour (such as a stratigraphic layer)
+ * Colours from the table can then be accessed using either id or name.
+ */
+class ColorLookupTable
+{
+public:
+    ColorLookupTable();
+
+    void setColor(double id, DataHolderLib::Color color);
+
+    void setColor(std::string const& name, DataHolderLib::Color color);
+
+    DataHolderLib::LUTType getInterpolationType() const { return _type; }
+
+    void setInterpolationType(LUTType type) { _type = type; }
+
+    std::size_t size() const { return _lut.size(); }
+
+    std::pair<double, double> getTableRange() const { return _range; }
+
+    void setTableRange(double min, double max);
+
+    std::tuple<double, Color, std::string> const& operator[](std::size_t i) const
+    {
+        assert (i < _lut.size());
+        return _lut[i];
+    }
+
+private:
+    std::vector< std::tuple<double, Color, std::string> > _lut;
+    LUTType _type;
+    std::pair<double, double> _range;
+};
+
+} // namespace
+
+#endif //COLORLOOKUPTABLE_H