diff --git a/src/compute-disc-error.cc b/src/compute-disc-error.cc
index e4dfb7b5b0b7a45bed772b121ad80f2707bc583a..8f06cca4c1e59d38cdbddf3716251efe3802ad14 100644
--- a/src/compute-disc-error.cc
+++ b/src/compute-disc-error.cc
@@ -45,7 +45,11 @@ void measureDiscreteEOC(const GridView gridView,
   FEBasis referenceFEBasis(referenceGridView);
 
   //typedef LocalGeodesicFEFunction<GridView::dimension, double, typename FEBasis::LocalView::Tree::FiniteElement, TargetSpace> LocalInterpolationRule;
+  //if (parameterSet["interpolationMethod"] != "geodesic")
+  //  DUNE_THROW(Exception, "Inconsistent choice of interpolation method");
   typedef GFE::LocalProjectedFEFunction<GridView::dimension, double, typename FEBasis::LocalView::Tree::FiniteElement, TargetSpace> LocalInterpolationRule;
+  if (parameterSet["interpolationMethod"] != "projected")
+    DUNE_THROW(Exception, "Inconsistent choice of interpolation method");
   std::cout << "Using local interpolation: " << className<LocalInterpolationRule>() << std::endl;
 
   //////////////////////////////////////////////////////////////////////////////////
@@ -199,10 +203,6 @@ void measureAnalyticalEOC(const GridView gridView,
   typedef Dune::Functions::PQkNodalBasis<GridView, order> FEBasis;
   FEBasis feBasis(gridView);
 
-  typedef LocalGeodesicFEFunction<GridView::dimension, double, typename FEBasis::LocalView::Tree::FiniteElement, TargetSpace> LocalInterpolationRule;
-  //typedef GFE::LocalProjectedFEFunction<GridView::dimension, double, typename FEBasis::LocalView::Tree::FiniteElement, TargetSpace> LocalInterpolationRule;
-  std::cout << "Using local interpolation: " << className<LocalInterpolationRule>() << std::endl;
-
   //////////////////////////////////////////////////////////////////////////////////
   //  Read the data whose error is to be measured
   //////////////////////////////////////////////////////////////////////////////////
@@ -235,19 +235,29 @@ void measureAnalyticalEOC(const GridView gridView,
   auto referenceSolution = module.get("fdf").toC<std::shared_ptr<FBase>>();
 
   // The numerical solution, as a grid function
-  GFE::EmbeddedGlobalGFEFunction<FEBasis, LocalInterpolationRule, TargetSpace> numericalSolution(feBasis, x);
+  std::unique_ptr<VirtualGridViewFunction<GridView, typename TargetSpace::CoordinateType> > numericalSolution;
+
+  if (parameterSet["interpolationMethod"] == "geodesic")
+    numericalSolution = std::make_unique<GFE::EmbeddedGlobalGFEFunction<FEBasis,
+                                                                        LocalGeodesicFEFunction<dim, double, typename FEBasis::LocalView::Tree::FiniteElement, TargetSpace>,
+                                                                        TargetSpace> > (feBasis, x);
+
+  if (parameterSet["interpolationMethod"] == "projected")
+    numericalSolution = std::make_unique<GFE::EmbeddedGlobalGFEFunction<FEBasis,
+                                                                        GFE::LocalProjectedFEFunction<dim, double, typename FEBasis::LocalView::Tree::FiniteElement, TargetSpace>,
+                                                                        TargetSpace> > (feBasis, x);
 
   // QuadratureRule for the integral of the L^2 error
   QuadratureRuleKey quadKey(dim,6);
 
   // Compute the embedded L^2 error
-  double l2Error = DiscretizationError<GridView>::computeL2Error(&numericalSolution,
+  double l2Error = DiscretizationError<GridView>::computeL2Error(numericalSolution.get(),
                                                                  referenceSolution.get(),
                                                                  quadKey);
 
   // Compute the embedded H^1 error
   double h1Error = DiscretizationError<GridView>::computeH1HalfNormDifferenceSquared(gridView,
-                                                                                     &numericalSolution,
+                                                                                     numericalSolution.get(),
                                                                                      referenceSolution.get(),
                                                                                      quadKey);