public Behaviour jobFor(Actor actor) {
    if (! structure.intact()) return null ;
    //
    //  First and foremost, check to see whether a meltdown is in progress, and
    //  arrest it if possible:
    final Choice choice = new Choice(actor) ;
    if (meltdown > 0) {
      final Action check = new Action(
        actor, this,
        this, "actionCheckMeltdown",
        Action.LOOK,
        meltdown < 0.5f ? "Correcting core condition" : "Containing Meltdown!"
      ) ;
      check.setPriority(Action.ROUTINE * (meltdown + 1)) ;
      choice.add(check) ;
    }
    if (! personnel.onShift(actor)) return choice.pickMostUrgent() ;
    //
    //  Then check to see if anything needs manufacture-
    final Manufacture m = stocks.nextManufacture(actor, METALS_TO_FUEL) ;
    if (m != null && stocks.amountOf(METAL_ORES) >= 1) {
      m.checkBonus = 5 * structure.upgradeLevel(ISOTOPE_CONVERSION) ;
      choice.add(m) ;
    }
    final Manufacture o = stocks.nextSpecialOrder(actor) ;
    if (o != null) {
      o.checkBonus = 5 * structure.upgradeLevel(ISOTOPE_CONVERSION) ;
      choice.add(o) ;
    }
    //
    //  Failing that, just keep the place in order-
    choice.add(new Supervision(actor, this)) ;
    return choice.weightedPick() ;
  }