public Behaviour jobFor(Actor actor) {
    if ((! structure.intact()) || (! personnel.onShift(actor))) return null ;
    final Choice choice = new Choice(actor) ;
    //
    //  Consider upkeep, deliveries and supervision-
    choice.add(Deliveries.nextDeliveryFor(actor, this, services(), 10, world)) ;
    choice.add(new Repairs(actor, this)) ;
    //
    //  Have the climate engineer gather soil samples, but only if they're
    //  very low.  (Automated crawlers would do this in bulk.)
    final Tile toSample = pickSample() ;
    if (soilSamples < 2 && toSample != null) {
      final Action actionSample = new Action(
        actor, toSample,
        this, "actionSoilSample",
        Action.BUILD, "Gathering soil samples"
      ) ;
      actionSample.setProperties(Action.QUICK) ;
      actionSample.setPriority(Action.ROUTINE) ;
      choice.add(actionSample) ;
    }
    final float numSamples = actor.gear.amountOf(SAMPLES) ;
    if (numSamples > 0) {
      final Action returnSample = new Action(
        actor, this,
        this, "actionReturnSample",
        Action.LOOK, "Returning soil samples"
      ) ;
      returnSample.setProperties(Action.QUICK) ;
      returnSample.setPriority(Action.ROUTINE + numSamples - 1) ;
      choice.add(returnSample) ;
    }
    //
    //  Select and return-
    return choice.weightedPick() ;
  }