protected function setUpSlotManagers()
    {
        if (null === $this->themeSlots || null === $this->template) {
            return;
        }

        $this->slotManagers = array();
        $templateSlots = $this->template->getSlots();
        $themeSlots = $this->themeSlots->getSlots();
        foreach ($themeSlots as $slotName => $slot) {

            // slots passes only when they are repeated or belongs the current template
            if ($slot->getRepeated() == 'page' && ! in_array($slotName, $templateSlots)) {
                continue;
            }

            $this->slotManagers[$slotName] = $this->createSlotManager($slot);
        }

        if (null === $this->pageBlocks) {
            return;
        }

        // Looks for included blocks' slots
        $includedSlots = array_diff(array_keys($this->pageBlocks->getBlocks()), array_keys($themeSlots));
        foreach ($includedSlots as $slotName) {
            if ($slotName != "") {
                $slot = new Slot($slotName);
                $this->slotManagers[$slotName] = $this->createSlotManager($slot);
            }
        }
    }