float recursiveCheckCoverage(BoundingBox screenBox, int id, CovByCopyrightId[] covByCopyrightIds) {       
        CopyrightNotice curNotice = (CopyrightNotice) m_copyrightHolder
                .getCopyrightBoxes()[id];
        BoundingBox intersection = new BoundingBox();
        
        if (curNotice.getBox().getIntersection(screenBox, intersection)) {
            // Calculate the coverage as area.
            float coverage = (float) intersection.getLonDiff()
                    * (float) intersection.getHeight();
            float covForChildren = 0;
            int childId = 0;
            BoxByParent[] boxesByParent = m_copyrightHolder.getBoxesByParent();
            
            for (int i = 0; i < boxesByParent.length; i++) {
                BoxByParent boxByParent = (BoxByParent) boxesByParent[i];
                if (boxByParent.getParentID() == id) {
                    childId = boxByParent.getChildID();
                    covForChildren += recursiveCheckCoverage(intersection,
                            childId, covByCopyrightIds);

                    if (covForChildren - coverage == 0) {
                        // System.out.println("Break (copyright)");
                        break;
                    }
                }
            }

            if (curNotice.isOverlappingBox()) {
                // Box is only used as bounding box for children and
                // does not contain any copyright info of it's own.
                // Return the copyright coverage for the children.
                return covForChildren;
            }

            // Calculate the current coverage,
            // by subtracting any coverage already covered by a child.
            float curCov = coverage - covForChildren;

            // Update coverage.
            covByCopyrightIds[curNotice.getCopyrightId()].m_covArea += curCov;

            return coverage;
        }
        // else, no overlapping
        return 0;
    }