diff --git a/src/build_system_wsmp.f90 b/src/build_system_wsmp.f90
index 4ea10b8a6cdecaa3d91524ab19d09613902fa803..bf4bd167a117fda9b836f79fe54365194d223102 100644
--- a/src/build_system_wsmp.f90
+++ b/src/build_system_wsmp.f90
@@ -189,14 +189,16 @@ do ileaves=1,osolve%nleaves
                         endif
                      enddo
                   enddo
-                  if (idof1 == 3) then
-                    if (kfix((osolve%icon(k1,ileaves)-1)*ndof+idof1) < 1) then
-                      iloc=ifind_loc_wsmp(i1loc,i1,ja,ia,n_iproc,nz_loc)
-                      elem_dz=(osolve%z(osolve%icon(5,ileaves))-osolve%z(osolve%icon(1,ileaves)))*params%vex
-                      if (k1 < 5) then
-                        avals(iloc)=avals(iloc)-(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz)
-                      else
-                        avals(iloc)=avals(iloc)+(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz)
+                  if (params%damp_surface) then
+                    if (idof1 == 3) then
+                      if (kfix((osolve%icon(k1,ileaves)-1)*ndof+idof1) < 1) then
+                        iloc=ifind_loc_wsmp(i1loc,i1,ja,ia,n_iproc,nz_loc)
+                        elem_dz=(osolve%z(osolve%icon(5,ileaves))-osolve%z(osolve%icon(1,ileaves)))*params%vex
+                        if (k1 < 5) then
+                          avals(iloc)=avals(iloc)-(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz)
+                        else
+                          avals(iloc)=avals(iloc)+(params%dt*(-weightel(ileaves)))/(2.d0*elem_dz)
+                        endif
                       endif
                     endif
                   endif
diff --git a/src/module_definitions.f90 b/src/module_definitions.f90
index 7411c7acf87d325115b3966021e4dbd3a58b09d6..e2fd8ffa6b892f742c64b42475ffc78e1e241fa4 100644
--- a/src/module_definitions.f90
+++ b/src/module_definitions.f90
@@ -224,6 +224,7 @@ module definitions
       logical invariants_2d
       logical ismooth
       logical nest
+      logical damp_surface
       integer nmpi
       integer matrule
       integer levelcut
diff --git a/src/read_input_file.f90 b/src/read_input_file.f90
index a672aed94aaa5d464e187d71f207a13c41f9eab5..2860fa7440d283b206c3237bdc4a4d2bb40cafc3 100644
--- a/src/read_input_file.f90
+++ b/src/read_input_file.f90
@@ -468,6 +468,13 @@ params%dt=0.5d0
 if (iproc==0) call scanfile (params%infile,'dt',params%dt,ires)
 call mpi_bcast(params%dt,1,mpi_double_precision,0,mpi_comm_world,ierr)
 
+params%damp_surface=.true.
+if (iproc==0) then
+   call scanfile (params%infile,'damp_surface',answer,ires)
+   params%damp_surface = (trim(answer)=='T')
+end if
+call mpi_bcast(params%damp_surface,1,mpi_logical,0,mpi_comm_world,ierr)
+
 params%penalty=1.d8
 if (iproc==0) call scanfile (params%infile,'penalty',params%penalty,ires)
 call mpi_bcast(params%penalty,1,mpi_double_precision,0,mpi_comm_world,ierr)
@@ -935,6 +942,7 @@ if (params%debug.gt.0 .and. iproc.eq.0) then
   write(*,'(a,i4)') shift//'nonlinear_iterations ',params%nonlinear_iterations
   write(*,'(a,i4)') shift//'initial_refine_level ',params%initial_refine_level
   write(*,'(a,e11.4)') shift//'dt ',params%dt
+  write(*,'(a,l1)') shift//'damp_surface ',params%damp_surface
   write(*,'(a,e11.4)') shift//'penalty ',params%penalty
   write(*,'(a,e11.4)') shift//'tempscale ',params%tempscale
   write(*,'(a,e11.4)') shift//'refine_ratio ',params%refine_ratio
@@ -1105,6 +1113,7 @@ if (params%debug.gt.1) then
   write(threadinfo%Logunit,'(a32,i4)') 'nonlinear_iterations ',params%nonlinear_iterations
   write(threadinfo%Logunit,'(a32,i4)') 'initial_refine_level ',params%initial_refine_level
   write(threadinfo%Logunit,'(a32,e11.4)') 'dt ',params%dt
+  write(threadinfo%Logunit,'(a32,l1)') 'damp_surface ',params%damp_surface
   write(threadinfo%Logunit,'(a32,e11.4)') 'penalty ',params%penalty
   write(threadinfo%Logunit,'(a32,e11.4)') 'tempscale ',params%tempscale
   write(threadinfo%Logunit,'(a32,e11.4)') 'refine_ratio ',params%refine_ratio