@Override
 public FSMTransition choose(TestSuite suite, List<FSMTransition> choices) {
   int testIndex = suite.getAllTestCases().size();
   List<String> path = suite.getCurrentTest().getAllStepNames();
   log.d("path for the current (explored) test:" + path);
   log.i("Exploring step " + testIndex + "." + path.size());
   TestCoverage suiteCoverage = suite.getCoverage();
   // create trace if DOT graph is wanted
   TraceNode[] trace = initTrace(path, testIndex);
   ExplorationState state = new ExplorationState(config, suiteCoverage);
   String choice = null;
   if (choices.size() == 1) {
     // this handles the scenario startup, where there is always just one choice (and other similar
     // scenarios)
     choice = choices.get(0).getStringName();
     path.add(choice);
   } else {
     // initiate exploration of the possible paths
     choice = exploreLocal(suite, state, path, trace[1]);
   }
   writeDot(path, trace[0]);
   // we have to find the transition here based on string matching because returning the actual
   // FSMTransition
   // object would give a reference to the wrong instance of the model object
   for (FSMTransition transition : choices) {
     if (transition.getStringName().equals(choice)) {
       return transition;
     }
   }
   throw new IllegalStateException(
       "Exploration choice (" + choice + ") not available. OSMO is bugging?");
 }