diff --git a/src/averagedistanceassembler.hh b/src/averagedistanceassembler.hh
index 60ac52bb642f4425a822f3856aee0c27579cb8ed..6881c9facc619511c6a63b8cf075ac6e248602c1 100644
--- a/src/averagedistanceassembler.hh
+++ b/src/averagedistanceassembler.hh
@@ -7,7 +7,45 @@
 
 template <class TargetSpace>
 class AverageDistanceAssembler
-{};
+{
+    static const int size = TargetSpace::EmbeddedTangentVector::size;
+
+public:
+
+    AverageDistanceAssembler(const std::vector<TargetSpace>& coefficients,
+                             const std::vector<double>& weights)
+        : coefficients_(coefficients),
+          weights_(weights)
+    {}
+
+    double value(const TargetSpace& x) {
+
+        double result = 0;
+        for (size_t i=0; i<coefficients_.size(); i++) {
+            double dist = TargetSpace::distance(coefficients_[i], x);
+            result += 0.5*weights_[i]*dist*dist;
+        }
+
+        return result;
+    }
+
+    void assembleGradient(const TargetSpace& x,
+                          typename TargetSpace::EmbeddedTangentVector& gradient)
+    {
+        DUNE_THROW(Dune::NotImplemented, "assembleGradient");
+    }
+
+    void assembleMatrix(const TargetSpace& x,
+                        Dune::FieldMatrix<double,size,size>& matrix)
+    {
+        DUNE_THROW(Dune::NotImplemented, "assembleMatrix");
+    }
+
+    const std::vector<TargetSpace> coefficients_;
+
+    const std::vector<double> weights_;
+
+};
 
 
 template <>