anchor.diff:          ! the list of wavevectors and hence the kinetic energy associated
           ! with each basis function (two per wavevector to account for spin).
   
  +        use m_mrgref, only: mrgref
           use errors, only: stop_all
           use parallel, only: iproc, parent
   
           integer :: nmax(3), kp(3) ! Support a maximum of 3 dimensions.
           integer :: i, j, k, ibasis, ierr
  -        type(kpoint) :: test_basis_fn
  -        logical :: t
  +        type(kpoint), allocatable, target :: tmp_basis_fns(:)
  +        type(kpoint), pointer :: basis_fn
  +        integer, allocatable :: basis_fns_ranking(:)
   
           nbasis = 2*nsites
   
  
positive.code: 
          if (ibasis /= nbasis) call stop_all('init_basis_fns','Not enough basis functions found.')
  
          if (iproc == parent) then
              write (6,'(/,1X,a15,/,1X,15("-"),/)') 'Basis functions'
              write (6,'(1X,a7)', advance='no') 'k-point'
              do i = 1,ndim
                  write (6,'(3X)', advance='no')
              end do
              write (6,'(a,4X,a7)') 'ms','kinetic'
              do i = 1,nbasis
                  call write_kpoint(basis_fns(i))
              end do
          end if
  
negative.code:                             ! Have found an allowed wavevector.
                              ! Add 2 spin orbitals to the set of the basis functions.
                              ibasis = ibasis + 1
                              call init_kpoint(tmp_basis_fns(ibasis), kp(1:ndim), 1)
                              ibasis = ibasis + 1
                              call init_kpoint(tmp_basis_fns(ibasis), kp(1:ndim), -1)
                          end if
                      end if
                  end do
  