private synchronized Object[] getOutputRowData(Object[] row) throws KettleException {

    Object[] outputRowData = RowDataUtil.allocateRowData(data.outputRowMeta.size());
    for (int i = 0; i < data.NrPrevFields; i++) {
      outputRowData[i] = row[i];
    }
    if (first) {
      first = false;
    } else {
      for (int i = 0; i < data.inStreamNrs.length; i++) {
        outputRowData[data.NrPrevFields + i] = data.previousRow[data.inStreamNrs[i]];
      }
    }
    data.previousRow = row;
    return outputRowData;
  }