diff --git a/obl_inmom.f90 b/obl_inmom.f90
index beb63413bc3da3d1f5b92520ba10d2eb74d0d5da..11f9eb7ddaa0fa48429701a90a5b1679fac45cf9 100644
--- a/obl_inmom.f90
+++ b/obl_inmom.f90
@@ -8,8 +8,12 @@ module obl_inmom
   subroutine init_vermix(richnum_mode, kh_km_mode, uu, vv, lu, dx, dy, dxh, dyh, hhu, hhv, hhq, zw, g, rh0, &
     rit, den, rlh, taux, tauy, aice0, tt, ss, anzt, anzu, anumaxt, anumaxu, anubgrt, anubgru)
     use obl_legacy
-    use obl_pph
-    use obl_pph_dyn
+    use obl_pph, only: pph_kh => get_eddy_diffusivity_vec, &
+                        pph_km => get_eddy_viscosity_vec, &
+                        pphParamType
+    use obl_pph_dyn, only: pph_dyn_kh => get_eddy_diffusivity_vec, &
+                            pph_dyn_km => get_eddy_viscosity_vec, &
+                            pphDynParamType
     integer, intent(in) :: richnum_mode, kh_km_mode
     real, intent(inout) :: anzt(:,:,:) ! kh
     real, intent(inout) :: anzu(:,:,:) ! km
@@ -31,6 +35,11 @@ module obl_inmom
     real, intent(in) :: anubgrt ! kh_b0
     real, intent(in) :: anubgru ! km_b0
     ! Local variables
+    integer :: nx, ny, nz
+    integer :: i, j
+
+    ! Modules types and vars
+    !! obl_legacy vars
     real, allocatable :: u2(:,:,:), v2(:,:,:)
     real, allocatable :: s2(:,:,:)
     real, allocatable :: n2(:,:,:)
@@ -43,12 +52,14 @@ module obl_inmom
     real :: kh_unstable
     real :: kh_b0, km_b0
     real :: kh_0, km_0
-    integer :: nx, ny, nz
-    integer :: i, j
-    ! Modules types
+    !! pph vars
     type(pphParamType) :: pphParams
-    type(gridDataType) :: inmomGrid
-    
+    real :: neutral_mld(size(rit, 1), size(rit, 2))
+    real :: u_dynH(size(rit, 1), size(rit, 2))
+    !! pph_dyn vars
+    type(pphDynParamType) :: pphDynParams
+
+    !! allocate obl_legacy vars
     allocate(u2(size(uu, 1), size(uu, 2), size(uu, 3)))
     allocate(v2(size(vv, 1), size(vv, 2), size(vv, 3)))
     allocate(s2(size(u2, 1), size(u2, 2), size(u2, 3) - 1))
@@ -82,7 +93,7 @@ module obl_inmom
       call legacy_rit_top(rlh, taux, tauy, border_shift, lu, rit(:,:,1))
     end if
     ! print *, "hello aft rit"
-    call sync_xy_border(rit)
+    call sync_xy_border_3d(rit)
 
     do j = 1, ny
       do i = 1, nx
@@ -101,13 +112,16 @@ module obl_inmom
           else if (kh_km_mode == 2) then
             ! call get_Kh(kh(i,j,:), rit(i,j,:), nz)
             ! call get_Km(km(i,j,:), rit(i,j,:), nz)
-            call get_eddy_diffusivity(kh(i,j,:), rit(i,j,:), pphParams, inmomGrid)
-            call get_eddy_viscosity(km(i,j,:), rit(i,j,:), pphParams, inmomGrid)
+            call pph_kh(kh(i,j,:), rit(i,j,:), pphParams, nz)
+            call pph_km(km(i,j,:), rit(i,j,:), pphParams, nz)
           else if (kh_km_mode == 3) then
-            ! u_dynH = 
-            ! mld = 
-            call get_eddy_diffusivity(kh(i,j,:), rit(i,j,:), u_dynH, mld, pphParams, inmomGrid)
-            call get_eddy_viscosity(km(i,j,:), rit(i,j,:), u_dynH, mld, pphParams, inmomGrid)
+            if (i == 1 .and. j == 1) then
+                call legacy_neutral_mld(rlh, taux, tauy, border_shift, lu, neutral_mld, u_dynH)
+                call sync_xy_border_2d(neutral_mld)
+                call sync_xy_border_2d(u_dynH)
+            end if
+            call pph_dyn_kh(kh(i,j,:), rit(i,j,:), u_dynH(i,j), neutral_mld(i,j), pphdynParams, nz)
+            call pph_dyn_km(km(i,j,:), rit(i,j,:), u_dynH(i,j), neutral_mld(i,j), pphdynParams, nz)
           end if
         end if
       end do
@@ -127,7 +141,7 @@ module obl_inmom
     anzu = km
   end subroutine init_vermix
 
-  subroutine sync_xy_border(array)
+  subroutine sync_xy_border_3d(array)
     implicit none
     real, intent(inout) :: array(:,:,:)
     integer :: nx, ny, nz, k
@@ -157,5 +171,30 @@ module obl_inmom
       array(nx,ny,k) = (array(nx-1,ny,k) + array(nx,ny-1,k)) / 2.0
     end do
   
-  end subroutine sync_xy_border
+  end subroutine sync_xy_border_3d
+
+  subroutine sync_xy_border_2d(array)
+    implicit none
+    real, intent(inout) :: array(:,:)
+    integer :: nx, ny
+
+    ! Determine array dimensions
+    nx = size(array, 1)
+    ny = size(array, 2)
+
+    ! Update boundary points along x (first_x and end_x boundaries)
+    array(1,2:ny-1) = array(2,2:ny-1)         ! first_x boundary
+    array(nx,2:ny-1) = array(nx-1,2:ny-1)     ! end_x boundary
+
+    ! Update boundary points along y (first_y and end_y boundaries)
+    array(2:nx-1,1) = array(2:nx-1,2)         ! first_y boundary
+    array(2:nx-1,ny) = array(2:nx-1,ny-1)     ! end_y boundary
+
+    ! Update corner points
+    array(1,1) = (array(2,1) + array(1,2)) / 2.0
+    array(1,ny) = (array(2,ny) + array(1,ny-1)) / 2.0
+    array(nx,1) = (array(nx-1,1) + array(nx,2)) / 2.0
+    array(nx,ny) = (array(nx-1,ny) + array(nx,ny-1)) / 2.0
+
+  end subroutine sync_xy_border_2d
 end module obl_inmom
\ No newline at end of file