protected Behaviour getNextStep() {
    if (actor.mind.work() != null) {
      abortBehaviour() ;
      return null ;
    }
    if (actor.gear.credits() < BOARD_PRICE) return null ;
    if (initTime == -1) {
      final Action thinks = new Action(
        actor, actor.aboard(),
        this, "actionConsider",
        Action.TALK_LONG, "Thinking about migrating"
      ) ;
      return thinks ;
    }
    if (ship == null || ! ship.inWorld()) {
      final Visit <Dropship> picks = new Visit <Dropship> () {
        public float rate(Dropship t) {
          return 0 - Spacing.distance(actor, t) ;
        }
      } ;
      ship = picks.pickBest(actor.base().commerce.allVessels()) ;
    }
    if (ship == null || ! ship.inWorld()) return null ;
    final Action boards = new Action(
      actor, ship,
      this, "actionBoardVessel",
      Action.TALK, "Leaving on "+ship
    ) ;
    return boards ;
  }