diff --git a/dumux/assembly/boxlocalassembler.hh b/dumux/assembly/boxlocalassembler.hh
index 179a1306f86c097e34b7e46044032852cc78d3e2..f2ba0e97a737802318c042cda7b7c631c014cbd5 100644
--- a/dumux/assembly/boxlocalassembler.hh
+++ b/dumux/assembly/boxlocalassembler.hh
@@ -143,22 +143,6 @@ public:
         this->asImp_().evalDirichletBoundaries(applyDirichlet);
     }
 
-    /*!
-     * \brief Evaluates the flux and source terms (i.e, the terms without a time derivative) of the local residual
-     */
-    auto evalLocalFluxAndSourceResidual(const ElementVolumeVariables& elemVolVars) const
-    {
-        return this->evalLocalFluxAndSourceResidual(elemVolVars);
-    }
-
-    /*!
-     * \brief Evaluates the storage term (i.e, the term with a time derivative) of the local residual
-     */
-    auto evalLocalStorageResidual() const
-    {
-        return this->evalLocalStorageResidual();
-    }
-
     /*!
      * \brief Evaluates Dirichlet boundaries
      */
@@ -345,15 +329,11 @@ public:
      */
     auto assembleJacobianAndResidualImpl(JacobianMatrix& A, GridVariables& gridVariables)
     {
-        if (this->assembler().isStationaryProblem())
-            DUNE_THROW(Dune::InvalidStateException, "Using explicit jacobian assembler with stationary local residual");
-
         // get some aliases for convenience
         const auto& element = this->element();
         const auto& fvGeometry = this->fvGeometry();
         const auto& curSol = this->curSol();
         auto&& curElemVolVars = this->curElemVolVars();
-        auto&& elemFluxVarsCache = this->elemFluxVarsCache();
 
         // get the vecor of the acutal element residuals
         const auto origResiduals = this->evalLocalResidual();
@@ -564,7 +544,6 @@ public:
         const auto& fvGeometry = this->fvGeometry();
         const auto& problem = this->problem();
         auto&& curElemVolVars = this->curElemVolVars();
-        auto&& elemFluxVarsCache = this->elemFluxVarsCache();
 
         // get the vecor of the acutal element residuals
         const auto origResiduals = this->evalLocalResidual();
@@ -586,16 +565,12 @@ public:
 
             // derivative of this scv residual w.r.t the d.o.f. of the same scv (because of mass lumping)
             // only if the problem is instationary we add derivative of storage term
-            if (!this->assembler().isStationaryProblem())
-                this->localResidual().addStorageDerivatives(A[dofIdx][dofIdx],
-                                                            problem,
-                                                            element,
-                                                            fvGeometry,
-                                                            volVars,
-                                                            scv);
-            else
-                DUNE_THROW(Dune::InvalidStateException, "Using explicit jacobian assembler with stationary local residual");
-
+            this->localResidual().addStorageDerivatives(A[dofIdx][dofIdx],
+                                                        problem,
+                                                        element,
+                                                        fvGeometry,
+                                                        volVars,
+                                                        scv);
         }
 
         return origResiduals;
diff --git a/dumux/assembly/cclocalassembler.hh b/dumux/assembly/cclocalassembler.hh
index 09ae189798825f5324408601bb04da63ec9eebfc..00d9c51e2d82bf7b0d11df075241cce916f99710 100644
--- a/dumux/assembly/cclocalassembler.hh
+++ b/dumux/assembly/cclocalassembler.hh
@@ -93,22 +93,6 @@ public:
         const auto globalI = this->assembler().fvGridGeometry().elementMapper().index(this->element());
         res[globalI] = this->asImp_().evalLocalResidual()[0]; // forward to the internal implementation
     }
-
-    /*!
-     * \brief Evaluates the flux and source terms (i.e, the terms without a time derivative) of the local residual
-     */
-    LocalResidualValues evalLocalFluxAndSourceResidual(const ElementVolumeVariables& elemVolVars) const
-    {
-        return this->evalLocalFluxAndSourceResidual(elemVolVars)[0];
-    }
-
-    /*!
-     * \brief Evaluates the storage term (i.e, the term with a time derivative) of the local residual
-     */
-    LocalResidualValues evalLocalStorageResidual() const
-    {
-        return this->evalLocalStorageResidual()[0];
-    }
 };
 
 /*!
@@ -188,6 +172,16 @@ public:
         Residuals origResiduals(numNeighbors + 1); origResiduals = 0.0;
         origResiduals[0] = this->evalLocalResidual()[0];
 
+        // lambda for convenient evaluation of the fluxes across scvfs in the neighbors
+        auto evalNeighborFlux = [&] (const auto& neighbor, const auto& scvf)
+        {
+            return this->localResidual().evalFlux(this->problem(),
+                                                  neighbor,
+                                                  this->fvGeometry(),
+                                                  this->curElemVolVars(),
+                                                  this->elemFluxVarsCache(), scvf);
+        };
+
         // get the elements in which we need to evaluate the fluxes
         // and calculate these in the undeflected state
         unsigned int j = 1;
@@ -195,7 +189,7 @@ public:
         {
             neighborElements[j-1] = fvGridGeometry.element(dataJ.globalJ);
             for (const auto scvfIdx : dataJ.scvfsJ)
-                origResiduals[j] += this->evalFluxResidual(neighborElements[j-1], fvGeometry.scvf(scvfIdx));
+                origResiduals[j] += evalNeighborFlux(neighborElements[j-1], fvGeometry.scvf(scvfIdx));
 
             ++j;
         }
@@ -245,7 +239,7 @@ public:
                 // calculate the fluxes in the neighbors with the deflected primary variables
                 for (std::size_t k = 0; k < numNeighbors; ++k)
                     for (auto scvfIdx : connectivityMap[globalI][k].scvfsJ)
-                        partialDerivsTmp[k+1] += this->evalFluxResidual(neighborElements[k], fvGeometry.scvf(scvfIdx));
+                        partialDerivsTmp[k+1] += evalNeighborFlux(neighborElements[k], fvGeometry.scvf(scvfIdx));
 
                 return partialDerivsTmp;
             };
@@ -303,7 +297,7 @@ class CCLocalAssembler<TypeTag, Assembler, DiffMethod::numeric, /*implicit=*/fal
     using LocalResidualValues = typename GET_PROP_TYPE(TypeTag, NumEqVector);
     using Element = typename GET_PROP_TYPE(TypeTag, GridView)::template Codim<0>::Entity;
     using ElementSolutionVector = typename GET_PROP_TYPE(TypeTag, ElementSolutionVector);
-    using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVolumeVariables);
+    using GridVariables = typename GET_PROP_TYPE(TypeTag, GridVariables);
     using JacobianMatrix = typename GET_PROP_TYPE(TypeTag, JacobianMatrix);
 
     enum { numEq = GET_PROP_VALUE(TypeTag, NumEq) };
@@ -323,9 +317,7 @@ public:
             DUNE_THROW(Dune::InvalidStateException, "Using explicit jacobian assembler with stationary local residual");
 
         // assemble the undeflected residual
-        auto residual = this->elementIsGhost() ? LocalResidualValues(0.0) : this->evalLocalFluxAndSourceResidual();
-        const auto storageResidual = this->elementIsGhost() ? LocalResidualValues(0.0) : this->evalLocalStorageResidual();
-        residual += storageResidual;
+        const auto residual = this->evalLocalResidual()[0];
 
         //////////////////////////////////////////////////////////////////////////////////////////////////
         // Calculate derivatives of all dofs in stencil with respect to the dofs in the element. In the //
@@ -366,7 +358,7 @@ public:
                 // the residual with the deflected primary variables
                 elemSol[0][pvIdx] = priVar;
                 curVolVars.update(elemSol, this->problem(), element, scv);
-                return this->evalLocalStorageResidual();
+                return this->evalLocalStorageResidual()[0];
             };
 
             // for non-ghosts compute the derivative numerically
diff --git a/dumux/assembly/fvlocalassemblerbase.hh b/dumux/assembly/fvlocalassemblerbase.hh
index 89ac085d05eb3eee4d4f9d9c573786c016768829..dbae670f0b5ca590c0bb6867d820e56afccde073 100644
--- a/dumux/assembly/fvlocalassemblerbase.hh
+++ b/dumux/assembly/fvlocalassemblerbase.hh
@@ -149,19 +149,6 @@ public:
         return localResidual_.evalStorage(element_, fvGeometry_, prevElemVolVars_, curElemVolVars_);
     }
 
-    /*!
-     * \brief Evaluates the flux terms of the local residual for the neighboring element.
-     *
-     * \param neighbor The neighboring element
-     * \param scvf The sub control volume face
-     */
-     //TODO: put to CC ?
-    auto evalFluxResidual(const Element& neighbor,
-                          const SubControlVolumeFace& scvf) const
-    {
-        return localResidual_.evalFlux(problem(), neighbor, fvGeometry_, curElemVolVars_, elemFluxVarsCache_, scvf);
-    }
-
     /*!
      * \brief Convenience function bind and prepare all relevant variables required for the
      *        evaluation of the local residual.
@@ -235,7 +222,7 @@ public:
     LocalResidual& localResidual()
     { return localResidual_; }
 
-    //! The element's boundary types TODO: only for box?
+    //! The element's boundary types
     ElementBoundaryTypes& elemBcTypes()
     { return elemBcTypes_; }
 
@@ -255,7 +242,7 @@ public:
     const ElementFluxVariablesCache& elemFluxVarsCache() const
     { return elemFluxVarsCache_; }
 
-    //! The element's boundary types TODO: only for box?
+    //! The element's boundary types
     const ElementBoundaryTypes& elemBcTypes() const
     { return elemBcTypes_; }
 
@@ -263,15 +250,6 @@ public:
     const LocalResidual& localResidual() const
     { return localResidual_; }
 
-    // TODO: should this really be public?
-    template<class T = TypeTag, typename std::enable_if_t<!GET_PROP_VALUE(T, EnableGridVolumeVariablesCache), int> = 0>
-    VolumeVariables& getVolVarAccess(GridVolumeVariables& gridVolVars, ElementVolumeVariables& elemVolVars, const SubControlVolume& scv)
-    { return elemVolVars[scv]; }
-
-    template<class T = TypeTag, typename std::enable_if_t<GET_PROP_VALUE(T, EnableGridVolumeVariablesCache), int> = 0>
-    VolumeVariables& getVolVarAccess(GridVolumeVariables& gridVolVars, ElementVolumeVariables& elemVolVars, const SubControlVolume& scv)
-    { return gridVolVars.volVars(scv); }
-
     constexpr bool isImplicit() const
     { return implicit; }
 
@@ -282,6 +260,14 @@ protected:
     const Implementation &asImp_() const
     { return *static_cast<const Implementation*>(this); }
 
+    template<class T = TypeTag, typename std::enable_if_t<!GET_PROP_VALUE(T, EnableGridVolumeVariablesCache), int> = 0>
+    VolumeVariables& getVolVarAccess(GridVolumeVariables& gridVolVars, ElementVolumeVariables& elemVolVars, const SubControlVolume& scv)
+    { return elemVolVars[scv]; }
+
+    template<class T = TypeTag, typename std::enable_if_t<GET_PROP_VALUE(T, EnableGridVolumeVariablesCache), int> = 0>
+    VolumeVariables& getVolVarAccess(GridVolumeVariables& gridVolVars, ElementVolumeVariables& elemVolVars, const SubControlVolume& scv)
+    { return gridVolVars.volVars(scv); }
+
 private:
 
     const Assembler& assembler_; //!< access pointer to assembler instance