public synchronized void addDocument(BSONObject document) throws MongoServerException {

    Integer pos = emptyPositions.poll();
    if (pos == null) pos = Integer.valueOf(documents.size());

    for (Index index : indexes) {
      index.checkAdd(document);
    }
    for (Index index : indexes) {
      index.add(document, pos);
    }
    dataSize.addAndGet(Utils.calculateSize(document));
    if (pos == documents.size()) {
      documents.add(document);
    } else {
      documents.set(pos.intValue(), document);
    }
  }