```
diff --git a/Doctrine/Phpcr/RouteProvider.php b/Doctrine/Phpcr/RouteProvider.php
index 5a26766..e05fd14 100644
--- a/Doctrine/Phpcr/RouteProvider.php
+++ b/Doctrine/Phpcr/RouteProvider.php
@@ -12,6 +12,7 @@
 
 namespace Symfony\Cmf\Bundle\RoutingBundle\Doctrine\Phpcr;
 
+use PHPCR\Query\QueryInterface;
 use PHPCR\RepositoryException;
 
 use Symfony\Component\Routing\Route as SymfonyRoute;
@@ -135,6 +136,51 @@ class RouteProvider extends DoctrineProvider implements RouteProviderInterface
         return $route;
     }
 
+    public function getRouteNames()
+    {
+        $dm = $this->getObjectManager();
+        $sql2 = 'SELECT * FROM [nt:unstructured] WHERE
+            classparents = '.$dm->quote('Symfony\Component\Routing\Route');
+
+        if ('' === $this->idPrefix) {
+            $sql2.= ' AND ISCHILDNODE('.$dm->quote($this->idPrefix).')';
+        }
+        $query = $dm->createPhpcrQuery($sql2, QueryInterface::JCR_SQL2);
+        $result = $query->execute();
+
+        $names = array();
+        foreach ($result as $row) {
+            $names[] = $row->getPath();
+        }
+
+        return $names;
+    }
+
+    /**
+     * {@inheritDoc}
+     */
+    public function getRoutesByNames($names, $parameters = array())
+    {
+        if ('' !== $this->idPrefix) {
+            foreach ($names as $key => $name) {
+                if (0 !== strpos($name, $this->idPrefix)) {
+                    unset($names[$key]);
+                }
+            }
+        }
+
+        $collection = $this->getObjectManager()->findMany($this->className, $names);
+        foreach ($collection as $key => $document) {
+            if (!$document instanceof SymfonyRoute) {
+                // we follow the logic of DocumentManager::findMany and do not throw an exception
+                unset($collection[$key]);
+            }
+        }
+
+        return $collection;
+    }
+
+
     /**
      * {@inheritDoc}
      */
```