code: public synchronized boolean consolidate() throws IOException {
  		if (isTainted()) {
  			// proceed with consolidation
  			XSequentialEventBuffer nBuffer = new XSequentialEventBuffer(buffer
  					.getProvider(), this.attributeMapSerializer);
  			int overflowIndex = 0;
  			int fileBufferIndex = 0;
  			for (int i = 0; i < size; i++) {
  				if (overflowIndex < overflowSize
  						&& overflowIndices[overflowIndex] == i) {
  					nBuffer.append(overflowEntries[overflowIndex]);
  					overflowIndex++;
  				} else {
  					while (holeFlags.get(fileBufferIndex) == true) {
  						fileBufferIndex++;
  					}
  					nBuffer.append(buffer.get(fileBufferIndex));
  					fileBufferIndex++;
  				}
  			}
  			buffer.cleanup();
  			buffer = nBuffer;
  			overflowSize = 0;
  			holeFlags.clear();
  			return true;
  		} else {
  			return false;
  		}
  	}
docs: Consolidates this fast event list. Consolidation implies, that all
  overflow and skipping data structures are freed, and the buffered
  representation is brought completely in-line with the virtual current
  contents of the list.
  
  The actual consolidation will be skipped, if no need for it is detected
  by the algorithm.
  
  @return Whether consolidation has been performed.