diff --git a/src/DOUAR.f90 b/src/DOUAR.f90
index 4603feda4fb6b1548074afc2009d5b3012c9a5ee..0a15c95dfda73ad2def23b1e9e2851307d79e980 100644
--- a/src/DOUAR.f90
+++ b/src/DOUAR.f90
@@ -176,7 +176,9 @@ if (params%irestart==0) then
 else
    current_level=params%levelmax_oct
 end if
- 
+
+if (params%isobc) allocate(zisodisp(2**params%levelmax_oct+1,2**params%levelmax_oct+1),stat=err) ; if (err.ne.0) call stop_run ('Error alloc zisodisp in main$')
+
 call show_time (total,step,inc,1,'Problem Setup$')
 
 !------------------------------------------------------------------------------|
@@ -782,7 +784,7 @@ do while (istep.le.params%nstep)
       call show_time (total,step,inc,1,'slicing the cube$')
 !      call slices(params,osolve,ov,vo,sections,istep,iter,iter_nl)
 
-      call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',-1) ; deallocate (osolve%eviscosity)       
+      !call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',-1) ; deallocate (osolve%eviscosity)
       call heap (threadinfo,'osolve%q','main',size(osolve%q),'dp',-1)                   ; deallocate (osolve%q)                                                    
       !--------------------------------------------------------------------------------------
       !--------------------------------------------------------------------------------------
@@ -791,7 +793,8 @@ do while (istep.le.params%nstep)
       !--------------------------------------------------------------------------------------
 
       call show_time (total,step,inc,1,'Compute isostasy and adjust vertical velocity$')
-      
+
+      allocate(ov%wpreiso(ov%nnode),stat=err) ; if (err.ne.0) call stop_run ('Error alloc ov%wpreiso in main$')
       if (params%isostasy) call isostasy (params,weightel,ov,surface,mat,zisodisp)
 
       !--------------------------------------------------------------------------------------
@@ -853,8 +856,10 @@ do while (istep.le.params%nstep)
          call heap (threadinfo,'osolve%crip','main',size(osolve%crit),'dp',-1)               ; deallocate (osolve%crit) 
          call heap (threadinfo,'osolve%e2d','main',size(osolve%e2d),'dp',-1)                 ; deallocate (osolve%e2d)  
          call heap (threadinfo,'osolve%e3d','main',size(osolve%e3d),'dp',-1)                 ; deallocate (osolve%e3d)  
-         call heap (threadinfo,'osolve%lode','main',size(osolve%lode),'dp',-1)               ; deallocate (osolve%lode)  
+         call heap (threadinfo,'osolve%lode','main',size(osolve%lode),'dp',-1)               ; deallocate (osolve%lode)
+         call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',-1)   ; deallocate (osolve%eviscosity)
          call heap (threadinfo,'osolve%is_plastic','main',size(osolve%is_plastic),'bool',-1) ; deallocate (osolve%is_plastic)
+         call heap (threadinfo,'ov%wpreiso','main',size(ov%wpreiso),'dp',-1)                 ; deallocate (ov%wpreiso)
       end if
 
       !--------------------------------------------------------------------------------------
@@ -1269,6 +1274,7 @@ do while (istep.le.params%nstep)
    call heap (threadinfo,'osolve%e2d','main',size(osolve%e2d),'dp',-1)                  ; deallocate (osolve%e2d)
    call heap (threadinfo,'osolve%e3d','main',size(osolve%e3d),'dp',-1)                  ; deallocate (osolve%e3d)
    call heap (threadinfo,'osolve%lode','main',size(osolve%lode),'dp',-1)                ; deallocate (osolve%lode)
+   call heap (threadinfo,'osolve%eviscosity','main',size(osolve%eviscosity),'dp',-1)    ; deallocate (osolve%eviscosity)
    call heap (threadinfo,'osolve%is_plastic','main',size(osolve%is_plastic),'bool',-1)  ; deallocate (osolve%is_plastic)
    call heap (threadinfo,'vo%node','main',size(vo%node),'int',-1)                       ; deallocate (vo%node)
    call heap (threadinfo,'vo%leaf','main',size(vo%leaf),'int',-1)                       ; deallocate (vo%leaf)
@@ -1276,6 +1282,7 @@ do while (istep.le.params%nstep)
    call heap (threadinfo,'vo%rtf','main',size(vo%rtf),'int',-1)                         ; deallocate (vo%rtf)
    call heap (threadinfo,'vo%ftr','main',size(vo%ftr),'int',-1)                         ; deallocate (vo%ftr)
    call heap (threadinfo,'vo%influid','main',size(vo%influid),'bool',-1)                ; deallocate (vo%influid)
+   call heap (threadinfo,'ov%wpreiso','main',size(ov%wpreiso),'dp',-1)                  ; deallocate (ov%wpreiso)
 
    call show_time (total,step,inc,1,'End of time step$')