def cooccurrenceCounts(self, keyTag, *countedTags):
        if not isinstance(keyTag, str):
            raise TagError("'{}' is not a string it cannot be used as a tag.".format(keyTag))
        if len(countedTags) < 1:
            TagError("You need to provide atleast one tag")
        for tag in countedTags:
            if not isinstance(tag, str):
                raise TagError("'{}' is not a string it cannot be used as a tag.".format(tag))
        occurenceDict = {}
        progArgs = (0, "Starting to count the co-occurrences of '{}' and' {}'".format(keyTag, "','".join(countedTags)))
        if metaknowledge.VERBOSE_MODE:
            progKwargs = {'dummy' : False}
        else:
            progKwargs = {'dummy' : True}
        with _ProgressBar(*progArgs, **progKwargs) as PBar:
            for i, R in enumerate(self):
                PBar.updateVal(i / len(self), "Analyzing {}".format(R))
                keyVal = R.get(keyTag)
                if keyVal is None:
                    continue
                if not isinstance(keyVal, list):
                    keyVal = [keyVal]
                for key in keyVal:
                    if key not in occurenceDict:
                        occurenceDict[key] = {}
                for tag in countedTags:
                    tagval = R.get(tag)
                    if tagval is None:
                        continue
                    if not isinstance(tagval, list):
                        tagval = [tagval]
                    for val in tagval:
                        for key in keyVal:
                            try:
                                occurenceDict[key][val] += 1
                            except KeyError:
                                occurenceDict[key][val] = 1
            PBar.finish("Done extracting the co-occurrences of '{}' and '{}'".format(keyTag, "','".join(countedTags)))
        return occurenceDict