anchor.diff:          integer,          allocatable, dimension(:) :: mask     !< ocean/land/ice mask [0/1/2]
       end type
   
  -    type boundary_opt_class 
  -        logical :: t2m, tsurf, hsnow, alb, melt, refr, smb, acc, lhf, shf, subl
  +    type boundary_opt_class !< object to hold flags for overriding with external fields
  +        logical :: t2m !< flag for 2m air temperature
  +        logical :: tsurf !< flag for surface temperature
  +        logical :: hsnow !< flag for snow height
  +        logical :: alb !< flag for albedo
  +        logical :: melt !< flag for melting
  +        logical :: refr !< flag for refreezing
  +        logical :: smb !< flag for surface mass balance
  +        logical :: acc !< flag for accumulation
  +        logical :: lhf !< flag for latent heat flux
  +        logical :: shf !< flag for senible heat flux
  +        logical :: subl !< flag for sublimation/refreezing
       end type
   
  -    type surface_physics_class
  -
  -        type(surface_param_class) :: par        ! physical parameters
  -        type(boundary_opt_class)  :: bnd, bnd0  ! boundary switches (bnd0 for equilibration)
  +    type surface_physics_class !< container which holds all used objects
  +                               !! for variables, parameters, boundary switches, etc.
  +
  +        type(surface_param_class) :: par  !< physical parameters
  +        type(boundary_opt_class)  :: bnd  !< boundary switches
  +        type(boundary_opt_class)  :: bnd0 !< boundary switches for equilibration
   
           ! Daily variables, month and annual averages, forcing variables
  -        type(surface_state_class) :: now, mon, ann 
  +        type(surface_state_class) :: now !< object to hold daily variables
  +        type(surface_state_class) :: mon !< object to hold monthly variables
  +        type(surface_state_class) :: ann !< object to hold annual variables
   
       end type
   
  
positive.code:     end subroutine
      
      
      subroutine print_boundary_opt(bnd)
          type(boundary_opt_class) :: bnd
          write(*,'(a,l1)') 'tsurf   ', bnd%tsurf
          write(*,'(a,l1)') 'hsnow   ', bnd%hsnow
          write(*,'(a,l1)') 'alb     ', bnd%alb
  
negative.code:     end subroutine surface_boundary_define
  
  
      !> Print parameters from namelist
      subroutine print_param(par)
          
          type(surface_param_class), intent(in) :: par !< parameter object
          integer :: q
  
          do q = 1,size(par%boundary)
  