public function rootDse($attrs = null)
    {
        if ($attrs !== null && !is_array($attrs)) {
            return PEAR::raiseError('Parameter $attr is expected to be an array!');
        }

        $attrs_signature = serialize($attrs);

        // see if we need to fetch a fresh object, or if we already
        // requested this object with the same attributes
        if (true || !array_key_exists($attrs_signature, $this->_rootDSE_cache)) {
            $rootdse = Net_LDAP2_RootDSE::fetch($this, $attrs);
            if ($rootdse instanceof Net_LDAP2_Error) {
                return $rootdse;
            }

            // search was ok, store rootDSE in cache
            $this->_rootDSE_cache[$attrs_signature] = $rootdse;
        }
        return $this->_rootDSE_cache[$attrs_signature];
    }