code: public final void lcm(final ExplorationStep initState) {
  		if (initState.pattern.length > 0) {
  			this.collector.collect(initState);
  		}
  
  		this.initializeAndStartThreads(initState);
  
  		if (this.progressWatch != null) {
  			this.progressWatch.setInitState(initState);
  			this.progressWatch.start();
  		}
  		
  		for (PLCMThread t : this.threads) {
  			try {
  				t.join();
  				for (int i = 0; i < t.counters.length; i++) {
  					this.globalCounters[i] += t.counters[i];
  				}
  			} catch (InterruptedException e) {
  				throw new RuntimeException(e);
  			}
  		}
  		
  		if (this.progressWatch != null) {
  			this.progressWatch.interrupt();
  		}
  	}
docs: Initial invocation