public BedFeature next() {

        // Is there a need to fetch next data block?
        if(bedFeatureIndex < bedFeatureList.size())
            return(bedFeatureList.get(bedFeatureIndex++));

        // attempt to get next leaf item data block
        else {
            int nHits = getHitRegion(selectionRegion, contained);

            if(nHits > 0){
                // Note: getDataBlock initializes bed feature index to 0
                return(bedFeatureList.get(bedFeatureIndex++)); // return 1st Data Block item
            }
            else{
                 String result = String.format("Failed to find data for bed region (%d,%d,%d,%d)\n",
                    hitRegion.getStartChromID(),  hitRegion.getStartBase(),
                        hitRegion.getEndChromID(), hitRegion.getEndBase());
                log.error(result);

                return null;
                //throw new NoSuchElementException(result);
            }
        }
    }