diff --git a/dumux/boxmodels/2pni/2pnielementdata.hh b/dumux/boxmodels/2pni/2pnielementdata.hh
deleted file mode 100644
index 85b600e1e8b0bee93863147f0b65a1e796f84e0b..0000000000000000000000000000000000000000
--- a/dumux/boxmodels/2pni/2pnielementdata.hh
+++ /dev/null
@@ -1,45 +0,0 @@
-// $Id: 2pnielementdata.hh 3357 2010-03-25 13:02:05Z lauser $
-/*****************************************************************************
- *   Copyright (C) 2009 by Andreas Lauser                                    *
- *   Institute of Hydraulic Engineering                                      *
- *   University of Stuttgart, Germany                                        *
- *   email: <givenname>.<name>@iws.uni-stuttgart.de                          *
- *                                                                           *
- *   This program is free software; you can redistribute it and/or modify    *
- *   it under the terms of the GNU General Public License as published by    *
- *   the Free Software Foundation; either version 2 of the License, or       *
- *   (at your option) any later version, as long as this copyright notice    *
- *   is included in its original form.                                       *
- *                                                                           *
- *   This program is distributed WITHOUT ANY WARRANTY.                       *
- *****************************************************************************/
-/*!
- * \file
- *
- * \brief This template class contains the quantities which are
- *        constant within a finite element in the non-isothermal
- *        two-phase model.
- */
-#ifndef DUMUX_2PNI_ELEMENT_DATA_HH
-#define DUMUX_2PNI_ELEMENT_DATA_HH
-
-#include <dumux/boxmodels/2p/2pelementdata.hh>
-
-namespace Dumux
-{
-/*!
- * \ingroup TwoPNIBoxModel
- * \brief This template class contains the quantities which are
- *        constant within a finite element in the non-isothermal two-phase model.
- *
- * For the plain non-isothermal two-phase model everything is given on the finite
- * volumes, so this class is empty.
- */
-template <class TypeTag>
-class TwoPNIElementData : public TwoPElementData<TypeTag>
-{
-};
-
-} // end namepace
-
-#endif
diff --git a/dumux/boxmodels/2pni/2pnifluxdata.hh b/dumux/boxmodels/2pni/2pnifluxvars.hh
similarity index 84%
rename from dumux/boxmodels/2pni/2pnifluxdata.hh
rename to dumux/boxmodels/2pni/2pnifluxvars.hh
index 379dae39aa7e470363ebb47355f4f25efe43401b..5a6f33c05437698a6713bd49aecc5a597fd20db9 100644
--- a/dumux/boxmodels/2pni/2pnifluxdata.hh
+++ b/dumux/boxmodels/2pni/2pnifluxvars.hh
@@ -1,4 +1,4 @@
-// $Id: 2pnifluxdata.hh 3793 2010-06-25 15:38:42Z melanie $
+// $Id: 2pnifluxvars.hh 3793 2010-06-25 15:38:42Z melanie $
 /*****************************************************************************
  *   Copyright (C) 2008-2009 by Melanie Darcis                               *
  *   Copyright (C) 2008-2009 by Andreas Lauser                               *
@@ -49,18 +49,18 @@ namespace Dumux
  * the integration point, etc.
  */
 template <class TypeTag>
-class TwoPNIFluxData : public TwoPFluxData<TypeTag>
+class TwoPNIFluxVars : public TwoPFluxVars<TypeTag>
 {
-    typedef TwoPFluxData<TypeTag>                           ParentType;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar))   Scalar;
+    typedef TwoPFluxVars<TypeTag> ParentType;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
 
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem))    Problem;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(VertexData)) VertexData;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(SecondaryVars)) SecondaryVars;
 
-    typedef typename GridView::ctype                     CoordScalar;
+    typedef typename GridView::ctype CoordScalar;
     typedef typename GridView::template Codim<0>::Entity Element;
-    typedef std::vector<VertexData>                      VertexDataArray;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementSecondaryVars)) ElementSecondaryVars;
 
     enum {
         dim           = GridView::dimension,
@@ -70,17 +70,17 @@ class TwoPNIFluxData : public TwoPFluxData<TypeTag>
     };
 
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(FVElementGeometry)) FVElementGeometry;
-    typedef typename FVElementGeometry::SubControlVolume             SCV;
-    typedef typename FVElementGeometry::SubControlVolumeFace         SCVFace;
+    typedef typename FVElementGeometry::SubControlVolume SCV;
+    typedef typename FVElementGeometry::SubControlVolumeFace SCVFace;
 
-    typedef Dune::FieldVector<CoordScalar, dimWorld>  Vector;
+    typedef Dune::FieldVector<CoordScalar, dimWorld> Vector;
 
 public:
-    TwoPNIFluxData(const Problem &problem,
+    TwoPNIFluxVars(const Problem &problem,
                    const Element &element,
                    const FVElementGeometry &elemGeom,
                    int scvfIdx,
-                   const VertexDataArray &elemDat)
+                   const ElementSecondaryVars &elemDat)
         : ParentType(problem, element, elemGeom, scvfIdx, elemDat)
     {
         // calculate temperature gradient using finite element
diff --git a/dumux/boxmodels/2pni/2pniboxjacobian.hh b/dumux/boxmodels/2pni/2pnilocalresidual.hh
similarity index 75%
rename from dumux/boxmodels/2pni/2pniboxjacobian.hh
rename to dumux/boxmodels/2pni/2pnilocalresidual.hh
index 3dfad1965d7face6d501243b1d9c5a3c2ca73bf3..f9781d5aad694c0627520e7f66c02382d92da56f 100644
--- a/dumux/boxmodels/2pni/2pniboxjacobian.hh
+++ b/dumux/boxmodels/2pni/2pnilocalresidual.hh
@@ -1,4 +1,4 @@
-// $Id: 2pniboxjacobian.hh 3840 2010-07-15 10:14:15Z bernd $
+// $Id: 2pnilocalresidual.hh 3840 2010-07-15 10:14:15Z bernd $
 /*****************************************************************************
  *   Copyright (C) 2008-2009 by Melanie Darcis                               *
  *   Copyright (C) 2008-2009 by Andreas Lauser                               *
@@ -27,11 +27,11 @@
 
 #include "2pniproperties.hh"
 
-#include <dumux/boxmodels/2p/2pboxjacobian.hh>
+#include <dumux/boxmodels/2p/2plocalresidual.hh>
 
-#include <dumux/boxmodels/2pni/2pnielementdata.hh>
-#include <dumux/boxmodels/2pni/2pnivertexdata.hh>
-#include <dumux/boxmodels/2pni/2pnifluxdata.hh>
+
+#include <dumux/boxmodels/2pni/2pnisecondaryvars.hh>
+#include <dumux/boxmodels/2pni/2pnifluxvars.hh>
 
 
 namespace Dumux
@@ -43,17 +43,17 @@ namespace Dumux
  */
 
 template<class TypeTag>
-class TwoPNIBoxJacobian : public TwoPBoxJacobian<TypeTag>
+class TwoPNILocalResidual : public TwoPLocalResidual<TypeTag>
 {
-    typedef TwoPNIBoxJacobian<TypeTag> ThisType;
-    typedef TwoPBoxJacobian<TypeTag>   ParentType;
+    typedef TwoPNILocalResidual<TypeTag> ThisType;
+    typedef TwoPLocalResidual<TypeTag> ParentType;
+
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
 
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem))   Problem;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView))  GridView;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar))    Scalar;
 
-    typedef typename GET_PROP(TypeTag, PTAG(SolutionTypes)) SolutionTypes;
-    typedef typename SolutionTypes::PrimaryVarVector        PrimaryVarVector;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(PrimaryVarVector)) PrimaryVarVector;
 
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(TwoPIndices)) Indices;
 
@@ -70,21 +70,16 @@ class TwoPNIBoxJacobian : public TwoPBoxJacobian<TypeTag>
     };
 
 
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(VertexData))   VertexData;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluxData))     FluxData;
-    typedef std::vector<VertexData> VertexDataArray;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(SecondaryVars)) SecondaryVars;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluxVars)) FluxVars;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementSecondaryVars)) ElementSecondaryVars;
 
-    typedef Dune::FieldVector<Scalar, dim>       LocalPosition;
-    typedef Dune::FieldVector<Scalar, dimWorld>  GlobalPosition;
+    typedef Dune::FieldVector<Scalar, dim> LocalPosition;
+    typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
 
     static const Scalar mobilityUpwindAlpha = GET_PROP_VALUE(TypeTag, PTAG(MobilityUpwindAlpha));
 
 public:
-    TwoPNIBoxJacobian(Problem &problem)
-        : ParentType(problem)
-    {
-    };
-
     /*!
      * \brief Evaluate the amount all conservation quantites
      *        (e.g. phase mass) within a sub-control volume.
@@ -102,8 +97,8 @@ public:
         // used. The secondary variables are used accordingly.  This
         // is required to compute the derivative of the storage term
         // using the implicit euler method.
-        const VertexDataArray &vertDatArray = usePrevSol ? this->prevElemDat_  : this->curElemDat_;
-        const VertexData      &vertDat = vertDatArray[scvIdx];
+        const ElementSecondaryVars &vertDatArray = usePrevSol ? this->prevSecVars_()  : this->curSecVars_();
+        const SecondaryVars      &vertDat = vertDatArray[scvIdx];
 
         // compute the energy storage
         result[temperatureIdx] =
@@ -125,7 +120,7 @@ public:
      * This method is called by compute flux (base class)
      */
     void computeAdvectiveFlux(PrimaryVarVector &flux,
-                              const FluxData &fluxData) const
+                              const FluxVars &fluxData) const
     {
         // advective mass flux
         ParentType::computeAdvectiveFlux(flux, fluxData);
@@ -134,8 +129,8 @@ public:
         flux[energyEqIdx] = 0;
         for (int phase = 0; phase < numPhases; ++phase) {
             // vertex data of the upstream and the downstream vertices
-            const VertexData &up = this->curElemDat_[fluxData.upstreamIdx(phase)];
-            const VertexData &dn = this->curElemDat_[fluxData.downstreamIdx(phase)];
+            const SecondaryVars &up = this->curSecVars_(fluxData.upstreamIdx(phase));
+            const SecondaryVars &dn = this->curSecVars_(fluxData.downstreamIdx(phase));
 
             flux[energyEqIdx] +=
                 fluxData.KmvpNormal(phase) * (
@@ -156,7 +151,7 @@ public:
      *        the face of a sub-control volume.
      */
     void computeDiffusiveFlux(PrimaryVarVector &flux,
-                              const FluxData &fluxData) const
+                              const FluxVars &fluxData) const
     {
         // diffusive mass flux
         ParentType::computeDiffusiveFlux(flux, fluxData);
diff --git a/dumux/boxmodels/2pni/2pniboxmodel.hh b/dumux/boxmodels/2pni/2pnimodel.hh
similarity index 75%
rename from dumux/boxmodels/2pni/2pniboxmodel.hh
rename to dumux/boxmodels/2pni/2pnimodel.hh
index 22ea1ab0129e33a261af6f9ca2e9d682ecef5f47..d97f6fb5b842fc7e13cfd72194545c84d47b1dcd 100644
--- a/dumux/boxmodels/2pni/2pniboxmodel.hh
+++ b/dumux/boxmodels/2pni/2pnimodel.hh
@@ -24,12 +24,12 @@
  * \brief Adaption of the BOX scheme to the non-isothermal twophase flow model.
  */
 
-#ifndef DUMUX_NEW_2PNI_BOX_MODEL_HH
-#define DUMUX_NEW_2PNI_BOX_MODEL_HH
+#ifndef DUMUX_2PNI_MODEL_HH
+#define DUMUX_2PNI_MODEL_HH
 
-#include <dumux/boxmodels/2p/2pboxmodel.hh>
-#include "2pniboxjacobian.hh"
-#include "2pniboxproblem.hh"
+#include <dumux/boxmodels/2p/2pmodel.hh>
+#include "2pnilocalresidual.hh"
+#include "2pniproblem.hh"
 
 namespace Dumux {
 
@@ -81,39 +81,8 @@ namespace Dumux {
  */
 
 template<class TypeTag>
-class TwoPNIBoxModel: public BoxScheme<TypeTag, TwoPNIBoxModel<TypeTag> > {
-    typedef TwoPNIBoxModel<TypeTag> ThisType;
-    typedef BoxScheme<TypeTag, ThisType> ParentType;
-
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(LocalJacobian)) LocalJacobian;
-
-public:
-    TwoPNIBoxModel(Problem &prob)
-    : ParentType(prob)
-    {
-    }
-
-    /*!
-     * \brief Append all quantities of interest which can be derived
-     *        from the solution of the current time step to the VTK
-     *        writer.
-     */
-    template <class MultiWriter>
-    void addOutputVtkFields(MultiWriter &writer)
-    {
-        this->localJacobian().addOutputVtkFields(writer, this->curSol());
-    }
-
-    /*!
-     * \brief Calculate the phase masses in the system for
-     *        the current timestep.
-     */
-    void calculateMass(Dune::FieldVector<Scalar, 2> &mass)
-    {
-        this->localJacobian().calculateMass(this->curSol(), mass);
-    }
+class TwoPNIModel: public TwoPModel<TypeTag>
+{
 };
 
 }
diff --git a/dumux/boxmodels/2pni/2pniboxproblem.hh b/dumux/boxmodels/2pni/2pniproblem.hh
similarity index 80%
rename from dumux/boxmodels/2pni/2pniboxproblem.hh
rename to dumux/boxmodels/2pni/2pniproblem.hh
index ef3151f27ecbdbc38eea02e0dccf7b7b7c921201..ef1123ace92fa8b5890d00f02f100529727c76d1 100644
--- a/dumux/boxmodels/2pni/2pniboxproblem.hh
+++ b/dumux/boxmodels/2pni/2pniproblem.hh
@@ -19,34 +19,34 @@
  * \brief Base class for all problems which use the non-isothermal
  *        two-phase box model
  */
-#ifndef DUMUX_2PNI_BOX_PROBLEM_HH
-#define DUMUX_2PNI_BOX_PROBLEM_HH
+#ifndef DUMUX_2PNI_PROBLEM_HH
+#define DUMUX_2PNI_PROBLEM_HH
 
-#include <dumux/boxmodels/2p/2pboxproblem.hh>
+#include <dumux/boxmodels/2p/2pproblem.hh>
 
 
 namespace Dumux
 {
 /*!
  * \ingroup TwoPNIProblems
- * \brief  Base class for all problems which use the non-isothermal
+ * \brief Base class for all problems which use the non-isothermal
  *         two-phase box model.
  *
  * \todo Please doc me more!
  */
-template<class TypeTag, class Implementation>
-class TwoPNIBoxProblem : public TwoPBoxProblem<TypeTag, Implementation>
+template<class TypeTag>
+class TwoPNIProblem : public TwoPProblem<TypeTag>
 {
-    typedef TwoPBoxProblem<TypeTag, Implementation> ParentType;
+    typedef TwoPProblem<TypeTag> ParentType;
 
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(TimeManager)) TimeManager;
 
 public:
-    TwoPNIBoxProblem(const GridView &gridView)
-        : ParentType(gridView)
-    {
-    }
+    TwoPNIProblem(TimeManager &timeManager, const GridView &gridView)
+        : ParentType(timeManager, gridView)
+    {}
 
     /*!
      * \name Problem parameters
diff --git a/dumux/boxmodels/2pni/2pniproperties.hh b/dumux/boxmodels/2pni/2pniproperties.hh
index 3878b648b83f20e1ec5074950b532bc75f67347c..68632a5799e8a6dbed53938fe0d6a0e3c58859b0 100644
--- a/dumux/boxmodels/2pni/2pniproperties.hh
+++ b/dumux/boxmodels/2pni/2pniproperties.hh
@@ -25,9 +25,9 @@
 #define DUMUX_2PNI_PROPERTIES_HH
 
 #include <dumux/boxmodels/2p/2pproperties.hh>
-#include "2pnivertexdata.hh"
-#include "2pnielementdata.hh"
-#include "2pnifluxdata.hh"
+#include "2pnisecondaryvars.hh"
+
+#include "2pnifluxvars.hh"
 
 namespace Dumux
 {
@@ -40,19 +40,16 @@ namespace Dumux
 // forward declarations
 ////////////////////////////////
 template<class TypeTag>
-class TwoPNIBoxModel;
+class TwoPNIModel;
 
 template<class TypeTag>
-class TwoPNIBoxJacobian;
-
-template <class TypeTag>
-class TwoPNIVertexData;
+class TwoPNILocalResidual;
 
 template <class TypeTag>
-class TwoPNIElementData;
+class TwoPNISecondaryVars;
 
 template <class TypeTag>
-class TwoPNIFluxData;
+class TwoPNIFluxVars;
 
 /*!
  * \brief Enumerations for the non-isothermal two-phase model
@@ -92,20 +89,17 @@ SET_INT_PROP(BoxTwoPNI, NumEq, 3); //!< set the number of equations to 3
 
 //! Use the 2pni local jacobian operator for the 2pni model
 SET_TYPE_PROP(BoxTwoPNI,
-              LocalJacobian,
-              TwoPNIBoxJacobian<TypeTag>);
+              LocalResidual,
+              TwoPNILocalResidual<TypeTag>);
 
 //! the Model property
-SET_TYPE_PROP(BoxTwoPNI, Model, TwoPNIBoxModel<TypeTag>);
-
-//! the VertexData property
-SET_TYPE_PROP(BoxTwoPNI, VertexData, TwoPNIVertexData<TypeTag>);
+SET_TYPE_PROP(BoxTwoPNI, Model, TwoPNIModel<TypeTag>);
 
-//! the ElementData property
-SET_TYPE_PROP(BoxTwoPNI, ElementData, TwoPNIElementData<TypeTag>);
+//! the SecondaryVars property
+SET_TYPE_PROP(BoxTwoPNI, SecondaryVars, TwoPNISecondaryVars<TypeTag>);
 
-//! the FluxData property
-SET_TYPE_PROP(BoxTwoPNI, FluxData, TwoPNIFluxData<TypeTag>);
+//! the FluxVars property
+SET_TYPE_PROP(BoxTwoPNI, FluxVars, TwoPNIFluxVars<TypeTag>);
 
 //! The indices required by the non-isothermal two-phase model
 SET_TYPE_PROP(BoxTwoPNI, TwoPIndices,   TwoPNIIndices<0>);
diff --git a/dumux/boxmodels/2pni/2pnivertexdata.hh b/dumux/boxmodels/2pni/2pnisecondaryvars.hh
similarity index 79%
rename from dumux/boxmodels/2pni/2pnivertexdata.hh
rename to dumux/boxmodels/2pni/2pnisecondaryvars.hh
index 4279bf09de01094aa00ba44d11856b70546fa198..6e3502f0937a5c4cda1f499a7b1a3ca7c10a0c8e 100644
--- a/dumux/boxmodels/2pni/2pnivertexdata.hh
+++ b/dumux/boxmodels/2pni/2pnisecondaryvars.hh
@@ -1,4 +1,4 @@
-// $Id: 2pnivertexdata.hh 3736 2010-06-15 09:52:10Z lauser $
+// $Id: 2pnisecondaryvars.hh 3736 2010-06-15 09:52:10Z lauser $
 /*****************************************************************************
  *   Copyright (C) 2008-2009 by Melanie Darcis                               *
  *   Copyright (C) 2009 by Andreas Lauser                                    *
@@ -19,10 +19,10 @@
  * \brief Contains the quantities which are are constant within a
  *        finite volume in the non-isothermal two-phase model.
  */
-#ifndef DUMUX_2PNI_VERTEX_DATA_HH
-#define DUMUX_2PNI_VERTEX_DATA_HH
+#ifndef DUMUX_2PNI_SECONDARY_VARS_HH
+#define DUMUX_2PNI_SECONDARY_VARS_HH
 
-#include <dumux/boxmodels/2p/2pvertexdata.hh>
+#include <dumux/boxmodels/2p/2psecondaryvars.hh>
 
 namespace Dumux
 {
@@ -33,14 +33,14 @@ namespace Dumux
  *        finite volume in the non-isothermal two-phase model.
  */
 template <class TypeTag>
-class TwoPNIVertexData : public TwoPVertexData<TypeTag>
+class TwoPNISecondaryVars : public TwoPSecondaryVars<TypeTag>
 {
-    typedef TwoPVertexData<TypeTag> ParentType;
+    typedef TwoPSecondaryVars<TypeTag> ParentType;
 
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar))   Scalar;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(FVElementGeometry)) FVElementGeometry;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem))  Problem;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Problem)) Problem;
 
     typedef typename GridView::template Codim<0>::Entity Element;
 
@@ -54,33 +54,33 @@ class TwoPNIVertexData : public TwoPVertexData<TypeTag>
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(TwoPIndices)) Indices;
     enum { temperatureIdx = Indices::temperatureIdx };
 
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluidSystem))     FluidSystem;
-    typedef typename GET_PROP(TypeTag, PTAG(SolutionTypes))     SolutionTypes;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluidSystem)) FluidSystem;
+
     typedef typename GET_PROP(TypeTag, PTAG(ReferenceElements)) RefElemProp;
-    typedef typename RefElemProp::Container                     ReferenceElements;
+    typedef typename RefElemProp::Container ReferenceElements;
 
-    typedef typename SolutionTypes::PrimaryVarVector  PrimaryVarVector;
-    typedef Dune::FieldVector<Scalar, numPhases>      PhasesVector;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(PrimaryVarVector)) PrimaryVarVector;
+    typedef Dune::FieldVector<Scalar, numPhases> PhasesVector;
 
 public:
     /*!
      * \brief Update all quantities for a given control volume.
      */
-    void update(const PrimaryVarVector  &sol,
+    void update(const PrimaryVarVector  &priVars,
+                const Problem           &problem,
                 const Element           &element,
                 const FVElementGeometry &elemGeom,
-                int                      vertIdx,
-                const Problem           &problem,
+                int                      scvIdx,
                 bool                     isOldSol)
     {
         typedef Indices I;
 
         // vertex update data for the mass balance
-        ParentType::update(sol,
+        ParentType::update(priVars,
+                           problem,
                            element,
                            elemGeom,
-                           vertIdx,
-                           problem,
+                           scvIdx,
                            isOldSol);
 
         // the internal energies and the enthalpies
@@ -101,14 +101,14 @@ public:
     }
 
     // this method gets called by the parent class
-    void updateTemperature_(const PrimaryVarVector  &sol,
+    void updateTemperature_(const PrimaryVarVector  &priVars,
                             const Element           &element,
                             const FVElementGeometry &elemGeom,
-                            int                      scvIdx,
+                            int scvIdx,
                             const Problem           &problem)
     {
-        // retrieve temperature from solution vector
-        this->temperature_ = sol[temperatureIdx];
+        // retrieve temperature from primary variables
+        this->temperature_ = priVars[temperatureIdx];
 
         heatCapacity_ =
             problem.spatialParameters().heatCapacity(element, elemGeom, scvIdx);
diff --git a/test/boxmodels/2p2c/injectionproblem.hh b/test/boxmodels/2p2c/injectionproblem.hh
index 1074765554fbc3e450c116779946a8071b927e3c..2b8b60ff421b88cd2833cdd0b8a192b02a7348a5 100644
--- a/test/boxmodels/2p2c/injectionproblem.hh
+++ b/test/boxmodels/2p2c/injectionproblem.hh
@@ -18,7 +18,7 @@
 /**
  * @file
  * \ingroup TwoPTwoCBoxProblems
- * @brief  Definition of a problem, where air is injected under a low permeable layer
+ * @brief Definition of a problem, where air is injected under a low permeable layer
  * @author Klaus Mosthaf, Andreas Lauser, Bernd Flemisch
  */
 #ifndef DUMUX_INJECTIONPROBLEM_HH
@@ -62,8 +62,8 @@ SET_PROP(InjectionProblem, LocalFEMSpace)
     enum{dim = GridView::dimension};
 
 public:
-    typedef Dune::PDELab::Q1LocalFiniteElementMap<Scalar,Scalar,dim>  type; // for cubes
-//    typedef Dune::PDELab::P1LocalFiniteElementMap<Scalar,Scalar,dim>  type; // for simplices
+    typedef Dune::PDELab::Q1LocalFiniteElementMap<Scalar,Scalar,dim> type; // for cubes
+//    typedef Dune::PDELab::P1LocalFiniteElementMap<Scalar,Scalar,dim> type; // for simplices
 };
 #endif
 
@@ -108,13 +108,13 @@ SET_INT_PROP(InjectionProblem, NewtonLinearSolverVerbosity, 0);
  * This problem uses the \ref TwoPTwoCBoxModel.
  */
 template <class TypeTag = TTAG(InjectionProblem) >
-class InjectionProblem : public TwoPTwoCBoxProblem<TypeTag, InjectionProblem<TypeTag> >
+class InjectionProblem : public TwoPTwoCBoxProblem<TypeTag>
 {
-    typedef InjectionProblem<TypeTag>             ThisType;
-    typedef TwoPTwoCBoxProblem<TypeTag, ThisType> ParentType;
+    typedef InjectionProblem<TypeTag> ThisType;
+    typedef TwoPTwoCBoxProblem<TypeTag> ParentType;
 
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView))   GridView;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar))     Scalar;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
 
     enum {
         // Grid and world dimension
@@ -135,18 +135,18 @@ class InjectionProblem : public TwoPTwoCBoxProblem<TypeTag, InjectionProblem<Typ
         contiGEqIdx = Indices::contiGEqIdx,
     };
 
-    typedef typename GET_PROP(TypeTag, PTAG(SolutionTypes)) SolutionTypes;
-    typedef typename SolutionTypes::PrimaryVarVector        PrimaryVarVector;
-    typedef typename SolutionTypes::BoundaryTypeVector      BoundaryTypeVector;
 
-    typedef typename GridView::template Codim<0>::Entity        Element;
-    typedef typename GridView::template Codim<dim>::Entity      Vertex;
-    typedef typename GridView::Intersection                     Intersection;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(PrimaryVarVector)) PrimaryVarVector;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(BoundaryTypes)) BoundaryTypes;
+
+    typedef typename GridView::template Codim<0>::Entity Element;
+    typedef typename GridView::template Codim<dim>::Entity Vertex;
+    typedef typename GridView::Intersection Intersection;
 
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(FVElementGeometry)) FVElementGeometry;
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluidSystem)) FluidSystem;
 
-    typedef Dune::FieldVector<Scalar, dimWorld>  GlobalPosition;
+    typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
 
 public:
     InjectionProblem(const GridView &gridView)
@@ -177,7 +177,7 @@ public:
      */
     Scalar temperature(const Element           &element,
                        const FVElementGeometry &fvElemGeom,
-                       int                      scvIdx) const
+                       int scvIdx) const
     {
         return temperature_;
     };
@@ -193,12 +193,12 @@ public:
      * \brief Specifies which kind of boundary condition should be
      *        used for which equation on a given boundary segment.
      */
-    void boundaryTypes(BoundaryTypeVector         &values,
+    void boundaryTypes(BoundaryTypes         &values,
                        const Element              &element,
                        const FVElementGeometry    &fvElemGeom,
                        const Intersection         &is,
-                       int                         scvIdx,
-                       int                         boundaryFaceIdx) const
+                       int scvIdx,
+                       int boundaryFaceIdx) const
     {
         const GlobalPosition &globalPos = element.geometry().corner(scvIdx);
 
@@ -218,8 +218,8 @@ public:
                    const Element              &element,
                    const FVElementGeometry    &fvElemGeom,
                    const Intersection         &is,
-                   int                         scvIdx,
-                   int                         boundaryFaceIdx) const
+                   int scvIdx,
+                   int boundaryFaceIdx) const
     {
         const GlobalPosition &globalPos = element.geometry().corner(scvIdx);
 
@@ -238,8 +238,8 @@ public:
                  const Element              &element,
                  const FVElementGeometry    &fvElemGeom,
                  const Intersection         &is,
-                 int                         scvIdx,
-                 int                         boundaryFaceIdx) const
+                 int scvIdx,
+                 int boundaryFaceIdx) const
     {
         const GlobalPosition &globalPos = element.geometry().corner(scvIdx);
 
@@ -268,7 +268,7 @@ public:
     void source(PrimaryVarVector        &values,
                 const Element           &element,
                 const FVElementGeometry &fvElemGeom,
-                int                      scvIdx) const
+                int scvIdx) const
     {
         values = Scalar(0.0);
     }
@@ -282,7 +282,7 @@ public:
     void initial(PrimaryVarVector        &values,
                  const Element           &element,
                  const FVElementGeometry &fvElemGeom,
-                 int                      scvIdx) const
+                 int scvIdx) const
     {
         const GlobalPosition &globalPos = element.geometry().corner(scvIdx);
 
diff --git a/test/boxmodels/2p2c/injectionspatialparameters.hh b/test/boxmodels/2p2c/injectionspatialparameters.hh
index f0551db1d7763960e4f7ed4aad9d0caebf65f08d..d5ac9694c167fd02b6cbe10701116f5808904c81 100644
--- a/test/boxmodels/2p2c/injectionspatialparameters.hh
+++ b/test/boxmodels/2p2c/injectionspatialparameters.hh
@@ -32,11 +32,11 @@ namespace Dumux
 template<class TypeTag>
 class InjectionSpatialParameters : public BoxSpatialParameters<TypeTag>
 {
-    typedef BoxSpatialParameters<TypeTag>                   ParentType;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Grid))     Grid;
+    typedef BoxSpatialParameters<TypeTag> ParentType;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Grid)) Grid;
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar))   Scalar;
-    typedef typename Grid::ctype                            CoordScalar;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
+    typedef typename Grid::ctype CoordScalar;
     enum {
         dim=GridView::dimension,
         dimWorld=GridView::dimensionworld,
@@ -48,19 +48,19 @@ class InjectionSpatialParameters : public BoxSpatialParameters<TypeTag>
         gPhaseIdx = FluidSystem::nPhaseIdx,
     };
 
-    typedef Dune::FieldVector<CoordScalar,dim>      LocalPosition;
+    typedef Dune::FieldVector<CoordScalar,dim> LocalPosition;
     typedef Dune::FieldVector<CoordScalar,dimWorld> GlobalPosition;
     typedef Dune::FieldVector<CoordScalar,dimWorld> Vector;
 
-    typedef typename GET_PROP(TypeTag, PTAG(SolutionTypes)) SolutionTypes;
-    typedef typename SolutionTypes::SolutionVector        SolutionVector;
 
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(VertexData)) VertexData;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluxData))   FluxData;
-    typedef std::vector<VertexData>                           VertexDataArray;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(SolutionVector)) SolutionVector;
+
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(SecondaryVars)) SecondaryVars;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(FluxVars)) FluxVars;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(ElementSecondaryVars)) ElementSecondaryVars;
 
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(FVElementGeometry)) FVElementGeometry;
-    typedef typename GridView::template Codim<0>::Entity             Element;
+    typedef typename GridView::template Codim<0>::Entity Element;
 
     typedef RegularizedBrooksCorey<Scalar> EffMaterialLaw;
     //typedef LinearMaterial<Scalar> EffMaterialLaw;
@@ -112,14 +112,14 @@ public:
      * \brief Apply the intrinsic permeability tensor to a pressure
      *        potential gradient.
      *
-     * \param element       The current finite element
-     * \param fvElemGeom    The current finite volume geometry of the element
-     * \param scvfIdx       The index sub-control volume face where the
+     * \param element The current finite element
+     * \param fvElemGeom The current finite volume geometry of the element
+     * \param scvfIdx The index sub-control volume face where the
      *                      intrinsic velocity ought to be calculated.
      */
     const Scalar intrinsicPermeability(const Element           &element,
                                        const FVElementGeometry &fvElemGeom,
-                                       int                      scvIdx) const
+                                       int scvIdx) const
     {
         const GlobalPosition &pos = fvElemGeom.subContVol[scvIdx].global;
         if (isFineMaterial_(pos))
@@ -130,15 +130,15 @@ public:
     /*!
      * \brief Define the porosity \f$[-]\f$ of the soil
      *
-     * \param vDat        The data defined on the sub-control volume
-     * \param element     The finite element
-     * \param fvElemGeom  The finite volume geometry
-     * \param scvIdx      The local index of the sub-control volume where
+     * \param vDat The data defined on the sub-control volume
+     * \param element The finite element
+     * \param fvElemGeom The finite volume geometry
+     * \param scvIdx The local index of the sub-control volume where
      *                    the porosity needs to be defined
      */
     double porosity(const Element           &element,
                     const FVElementGeometry &fvElemGeom,
-                    int                      scvIdx) const
+                    int scvIdx) const
     {
         const GlobalPosition &pos = fvElemGeom.subContVol[scvIdx].global;
         if (isFineMaterial_(pos))
@@ -150,7 +150,7 @@ public:
     // return the brooks-corey context depending on the position
     const MaterialLawParams& materialLawParams(const Element           &element,
                                                 const FVElementGeometry &fvElemGeom,
-                                                int                      scvIdx) const
+                                                int scvIdx) const
     {
         const GlobalPosition &pos = fvElemGeom.subContVol[scvIdx].global;
         if (isFineMaterial_(pos))
@@ -163,14 +163,14 @@ public:
      *
      * This is only required for non-isothermal models.
      *
-     * \param element     The finite element
-     * \param fvElemGeom  The finite volume geometry
-     * \param scvIdx      The local index of the sub-control volume where
+     * \param element The finite element
+     * \param fvElemGeom The finite volume geometry
+     * \param scvIdx The local index of the sub-control volume where
      *                    the heat capacity needs to be defined
      */
     double heatCapacity(const Element           &element,
                         const FVElementGeometry &fvElemGeom,
-                        int                      scvIdx) const
+                        int scvIdx) const
     {
         return
             790 // specific heat capacity of granite [J / (kg K)]
@@ -184,20 +184,20 @@ public:
      *
      * This is only required for non-isothermal models.
      *
-     * \param heatFlux    The result vector
-     * \param tempGrad    The temperature gradient
-     * \param element     The current finite element
-     * \param fvElemGeom  The finite volume geometry of the current element
-     * \param scvfIdx     The local index of the sub-control volume face where
+     * \param heatFlux The result vector
+     * \param tempGrad The temperature gradient
+     * \param element The current finite element
+     * \param fvElemGeom The finite volume geometry of the current element
+     * \param scvfIdx The local index of the sub-control volume face where
      *                    the matrix heat flux should be calculated
      */
     void matrixHeatFlux(Vector                  &heatFlux,
-                        const FluxData          &fluxDat,
-                        const VertexDataArray   &vDat,
+                        const FluxVars          &fluxDat,
+                        const ElementSecondaryVars   &vDat,
                         const Vector            &tempGrad,
                         const Element           &element,
                         const FVElementGeometry &fvElemGeom,
-                        int                      scvfIdx) const
+                        int scvfIdx) const
     {
         static const Scalar lWater = 0.6;
         static const Scalar lGranite = 2.8;
diff --git a/test/boxmodels/2pni/injectionproblem2pni.hh b/test/boxmodels/2pni/injectionproblem2pni.hh
index 9a6807df59051e2aa2ac64f2f8a5930890a124f0..d086ec78f91f95efa96ad3b61f6535fdff7d6a09 100644
--- a/test/boxmodels/2pni/injectionproblem2pni.hh
+++ b/test/boxmodels/2pni/injectionproblem2pni.hh
@@ -21,7 +21,7 @@
 #include <dune/grid/io/file/dgfparser/dgfs.hh>
 #include <dune/grid/io/file/dgfparser/dgfyasp.hh>
 
-#include <dumux/boxmodels/2pni/2pniboxmodel.hh>
+#include <dumux/boxmodels/2pni/2pnimodel.hh>
 
 #include <dumux/material/fluidsystems/h2o_n2_system.hh>
 
@@ -62,8 +62,8 @@ SET_PROP(InjectionProblem2PNI, LocalFEMSpace)
     enum{dim = GridView::dimension};
 
 public:
-    typedef Dune::PDELab::Q1LocalFiniteElementMap<Scalar,Scalar,dim>  type; // for cubes
-//    typedef Dune::PDELab::P1LocalFiniteElementMap<Scalar,Scalar,dim>  type; // for simplices
+    typedef Dune::PDELab::Q1LocalFiniteElementMap<Scalar,Scalar,dim> type; // for cubes
+//    typedef Dune::PDELab::P1LocalFiniteElementMap<Scalar,Scalar,dim> type; // for simplices
 };
 
 // Set the problem property
@@ -143,17 +143,15 @@ SET_BOOL_PROP(InjectionProblem2PNI, NewtonWriteConvergence, true);
 template<class TypeTag>
 class InjectionProblem2PNI
 #if !ISOTHERMAL
-  : public TwoPNIBoxProblem<TypeTag,
-                            InjectionProblem2PNI<TypeTag> >
+  : public TwoPNIProblem<TypeTag>
 #else
-  : public TwoPNIBoxProblem<TypeTag,
-                            InjectionProblem2PNI<TypeTag> >
+  : public TwoPNIProblem<TypeTag>
 #endif
 {
-    typedef InjectionProblem2PNI<TypeTag>                     ThisType;
-    typedef TwoPNIBoxProblem<TypeTag, ThisType>               ParentType;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView))   GridView;
-    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar))     Scalar;
+    typedef InjectionProblem2PNI<TypeTag> ThisType;
+    typedef TwoPNIProblem<TypeTag> ParentType;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(GridView)) GridView;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(Scalar)) Scalar;
 
 #if ISOTHERMAL
     typedef typename GET_PROP_TYPE(TypeTag, PTAG(TwoPIndices)) Indices;
@@ -178,9 +176,10 @@ class InjectionProblem2PNI
         dimWorld = GridView::dimensionworld,
     };
 
-    typedef typename GET_PROP(TypeTag, PTAG(SolutionTypes)) SolutionTypes;
-    typedef typename SolutionTypes::PrimaryVarVector PrimaryVarVector;
-    typedef typename SolutionTypes::BoundaryTypeVector BoundaryTypeVector;
+
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(PrimaryVarVector)) PrimaryVarVector;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(BoundaryTypes)) BoundaryTypes;
+    typedef typename GET_PROP_TYPE(TypeTag, PTAG(TimeManager)) TimeManager;
 
     typedef typename GridView::template Codim<0>::Entity Element;
     typedef typename GridView::template Codim<dim>::Entity Vertex;
@@ -193,8 +192,8 @@ class InjectionProblem2PNI
     typedef Dune::FieldVector<Scalar, dimWorld> GlobalPosition;
 
 public:
-    InjectionProblem2PNI(const GridView &grid)
-        : ParentType(grid)
+    InjectionProblem2PNI(TimeManager &timeManager, const GridView &gridView)
+        : ParentType(timeManager, gridView)
     {
         // initialize the tables of the fluid system
         FluidSystem::init();
@@ -224,7 +223,7 @@ public:
      * \brief Specifies which kind of boundary condition should be
      *        used for which equation on a given boundary segment.
      */
-    void boundaryTypes(BoundaryTypeVector &values,
+    void boundaryTypes(BoundaryTypes &values,
                        const Element &element,
                        const FVElementGeometry &fvElemGeom,
                        const Intersection &is,
@@ -306,7 +305,7 @@ public:
      */
     Scalar temperature(const Element           &element,
                        const FVElementGeometry &fvElemGeom,
-                       int                      scvIdx) const
+                       int scvIdx) const
     {
         return 273.15 + 30; // [K]
     };