diff --git a/includeCXX/sfx-esm.h b/includeCXX/sfx-esm.h
index 546db2482c85578c1cf15b816811d2996b106bb2..e02d115dcb4743b0590f6c9d05e7367b6cf15154 100644
--- a/includeCXX/sfx-esm.h
+++ b/includeCXX/sfx-esm.h
@@ -4,85 +4,47 @@
 #include "sfx-data.h"
 
 template<typename T, MemType memIn, MemType memOut, MemType RunMem >
-class FluxEsmBase : public ModelBase<T, memIn, memOut, RunMem>
-{
-public:
-    using ModelBase<T, memIn, memOut, RunMem>::res_sfx;
-    using ModelBase<T, memIn, memOut, RunMem>::sfx;
-    using ModelBase<T, memIn, memOut, RunMem>::meteo;
-    using ModelBase<T, memIn, memOut, RunMem>::grid_size;
-    using ModelBase<T, memIn, memOut, RunMem>::ifAllocated;
-    using ModelBase<T, memIn, memOut, RunMem>::allocated_size;
-
-    sfx_surface_param surface;
-    sfx_phys_constants phys;
-    sfx_esm_param_C model;
-    sfx_esm_numericsType_C numerics;
-
-    FluxEsmBase(sfxDataVecTypeC* sfx,
-                meteoDataVecTypeC* meteo,
-                const sfx_esm_param_C model, 
-                const sfx_surface_param surface,
-                const sfx_esm_numericsType_C numerics,
-                const sfx_phys_constants phys,
-                const int grid_size);
-    ~FluxEsmBase();
-};
-
-template<typename T, MemType memIn, MemType memOut, MemType RunMem >
-class FluxEsm : public FluxEsmBase<T, memIn, memOut, RunMem>
+class FluxEsm : public ModelBase<T, memIn, memOut, RunMem>
 {};
 
 template<typename T, MemType memIn, MemType memOut >
-class FluxEsm<T, memIn, memOut, MemType::CPU> : public FluxEsmBase<T, memIn, memOut, MemType::CPU>
+class FluxEsm<T, memIn, memOut, MemType::CPU> : public ModelBase<T, memIn, memOut, MemType::CPU>
 {
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::res_sfx;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::sfx;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::meteo;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::surface;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::phys;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::grid_size;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::ifAllocated;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::allocated_size;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::model;
-    using FluxEsmBase<T, memIn, memOut, MemType::CPU>::numerics;
+    using ModelBase<T, memIn, memOut, MemType::CPU>::res_sfx;
+    using ModelBase<T, memIn, memOut, MemType::CPU>::sfx;
+    using ModelBase<T, memIn, memOut, MemType::CPU>::meteo;
+    using ModelBase<T, memIn, memOut, MemType::CPU>::grid_size;
+    using ModelBase<T, memIn, memOut, MemType::CPU>::ifAllocated;
+    using ModelBase<T, memIn, memOut, MemType::CPU>::allocated_size;
 public:
     FluxEsm(sfxDataVecTypeC* sfx,
                 meteoDataVecTypeC* meteo,
-                const sfx_esm_param_C model, 
+                const int grid_size) : ModelBase<T, memIn, memOut, MemType::CPU>(sfx, meteo, grid_size) {}
+    ~FluxEsm() = default;
+    void compute_flux(const sfx_esm_param_C model, 
                 const sfx_surface_param surface,
                 const sfx_esm_numericsType_C numerics,
-                const sfx_phys_constants phys,
-                const int grid_size) : FluxEsmBase<T, memIn, memOut, MemType::CPU>(sfx, meteo, model, 
-                                       surface, numerics, phys, grid_size) {}
-    ~FluxEsm() = default;
-    void compute_flux();
+                const sfx_phys_constants phys);
 };
 
 #ifdef INCLUDE_CUDA
 template<typename T, MemType memIn, MemType memOut >
-class FluxEsm<T, memIn, memOut, MemType::GPU> : public FluxEsmBase<T, memIn, memOut, MemType::GPU>
+class FluxEsm<T, memIn, memOut, MemType::GPU> : public ModelBase<T, memIn, memOut, MemType::GPU>
 {
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::res_sfx;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::sfx;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::meteo;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::surface;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::phys;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::grid_size;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::ifAllocated;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::allocated_size;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::model;
-    using FluxEsmBase<T, memIn, memOut, MemType::GPU>::numerics;
+    using ModelBase<T, memIn, memOut, MemType::GPU>::res_sfx;
+    using ModelBase<T, memIn, memOut, MemType::GPU>::sfx;
+    using ModelBase<T, memIn, memOut, MemType::GPU>::meteo;
+    using ModelBase<T, memIn, memOut, MemType::GPU>::grid_size;
+    using ModelBase<T, memIn, memOut, MemType::GPU>::ifAllocated;
+    using ModelBase<T, memIn, memOut, MemType::GPU>::allocated_size;
 public:
     FluxEsm(sfxDataVecTypeC* sfx,
                 meteoDataVecTypeC* meteo,
-                const sfx_esm_param_C model, 
+                const int grid_size) : ModelBase<T, memIn, memOut, MemType::GPU>(sfx, meteo, grid_size) {}
+    ~FluxEsm() = default;
+    void compute_flux(const sfx_esm_param_C model, 
                 const sfx_surface_param surface,
                 const sfx_esm_numericsType_C numerics,
-                const sfx_phys_constants phys,
-                const int grid_size) : FluxEsmBase<T, memIn, memOut, MemType::GPU>(sfx, meteo, model, 
-                                       surface, numerics, phys, grid_size) {}
-    ~FluxEsm() = default;
-    void compute_flux();
+                const sfx_phys_constants phys);
 };
 #endif
\ No newline at end of file
diff --git a/srcCU/sfx-esm.cu b/srcCU/sfx-esm.cu
index 67444d72161a309265d4b70062d99f369e301ecd..1653f483f89682b9ee6db58a30ba6694e88bf854 100644
--- a/srcCU/sfx-esm.cu
+++ b/srcCU/sfx-esm.cu
@@ -119,7 +119,10 @@ __global__ void sfx_kernel::compute_flux(sfxDataVecTypeC sfx,
 }
 
 template<typename T, MemType memIn, MemType memOut >
-void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux()
+void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux(const sfx_esm_param_C model, 
+    const sfx_surface_param surface,
+    const sfx_esm_numericsType_C numerics,
+    const sfx_phys_constants phys)
 {
     const int BlockCount = int(ceil(float(grid_size) / 1024.0));
     dim3 cuBlock = dim3(1024, 1, 1);
@@ -145,14 +148,6 @@ void FluxEsm<T, memIn, memOut, MemType::GPU>::compute_flux()
     }
 }
 
-template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::GPU>;
-template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::CPU>;
-template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::GPU>;
-template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::GPU>;
-template class FluxEsmBase<float, MemType::CPU, MemType::CPU, MemType::GPU>;
-template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::CPU>;
-template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::CPU>;
-
 template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::GPU>;
 template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::CPU>;
 template class FluxEsm<float, MemType::GPU, MemType::CPU, MemType::GPU>;
diff --git a/srcCXX/cxx-sfx-model-compute-flux.cpp b/srcCXX/cxx-sfx-model-compute-flux.cpp
index 40873cd31661d001f858b14603d8387810523231..9b4cf92e326a3d17511f62c06c1b43d6287c2b2b 100644
--- a/srcCXX/cxx-sfx-model-compute-flux.cpp
+++ b/srcCXX/cxx-sfx-model-compute-flux.cpp
@@ -15,11 +15,11 @@ void esm_compute_flux (sfxDataVecTypeC* sfx,
                            const int grid_size)
 {
 #ifdef INCLUDE_CUDA
-    static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, *model_param, *surface_param, *numerics, *constants, grid_size);
-    F.compute_flux();
+    static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::GPU> F(sfx, meteo, grid_size);
+    F.compute_flux(*model_param, *surface_param, *numerics, *constants);
 #else
-    static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, *model_param, *surface_param, *numerics, *constants, grid_size);
-    F.compute_flux();
+    static FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU> F(sfx, meteo, grid_size);
+    F.compute_flux(*model_param, *surface_param, *numerics, *constants);
 #endif
 }
 
diff --git a/srcCXX/sfx-esm.cpp b/srcCXX/sfx-esm.cpp
index 5635c05a80a2e6f6bedcabe3114ed64637141904..4da197ad50c721418d8c5cdcd829f1be591be547 100644
--- a/srcCXX/sfx-esm.cpp
+++ b/srcCXX/sfx-esm.cpp
@@ -10,26 +10,11 @@
 #include "sfx-surface.cuh"
 #include "sfx-model-compute-subfunc.cuh"
 
-template<typename T, MemType memIn, MemType memOut, MemType RunMem >
-FluxEsmBase<T, memIn, memOut, RunMem>::FluxEsmBase(sfxDataVecTypeC* sfx_in,
-                meteoDataVecTypeC* meteo_in,
-                const sfx_esm_param_C model_param_in, 
-                const sfx_surface_param surface_param_in,
-                const sfx_esm_numericsType_C numerics_in,
-                const sfx_phys_constants phys_constants_in,
-                const int grid_size_in) : ModelBase<T, memIn, memOut, RunMem>(sfx_in, meteo_in, grid_size_in)
-{
-    surface = surface_param_in;
-    phys = phys_constants_in;
-    model = model_param_in;
-    numerics = numerics_in;
-}
-
-template<typename T, MemType memIn, MemType memOut, MemType RunMem >
-FluxEsmBase<T, memIn, memOut, RunMem>::~FluxEsmBase() {}
-
 template<typename T, MemType memIn, MemType memOut >
-void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux()
+void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux(const sfx_esm_param_C model, 
+                const sfx_surface_param surface,
+                const sfx_esm_numericsType_C numerics,
+                const sfx_phys_constants phys)
 {
     T h, U, dT, Tsemi, dQ, z0_m;
     T Re, z0_t, B, h0_m, h0_t, u_dyn0, zeta, Rib, zeta_conv_lim, Rib_conv_lim, f_m_conv_lim, f_h_conv_lim, psi_m, psi_h, phi_m, phi_h, Km, Pr_t_inv, Cm, Ct;
@@ -138,17 +123,8 @@ void FluxEsm<T, memIn, memOut, MemType::CPU>::compute_flux()
 }
 
 template class FluxEsm<float, MemType::CPU, MemType::CPU, MemType::CPU>;
-template class FluxEsmBase<float, MemType::CPU, MemType::CPU, MemType::CPU>;
 
 #ifdef INCLUDE_CUDA
-    template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::GPU>;
-    template class FluxEsmBase<float, MemType::GPU, MemType::GPU, MemType::CPU>;
-    template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::GPU>;
-    template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::GPU>;
-    template class FluxEsmBase<float, MemType::CPU, MemType::CPU, MemType::GPU>;
-    template class FluxEsmBase<float, MemType::CPU, MemType::GPU, MemType::CPU>;
-    template class FluxEsmBase<float, MemType::GPU, MemType::CPU, MemType::CPU>;
-
     template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::GPU>;
     template class FluxEsm<float, MemType::GPU, MemType::GPU, MemType::CPU>;
     template class FluxEsm<float, MemType::GPU, MemType::CPU, MemType::GPU>;