I have a different approach for the conditionals of companions. I think using stages can result in bugs. For example if you "hire" another former companion like Cait your custom companion will be dismissed without updating the stage after all the vanilla script handels this differently. Instead of stages I check for the faction of the companion: hasbeencompanionfaction, currentcompanionfaction. Use GetInFaction to check for them. recruit condition would be hasbeencompanionfaction == 0, currentcompanionfaction == 0 follow/companion: currentcompanionfaction == 1 Here I don't check for hasbeencompanionfaction fired/rerecruit: hasbeencompanionfaction == 1, currentcompanionfaction == 0 you can use scripts also with conversation options so instead of adding scripts to the stages of the quest add FollowersScript.GetScript().SetCompanion(BoxComp.GetActorReference()) and FollowersScript.GetScript().DismissCompanion(BoxComp.GetActorReference()) them to the papyrus/script snippet box of the conversation option.