def METHOD_NAME(self,VARname,SDLname,playerID,tag):
    global boolCurrentState
    # is it a var we care about?
    if VARname != stringVar1Name.value and VARname != stringVar2Name.value:
        return
    ageSDL = PtGetAgeSDL()
    PtDebugPrint("DEBUG: xAgeSDLBoolAndRespond.OnSDLNotify():\t VARname:%s, SDLname:%s, tag:%s, value:%d" % (VARname,SDLname,tag,ageSDL[VARname][0]))
    # is state change from player or vault manager?
    if playerID: # non-zero means it's a player
        objAvatar = ptSceneobject(PtGetAvatarKeyFromClientID(playerID),self.key)
        fastforward = 0
    else:   # invalid player aka Vault Manager
        objAvatar = None
        fastforward = boolVltMgrFastForward.value # we need to skip any one-shots
    PtDebugPrint("DEBUG: xAgeSDLBoolAndRespond.OnSDLNotify():\tnotification from playerID: %d" % (playerID))
    # does the change change our current state?
    if not boolCurrentState and (ageSDL[stringVar1Name.value][0] and ageSDL[stringVar2Name.value][0]):
        boolCurrentState = True
    elif boolCurrentState and not (ageSDL[stringVar1Name.value][0] and ageSDL[stringVar2Name.value][0]):
        boolCurrentState = False
    else:
        PtDebugPrint("DEBUG: xAgeSDLBoolAndRespond.OnSDLNotify():\t %s ANDed state didn't change." % (self.sceneobject.getName()))
        return
    PtDebugPrint("DEBUG: xAgeSDLBoolAndRespond.OnSDLNotify():\t state changed to %d" % (boolCurrentState))
    # run the appropriate responder!
    if boolCurrentState:
        PtDebugPrint("DEBUG: xAgeSDLBoolAndRespond.OnSDLNotify:\tRunning true responder on %s, fastforward=%d" % (self.sceneobject.getName(), fastforward))
        respBoolTrue.run(self.key,avatar=objAvatar,fastforward=fastforward)
    else:
        PtDebugPrint("DEBUG: xAgeSDLBoolAndRespond.OnSDLNotify:\tRunning false responder on %s, fastforward=%d" % (self.sceneobject.getName(), fastforward))
        respBoolFalse.run(self.key,avatar=objAvatar,fastforward=fastforward)