def METHOD_NAME(self, obj, tag=None, tagpfx=None, belowThis=None, redraw=True):
    self.count += 1
    if tag:
        # user supplied a tag
        if tag in self.tags:
            raise CanvasError("Tag already used: '%s'" % (tag))
    else:
        if tagpfx:
            # user supplied a tag prefix
            if tagpfx.startswith('@'):
                raise CanvasError("Tag prefix may not begin with '@'")
            tag = '%s%d' % (tagpfx, self.count)
        else:
            # make up our own tag
            tag = '@%d' % (self.count)
    obj.tag = tag
    self.tags[tag] = obj
    self.add_object(obj, belowThis=belowThis)
    # propagate change notification on this canvas
    if obj.has_callback('modified'):
        obj.add_callback('modified', self.subcanvas_updated_cb)
    if redraw:
        self.update_canvas(whence=3)
    return tag