diff --git a/src/compute-disc-error.cc b/src/compute-disc-error.cc
index 5d4256c97113336b92b5a63fffa2334ef1a42a9a..351cd6d747a99868bb6e50404b0fabb1c1999124 100644
--- a/src/compute-disc-error.cc
+++ b/src/compute-disc-error.cc
@@ -9,6 +9,12 @@
 #include <dune/grid/io/file/gmshreader.hh>
 #include <dune/grid/utility/structuredgridfactory.hh>
 
+#if HAVE_DUNE_FOAMGRID
+#include <dune/foamgrid/foamgrid.hh>
+#else
+#include <dune/grid/onedgrid.hh>
+#endif
+
 #include <dune/functions/functionspacebases/lagrangebasis.hh>
 
 #include <dune/matrix-vector/genericvectortools.hh>
@@ -361,8 +367,8 @@ void measureAnalyticalEOC(const GridView gridView,
         refRotation.matrix(refValueMatrix);
 
         // Evaluate derivatives in quaternion space
-        FieldMatrix<double,blocksize,dim> num_di;
-        FieldMatrix<double,blocksize,dim> ref_di;
+        FieldMatrix<double,blocksize,dimworld> num_di;
+        FieldMatrix<double,blocksize,dimworld> ref_di;
 
         if (dynamic_cast<const VirtualGridViewFunction<GridView,FieldVector<double,blocksize> >*>(numericalSolution.get()))
           dynamic_cast<const VirtualGridViewFunction<GridView,FieldVector<double,blocksize> >*>(numericalSolution.get())->evaluateDerivativeLocal(element,
@@ -509,7 +515,12 @@ int main (int argc, char *argv[]) try
   /////////////////////////////////////////
   //    Create the grids
   /////////////////////////////////////////
-  typedef UGGrid<dim> GridType;
+#if HAVE_DUNE_FOAMGRID
+    typedef std::conditional<dim==1 or dim!=dimworld,FoamGrid<dim,dimworld>,UGGrid<dim> >::type GridType;
+#else
+    static_assert(dim==dimworld, "You need to have dune-foamgrid installed for dim != dimworld!");
+    typedef std::conditional<dim==1,OneDGrid,UGGrid<dim> >::type GridType;
+#endif
 
   const int numLevels = parameterSet.get<int>("numLevels");