diff --git a/ProcessLib/Output/IntegrationPointWriter.h b/ProcessLib/Output/IntegrationPointWriter.h
new file mode 100644
index 0000000000000000000000000000000000000000..b442d107f8df9efda4e2a23a6c7629e1ce1a8ae8
--- /dev/null
+++ b/ProcessLib/Output/IntegrationPointWriter.h
@@ -0,0 +1,24 @@
+/**
+ * \copyright
+ * Copyright (c) 2012-2018, OpenGeoSys Community (http://www.opengeosys.org)
+ *            Distributed under a Modified BSD License.
+ *              See accompanying file LICENSE.txt or
+ *              http://www.opengeosys.org/project/license
+ *
+ */
+
+#pragma once
+
+namespace ProcessLib
+{
+struct IntegrationPointWriter
+{
+    virtual ~IntegrationPointWriter() = default;
+
+    virtual int numberOfComponents() const = 0;
+    virtual int integrationOrder() const = 0;
+    virtual std::string name() const = 0;
+    virtual std::vector<std::vector<double>> values() const = 0;
+};
+
+}  // namespace ProcessLib
diff --git a/ProcessLib/Process.h b/ProcessLib/Process.h
index 467a04085e63c1e51cb069886de43ecda42d5525..1f9d078b4eb2a1a414c2e63a0719d8afa428f9bc 100644
--- a/ProcessLib/Process.h
+++ b/ProcessLib/Process.h
@@ -19,6 +19,7 @@
 #include "ProcessLib/SourceTerms/SourceTermCollection.h"
 #include "ProcessLib/Output/CachedSecondaryVariable.h"
 #include "ProcessLib/Output/ExtrapolatorData.h"
+#include "ProcessLib/Output/IntegrationPointWriter.h"
 #include "ProcessLib/Output/SecondaryVariable.h"
 #include "ProcessLib/Parameter/Parameter.h"
 #include "ProcessLib/SourceTerms/NodalSourceTerm.h"
@@ -126,6 +127,12 @@ public:
         return _secondary_variables;
     }
 
+    std::vector<std::unique_ptr<IntegrationPointWriter>> const&
+    getIntegrationPointWriter() const
+    {
+        return _integration_point_writer;
+    }
+
     // Used as a call back for CalculateSurfaceFlux process.
 
     virtual std::vector<double> getFlux(std::size_t /*element_id*/,
@@ -264,6 +271,12 @@ protected:
     /// implemented in MathLib::GaussLegendre.
     unsigned const _integration_order;
 
+    /// An optional vector containing descriptions for integration point data
+    /// output and setting of the integration point initial conditions.
+    /// The integration point writer are implemented in specific processes.
+    std::vector<std::unique_ptr<IntegrationPointWriter>>
+        _integration_point_writer;
+
     GlobalSparsityPattern _sparsity_pattern;
 
 private: