protected function getInstance(/*# string */ $id, array $args)
    {
        // get id & scope info
        list($rawId, $scopedId, $scope) = $this->realScopeInfo($id);

        // get from the pool
        if (isset($this->pool[$scopedId])) {
            return $this->pool[$scopedId];
        }

        // create instance
        $instance = $this->createInstance($rawId, $args);

        // save in the pool
        if (empty($args) && ScopeInterface::SCOPE_SINGLE !== $scope) {
            $this->pool[$scopedId] = $instance;
        }

        return $instance;
    }