protected Behaviour getNextStep() {
    if (numLookups > MAX_LOOKUPS) return null ;
    if (topic == null) topic = pickResearchTopic(actor, archive) ;
    if (topic == null) return null ;
    
    final float persist = actor.traits.scaleLevel(STUBBORN) ;
    if (numLookups > (BASE_LOOKUPS * persist)) {
      if (Rand.index(BASE_LOOKUPS) == 0) return null ;
    }
    
    final Action research = new Action(
      actor, archive,
      this, "actionResearch",
      Action.LOOK, "Researching "+topic
    ) ;
    return research ;
  }