diff --git a/dumux/porousmediumflow/mpnc/model.hh b/dumux/porousmediumflow/mpnc/model.hh
index a5fb39445f95dd967e0148b50483a3ee2cc05f08..cbde34dd594ac6ea49a60d058b10a61ef6bb6cad 100644
--- a/dumux/porousmediumflow/mpnc/model.hh
+++ b/dumux/porousmediumflow/mpnc/model.hh
@@ -220,7 +220,16 @@ SET_INT_PROP(MPNC,
              PressureFormulation,
              MpNcPressureFormulation::mostWettingFirst);
 
-SET_TYPE_PROP(MPNC, VtkOutputFields, MPNCVtkOutputFields<TypeTag>);           //! Set the vtk output fields specific to the mpnc model
+//! Set the vtk output fields specific to this model
+SET_PROP(MPNC, VtkOutputFields)
+{
+private:
+   using FluidSystem =  typename GET_PROP_TYPE(TypeTag, FluidSystem);
+   using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
+
+public:
+    using type = MPNCVtkOutputFields<FluidSystem, Indices>;
+};
 
 SET_BOOL_PROP(MPNC, EnableAdvection, true);                  //! Enable advection
 SET_BOOL_PROP(MPNC, EnableMolecularDiffusion, true);         //! Enable molecular diffusion
@@ -255,7 +264,17 @@ SET_INT_PROP(MPNCNI, IsothermalNumEq, GET_PROP_VALUE(TypeTag, NumEq));
 /////////////////////////////////////////////////
 
 SET_TYPE_PROP(MPNCNonequil, EquilibriumLocalResidual, MPNCLocalResidual<TypeTag>);
-SET_TYPE_PROP(MPNCNonequil, EquilibriumVtkOutputFields, MPNCVtkOutputFields<TypeTag>);
+
+//! Set the vtk output fields specific to this model
+SET_PROP(MPNCNonequil, EquilibriumVtkOutputFields)
+{
+private:
+   using FluidSystem =  typename GET_PROP_TYPE(TypeTag, FluidSystem);
+   using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
+
+public:
+    using type = MPNCVtkOutputFields<FluidSystem, Indices>;
+};
 
 SET_PROP(MPNCNonequil, EquilibriumIndices)
 {
diff --git a/dumux/porousmediumflow/mpnc/vtkoutputfields.hh b/dumux/porousmediumflow/mpnc/vtkoutputfields.hh
index bcbb68ee93afa6f294d48b39b36b5088665eac40..03e28c84e9c2d2b8e89e3c0163d60fd95f0797f7 100644
--- a/dumux/porousmediumflow/mpnc/vtkoutputfields.hh
+++ b/dumux/porousmediumflow/mpnc/vtkoutputfields.hh
@@ -32,37 +32,31 @@ namespace Dumux {
  * \ingroup MPNCModel
  * \brief Adds vtk output fields specific to the twop model
  */
-template<class TypeTag>
+template<class FluidSystem, class Indices>
 class MPNCVtkOutputFields
 {
-    using Indices = typename GET_PROP_TYPE(TypeTag, Indices);
-    using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables);
-    using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
-
-    static constexpr int numPhases = GET_PROP_VALUE(TypeTag, NumPhases);
-    static constexpr int numComponents = GET_PROP_VALUE(TypeTag, NumComponents);
 
 public:
     template <class VtkOutputModule>
     static void init(VtkOutputModule& vtk)
     {
-        for (int i = 0; i < numPhases; ++i)
-            vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.saturation(i); }, "S_"+ FluidSystem::phaseName(i));
+        for (int i = 0; i < FluidSystem::numPhases; ++i)
+            vtk.addVolumeVariable([i](const auto& v){ return v.saturation(i); }, "S_"+ FluidSystem::phaseName(i));
 
-       for (int i = 0; i < numPhases; ++i)
-            vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.pressure(i); }, "p_"+ FluidSystem::phaseName(i));
+       for (int i = 0; i < FluidSystem::numPhases; ++i)
+            vtk.addVolumeVariable([i](const auto& v){ return v.pressure(i); }, "p_"+ FluidSystem::phaseName(i));
 
-       for (int i = 0; i < numPhases; ++i)
-            vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.density(i); }, "rho_"+ FluidSystem::phaseName(i));
+       for (int i = 0; i < FluidSystem::numPhases; ++i)
+            vtk.addVolumeVariable([i](const auto& v){ return v.density(i); }, "rho_"+ FluidSystem::phaseName(i));
 
-       for (int i = 0; i < numPhases; ++i)
-                  vtk.addVolumeVariable([i](const VolumeVariables& v){ return v.mobility(i); },"lambda_"+ FluidSystem::phaseName(i));
+       for (int i = 0; i < FluidSystem::numPhases; ++i)
+                  vtk.addVolumeVariable([i](const auto& v){ return v.mobility(i); },"lambda_"+ FluidSystem::phaseName(i));
 
-        vtk.addVolumeVariable([](const VolumeVariables& v){ return v.porosity(); }, "porosity");
+        vtk.addVolumeVariable([](const auto& v){ return v.porosity(); }, "porosity");
 
-        for (int i = 0; i < numPhases; ++i)
-            for (int j = 0; j < numComponents; ++j)
-                vtk.addVolumeVariable([i,j](const VolumeVariables& v){ return v.moleFraction(i,j); },"x_"+ FluidSystem::phaseName(i) + "^" + FluidSystem::componentName(j));
+        for (int i = 0; i < FluidSystem::numPhases; ++i)
+            for (int j = 0; j < FluidSystem::numComponents; ++j)
+                vtk.addVolumeVariable([i,j](const auto& v){ return v.moleFraction(i,j); },"x_"+ FluidSystem::phaseName(i) + "^" + FluidSystem::componentName(j));
     }
 };
 
diff --git a/dumux/porousmediumflow/nonequilibrium/model.hh b/dumux/porousmediumflow/nonequilibrium/model.hh
index ce3385be411991ed1a2299a3e0238f7add8536e7..4885f6e1c4f73e92c2fa360c3eb51272e8ef642f 100644
--- a/dumux/porousmediumflow/nonequilibrium/model.hh
+++ b/dumux/porousmediumflow/nonequilibrium/model.hh
@@ -100,7 +100,17 @@ public:
 SET_TYPE_PROP(NonEquilibrium, GridVariables, NonEquilibriumGridVariables<TypeTag>);
 
 //! indices for non-isothermal models
-SET_TYPE_PROP(NonEquilibrium, VtkOutputFields, NonEquilibriumVtkOutputFields<TypeTag>);
+SET_PROP(NonEquilibrium, VtkOutputFields)
+{
+private:
+    using EquilibriumVtkOutputFields = typename GET_PROP_TYPE(TypeTag, EquilibriumVtkOutputFields);
+    using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
+
+    static constexpr int numEnergyEqFluid = GET_PROP_VALUE(TypeTag, NumEnergyEqFluid);
+    static constexpr int numEnergyEqSolid = GET_PROP_VALUE(TypeTag, NumEnergyEqSolid);
+public:
+     using type = NonEquilibriumVtkOutputFields<EquilibriumVtkOutputFields, FluidSystem, numEnergyEqFluid, numEnergyEqSolid>;
+};
 
 SET_PROP(NonEquilibrium, NusseltFormulation )
 {
diff --git a/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh b/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh
index 2370dec34eb28049ef62534cbdcbf766e1c7319e..62253bad4bc4631bf613adbbd9160a8c4be324c2 100644
--- a/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh
+++ b/dumux/porousmediumflow/nonequilibrium/vtkoutputfields.hh
@@ -33,29 +33,23 @@ namespace Dumux
  * \ingroup PorousmediumNonEquilibriumModel
  * \brief Adds vtk output fields specific to non-isothermal models
  */
-template<class TypeTag>
+template<class EquilibriumVtkOutputFields, class FluidSystem, int numEnergyEqFluid, int numEnergyEqSolid>
 class NonEquilibriumVtkOutputFields
 {
-    using EquilibriumVtkOutputFields = typename GET_PROP_TYPE(TypeTag, EquilibriumVtkOutputFields);
-    using VolumeVariables = typename GET_PROP_TYPE(TypeTag, VolumeVariables);
-    using FluidSystem = typename GET_PROP_TYPE(TypeTag, FluidSystem);
 
-    static constexpr int numPhases = GET_PROP_VALUE(TypeTag, NumPhases);
-    static constexpr int numEnergyEqFluid = GET_PROP_VALUE(TypeTag, NumEnergyEqFluid);
-    static constexpr int numEnergyEqSolid = GET_PROP_VALUE(TypeTag, NumEnergyEqSolid);
 public:
     template <class VtkOutputModule>
     static void init(VtkOutputModule& vtk)
     {
         EquilibriumVtkOutputFields::init(vtk);
          for (int i = 0; i < numEnergyEqFluid; ++i)
-        vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.temperature(i); }, "T_" + FluidSystem::phaseName(i) );
+        vtk.addVolumeVariable( [i](const auto& v){ return v.temperature(i); }, "T_" + FluidSystem::phaseName(i) );
          for (int i = 0; i < numEnergyEqSolid; ++i)
-        vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.temperatureSolid(); }, "T_solid" );
-        for (int i = 0; i < numPhases; ++i){
-        vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.reynoldsNumber(i); }, "reynoldsNumber_" + FluidSystem::phaseName(i) );
-        vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.nusseltNumber(i); }, "nusseltNumber_" + FluidSystem::phaseName(i) );
-        vtk.addVolumeVariable( [i](const VolumeVariables& v){ return v.prandtlNumber(i); }, "prandtlNumber_" + FluidSystem::phaseName(i) );
+        vtk.addVolumeVariable( [i](const auto& v){ return v.temperatureSolid(); }, "T_solid" );
+        for (int i = 0; i < FluidSystem::numPhases; ++i){
+        vtk.addVolumeVariable( [i](const auto& v){ return v.reynoldsNumber(i); }, "reynoldsNumber_" + FluidSystem::phaseName(i) );
+        vtk.addVolumeVariable( [i](const auto& v){ return v.nusseltNumber(i); }, "nusseltNumber_" + FluidSystem::phaseName(i) );
+        vtk.addVolumeVariable( [i](const auto& v){ return v.prandtlNumber(i); }, "prandtlNumber_" + FluidSystem::phaseName(i) );
         }
     }
 };