public Behaviour nextStepFor(Actor actor) {
    final float minRelation = relationLevelNeeded() ;
    Dialogue picked = null ;
    float maxUrgency = Float.NEGATIVE_INFINITY ;
    
    for (Actor a : talksTo()) {
      final float relation = a.mind.relationValue(actor) ;
      if (relation >= minRelation) continue ;
      
      final Dialogue d = new Dialogue(actor, a, Dialogue.TYPE_CONTACT) ;
      float urgency = d.priorityFor(actor) ;
      urgency += (1 - a.mind.relationValue(actor)) * ROUTINE ;
      if (urgency > maxUrgency) { maxUrgency = urgency ; picked = d ; }
    }
    if (picked != null) return picked ;
    
    //  Otherwise, see if you can give them a gift, or find a suitable task
    //  from the subject's home or work venue.
    final Element around = (Element) subject ;
    return Patrolling.securePerimeter(actor, around, actor.world()) ;
  }