diff --git a/src/amdis/gridfunctions/ConstantGridFunction.hpp b/src/amdis/gridfunctions/ConstantGridFunction.hpp
index ed1ed7973ad895b4535084d81bb3e275ed86c1f7..1cfe69d7638b6fdaad068f446e231f4c2293e20a 100644
--- a/src/amdis/gridfunctions/ConstantGridFunction.hpp
+++ b/src/amdis/gridfunctions/ConstantGridFunction.hpp
@@ -78,13 +78,6 @@ namespace AMDiS
     return lf.derivative();
   }
 
-  /// \relates ConstantLocalFunction
-  template <class R, class D, class LC, class T>
-  int order(ConstantLocalFunction<R(D), LC, T> const& lf)
-  {
-    return 0;
-  }
-
 
   /// \brief Gridfunction returning a constant value.
   /**
diff --git a/src/amdis/gridfunctions/DiscreteFunction.inc.hpp b/src/amdis/gridfunctions/DiscreteFunction.inc.hpp
index bc81d3c50fbcb63415731b9aaa533e8eed0f5f60..6bceeaa81c3f401d888c2f1621719e161695fd9d 100644
--- a/src/amdis/gridfunctions/DiscreteFunction.inc.hpp
+++ b/src/amdis/gridfunctions/DiscreteFunction.inc.hpp
@@ -59,10 +59,10 @@ public:
   }
 
   /// \brief The \ref polynomialDegree() of the LocalFunctions
-  friend int order(LocalFunction const& self)
+  int order() const
   {
-    assert( self.bound_ );
-    return polynomialDegree(*self.subTree_);
+    assert( bound_ );
+    return polynomialDegree(*subTree_);
   }
 
   /// \brief Return the bound element
@@ -129,10 +129,10 @@ public:
   /// Evaluate Gradient at bound element in local coordinates
   Range operator()(Domain const& x) const;
 
-  friend int order(GradientLocalFunction const& self)
+  int order() const
   {
-    assert( self.bound_ );
-    return std::max(0, polynomialDegree(*self.subTree_)-1);
+    assert( bound_ );
+    return std::max(0, polynomialDegree(*subTree_)-1);
   }
 
   /// Return the bound element
diff --git a/src/amdis/gridfunctions/GridFunctionConcepts.hpp b/src/amdis/gridfunctions/GridFunctionConcepts.hpp
index 772716f8d5bba1f6cfd722ab490bcbca5c319ace..14c62890a08987947c357a3834666df5a7d42cb7 100644
--- a/src/amdis/gridfunctions/GridFunctionConcepts.hpp
+++ b/src/amdis/gridfunctions/GridFunctionConcepts.hpp
@@ -136,6 +136,15 @@ namespace AMDiS
   }
 
 
+  // polynomial order of local functions
+  template <class LocalFunction,
+    class = void_t<decltype(std::declval<LocalFunction>().order())> >
+  int order(LocalFunction const& lf)
+  {
+    return lf.order();
+  }
+
+
 #ifndef DOXYGEN
   template <class PreGridFct, class = void>
   struct GridFunctionCreator
diff --git a/src/amdis/utility/QuadratureFactory.hpp b/src/amdis/utility/QuadratureFactory.hpp
index a243367f4825ba67b7ce78b04b488240f3d5c10b..a4a20524c28c88d6aa8025d25c628e81a4907851 100644
--- a/src/amdis/utility/QuadratureFactory.hpp
+++ b/src/amdis/utility/QuadratureFactory.hpp
@@ -40,7 +40,7 @@ namespace AMDiS
 
 
   template <class LF>
-  using HasLocalFunctionOrder = decltype( order(std::declval<LF>()) );
+  using HasLocalFunctionOrder = decltype( AMDiS::order(std::declval<LF>()) );
 
 
   /// \brief Factory for quadrature rule, that calculates the coefficient order from