anchor.diff:      ! Find energy index on unionized grid
       call find_energy_index(p)
   
  +    ! Check if there's an S(a,b) table for this material
  +    if (mat % has_sab_table) then
  +       sab_threshold = sab_tables(mat % sab_table) % threshold_inelastic
  +    else
  +       sab_threshold = ZERO
  +    end if
  +
       ! Add contribution from each nuclide in material
       do i = 1, mat % n_nuclides
          ! Determine microscopic cross sections for this nuclide
          index_nuclide = mat % nuclide(i)
  -       call calculate_nuclide_xs(p, index_nuclide)
  +
  +       ! Determine whether to use S(a,b) based on energy of particle and whether
  +       ! the nuclide matches the S(a,b) table
  +       if (p % E < sab_threshold .and. i == mat % sab_nuclide) then
  +          index_sab = mat % sab_table
  +       else
  +          index_sab = 0
  +       end if
  +
  +       ! Calculate microscopic cross section for this nuclide
  +       call calculate_nuclide_xs(p, index_nuclide, index_sab)
   
          ! Copy atom density of nuclide in material
          atom_density = mat % atom_density(i)
  
positive.code:             (ONE-f) * nuc % fission(IE) + f * nuc % fission(IE+1)
  
         ! Calculate microscopic nuclide nu-fission cross section
         nu_t = nu_total(nuc, p % E)
         micro_xs(i) % nu_fission = nu_t * micro_xs(i) % fission
      end if
  
    end subroutine calculate_nuclide_xs
  
negative.code: ! given index in the nuclides array at the energy of the given particle
  !===============================================================================
  
    subroutine calculate_nuclide_xs(p, index_nuclide, index_sab)
  
      type(Particle), pointer :: p
      integer, intent(in)     :: index_nuclide ! index into nuclides array
      integer, intent(in)     :: index_sab     ! index into sab_tables array
  
      integer                :: i         ! index into nuclides array
      integer                :: IE        ! index on nuclide energy grid
      integer                :: IE_sab    ! index on S(a,b) energy grid
      real(8)                :: f         ! interp factor on nuclide energy grid
      real(8)                :: f_sab     ! interp factor on S(a,b) energy grid
      real(8)                :: inelastic ! S(a,b) inelastic cross section
      real(8)                :: elastic   ! S(a,b) elastic cross section
      real(8)                :: nu        ! total # of neutrons emitted per fission
      type(Nuclide),   pointer :: nuc => null()
      type(SAB_Table), pointer :: sab => null()
  
      ! Copy index of nuclide
      i = index_nuclide
  