diff --git a/dumux/implicit/1p/1pproperties.hh b/dumux/implicit/1p/1pproperties.hh
index 6d929c5bac9f61b25b9019a7a7318d1b745788b1..a88cdd4bbe4179caf383d98d27fddada0eaa096a 100644
--- a/dumux/implicit/1p/1pproperties.hh
+++ b/dumux/implicit/1p/1pproperties.hh
@@ -62,6 +62,7 @@ NEW_PROP_TAG(Indices); //!< Enumerations for the model
 NEW_PROP_TAG(SpatialParams); //!< The type of the spatial parameters object
 NEW_PROP_TAG(FluidSystem); //!< The type of the fluid system to use
 NEW_PROP_TAG(Fluid); //!< The fluid used for the default fluid system
+NEW_PROP_TAG(FluidState); //!< The type of the fluid state to use
 NEW_PROP_TAG(ProblemEnableGravity); //!< Returns whether gravity is considered in the problem
 NEW_PROP_TAG(ImplicitMassUpwindWeight); //!< Returns weight of the upwind cell when calculating fluxes
 NEW_PROP_TAG(ImplicitMobilityUpwindWeight); //!< Weight for the upwind mobility in the velocity calculation
diff --git a/dumux/implicit/1p/1ppropertydefaults.hh b/dumux/implicit/1p/1ppropertydefaults.hh
index 856a4d06331d2493fc86ff61d97ea5cb72c81ad0..fb927d1de57289fd28971250731a22c7faf9feba 100644
--- a/dumux/implicit/1p/1ppropertydefaults.hh
+++ b/dumux/implicit/1p/1ppropertydefaults.hh
@@ -91,6 +91,20 @@ public:
     typedef Dumux::LiquidPhase<Scalar, Dumux::NullComponent<Scalar> > type;
 };
 
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(OneP, FluidState){
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef Dumux::ImmiscibleFluidState<Scalar, FluidSystem> type;
+};
+
 // disable velocity output by default
 SET_BOOL_PROP(OneP, VtkAddVelocity, false);
 
diff --git a/dumux/implicit/1p/1pvolumevariables.hh b/dumux/implicit/1p/1pvolumevariables.hh
index a7a10cccb66f02c662ae7ae9b227a12174c6c75a..e1d3e671a4ee057979dc59090e32d2cc5ca1950c 100644
--- a/dumux/implicit/1p/1pvolumevariables.hh
+++ b/dumux/implicit/1p/1pvolumevariables.hh
@@ -55,8 +55,8 @@ class OnePVolumeVariables : public ImplicitVolumeVariables<TypeTag>
     typedef typename GridView::template Codim<0>::Entity Element;
 
 public:
-    //! Type of the fluid state
-    typedef Dumux::ImmiscibleFluidState<Scalar, FluidSystem> FluidState;
+
+    typedef typename GET_PROP_TYPE(TypeTag, FluidState) FluidState;
 
     /*!
      * \copydoc ImplicitVolumeVariables::update
diff --git a/dumux/implicit/1p2c/1p2cproperties.hh b/dumux/implicit/1p2c/1p2cproperties.hh
index 680d6eeab8eea79999a8aff1eea909ed39ea3538..f4190bc1ad15c2e738d7ef20b3ae29c2569893d5 100644
--- a/dumux/implicit/1p2c/1p2cproperties.hh
+++ b/dumux/implicit/1p2c/1p2cproperties.hh
@@ -65,6 +65,7 @@ NEW_PROP_TAG(Indices); //!< Enumerations for the model
 NEW_PROP_TAG(SpatialParams); //!< The type of the spatial parameters
 NEW_PROP_TAG(EffectiveDiffusivityModel); //!< The employed model for the computation of the effective diffusivity
 NEW_PROP_TAG(FluidSystem); //!< Type of the multi-component relations
+NEW_PROP_TAG(FluidState); //!< Type of the fluid state to be used
 NEW_PROP_TAG(ImplicitMassUpwindWeight);   //!< The default value of the upwind weight
 NEW_PROP_TAG(ImplicitMobilityUpwindWeight); //!< Weight for the upwind mobility in the velocity calculation
 NEW_PROP_TAG(ProblemEnableGravity); //!< Returns whether gravity is considered in the problem
diff --git a/dumux/implicit/1p2c/1p2cpropertydefaults.hh b/dumux/implicit/1p2c/1p2cpropertydefaults.hh
index 0cab4fc95dbd98695fd101fb9cd800b87e8ed57e..d57c8ce66a896c4faf4c80c91256360d7800c21a 100644
--- a/dumux/implicit/1p2c/1p2cpropertydefaults.hh
+++ b/dumux/implicit/1p2c/1p2cpropertydefaults.hh
@@ -69,6 +69,20 @@ SET_TYPE_PROP(OnePTwoC, VolumeVariables, typename GET_PROP_TYPE(TypeTag, Isother
 //! define the FluxVariables
 SET_TYPE_PROP(OnePTwoC, FluxVariables, typename GET_PROP_TYPE(TypeTag, IsothermalFluxVariables));
 
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(OnePTwoC, FluidState){
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> type;
+};
+
 //! set default upwind weight to 1.0, i.e. fully upwind
 SET_SCALAR_PROP(OnePTwoC, ImplicitMassUpwindWeight, 1.0);
 
diff --git a/dumux/implicit/1p2c/1p2cvolumevariables.hh b/dumux/implicit/1p2c/1p2cvolumevariables.hh
index 05689101447bf130c1f6a62e0b36fa2a6ff982e2..807475142b858681fbb9bf32815bf638f6893af6 100644
--- a/dumux/implicit/1p2c/1p2cvolumevariables.hh
+++ b/dumux/implicit/1p2c/1p2cvolumevariables.hh
@@ -72,8 +72,8 @@ class OnePTwoCVolumeVariables : public ImplicitVolumeVariables<TypeTag>
     typedef Dune::FieldVector<Scalar,dimWorld> GlobalPosition;
 
 public:
-    //! The type returned by the fluidState() method
-    typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> FluidState;
+
+    typedef typename GET_PROP_TYPE(TypeTag, FluidState) FluidState;
 
     /*!
      * \copydoc ImplicitVolumeVariables::update
diff --git a/dumux/implicit/2p2c/2p2cproperties.hh b/dumux/implicit/2p2c/2p2cproperties.hh
index 37b329444a1fab78c528c5305f49e9e78952e4ae..05172090dcafd51f67b222475550a60b813ff569 100644
--- a/dumux/implicit/2p2c/2p2cproperties.hh
+++ b/dumux/implicit/2p2c/2p2cproperties.hh
@@ -62,6 +62,7 @@ NEW_PROP_TAG(Indices); //!< Enumerations for the model
 NEW_PROP_TAG(Formulation); //!< The formulation of the model
 NEW_PROP_TAG(SpatialParams); //!< The type of the spatial parameters
 NEW_PROP_TAG(FluidSystem); //!< The type of the multi-component relations
+NEW_PROP_TAG(FluidState); //!< The type of the 2p2c fluid state
 
 NEW_PROP_TAG(MaterialLaw); //!< The material law which ought to be used (extracted from the spatial parameters)
 NEW_PROP_TAG(MaterialLawParams); //!< The parameters of the material law (extracted from the spatial parameters)
diff --git a/dumux/implicit/2p2c/2p2cpropertydefaults.hh b/dumux/implicit/2p2c/2p2cpropertydefaults.hh
index c1fe7e02fa3cebc7c21ea4efee110a8609f6b841..d4252a2bff5270335689e86fc741383021da122b 100644
--- a/dumux/implicit/2p2c/2p2cpropertydefaults.hh
+++ b/dumux/implicit/2p2c/2p2cpropertydefaults.hh
@@ -85,6 +85,20 @@ SET_PROP(TwoPTwoC, NumPhases)
                   "Only fluid systems with 2 phases are supported by the 2p-2c model!");
 };
 
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(TwoPTwoC, FluidState){
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> type;
+};
+
 //! Set the number of equations to 2
 SET_INT_PROP(TwoPTwoC, NumEq, 2);
 
diff --git a/dumux/implicit/2p2c/2p2cvolumevariables.hh b/dumux/implicit/2p2c/2p2cvolumevariables.hh
index 2c2f19441033ccf6d381e969b300a81b6162c334..41d4fddca5a2c33bc2e4f137e5c31c8bc956a2ed 100644
--- a/dumux/implicit/2p2c/2p2cvolumevariables.hh
+++ b/dumux/implicit/2p2c/2p2cvolumevariables.hh
@@ -102,8 +102,8 @@ class TwoPTwoCVolumeVariables : public ImplicitVolumeVariables<TypeTag>
     enum { dofCodim = isBox ? dim : 0 };
 
 public:
-    //! The type of the object returned by the fluidState() method
-    typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> FluidState;
+
+    typedef typename GET_PROP_TYPE(TypeTag, FluidState) FluidState;
 
     /*!
      * \copydoc ImplicitVolumeVariables::update
diff --git a/dumux/implicit/2pnc/2pncproperties.hh b/dumux/implicit/2pnc/2pncproperties.hh
index 6af8b5c860b4865e69c3f75c3694243a0a3e8adb..2f4ace554442a649847e3609d80126655e6487b3 100644
--- a/dumux/implicit/2pnc/2pncproperties.hh
+++ b/dumux/implicit/2pnc/2pncproperties.hh
@@ -63,6 +63,7 @@ NEW_PROP_TAG(TwoPNCIndices); //!< Enumerations for the 2pncMin models
 NEW_PROP_TAG(Formulation);   //!< The formulation of the model
 NEW_PROP_TAG(SpatialParams); //!< The type of the spatial parameters
 NEW_PROP_TAG(FluidSystem); //!< Type of the multi-component relations
+NEW_PROP_TAG(FluidState); //!< Type of the fluid state of the 2pnc model
 NEW_PROP_TAG(Indices); //!< Enumerations for the model
 NEW_PROP_TAG(Chemistry); //!< The chemistry class with which solves equlibrium reactions
 
diff --git a/dumux/implicit/2pnc/2pncpropertydefaults.hh b/dumux/implicit/2pnc/2pncpropertydefaults.hh
index 3d4212c160f0e0e53d88e2a64a270093a1f9308f..7a8f14ed9d928bba7688ee7af09da9e4810ae314 100644
--- a/dumux/implicit/2pnc/2pncpropertydefaults.hh
+++ b/dumux/implicit/2pnc/2pncpropertydefaults.hh
@@ -113,6 +113,20 @@ public:
     static const int value = FluidSystem::numComponents;
 };
 
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(TwoPNC, FluidState){
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> type;
+};
+
 //! Set the default formulation to pl-Sg: This can be over written in the problem.
 SET_INT_PROP(TwoPNC, Formulation, TwoPNCFormulation::plSg);
 
diff --git a/dumux/implicit/2pnc/2pncvolumevariables.hh b/dumux/implicit/2pnc/2pncvolumevariables.hh
index 27b7d97c861161af0fdbd0dfb282385baf7343d9..7bf1c928eb8e315d31d68da11a50e7e6f3477e34 100644
--- a/dumux/implicit/2pnc/2pncvolumevariables.hh
+++ b/dumux/implicit/2pnc/2pncvolumevariables.hh
@@ -104,8 +104,8 @@ class TwoPNCVolumeVariables : public ImplicitVolumeVariables<TypeTag>
     enum { dofCodim = isBox ? dim : 0 };
 public:
 
-      //! The type of the object returned by the fluidState() method
-      typedef CompositionalFluidState<Scalar, FluidSystem> FluidState;
+    typedef typename GET_PROP_TYPE(TypeTag, FluidState) FluidState;
+
     /*!
      * \copydoc ImplicitVolumeVariables::update
      * \param primaryVariables The primary Variables
diff --git a/dumux/implicit/2pncmin/2pncminpropertydefaults.hh b/dumux/implicit/2pncmin/2pncminpropertydefaults.hh
index fa29ac3f81627793d536daddfff28a5da671b5c3..c52eb5097da2be0c7013993d7da940e01c11420a 100644
--- a/dumux/implicit/2pncmin/2pncminpropertydefaults.hh
+++ b/dumux/implicit/2pncmin/2pncminpropertydefaults.hh
@@ -94,6 +94,20 @@ public:
     static const int value = FluidSystem::numComponents + FluidSystem::numSPhases;
 };
 
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(TwoPNCMin, FluidState){
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> type;
+};
+
 //! Use the 2pncmin local residual operator
 SET_TYPE_PROP(TwoPNCMin,
               LocalResidual,
diff --git a/dumux/implicit/2pncmin/2pncminvolumevariables.hh b/dumux/implicit/2pncmin/2pncminvolumevariables.hh
index f8e3b7a060eba1125c7236efbcc705abc22772f9..9ac07987746a6a7c7462a2d086718c826496a5cc 100644
--- a/dumux/implicit/2pncmin/2pncminvolumevariables.hh
+++ b/dumux/implicit/2pncmin/2pncminvolumevariables.hh
@@ -108,8 +108,8 @@ class TwoPNCMinVolumeVariables : public TwoPNCVolumeVariables<TypeTag>
     enum { dofCodim = isBox ? dim : 0 };
 public:
 
-      //! The type of the object returned by the fluidState() method
-      typedef CompositionalFluidState<Scalar, FluidSystem> FluidState;
+    typedef typename GET_PROP_TYPE(TypeTag, FluidState) FluidState;
+
     /*!
      * \copydoc ImplicitVolumeVariables::update
      */
diff --git a/dumux/implicit/3p3c/3p3cproperties.hh b/dumux/implicit/3p3c/3p3cproperties.hh
index 81a97b4c97a333884be0bc8bbaa75f96ca88325e..d9c974275af2046738a5508046082d41888357a7 100644
--- a/dumux/implicit/3p3c/3p3cproperties.hh
+++ b/dumux/implicit/3p3c/3p3cproperties.hh
@@ -63,6 +63,7 @@ NEW_PROP_TAG(NumComponents); //!< Number of fluid components in the system
 NEW_PROP_TAG(Indices); //!< Enumerations for the model
 NEW_PROP_TAG(SpatialParams); //!< The type of the spatial parameters
 NEW_PROP_TAG(FluidSystem); //!< Type of the multi-component relations
+NEW_PROP_TAG(FluidState); //!< Type of the fluid state to be used
 
 NEW_PROP_TAG(MaterialLaw);   //!< The material law which ought to be used (extracted from the spatial parameters)
 NEW_PROP_TAG(MaterialLawParams); //!< The parameters of the material law (extracted from the spatial parameters)
diff --git a/dumux/implicit/3p3c/3p3cpropertydefaults.hh b/dumux/implicit/3p3c/3p3cpropertydefaults.hh
index f8d9c5d5d80f49511b2eb4190d229d00e5c0e097..81b3af95202eb29da5a4b26dc21f473068841003 100644
--- a/dumux/implicit/3p3c/3p3cpropertydefaults.hh
+++ b/dumux/implicit/3p3c/3p3cpropertydefaults.hh
@@ -87,6 +87,20 @@ SET_PROP(ThreePThreeC, NumPhases)
                   "Only fluid systems with 3 phases are supported by the 3p3c model!");
 };
 
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(ThreePThreeC, FluidState){
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> type;
+};
+
 SET_INT_PROP(ThreePThreeC, NumEq, 3); //!< set the number of equations to 2
 
 /*!
diff --git a/dumux/implicit/3p3c/3p3cvolumevariables.hh b/dumux/implicit/3p3c/3p3cvolumevariables.hh
index b0d11c377683c43864dffc0052d452831ca82803..2e4a9a45977dc1ab5345e684a1602e7b018933c4 100644
--- a/dumux/implicit/3p3c/3p3cvolumevariables.hh
+++ b/dumux/implicit/3p3c/3p3cvolumevariables.hh
@@ -98,9 +98,8 @@ class ThreePThreeCVolumeVariables : public ImplicitVolumeVariables<TypeTag>
     enum { dofCodim = isBox ? dim : 0 };
 
 public:
-    //! The type of the object returned by the fluidState() method
-    typedef Dumux::CompositionalFluidState<Scalar, FluidSystem> FluidState;
 
+   typedef typename GET_PROP_TYPE(TypeTag, FluidState) FluidState;
 
     /*!
      * \copydoc ImplicitVolumeVariables::update
diff --git a/dumux/implicit/richards/richardsproperties.hh b/dumux/implicit/richards/richardsproperties.hh
index b587344cd343cc65b4ffaf774a7d636ae8e4e36e..156e19027ac5743754c1322ad67b42d98bde94fc 100644
--- a/dumux/implicit/richards/richardsproperties.hh
+++ b/dumux/implicit/richards/richardsproperties.hh
@@ -64,6 +64,7 @@ NEW_PROP_TAG(SpatialParams); //!< The type of the spatial parameters
 NEW_PROP_TAG(MaterialLaw);   //!< The material law which ought to be used (by default extracted from the spatial parameters)
 NEW_PROP_TAG(MaterialLawParams); //!< The type of the parameter object for the material law (by default extracted from the spatial parameters)
 NEW_PROP_TAG(FluidSystem); //!< The fluid system to be used for the Richards model
+NEW_PROP_TAG(FluidState); //!< The fluid state to be used for the Richards model
 NEW_PROP_TAG(WettingPhase); //!< Fluid which represents the wetting phase
 NEW_PROP_TAG(NonwettingPhase); //!< Fluid which represents the non-wetting phase
 NEW_PROP_TAG(ProblemEnableGravity); //!< Returns whether gravity is considered in the problem
diff --git a/dumux/implicit/richards/richardspropertydefaults.hh b/dumux/implicit/richards/richardspropertydefaults.hh
index 68abd8c724dae03ebac3c9c8d408b3ae42205296..4aa82b1e1d61ae560959754977df9863ec7e5048 100644
--- a/dumux/implicit/richards/richardspropertydefaults.hh
+++ b/dumux/implicit/richards/richardspropertydefaults.hh
@@ -157,6 +157,20 @@ public:
                                                 NonwettingPhase> type;
 };
 
+/*!
+ * \brief The fluid state which is used by the volume variables to
+ *        store the thermodynamic state. This should be chosen
+ *        appropriately for the model ((non-)isothermal, equilibrium, ...).
+ *        This can be done in the problem.
+ */
+SET_PROP(Richards, FluidState){
+    private:
+        typedef typename GET_PROP_TYPE(TypeTag, Scalar) Scalar;
+        typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
+    public:
+        typedef Dumux::ImmiscibleFluidState<Scalar, FluidSystem> type;
+};
+
 // disable velocity output by default
 SET_BOOL_PROP(Richards, VtkAddVelocity, false);
 
diff --git a/dumux/implicit/richards/richardsvolumevariables.hh b/dumux/implicit/richards/richardsvolumevariables.hh
index e3bdccf52cc4240f49906b1d70cf55c37fdf5c04..93c7979d5e03efb7147472b7e7a41040d7875f21 100644
--- a/dumux/implicit/richards/richardsvolumevariables.hh
+++ b/dumux/implicit/richards/richardsvolumevariables.hh
@@ -67,8 +67,8 @@ class RichardsVolumeVariables : public ImplicitVolumeVariables<TypeTag>
     static const bool useHead = GET_PROP_VALUE(TypeTag, UseHead);
 
 public:
-    //! The type returned by the fluidState() method
-    typedef Dumux::ImmiscibleFluidState<Scalar, FluidSystem> FluidState;
+
+    typedef typename GET_PROP_TYPE(TypeTag, FluidState) FluidState;
 
     /*!
      * \copydoc ImplicitVolumeVariables::update