public function getNode($dn, $attributes = null, $filter = null)
    {
        $this->validateBinding();

        $attributes = (is_array($attributes))?$attributes:null;
        $filter = (null === $filter)?'(objectclass=*)':$filter;

        try {
            $search = $this->connection->search(
                SearchInterface::SCOPE_BASE,
                $dn,
                $filter,
                $attributes
            );
        } catch (NoResultException $e) {
            throw new NodeNotFoundException(sprintf('Node %s not found', $dn));
        }

        if (null === ($entry = $search->next())) {
            throw new NodeNotFoundException(sprintf('Node %s not found', $dn));
        }

        $node = new Node();
        $node->hydrateFromEntry($entry);

        return $node;
    }