code: @Override
      protected void perform(final Wave wave) {
  
          // Avoid to continue launching next command if cancellation has been requested
          if (!this.cancelRequested.get()) {
              if (isSequential()) {
  
                  // Store the wave when we are running the first command
                  synchronized (this) {
                      if (this.commandRunIndex == 0) {
                          this.waveSource = wave;
                          fireConsumed(this.waveSource);
                      }
  
                      if (this.subCommandList.size() > this.commandRunIndex) {
  
                          final Wave subCommandWave = WBuilder.callCommand(this.subCommandList.get(this.commandRunIndex).classField())
                                                              // FIXME UNIQUE KEY of sub command
                                                              // Recopy all WaveBeans
                                                              .waveBeanList(wave.waveBeanList())
                                                              // Recopy the WaveData from the previous wave
                                                              .addDatas(wave.waveDatas().toArray(new WaveDataBase[0]))
                                                              .addWaveListener(this);
                          beforeEach(wave, subCommandWave);
  
                          sendWave(subCommandWave);
                      }
                  }
  
              } else {
  
                  // Store the original wave to be able to mark it as consumed when all of these sub commands are achieved
                  this.waveSource = wave;
  
                  synchronized (this) {
  
                      // Launch all sub command in parallel
                      for (final UniqueKey<? extends Command> commandKey : this.subCommandList) {
  
                          beforeEach(wave, null);
  
                          final Wave commandWave = localFacade().retrieve(commandKey).run();
  
                          // register to Wave status of all command triggered
                          commandWave.addWaveListener(this);
  
                          // Store the pending command to know when all command are achieved
                          this.pendingWaves.add(commandWave);
                      }
                  }
              }
          }
      }
docs: {@inheritDoc}