diff --git a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
index 98b1c37b7dee207fb9a0c545336f773609d3470c..6f6187dbc2fffd1d7b799e33a1765d4db11a3fe1 100644
--- a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h
@@ -10,13 +10,16 @@
 #include <iostream>
 
 struct DM_BF_Base: public DM_Function_Base, public virtual BF_Base {
+   
+    DM_BF_Base();
+    DM_BF_Base(const Config &c);
     virtual ~DM_BF_Base();
-    virtual size_t get_phi_cols(const Config &config)=0;
-    virtual void calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d)=0;
-    virtual void calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d)=0;
-    virtual void calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d)=0;
+    // virtual size_t get_phi_cols(const Config &config)=0;
+    // virtual void calc_phi_energy_row(phi_type &Phi, size_t &row,
+    //         const double fac, const Structure &st, const StDescriptors &st_d)=0;
+    // virtual void calc_phi_force_rows(phi_type &Phi, size_t &row,
+    //         const double fac, const Structure &st, const StDescriptors &st_d)=0;
+    // virtual void calc_phi_stress_rows(phi_type &Phi, size_t &row,
+    //         const double fac[6], const Structure &st, const StDescriptors &st_d)=0;
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
index 107ac2626401144ccf912759e2042b7f44b43f7e..e0052c373aad55baa891fc67e6476dccedacbda0 100644
--- a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_linear.h
@@ -8,12 +8,12 @@ struct DM_BF_Linear: public DM_BF_Base, public BF_Linear
 {
     DM_BF_Linear();
     DM_BF_Linear(const Config &c);
-    size_t get_phi_cols(const Config &config);
+    size_t get_phi_cols(const Config &config) override;
     void calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d);
+            const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
index b0ce41382901c53e23fc9f5d4ced860c0c2599d0..550f4038e5cbba6b1b240b2c21a60396f630d69d 100644
--- a/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
+++ b/include/tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h
@@ -8,12 +8,12 @@ struct DM_BF_Polynomial2: public DM_BF_Base, public BF_Polynomial2
 {
     DM_BF_Polynomial2();
     DM_BF_Polynomial2(const Config &c);
-    size_t get_phi_cols(const Config &config);
+    size_t get_phi_cols(const Config &config) override;
     void  calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void  calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void  calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d);
+            const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/dm_f_all.h b/include/tadah/mlip/design_matrix/functions/dm_f_all.h
index 201905ab6ced5873fb618ea606034c7c2e5065cc..56c4baed80353ca9d691d8a94594b605a46f8143 100644
--- a/include/tadah/mlip/design_matrix/functions/dm_f_all.h
+++ b/include/tadah/mlip/design_matrix/functions/dm_f_all.h
@@ -1,2 +1,2 @@
 #include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_all.h>
-#include <tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h>
+ #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_all.h>
diff --git a/include/tadah/mlip/design_matrix/functions/dm_function_base.h b/include/tadah/mlip/design_matrix/functions/dm_function_base.h
index 6b7b5a9afc5c305d943b2dc57e276da8d70b73e7..06f53215d403f1e4ca665ab93dcddc698ab90a7d 100644
--- a/include/tadah/mlip/design_matrix/functions/dm_function_base.h
+++ b/include/tadah/mlip/design_matrix/functions/dm_function_base.h
@@ -16,16 +16,18 @@
 /** Base class for Kernels and Basis Functions */
 struct DM_Function_Base: public virtual Function_Base {
 
-    // Derived classes must implement Derived() and Derived(Config)
-    virtual ~DM_Function_Base() {};
+  // Derived classes must implement Derived() and Derived(Config)
+  DM_Function_Base();
+  DM_Function_Base(const Config &c);
+  virtual ~DM_Function_Base();
 
-    virtual size_t get_phi_cols(const Config &)=0;
-    virtual void calc_phi_energy_row(phi_type &, size_t &,
-            const double , const Structure &, const StDescriptors &)=0;
-    virtual void calc_phi_force_rows(phi_type &, size_t &,
-            const double , const Structure &, const StDescriptors &)=0;
-    virtual void calc_phi_stress_rows(phi_type &, size_t &,
-            const double[6], const Structure &, const StDescriptors &)=0;
+  virtual size_t get_phi_cols(const Config &)=0;
+  virtual void calc_phi_energy_row(phi_type &, size_t &,
+                                   const double , const Structure &, const StDescriptors &)=0;
+  virtual void calc_phi_force_rows(phi_type &, size_t &,
+                                   const double , const Structure &, const StDescriptors &)=0;
+  virtual void calc_phi_stress_rows(phi_type &, size_t &,
+                                    const double[6], const Structure &, const StDescriptors &)=0;
 };
 //template<> inline CONFIG::Registry<DM_Function_Base>::Map CONFIG::Registry<DM_Function_Base>::registry{};
 //template<> inline CONFIG::Registry<DM_Function_Base,Config&>::Map CONFIG::Registry<DM_Function_Base,Config&>::registry{};
diff --git a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
index cf0c12f38e19c7b7ee22279a68a233e0f0920c78..8a12489c2eaead83a3a64915cf65cea398045fc3 100644
--- a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h
@@ -1,6 +1,7 @@
 #ifndef DM_KERN_BASE_H
 #define DM_KERN_BASE_H
 
+#include "tadah/core/config.h"
 #include <tadah/mlip/design_matrix/functions/dm_function_base.h>
 #include <tadah/mlip/structure.h>
 #include <tadah/mlip/st_descriptors.h>
@@ -16,17 +17,16 @@
  *  - ff = force descriptor
  *  - all derivatives are defined wrt to the second argument
  */
-class DM_Kern_Base: public DM_Function_Base, public virtual Kern_Base {
+class DM_Kern_Base: public DM_Function_Base, public virtual Kern_Base  {
     public:
 
+        DM_Kern_Base();
+        DM_Kern_Base(const Config&c);
         virtual ~DM_Kern_Base();
-        virtual size_t get_phi_cols(const Config &config);
-        virtual void  calc_phi_energy_row(phi_type &Phi, size_t &row, const double fac,
-                const Structure &st, const StDescriptors &st_d);
-        virtual void  calc_phi_force_rows(phi_type &Phi, size_t &row, const double fac,
-                const Structure &st, const StDescriptors &st_d);
-        virtual void  calc_phi_stress_rows(phi_type &Phi, size_t &row, const double fac[6],
-                const Structure &st, const StDescriptors &st_d);
+        virtual size_t get_phi_cols(const Config &config) override;
+        virtual void  calc_phi_energy_row(phi_type &Phi, size_t &row, const double fac, const Structure &st, const StDescriptors &st_d) override;
+        virtual void  calc_phi_force_rows(phi_type &Phi, size_t &row, const double fac, const Structure &st, const StDescriptors &st_d) override;
+        virtual void  calc_phi_stress_rows(phi_type &Phi, size_t &row, const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 
 };
 #endif
diff --git a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
index 5c75dad56262708a78bcba2b35ce0dbefd4aefda..cf026d05cf1baf954868d897af9c3158782315f5 100644
--- a/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
+++ b/include/tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h
@@ -19,12 +19,12 @@ class DM_Kern_Linear :  public DM_Kern_Base, public Kern_Linear {
     DM_Kern_Linear ();
     DM_Kern_Linear (const Config &c);
 
-    size_t get_phi_cols(const Config &config);
+    size_t get_phi_cols(const Config &config) override;
     void calc_phi_energy_row(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_force_rows(phi_type &Phi, size_t &row,
-            const double fac, const Structure &st, const StDescriptors &st_d);
+            const double fac, const Structure &st, const StDescriptors &st_d) override;
     void calc_phi_stress_rows(phi_type &Phi, size_t &row,
-            const double fac[6], const Structure &st, const StDescriptors &st_d);
+            const double fac[6], const Structure &st, const StDescriptors &st_d) override;
 };
 #endif
diff --git a/src/dm_bf_base.cpp b/src/dm_bf_base.cpp
index e68de39417b717811cc30da8c434ada3f4a9a2de..21543fa989c0eaca4edf254b9c8d0cbd46fe0b9b 100644
--- a/src/dm_bf_base.cpp
+++ b/src/dm_bf_base.cpp
@@ -1,2 +1,6 @@
+#include "tadah/mlip/design_matrix/functions/dm_function_base.h"
+#include "tadah/models/functions/basis_functions/bf_base.h"
 #include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_base.h>
+DM_BF_Base::DM_BF_Base() {}
+DM_BF_Base::DM_BF_Base(const Config &c): BF_Base(c), DM_Function_Base(c) {}
 DM_BF_Base::~DM_BF_Base() {}
diff --git a/src/dm_bf_linear.cpp b/src/dm_bf_linear.cpp
index ab467e8c4ba7eb31f43ab3cdc26ec860061b312a..9bb9846ec32f02097ebfdaac07aec19e229d9a75 100644
--- a/src/dm_bf_linear.cpp
+++ b/src/dm_bf_linear.cpp
@@ -4,7 +4,7 @@
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_BF_Linear> DM_BF_Linear_2( "BF_Linear" );
 
 DM_BF_Linear::DM_BF_Linear() {}
-DM_BF_Linear::DM_BF_Linear(const Config &c): BF_Linear(c)
+DM_BF_Linear::DM_BF_Linear(const Config &c): DM_BF_Base(c), BF_Linear(c)
 {}
 size_t DM_BF_Linear::get_phi_cols(const Config &config)
 {
diff --git a/src/dm_bf_polynomial2.cpp b/src/dm_bf_polynomial2.cpp
index 6638fdb19ce46998b511e14e90b8b0b0f2f51c0f..9ef36d3e5279be8049b8c78e755a73e26078b018 100644
--- a/src/dm_bf_polynomial2.cpp
+++ b/src/dm_bf_polynomial2.cpp
@@ -1,10 +1,11 @@
+#include "tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h"
 #include <tadah/mlip/design_matrix/functions/basis_functions/dm_bf_polynomial2.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_BF_Polynomial2> DM_BF_Polynomial2_1( "BF_Polynomial2" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_BF_Polynomial2> DM_BF_Polynomial2_2( "BF_Polynomial2" );
 
 DM_BF_Polynomial2::DM_BF_Polynomial2() {}
-DM_BF_Polynomial2::DM_BF_Polynomial2(const Config &c): BF_Polynomial2(c)
+DM_BF_Polynomial2::DM_BF_Polynomial2(const Config &c): DM_BF_Base(c), BF_Polynomial2(c)
 {}
 size_t DM_BF_Polynomial2::get_phi_cols(const Config &config)
 {
diff --git a/src/dm_function_base.cpp b/src/dm_function_base.cpp
index 8c7af9b405e4ed2a9de97a58ac8b770b7a68f62b..945c4344841ae7c84c896e0cd66ac226cf2a1cdb 100644
--- a/src/dm_function_base.cpp
+++ b/src/dm_function_base.cpp
@@ -1,2 +1,5 @@
+#include "tadah/models/functions/function_base.h"
 #include <tadah/mlip/design_matrix/functions/dm_function_base.h>
-
+DM_Function_Base::DM_Function_Base() {}
+DM_Function_Base::DM_Function_Base(const Config &c): Function_Base(c) {}
+DM_Function_Base::~DM_Function_Base() {}
diff --git a/src/dm_kern_base.cpp b/src/dm_kern_base.cpp
index ecf679c39ad18a36219dc36aa0aa3de34cb80c95..773778aa1d8f310c63645ff8e5e8ab72a4179345 100644
--- a/src/dm_kern_base.cpp
+++ b/src/dm_kern_base.cpp
@@ -1,6 +1,11 @@
+#include "tadah/core/config.h"
+#include "tadah/mlip/design_matrix/functions/dm_function_base.h"
+#include "tadah/models/functions/kernels/kern_base.h"
 #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h>
 
 DM_Kern_Base::~DM_Kern_Base() {}
+DM_Kern_Base::DM_Kern_Base() {}
+DM_Kern_Base::DM_Kern_Base(const Config &c): DM_Function_Base(c), Kern_Base(c) {}
 size_t DM_Kern_Base::get_phi_cols(const Config &)
 {
   return basis.cols();
diff --git a/src/dm_kern_linear.cpp b/src/dm_kern_linear.cpp
index 90f97a7eda24374a7bad06a72f926a97c67370fe..27886568a4c8e31d4ddb9f7b5592de2c1fd8004c 100644
--- a/src/dm_kern_linear.cpp
+++ b/src/dm_kern_linear.cpp
@@ -1,10 +1,11 @@
+#include "tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h"
 #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_linear.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Linear> DM_Kern_Linear_1( "Kern_Linear" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Linear> DM_Kern_Linear_2( "Kern_Linear" );
 
 DM_Kern_Linear::DM_Kern_Linear() {}
-DM_Kern_Linear::DM_Kern_Linear (const Config &c): Kern_Linear(c)
+DM_Kern_Linear::DM_Kern_Linear (const Config &c): DM_Kern_Base(c), Kern_Linear(c)
 {}
 size_t DM_Kern_Linear::get_phi_cols(const Config &config)
 {
diff --git a/src/dm_kern_lq.cpp b/src/dm_kern_lq.cpp
index 3c14dfaad5465facd3ef725b13d7a323fd29f7b0..40fdb4d8bc78b8ca41d41380d28fd62e4a9e8856 100644
--- a/src/dm_kern_lq.cpp
+++ b/src/dm_kern_lq.cpp
@@ -1,11 +1,12 @@
+#include "tadah/mlip/design_matrix/functions/kernels/dm_kern_base.h"
 #include <tadah/mlip/design_matrix/functions/kernels/dm_kern_lq.h>
 
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_LQ> DM_Kern_LQ_1( "Kern_LQ" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_LQ> DM_Kern_LQ_2( "Kern_LQ" );
 
-DM_Kern_LQ::DM_Kern_LQ():
-  Kern_LQ()
+DM_Kern_LQ::DM_Kern_LQ()
 {}
 DM_Kern_LQ::DM_Kern_LQ(const Config &c):
+  DM_Kern_Base(c),
   Kern_LQ(c)
 {}
diff --git a/src/dm_kern_polynomial.cpp b/src/dm_kern_polynomial.cpp
index b60e9d913d808a63f48a6bb76cbb2547888b3500..5227ca7ee806958b8043acb786e64a414e57d4a7 100644
--- a/src/dm_kern_polynomial.cpp
+++ b/src/dm_kern_polynomial.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Polynomial> DM_Kern_Polynomial_1( "Kern_Polynomial" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Polynomial> DM_Kern_Polynomial_2( "Kern_Polynomial" );
 
-DM_Kern_Polynomial::DM_Kern_Polynomial():
-  Kern_Polynomial()
+DM_Kern_Polynomial::DM_Kern_Polynomial()
 {}
 DM_Kern_Polynomial::DM_Kern_Polynomial(const Config &c):
+  DM_Kern_Base(c),
   Kern_Polynomial(c)
 {}
diff --git a/src/dm_kern_quadratic.cpp b/src/dm_kern_quadratic.cpp
index 83a71981b1312f04f7c713d21f1e4ac546402d08..9c4ecb2b9219851f2ad07175e03306bcabcdcaab 100644
--- a/src/dm_kern_quadratic.cpp
+++ b/src/dm_kern_quadratic.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Quadratic> DM_Kern_Quadratic_1( "Kern_Quadratic" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Quadratic> DM_Kern_Quadratic_2( "Kern_Quadratic" );
 
-DM_Kern_Quadratic::DM_Kern_Quadratic():
-  Kern_Quadratic()
+DM_Kern_Quadratic::DM_Kern_Quadratic()
 {}
 DM_Kern_Quadratic::DM_Kern_Quadratic(const Config &c):
+  DM_Kern_Base(c),
   Kern_Quadratic(c)
 {}
diff --git a/src/dm_kern_rbf.cpp b/src/dm_kern_rbf.cpp
index 1870190d591d2c0df7b88acadbcd00f9b5839326..2c9b9e04969ab34dc1fe60fa8a13b1880d358901 100644
--- a/src/dm_kern_rbf.cpp
+++ b/src/dm_kern_rbf.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_RBF> DM_Kern_RBF_1( "Kern_RBF" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_RBF> DM_Kern_RBF_2( "Kern_RBF" );
 
-DM_Kern_RBF::DM_Kern_RBF():
-  Kern_RBF()
+DM_Kern_RBF::DM_Kern_RBF()
 {}
 DM_Kern_RBF::DM_Kern_RBF(const Config &c):
+  DM_Kern_Base(c),
   Kern_RBF(c)
 {}
diff --git a/src/dm_kern_sigmoid.cpp b/src/dm_kern_sigmoid.cpp
index 2da37c905a1be2f801beafd7ed9bbcbd83f99295..7b547b06af0bf9e1f2dcb23ddc7a9a3b1047f25e 100644
--- a/src/dm_kern_sigmoid.cpp
+++ b/src/dm_kern_sigmoid.cpp
@@ -3,9 +3,9 @@
 //CONFIG::Registry<DM_Function_Base>::Register<DM_Kern_Sigmoid> DM_Kern_Sigmoid_1( "Kern_Sigmoid" );
 //CONFIG::Registry<DM_Function_Base,Config&>::Register<DM_Kern_Sigmoid> DM_Kern_Sigmoid_2( "Kern_Sigmoid" );
 
-DM_Kern_Sigmoid::DM_Kern_Sigmoid():
-  Kern_Sigmoid()
+DM_Kern_Sigmoid::DM_Kern_Sigmoid()
 {}
 DM_Kern_Sigmoid::DM_Kern_Sigmoid(const Config &c):
+  DM_Kern_Base(c),
   Kern_Sigmoid(c)
 {}