diff --git a/python/quadruped_reactive_walking/Controller.py b/python/quadruped_reactive_walking/Controller.py
index a9c3570f023a3660760dbbf4055052c1e4bcb2b8..a2316bca1543f725740f3883e9562fa5e4690aee 100644
--- a/python/quadruped_reactive_walking/Controller.py
+++ b/python/quadruped_reactive_walking/Controller.py
@@ -140,15 +140,9 @@ class Controller:
             #   print("Initial guess saved")
 
             # Keep only the actuated joints and set the other to default values
-            if not self.interpolated:
-                self.q_interpolated, self.v_interpolated = self.interpolate_traj(device,\
-                                            np.array(self.mpc_result.xs)[1, :self.pd.nq], \
-                                            np.array(self.mpc_result.xs)[1, self.pd.nq:], self.pd.r1)
-            
-            self.q[3:6] = self.q_interpolated[self.cnt_wbc]
-            self.v[3:6] = self.v_interpolated[self.cnt_wbc]
-            
-
+            q_interpolated, v_interpolated = self.interpolate_x(self.cnt_wbc * self.pd.dt_wbc)
+            self.q[3:6] = q_interpolated
+            self.v[3:6] = v_interpolated
 
             # self.result.P = np.array(self.params.Kp_main.tolist() * 4)
             # self.result.D = np.array(self.params.Kd_main.tolist() * 4)
@@ -293,13 +287,27 @@ class Controller:
 
         return {"qj_m": qj_m, "vj_m": vj_m, "x_m": x_m}
 
-    def interpolate_traj(self, device, q_des, v_des, ratio):
-        measures = self.read_state(device)
-        qj_des_i = np.linspace(measures["qj_m"][3:6], q_des, ratio)
-        vj_des_i = np.linspace(measures["vj_m"][3:6], v_des, ratio)
-        self.interpolated = True
-
-        return qj_des_i, vj_des_i
+    def interpolate_x(self, t):
+        q = np.array(self.mpc_result.xs)[:, : self.pd.nq]
+        v = np.array(self.mpc_result.xs)[:, self.pd.nq :]
+        v0 = v[0, :]
+        q0 = q[0, :]
+        v1 = v[1, :]
+        q1 = q[1, :]
+    
+        if (q1-q0 == 0).any():
+            alpha = np.zeros(len(q0))
+        else:
+            alpha = (v1**2 - v0**2)/(q1 - q0)
+
+        beta = v0
+        gamma = q0
+
+        v_t = beta + alpha * t
+        q_t = gamma + beta *t + 1/2 * alpha * t**2
+
+        return q_t, v_t
+        
 
     def tuple_to_array(self, tup):
         a = np.array([element for tupl in tup for element in tupl])
diff --git a/python/quadruped_reactive_walking/WB_MPC/ProblemData.py b/python/quadruped_reactive_walking/WB_MPC/ProblemData.py
index 8aff59936e63b26f38ceca0496cd440a79d663d5..b36a893ecaef4c052158c0d43ebe2143f4e4c3a1 100644
--- a/python/quadruped_reactive_walking/WB_MPC/ProblemData.py
+++ b/python/quadruped_reactive_walking/WB_MPC/ProblemData.py
@@ -5,8 +5,8 @@ import pinocchio as pin
 class problemDataAbstract:
     def __init__(self, param, frozen_names = []):
         self.dt = param.dt_mpc # OCP dt
-        self.dt_sim = param.dt_wbc
-        self.r1 = int(self.dt / self.dt_sim)
+        self.dt_wbc = param.dt_wbc
+        self.r1 = int(self.dt / self.dt_wbc)
         self.init_steps = 0
         self.target_steps =  50
         self.T = self.init_steps + self.target_steps -1
diff --git a/python/quadruped_reactive_walking/WB_MPC/Target.py b/python/quadruped_reactive_walking/WB_MPC/Target.py
index 36fef7e0d7677e0e6114c0cc13d9710cb3f71472..8ca4d2c52099a0d8aa67e7b91e6da2487871fa07 100644
--- a/python/quadruped_reactive_walking/WB_MPC/Target.py
+++ b/python/quadruped_reactive_walking/WB_MPC/Target.py
@@ -23,7 +23,7 @@ class Target:
         self.FR_foot0 = pd.rdata.oMf[pd.rfFootId].translation.copy()
         self.A = np.array([0, 0.03, 0.03])
         self.offset = np.array([0.05, -0.02, 0.06])
-        self.freq = np.array([0, 0.5 , 0.5 ])
+        self.freq = np.array([0, 0.5*0 , 0.5*0 ])
         self.phase = np.array([0, np.pi / 2, 0])
 
     def patternToId(self, gait):