def flag_change(self, flags, level, location=None, worksheet=None, message=''):
        '''
        Wraps the pushing of a change flag into the flags dictionary to handle
        all edge cases/auto-filling.
        '''
        if not isinstance(level, basestring):
            try:
                level = self.FLAG_LEVEL_CODES[level]
            except KeyError:
                level = 'fatal'

        if location == None:
            location = (-1, -1)

        ftuple = self.FlagLevelTuple(level, location, worksheet, message)

        # Handle flags[level] not being present
        try:
            flags[level].append(ftuple)
        except KeyError:
            flags[level] = [ftuple]