anchor.diff:      real(p), allocatable, target :: walker_data(:,:) ! (sampling_size+info_size,walker_length)
       ! Real amplitudes can be any multiple of 2**(-real_bit_shift). They are
       ! encoded as integers by multiplying them by 2**(real_bit_shift).
  +    ! [todo] - compile-time parameter
       integer :: real_bit_shift
       ! real_factor = 2**(real_bit_shift)
  +    ! [todo] - compile-time parameter
       integer(int_p) :: real_factor
  +end type walker_t
  +
  +type spawned_walker_t
  +    ! Array sizes
  +    ! If these are < 0, then the values represent the number of MB to be used to
  +    ! store the main walker and spawned walker data respectively.
  +    integer :: spawned_walker_length
       ! The minimum amplitude of a spawning event which can be added to
       ! the spawned list.
       ! If real amplitudes are not used then the following default will be
       ! overwritten by 0.0_p. In this case it will effectively not be used and all
       ! spawnings events will be integers.
  -    ! [review] - NSB: This should probably be in spawned_walker_t
  +    ! [review] - JSS: do we need this?  It's repeated in spawn_t as well...
  +    ! [review] - JSS: really an input parameter
       real(p) :: spawn_cutoff = 0.01_p
  -end type walker_t
  -
  -! [review] - FDM: Should the spawned walker arrays be members of the walker_t.
  -! [review] - JSS: I would say not as we often want to consider one or other and not
  -! [review] - JSS: both at the same time.
  -type spawned_walker_t
  -    ! Array sizes
  -    ! If these are < 0, then the values represent the number of MB to be used to
  -    ! store the main walker and spawned walker data respectively.
  -    integer :: spawned_walker_length
       ! Walker information: spawned list.
       type(spawn_t) :: qmc_spawn
       ! Walker information: received list for non-blocking communications.
       type(spawn_t) :: received_list
  -    ! spawn times of the progeny (only used for ct_fciqmc)
  -    ! [review] - JSS: fine to delete as ct_fciqmc is being rewritten...
  -    real(p), allocatable :: spawn_times(:) ! (spawned_walker_length)
  -    ! [review] - FDM: Should this be here? maybe calc?
  -    ! [review] - NSB: I'm not sure about this. I think it should probably be here,
  -    ! [review] - NSB: as in theory you could have different spawned lists with
  -    ! [review] - NSB: different spawning rates, so it is a property of this instance.
  -    ! [review] - JSS: definitely a property of the spawned object.
       ! Rate of spawning.  This is a running total over MC cycles on each processor
       ! until it is summed over processors and averaged over cycles in
       ! update_energy_estimators.
  
positive.code: ! eigenvalues of the reduced density matrix requested.
  logical :: doing_exact_rdm_eigv=.false.
  
  ! For DMQMC: If this locial is true then the fraction of psips at each
  ! excitation level will be output at each report loop. These fractions
  ! will be stored in the array below.
  ! The number of excitations for a given system is defined by
  
negative.code:     real(p) :: initiator_population = 3.0_p
  end type initiator_t
  
  ! --- semi-stochastic ---
  
  ! Array to hold the indices of deterministic states in the dets array, accessed
  ! by calculating a hash value. This type is used by the semi_stoch_t type and
  