diff --git a/composer.json b/composer.json
index 71c714f..974dc0e 100644
--- a/composer.json
+++ b/composer.json
@@ -20,7 +20,7 @@
     "doctrine/common": "dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5",
     "doctrine/annotations": "1.2.*",
     "guzzlehttp/guzzle": "~5.0",
-    "symfony-cmf/routing": "1.2.*",
+    "symfony-cmf/routing": "1.3.*",
     "easyrdf/easyrdf": "0.8.*",
     "phpunit/phpunit": "4.1.*",
     "phpunit/phpunit-mock-objects": "dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
diff --git a/composer.lock b/composer.lock
index f933c55..698a465 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1586,17 +1586,16 @@
         },
         {
             "name": "symfony-cmf/routing",
-            "version": "1.2.0",
-            "target-dir": "Symfony/Cmf/Component/Routing",
+            "version": "1.3.0",
             "source": {
                 "type": "git",
                 "url": "https://github.com/symfony-cmf/Routing.git",
-                "reference": "c67258b875eef3cb08009bf1428499d0f01ce5e7"
+                "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/c67258b875eef3cb08009bf1428499d0f01ce5e7",
-                "reference": "c67258b875eef3cb08009bf1428499d0f01ce5e7",
+                "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/8e87981d72c6930a27585dcd3119f3199f6cb2a6",
+                "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6",
                 "shasum": ""
             },
             "require": {
@@ -1607,7 +1606,7 @@
             },
             "require-dev": {
                 "symfony/config": "~2.2",
-                "symfony/dependency-injection": "~2.0",
+                "symfony/dependency-injection": "~2.0@stable",
                 "symfony/event-dispatcher": "~2.1"
             },
             "suggest": {
@@ -1616,12 +1615,12 @@
             "type": "library",
             "extra": {
                 "branch-alias": {
-                    "dev-master": "1.2-dev"
+                    "dev-master": "1.3-dev"
                 }
             },
             "autoload": {
-                "psr-0": {
-                    "Symfony\\Cmf\\Component\\Routing": ""
+                "psr-4": {
+                    "Symfony\\Cmf\\Component\\Routing\\": ""
                 }
             },
             "notification-url": "https://packagist.org/downloads/",
@@ -1640,7 +1639,7 @@
                 "database",
                 "routing"
             ],
-            "time": "2014-05-08 19:37:14"
+            "time": "2014-10-20 20:55:17"
         },
         {
             "name": "symfony/class-loader",
diff --git a/core/lib/Drupal/Core/Routing/LazyLoadingRouteCollection.php b/core/lib/Drupal/Core/Routing/LazyLoadingRouteCollection.php
deleted file mode 100644
index c1aa4a2..0000000
--- a/core/lib/Drupal/Core/Routing/LazyLoadingRouteCollection.php
+++ /dev/null
@@ -1,147 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Core\Routing\LazyLoadingRouteCollection.
- */
-
-namespace Drupal\Core\Routing;
-
-use Drupal\Core\Database\Connection;
-use Iterator;
-
-/**
- * Provides a route collection that lists all routes of drupal.
- *
- * Internally this does load multiple routes over time, so it never have all the
- * routes stored in memory.
- */
-class LazyLoadingRouteCollection implements Iterator {
-
-  /**
-   * Stores the current loaded routes.
-   *
-   * @var \Symfony\Component\Routing\Route[]
-   */
-  protected $elements;
-
-  /**
-   * Contains the amount of route which are loaded on each sql query.
-   */
-  const ROUTE_LOADED_PER_TIME = 50;
-
-  /**
-   * Contains the current item the iterator points to.
-   *
-   * @var int
-   */
-  protected $currentRoute = 0;
-
-  /**
-   * The database connection.
-   *
-   * @var \Drupal\Core\Database\Connection
-   */
-  protected $database;
-
-  /**
-   * The name of the SQL table from which to read the routes.
-   *
-   * @var string
-   */
-  protected $tableName;
-
-  /**
-   * The number of routes in the router table.
-   *
-   * @var int
-   */
-  protected $count;
-
-  /**
-   * Creates a LazyLoadingRouteCollection instance.
-   *
-   * @param \Drupal\Core\Database\Connection $database
-   *   The database connection.
-   * @param string $table
-   *   (optional) The table to retrieve the route information.
-   */
-  public function __construct(Connection $database, $table = 'router') {
-    $this->database = $database;
-    $this->tableName = $table;
-  }
-
-  /**
-   * Loads the next routes into the elements array.
-   *
-   * @param int $offset
-   *   The offset used in the db query.
-   */
-  protected function loadNextElements($offset) {
-    $this->elements = array();
-
-    $query = $this->database->select($this->tableName);
-    $query->addField($this->tableName, 'name');
-    $query->addField($this->tableName, 'route');
-    $query->orderBy('name', 'ASC');
-    $query->range($offset, static::ROUTE_LOADED_PER_TIME);
-    $result = $query->execute()->fetchAllKeyed();
-
-    $routes = array();
-    foreach ($result as $name => $route) {
-      $routes[$name] = unserialize($route);
-    }
-    $this->elements = $routes;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function count() {
-    if (!isset($this->count)) {
-      $this->count = (int) $this->database->select($this->tableName)->countQuery()->execute();
-    }
-    return $this->count;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function current() {
-    return current($this->elements);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function next() {
-    $result = next($this->elements);
-    if ($result === FALSE) {
-      $this->loadNextElements($this->currentRoute + 1);
-    }
-    $this->currentRoute++;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function key() {
-    return key($this->elements);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function valid() {
-    return key($this->elements);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function rewind() {
-    $this->currentRoute = 0;
-    $this->loadNextElements($this->currentRoute);
-  }
-
-}
diff --git a/core/lib/Drupal/Core/Routing/RouteProvider.php b/core/lib/Drupal/Core/Routing/RouteProvider.php
index cc0682a..06c3ea7 100644
--- a/core/lib/Drupal/Core/Routing/RouteProvider.php
+++ b/core/lib/Drupal/Core/Routing/RouteProvider.php
@@ -9,6 +9,8 @@
 
 use Drupal\Component\Utility\String;
 use Drupal\Core\State\StateInterface;
+use Symfony\Cmf\Component\Routing\PagedRouteCollection;
+use Symfony\Cmf\Component\Routing\PagedRouteProviderInterface;
 use Symfony\Component\EventDispatcher\EventSubscriberInterface;
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
@@ -20,7 +22,7 @@
 /**
  * A Route Provider front-end for all Drupal-stored routes.
  */
-class RouteProvider implements RouteProviderInterface, EventSubscriberInterface {
+class RouteProvider implements RouteProviderInterface, PagedRouteProviderInterface, EventSubscriberInterface {
 
   /**
    * The database connection from which to read route information.
@@ -306,7 +308,7 @@ protected function getRoutesByPath($path) {
    * {@inheritdoc}
    */
   public function getAllRoutes() {
-    return new LazyLoadingRouteCollection($this->connection, $this->tableName);
+    return new PagedRouteCollection($this);
   }
 
   /**
@@ -324,4 +326,32 @@ static function getSubscribedEvents() {
     return $events;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getRoutesPaged($offset, $length = NULL) {
+    $select = $this->connection->select($this->tableName, 'router')
+      ->fields('router', ['name', 'route']);
+
+    if ($length) {
+      $select->range($offset, $length);
+    }
+
+    $routes = $select->execute()->fetchAllKeyed();
+
+    $result = [];
+    foreach ($routes as $name => $route) {
+      $result[$name] = unserialize($route);
+    }
+
+    return $result;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRoutesCount() {
+    return $this->connection->query("SELECT COUNT(*) FROM {" . $this->connection->escapeTable($this->tableName) . "}")->fetchField();
+  }
+
 }
diff --git a/core/modules/system/src/Tests/Routing/RouteProviderTest.php b/core/modules/system/src/Tests/Routing/RouteProviderTest.php
index b453feb..6b6e1d7 100644
--- a/core/modules/system/src/Tests/Routing/RouteProviderTest.php
+++ b/core/modules/system/src/Tests/Routing/RouteProviderTest.php
@@ -461,4 +461,27 @@ public function testGetRoutesByPatternWithLongPatterns() {
     $this->assertEqual(count($candidates), 7);
   }
 
+  /**
+   * Tests getRoutesPaged().
+   */
+  public function testGetRoutesPaged() {
+    $connection = Database::getConnection();
+    $provider = new RouteProvider($connection, $this->routeBuilder, $this->state, 'test_routes');
+
+    $this->fixtures->createTables($connection);
+    $dumper = new MatcherDumper($connection, $this->state, 'test_routes');
+    $dumper->addRoutes($this->fixtures->sampleRouteCollection());
+    $dumper->dump();
+
+    $fixture_routes = $this->fixtures->staticSampleRouteCollection();
+
+    // Query all the routes.
+    $routes = $provider->getRoutesPaged(0);
+    $this->assertEqual(array_keys($routes), array_keys($fixture_routes));
+
+    // Query a limited sets of routes.
+    $routes = $provider->getRoutesPaged(1, 2);
+    $this->assertEqual(array_keys($routes), array_slice(array_keys($fixture_routes), 1, 2));
+  }
+
 }
diff --git a/core/tests/Drupal/Tests/Core/Routing/LazyLoadingRouteCollectionTest.php b/core/tests/Drupal/Tests/Core/Routing/LazyLoadingRouteCollectionTest.php
deleted file mode 100644
index 46f5995..0000000
--- a/core/tests/Drupal/Tests/Core/Routing/LazyLoadingRouteCollectionTest.php
+++ /dev/null
@@ -1,102 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\Tests\Core\Routing\LazyLoadingRouteCollectionTest.
- */
-
-namespace Drupal\Tests\Core\Routing;
-
-use Drupal\Core\Routing\LazyLoadingRouteCollection;
-use Drupal\Tests\UnitTestCase;
-use Symfony\Component\Routing\Route;
-
-/**
- * @coversDefaultClass \Drupal\Core\Routing\LazyLoadingRouteCollection
- * @group Routing
- */
-class LazyLoadingRouteCollectionTest extends UnitTestCase {
-
-  /**
-   * Stores all the routes used in the test.
-   *
-   * @var array
-   */
-  protected $routes = array();
-
-  /**
-   * The tested route collection.
-   *
-   * @var \Drupal\Core\Routing\LazyLoadingRouteCollection
-   */
-  protected $routeCollection;
-
-  protected function setUp() {
-    for ($i = 0; $i < 20; $i++) {
-      $this->routes['test_route_' . $i] = new Route('/test-route-' . $i);
-    }
-
-    $this->routeCollection = new TestRouteCollection($this->routes);
-  }
-
-  /**
-   * Tests iterating the lazy loading route collection.
-   *
-   * @see \Drupal\Core\Routing\LazyLoadingRouteCollection::current()
-   * @see \Drupal\Core\Routing\LazyLoadingRouteCollection::key()
-   * @see \Drupal\Core\Routing\LazyLoadingRouteCollection::rewind()
-   */
-  public function testIterating() {
-    // Execute the foreach loop twice to ensure that rewind is called.
-    for ($i = 0; $i < 2; $i++) {
-      $route_names = array_keys($this->routes);
-      $count = 0;
-      foreach ($this->routeCollection as $route_name => $route) {
-        $this->assertEquals($route_names[$count], $route_name);
-        $this->assertEquals($this->routes[$route_names[$count]], $route);
-
-        $count++;
-      }
-    }
-  }
-
-}
-
-/**
- * Wrapper class to "inject" loaded routes.
- */
-class TestRouteCollection extends LazyLoadingRouteCollection {
-
-  /**
-   * {@inheritdoc}
-   */
-  const ROUTE_LOADED_PER_TIME = 2;
-
-  /**
-   * Stores all elements.
-   *
-   * @var \Symfony\Component\Routing\Route[]
-   */
-  protected $allRoutes;
-
-  /**
-   * Creates a TestCollection instance.
-   *
-   * @param \Symfony\Component\Routing\Route[] $all_routes
-   *   Contains all the routes used in the test.
-   */
-  public function __construct(array $all_routes) {
-    $this->allRoutes = $all_routes;
-    $this->loadNextElements($this->currentRoute);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function loadNextElements($offset) {
-    $elements = array_slice($this->allRoutes, $offset, static::ROUTE_LOADED_PER_TIME);
-
-    $this->elements = $elements;
-  }
-
-}
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 58e5347..54e2998 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -24,7 +24,6 @@
     'Symfony\\Component\\Debug\\' => array($vendorDir . '/symfony/debug'),
     'Symfony\\Component\\CssSelector\\' => array($vendorDir . '/symfony/css-selector'),
     'Symfony\\Component\\ClassLoader\\' => array($vendorDir . '/symfony/class-loader'),
-    'Symfony\\Cmf\\Component\\Routing' => array($vendorDir . '/symfony-cmf/routing'),
     'Stack' => array($vendorDir . '/stack/builder/src'),
     'Psr\\Log\\' => array($vendorDir . '/psr/log'),
     'Gliph' => array($vendorDir . '/sdboyer/gliph/src'),
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index c26aa26..1b053f1 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -6,6 +6,7 @@
 $baseDir = dirname(dirname($vendorDir));
 
 return array(
+    'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
     'React\\Promise\\' => array($vendorDir . '/react/promise/src'),
     'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
     'GuzzleHttp\\Ring\\' => array($vendorDir . '/guzzlehttp/ringphp/src'),
diff --git a/core/vendor/composer/installed.json b/core/vendor/composer/installed.json
index db7fa29..06b9204 100644
--- a/core/vendor/composer/installed.json
+++ b/core/vendor/composer/installed.json
@@ -336,66 +336,6 @@
         "homepage": "https://github.com/sebastianbergmann/version"
     },
     {
-        "name": "symfony-cmf/routing",
-        "version": "1.2.0",
-        "version_normalized": "1.2.0.0",
-        "target-dir": "Symfony/Cmf/Component/Routing",
-        "source": {
-            "type": "git",
-            "url": "https://github.com/symfony-cmf/Routing.git",
-            "reference": "c67258b875eef3cb08009bf1428499d0f01ce5e7"
-        },
-        "dist": {
-            "type": "zip",
-            "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/c67258b875eef3cb08009bf1428499d0f01ce5e7",
-            "reference": "c67258b875eef3cb08009bf1428499d0f01ce5e7",
-            "shasum": ""
-        },
-        "require": {
-            "php": ">=5.3.3",
-            "psr/log": "~1.0",
-            "symfony/http-kernel": "~2.2",
-            "symfony/routing": "~2.2"
-        },
-        "require-dev": {
-            "symfony/config": "~2.2",
-            "symfony/dependency-injection": "~2.0",
-            "symfony/event-dispatcher": "~2.1"
-        },
-        "suggest": {
-            "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ~2.1"
-        },
-        "time": "2014-05-08 19:37:14",
-        "type": "library",
-        "extra": {
-            "branch-alias": {
-                "dev-master": "1.2-dev"
-            }
-        },
-        "installation-source": "dist",
-        "autoload": {
-            "psr-0": {
-                "Symfony\\Cmf\\Component\\Routing": ""
-            }
-        },
-        "notification-url": "https://packagist.org/downloads/",
-        "license": [
-            "MIT"
-        ],
-        "authors": [
-            {
-                "name": "Symfony CMF Community",
-                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
-            }
-        ],
-        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
-        "homepage": "http://cmf.symfony.com",
-        "keywords": [
-            "database",
-            "routing"
-        ]
-    },
-    {
         "name": "stack/builder",
         "version": "v1.0.2",
         "version_normalized": "1.0.2.0",
@@ -2589,6 +2529,7 @@
         ]
     },
     {
+<<<<<<< ours
         "name": "twig/twig",
         "version": "v1.16.2",
         "version_normalized": "1.16.2.0",
@@ -2611,16 +2552,57 @@
         "extra": {
             "branch-alias": {
                 "dev-master": "1.16-dev"
+=======
+        "name": "symfony-cmf/routing",
+        "version": "1.3.0",
+        "version_normalized": "1.3.0.0",
+        "source": {
+            "type": "git",
+            "url": "https://github.com/symfony-cmf/Routing.git",
+            "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6"
+        },
+        "dist": {
+            "type": "zip",
+            "url": "https://api.github.com/repos/symfony-cmf/Routing/zipball/8e87981d72c6930a27585dcd3119f3199f6cb2a6",
+            "reference": "8e87981d72c6930a27585dcd3119f3199f6cb2a6",
+            "shasum": ""
+        },
+        "require": {
+            "php": ">=5.3.3",
+            "psr/log": "~1.0",
+            "symfony/http-kernel": "~2.2",
+            "symfony/routing": "~2.2"
+        },
+        "require-dev": {
+            "symfony/config": "~2.2",
+            "symfony/dependency-injection": "~2.0@stable",
+            "symfony/event-dispatcher": "~2.1"
+        },
+        "suggest": {
+            "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ~2.1"
+        },
+        "time": "2014-10-20 20:55:17",
+        "type": "library",
+        "extra": {
+            "branch-alias": {
+                "dev-master": "1.3-dev"
+>>>>>>> theirs
             }
         },
         "installation-source": "dist",
         "autoload": {
+<<<<<<< ours
             "psr-0": {
                 "Twig_": "lib/"
+=======
+            "psr-4": {
+                "Symfony\\Cmf\\Component\\Routing\\": ""
+>>>>>>> theirs
             }
         },
         "notification-url": "https://packagist.org/downloads/",
         "license": [
+<<<<<<< ours
             "BSD-3-Clause"
         ],
         "authors": [
@@ -2645,6 +2627,21 @@
         "homepage": "http://twig.sensiolabs.org",
         "keywords": [
             "templating"
+=======
+            "MIT"
+        ],
+        "authors": [
+            {
+                "name": "Symfony CMF Community",
+                "homepage": "https://github.com/symfony-cmf/Routing/contributors"
+            }
+        ],
+        "description": "Extends the Symfony2 routing component for dynamic routes and chaining several routers",
+        "homepage": "http://cmf.symfony.com",
+        "keywords": [
+            "database",
+            "routing"
+>>>>>>> theirs
         ]
     }
 ]
diff --git a/core/vendor/symfony-cmf/routing/.travis.yml b/core/vendor/symfony-cmf/routing/.travis.yml
new file mode 100644
index 0000000..c0eae5c
--- /dev/null
+++ b/core/vendor/symfony-cmf/routing/.travis.yml
@@ -0,0 +1,31 @@
+language: php
+
+php:
+  - 5.3
+  - 5.4
+  - 5.5
+  - 5.6
+  - hhvm
+
+env: 
+  - SYMFONY_VERSION=2.5.*
+
+matrix:
+  allow_failures:
+    - php: hhvm
+  include:
+    - php: 5.5
+      env: SYMFONY_VERSION=2.3.*
+    - php: 5.5
+      env: SYMFONY_VERSION=2.4.*
+    - php: 5.5
+      env: SYMFONY_VERSION=2.*
+
+before_install:
+  - composer require symfony/routing:${SYMFONY_VERSION} --prefer-source
+
+script: phpunit --coverage-text
+
+notifications:
+  irc: "irc.freenode.org#symfony-cmf"
+  email: "symfony-cmf-devs@googlegroups.com"
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/CHANGELOG.md b/core/vendor/symfony-cmf/routing/CHANGELOG.md
similarity index 71%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/CHANGELOG.md
rename to core/vendor/symfony-cmf/routing/CHANGELOG.md
index 3b0f7be..e8e8542 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/CHANGELOG.md
+++ b/core/vendor/symfony-cmf/routing/CHANGELOG.md
@@ -1,6 +1,17 @@
 Changelog
 =========
 
+* **2014-09-29**: ChainRouter does not require a RouterInterface, as a
+  RequestMatcher and UrlGenerator is fine too. Fixed chain router interface to
+  not force a RouterInterface.
+* **2014-09-29**: Deprecated DynamicRouter::match in favor of matchRequest.
+
+1.3.0-RC1
+---------
+
+* **2014-08-20**: Added an interface for the ChainRouter
+* **2014-06-06**: Updated to PSR-4 autoloading
+
 1.2.0
 -----
 
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/CONTRIBUTING.md b/core/vendor/symfony-cmf/routing/CONTRIBUTING.md
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/CONTRIBUTING.md
rename to core/vendor/symfony-cmf/routing/CONTRIBUTING.md
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Candidates/Candidates.php b/core/vendor/symfony-cmf/routing/Candidates/Candidates.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Candidates/Candidates.php
rename to core/vendor/symfony-cmf/routing/Candidates/Candidates.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Candidates/CandidatesInterface.php b/core/vendor/symfony-cmf/routing/Candidates/CandidatesInterface.php
similarity index 96%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Candidates/CandidatesInterface.php
rename to core/vendor/symfony-cmf/routing/Candidates/CandidatesInterface.php
index 54e6811..9ce22a9 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Candidates/CandidatesInterface.php
+++ b/core/vendor/symfony-cmf/routing/Candidates/CandidatesInterface.php
@@ -24,7 +24,7 @@
     /**
      * @param Request $request
      *
-     * @return array a list of PHPCR-ODM ids
+     * @return array a list of paths
      */
     public function getCandidates(Request $request);
 
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouteCollection.php b/core/vendor/symfony-cmf/routing/ChainRouteCollection.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouteCollection.php
rename to core/vendor/symfony-cmf/routing/ChainRouteCollection.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php b/core/vendor/symfony-cmf/routing/ChainRouter.php
similarity index 83%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php
rename to core/vendor/symfony-cmf/routing/ChainRouter.php
index 44ca2ee..89c2c15 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainRouter.php
+++ b/core/vendor/symfony-cmf/routing/ChainRouter.php
@@ -12,6 +12,7 @@
 namespace Symfony\Cmf\Component\Routing;
 
 use Symfony\Component\Routing\RouterInterface;
+use Symfony\Component\Routing\Generator\UrlGeneratorInterface;
 use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
 use Symfony\Component\Routing\RequestContext;
 use Symfony\Component\Routing\RequestContextAwareInterface;
@@ -24,17 +25,15 @@
 use Psr\Log\LoggerInterface;
 
 /**
- * ChainRouter
- *
- * Allows access to a lot of different routers.
+ * The ChainRouter allows to combine several routers to try in a defined order.
  *
  * @author Henrik Bjornskov <henrik@bjrnskov.dk>
  * @author Magnus Nordlander <magnus@e-butik.se>
  */
-class ChainRouter implements RouterInterface, RequestMatcherInterface, WarmableInterface
+class ChainRouter implements ChainRouterInterface, WarmableInterface
 {
     /**
-     * @var \Symfony\Component\Routing\RequestContext
+     * @var RequestContext
      */
     private $context;
 
@@ -45,17 +44,17 @@ class ChainRouter implements RouterInterface, RequestMatcherInterface, WarmableI
     private $routers = array();
 
     /**
-     * @var \Symfony\Component\Routing\RouterInterface[] Array of routers, sorted by priority
+     * @var RouterInterface[] Array of routers, sorted by priority
      */
     private $sortedRouters;
 
     /**
-     * @var \Symfony\Component\Routing\RouteCollection
+     * @var RouteCollection
      */
     private $routeCollection;
 
     /**
-     * @var null|\Psr\Log\LoggerInterface
+     * @var null|LoggerInterface
      */
     protected $logger;
 
@@ -76,13 +75,15 @@ public function getContext()
     }
 
     /**
-     * Add a Router to the index
-     *
-     * @param RouterInterface $router   The router instance
-     * @param integer         $priority The priority
+     * {@inheritdoc}
      */
-    public function add(RouterInterface $router, $priority = 0)
+    public function add($router, $priority = 0)
     {
+        if (!$router instanceof RouterInterface
+            && !($router instanceof RequestMatcherInterface && $router instanceof UrlGeneratorInterface)
+        ) {
+            throw new \InvalidArgumentException(sprintf('%s is not a valid router.', get_class($router)));
+        }
         if (empty($this->routers[$priority])) {
             $this->routers[$priority] = array();
         }
@@ -92,9 +93,7 @@ public function add(RouterInterface $router, $priority = 0)
     }
 
     /**
-     * Sorts the routers and flattens them.
-     *
-     * @return RouterInterface[]
+     * {@inheritdoc}
      */
     public function all()
     {
@@ -164,21 +163,26 @@ public function matchRequest(Request $request)
      *
      * @param string  $url
      * @param Request $request
+     *
+     * @return array An array of parameters
+     *
+     * @throws ResourceNotFoundException If no router matched.
      */
     private function doMatch($url, Request $request = null)
     {
         $methodNotAllowed = null;
 
+        $requestForMatching = $request;
         foreach ($this->all() as $router) {
             try {
                 // the request/url match logic is the same as in Symfony/Component/HttpKernel/EventListener/RouterListener.php
                 // matching requests is more powerful than matching URLs only, so try that first
                 if ($router instanceof RequestMatcherInterface) {
-                    if (null === $request) {
-                        $request = Request::create($url);
+                    if (empty($requestForMatching)) {
+                        $requestForMatching = Request::create($url);
                     }
 
-                    return $router->matchRequest($request);
+                    return $router->matchRequest($requestForMatching);
                 }
                 // every router implements the match method
                 return $router->match($url);
@@ -212,15 +216,14 @@ public function generate($name, $parameters = array(), $absolute = false)
         $debug = array();
 
         foreach ($this->all() as $router) {
-            // if $router does not implement ChainedRouterInterface and $name is not a string, continue
-            if ($name && !$router instanceof ChainedRouterInterface) {
-                if (! is_string($name)) {
-                    continue;
-                }
+            // if $router does not announce it is capable of handling
+            // non-string routes and $name is not a string, continue
+            if ($name && !is_string($name) && !$router instanceof VersatileGeneratorInterface) {
+                continue;
             }
 
-            // If $router implements ChainedRouterInterface but doesn't support this route name, continue
-            if ($router instanceof ChainedRouterInterface && !$router->supports($name)) {
+            // If $router is versatile and doesn't support this route name, continue
+            if ($router instanceof VersatileGeneratorInterface && !$router->supports($name)) {
                 continue;
             }
 
diff --git a/core/vendor/symfony-cmf/routing/ChainRouterInterface.php b/core/vendor/symfony-cmf/routing/ChainRouterInterface.php
new file mode 100644
index 0000000..9a7a003
--- /dev/null
+++ b/core/vendor/symfony-cmf/routing/ChainRouterInterface.php
@@ -0,0 +1,39 @@
+<?php
+
+/*
+ * This file is part of the Symfony CMF package.
+ *
+ * (c) 2011-2014 Symfony CMF
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Cmf\Component\Routing;
+
+use Symfony\Component\Routing\RouterInterface;
+use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
+
+/**
+ * Interface for a router that proxies routing to other routers.
+ *
+ * @author Daniel Wehner <dawehner@googlemail.com>
+ */
+interface ChainRouterInterface extends RouterInterface, RequestMatcherInterface
+{
+    /**
+     * Add a Router to the index.
+     *
+     * @param RouterInterface $router   The router instance. Instead of RouterInterface, may also
+     *                                  be RequestMatcherInterface and UrlGeneratorInterface.
+     * @param integer         $priority The priority
+     */
+    public function add($router, $priority = 0);
+
+    /**
+     * Sorts the routers and flattens them.
+     *
+     * @return RouterInterface[] or RequestMatcherInterface and UrlGeneratorInterface.
+     */
+    public function all();
+}
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainedRouterInterface.php b/core/vendor/symfony-cmf/routing/ChainedRouterInterface.php
similarity index 96%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainedRouterInterface.php
rename to core/vendor/symfony-cmf/routing/ChainedRouterInterface.php
index b0c40ca..a4ece6c 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ChainedRouterInterface.php
+++ b/core/vendor/symfony-cmf/routing/ChainedRouterInterface.php
@@ -14,7 +14,7 @@
 use Symfony\Component\Routing\RouterInterface;
 
 /**
- * Interface to combine the VersatileGeneratorInterface with the RouterInterface
+ * Interface to combine the VersatileGeneratorInterface with the RouterInterface.
  */
 interface ChainedRouterInterface extends RouterInterface, VersatileGeneratorInterface
 {
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ContentAwareGenerator.php b/core/vendor/symfony-cmf/routing/ContentAwareGenerator.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ContentAwareGenerator.php
rename to core/vendor/symfony-cmf/routing/ContentAwareGenerator.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ContentRepositoryInterface.php b/core/vendor/symfony-cmf/routing/ContentRepositoryInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ContentRepositoryInterface.php
rename to core/vendor/symfony-cmf/routing/ContentRepositoryInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DependencyInjection/Compiler/RegisterRouteEnhancersPass.php b/core/vendor/symfony-cmf/routing/DependencyInjection/Compiler/RegisterRouteEnhancersPass.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DependencyInjection/Compiler/RegisterRouteEnhancersPass.php
rename to core/vendor/symfony-cmf/routing/DependencyInjection/Compiler/RegisterRouteEnhancersPass.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DependencyInjection/Compiler/RegisterRoutersPass.php b/core/vendor/symfony-cmf/routing/DependencyInjection/Compiler/RegisterRoutersPass.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DependencyInjection/Compiler/RegisterRoutersPass.php
rename to core/vendor/symfony-cmf/routing/DependencyInjection/Compiler/RegisterRoutersPass.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DynamicRouter.php b/core/vendor/symfony-cmf/routing/DynamicRouter.php
similarity index 99%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DynamicRouter.php
rename to core/vendor/symfony-cmf/routing/DynamicRouter.php
index 03eaefa..944a94b 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/DynamicRouter.php
+++ b/core/vendor/symfony-cmf/routing/DynamicRouter.php
@@ -198,6 +198,7 @@ public function supports($name)
      * @throws MethodNotAllowedException If the resource was found but the
      *                                   request method is not allowed
      *
+     * @deprecated Use matchRequest exclusively to avoid problems. This method will be removed in version 2.0
      * @api
      */
     public function match($pathinfo)
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/FieldByClassEnhancer.php b/core/vendor/symfony-cmf/routing/Enhancer/FieldByClassEnhancer.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/FieldByClassEnhancer.php
rename to core/vendor/symfony-cmf/routing/Enhancer/FieldByClassEnhancer.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/FieldMapEnhancer.php b/core/vendor/symfony-cmf/routing/Enhancer/FieldMapEnhancer.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/FieldMapEnhancer.php
rename to core/vendor/symfony-cmf/routing/Enhancer/FieldMapEnhancer.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/FieldPresenceEnhancer.php b/core/vendor/symfony-cmf/routing/Enhancer/FieldPresenceEnhancer.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/FieldPresenceEnhancer.php
rename to core/vendor/symfony-cmf/routing/Enhancer/FieldPresenceEnhancer.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/RouteContentEnhancer.php b/core/vendor/symfony-cmf/routing/Enhancer/RouteContentEnhancer.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/RouteContentEnhancer.php
rename to core/vendor/symfony-cmf/routing/Enhancer/RouteContentEnhancer.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/RouteEnhancerInterface.php b/core/vendor/symfony-cmf/routing/Enhancer/RouteEnhancerInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Enhancer/RouteEnhancerInterface.php
rename to core/vendor/symfony-cmf/routing/Enhancer/RouteEnhancerInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Event/Events.php b/core/vendor/symfony-cmf/routing/Event/Events.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Event/Events.php
rename to core/vendor/symfony-cmf/routing/Event/Events.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Event/RouterMatchEvent.php b/core/vendor/symfony-cmf/routing/Event/RouterMatchEvent.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Event/RouterMatchEvent.php
rename to core/vendor/symfony-cmf/routing/Event/RouterMatchEvent.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/LICENSE b/core/vendor/symfony-cmf/routing/LICENSE
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/LICENSE
rename to core/vendor/symfony-cmf/routing/LICENSE
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/LazyRouteCollection.php b/core/vendor/symfony-cmf/routing/LazyRouteCollection.php
similarity index 91%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/LazyRouteCollection.php
rename to core/vendor/symfony-cmf/routing/LazyRouteCollection.php
index 28b02ac..4011f9a 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/LazyRouteCollection.php
+++ b/core/vendor/symfony-cmf/routing/LazyRouteCollection.php
@@ -30,6 +30,14 @@ public function __construct(RouteProviderInterface $provider)
     }
 
     /**
+     * {@inheritdoc}
+     */
+    public function getIterator()
+    {
+        return new \ArrayIterator($this->all());
+    }
+
+    /**
      * Gets the number of Routes in this collection.
      *
      * @return int The number of routes
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/FinalMatcherInterface.php b/core/vendor/symfony-cmf/routing/NestedMatcher/FinalMatcherInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/FinalMatcherInterface.php
rename to core/vendor/symfony-cmf/routing/NestedMatcher/FinalMatcherInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/NestedMatcher.php b/core/vendor/symfony-cmf/routing/NestedMatcher/NestedMatcher.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/NestedMatcher.php
rename to core/vendor/symfony-cmf/routing/NestedMatcher/NestedMatcher.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/RouteFilterInterface.php b/core/vendor/symfony-cmf/routing/NestedMatcher/RouteFilterInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/RouteFilterInterface.php
rename to core/vendor/symfony-cmf/routing/NestedMatcher/RouteFilterInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/UrlMatcher.php b/core/vendor/symfony-cmf/routing/NestedMatcher/UrlMatcher.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/NestedMatcher/UrlMatcher.php
rename to core/vendor/symfony-cmf/routing/NestedMatcher/UrlMatcher.php
diff --git a/core/vendor/symfony-cmf/routing/PagedRouteCollection.php b/core/vendor/symfony-cmf/routing/PagedRouteCollection.php
new file mode 100644
index 0000000..dba573e
--- /dev/null
+++ b/core/vendor/symfony-cmf/routing/PagedRouteCollection.php
@@ -0,0 +1,126 @@
+<?php
+
+/**
+ * This file is part of the Symfony CMF package.
+ *
+ * (c) 2011-2014 Symfony CMF
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Cmf\Component\Routing;
+
+/**
+ * Provides a route collection which avoids having all routes in memory.
+ *
+ * Internally, this does load multiple routes over time using a
+ * PagedRouteProviderInterface $route_provider.
+ */
+class PagedRouteCollection implements \Iterator, \Countable
+{
+    /**
+     * @var PagedRouteProviderInterface
+     */
+    protected $provider;
+
+    /**
+     * Stores the amount of routes which are loaded in parallel and kept in
+     * memory.
+     *
+     * @var int
+     */
+    protected $routesBatchSize;
+
+    /**
+     * Contains the current item the iterator points to.
+     *
+     * @var int
+     */
+    protected $current = -1;
+
+    /**
+     * Stores the current loaded routes.
+     *
+     * @var \Symfony\Component\Routing\Route[]
+     */
+    protected $currentRoutes;
+
+    public function __construct(PagedRouteProviderInterface $pagedRouteProvider, $routesBatchSize = 50)
+    {
+        $this->provider = $pagedRouteProvider;
+        $this->routesBatchSize = $routesBatchSize;
+    }
+
+    /**
+     * Loads the next routes into the elements array.
+     *
+     * @param int $offset The offset used in the db query.
+     */
+    protected function loadNextElements($offset)
+    {
+        // If the last batch was smaller than the batch size, this means there
+        // are no more routes available.
+        if (isset($this->currentRoutes) && count($this->currentRoutes) < $this->routesBatchSize) {
+            $this->currentRoutes = array();
+        } else {
+            $this->currentRoutes = $this->provider->getRoutesPaged($offset, $this->routesBatchSize);
+        }
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function current()
+    {
+        return current($this->currentRoutes);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function next()
+    {
+        $result = next($this->currentRoutes);
+        if (false === $result) {
+            $this->loadNextElements($this->current + 1);
+        }
+        $this->current++;
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function key()
+    {
+        return key($this->currentRoutes);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function valid()
+    {
+        return key($this->currentRoutes);
+    }
+
+    /**
+     * {@inheritdoc}
+     */
+    public function rewind()
+    {
+        $this->current = 0;
+        $this->currentRoutes = NULL;
+        $this->loadNextElements($this->current);
+    }
+
+    /**
+     * Gets the number of Routes in this collection.
+     *
+     * @return int The number of routes
+     */
+    public function count()
+    {
+        return $this->provider->getRoutesCount();
+    }
+}
diff --git a/core/vendor/symfony-cmf/routing/PagedRouteProviderInterface.php b/core/vendor/symfony-cmf/routing/PagedRouteProviderInterface.php
new file mode 100644
index 0000000..970ec78
--- /dev/null
+++ b/core/vendor/symfony-cmf/routing/PagedRouteProviderInterface.php
@@ -0,0 +1,42 @@
+<?php
+
+/**
+ * This file is part of the Symfony CMF package.
+ *
+ * (c) 2011-2014 Symfony CMF
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Cmf\Component\Routing;
+
+/**
+ * Interface for a provider which allows to retrieve a limited amount of routes.
+ */
+interface PagedRouteProviderInterface extends RouteProviderInterface
+{
+    /**
+     * Find an amount of routes with an offset and possible a limit.
+     *
+     * In case you want to iterate over all routes, you want to avoid to load
+     * all routes at once.
+     *
+     * @param int $offset
+     *   The sequence will start with that offset in the list of all routes.
+     * @param int $length [optional]
+     *   The sequence will have that many routes in it. If no length is
+     *   specified all routes are returned.
+     *
+     * @return \Symfony\Component\Routing\Route[]
+     *   Routes keyed by the route name.
+     */
+    public function getRoutesPaged($offset, $length = null);
+
+    /**
+     * Determines the total amount of routes.
+     *
+     * @return int
+     */
+    public function getRoutesCount();
+}
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ProviderBasedGenerator.php b/core/vendor/symfony-cmf/routing/ProviderBasedGenerator.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/ProviderBasedGenerator.php
rename to core/vendor/symfony-cmf/routing/ProviderBasedGenerator.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/README.md b/core/vendor/symfony-cmf/routing/README.md
similarity index 98%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/README.md
rename to core/vendor/symfony-cmf/routing/README.md
index 509d86b..2a18ed1 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/README.md
+++ b/core/vendor/symfony-cmf/routing/README.md
@@ -14,7 +14,7 @@ It provides:
 Even though it has Symfony in its name, the Routing component does not need the
 full Symfony2 Framework and can be used in standalone projects.
 
-For Symfon2 projects, an optional
+For Symfony 2 projects, an optional
 [RoutingBundle](https://github.com/symfony-cmf/RoutingBundle)
 is also available.
 
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RedirectRouteInterface.php b/core/vendor/symfony-cmf/routing/RedirectRouteInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RedirectRouteInterface.php
rename to core/vendor/symfony-cmf/routing/RedirectRouteInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteObjectInterface.php b/core/vendor/symfony-cmf/routing/RouteObjectInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteObjectInterface.php
rename to core/vendor/symfony-cmf/routing/RouteObjectInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteProviderInterface.php b/core/vendor/symfony-cmf/routing/RouteProviderInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteProviderInterface.php
rename to core/vendor/symfony-cmf/routing/RouteProviderInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteReferrersInterface.php b/core/vendor/symfony-cmf/routing/RouteReferrersInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteReferrersInterface.php
rename to core/vendor/symfony-cmf/routing/RouteReferrersInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteReferrersReadInterface.php b/core/vendor/symfony-cmf/routing/RouteReferrersReadInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/RouteReferrersReadInterface.php
rename to core/vendor/symfony-cmf/routing/RouteReferrersReadInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.gitignore b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.gitignore
deleted file mode 100644
index c089b09..0000000
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.gitignore
+++ /dev/null
@@ -1,3 +0,0 @@
-phpunit.xml
-composer.lock
-/vendor/
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.travis.yml b/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.travis.yml
deleted file mode 100644
index 8d4dde4..0000000
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/.travis.yml
+++ /dev/null
@@ -1,25 +0,0 @@
-language: php
-
-php:
-    - 5.3
-    - 5.4
-    - 5.5
-
-env:
-  - SYMFONY_VERSION=2.2.*
-  - SYMFONY_VERSION=2.3.*
-  - SYMFONY_VERSION=2.4.*
-  - SYMFONY_VERSION=dev-master
-
-before_script:
-  - composer require symfony/routing:${SYMFONY_VERSION} --prefer-source
-
-script: phpunit --coverage-text
-
-notifications:
-  irc: "irc.freenode.org#symfony-cmf"
-  email: "symfony-cmf-devs@googlegroups.com"
-
-matrix:
-  allow_failures:
-    - env: SYMFONY_VERSION=dev-master
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Test/CmfUnitTestCase.php b/core/vendor/symfony-cmf/routing/Test/CmfUnitTestCase.php
similarity index 99%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Test/CmfUnitTestCase.php
rename to core/vendor/symfony-cmf/routing/Test/CmfUnitTestCase.php
index 367c693..f0e9ea1 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Test/CmfUnitTestCase.php
+++ b/core/vendor/symfony-cmf/routing/Test/CmfUnitTestCase.php
@@ -13,7 +13,6 @@
 
 class CmfUnitTestCase extends \PHPUnit_Framework_TestCase
 {
-
     protected function buildMock($class, array $methods = array())
     {
         return $this->getMockBuilder($class)
@@ -21,5 +20,4 @@ protected function buildMock($class, array $methods = array())
                 ->setMethods($methods)
                 ->getMock();
     }
-
 }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Candidates/CandidatesTest.php b/core/vendor/symfony-cmf/routing/Tests/Candidates/CandidatesTest.php
similarity index 99%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Candidates/CandidatesTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Candidates/CandidatesTest.php
index 654711a..322c052 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Candidates/CandidatesTest.php
+++ b/core/vendor/symfony-cmf/routing/Tests/Candidates/CandidatesTest.php
@@ -101,6 +101,5 @@ public function testGetCandidatesLimit()
             ),
             $paths
         );
-
     }
 }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/DependencyInjection/Compiler/RegisterRouteEnhancersPassTest.php b/core/vendor/symfony-cmf/routing/Tests/DependencyInjection/Compiler/RegisterRouteEnhancersPassTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/DependencyInjection/Compiler/RegisterRouteEnhancersPassTest.php
rename to core/vendor/symfony-cmf/routing/Tests/DependencyInjection/Compiler/RegisterRouteEnhancersPassTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/DependencyInjection/Compiler/RegisterRoutersPassTest.php b/core/vendor/symfony-cmf/routing/Tests/DependencyInjection/Compiler/RegisterRoutersPassTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/DependencyInjection/Compiler/RegisterRoutersPassTest.php
rename to core/vendor/symfony-cmf/routing/Tests/DependencyInjection/Compiler/RegisterRoutersPassTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/FieldByClassEnhancerTest.php b/core/vendor/symfony-cmf/routing/Tests/Enhancer/FieldByClassEnhancerTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/FieldByClassEnhancerTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Enhancer/FieldByClassEnhancerTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/FieldMapEnhancerTest.php b/core/vendor/symfony-cmf/routing/Tests/Enhancer/FieldMapEnhancerTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/FieldMapEnhancerTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Enhancer/FieldMapEnhancerTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/FieldPresenceEnhancerTest.php b/core/vendor/symfony-cmf/routing/Tests/Enhancer/FieldPresenceEnhancerTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/FieldPresenceEnhancerTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Enhancer/FieldPresenceEnhancerTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteContentEnhancerTest.php b/core/vendor/symfony-cmf/routing/Tests/Enhancer/RouteContentEnhancerTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteContentEnhancerTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Enhancer/RouteContentEnhancerTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteObject.php b/core/vendor/symfony-cmf/routing/Tests/Enhancer/RouteObject.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Enhancer/RouteObject.php
rename to core/vendor/symfony-cmf/routing/Tests/Enhancer/RouteObject.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/NestedMatcherTest.php b/core/vendor/symfony-cmf/routing/Tests/NestedMatcher/NestedMatcherTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/NestedMatcherTest.php
rename to core/vendor/symfony-cmf/routing/Tests/NestedMatcher/NestedMatcherTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/UrlMatcherTest.php b/core/vendor/symfony-cmf/routing/Tests/NestedMatcher/UrlMatcherTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/NestedMatcher/UrlMatcherTest.php
rename to core/vendor/symfony-cmf/routing/Tests/NestedMatcher/UrlMatcherTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ChainRouterTest.php b/core/vendor/symfony-cmf/routing/Tests/Routing/ChainRouterTest.php
similarity index 91%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ChainRouterTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Routing/ChainRouterTest.php
index 63a1fbf..e8b8e3c 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ChainRouterTest.php
+++ b/core/vendor/symfony-cmf/routing/Tests/Routing/ChainRouterTest.php
@@ -11,17 +11,31 @@
 
 namespace Symfony\Cmf\Component\Routing\Tests\Routing;
 
+use Symfony\Cmf\Component\Routing\VersatileGeneratorInterface;
+use Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface;
 use Symfony\Component\Routing\Exception\MethodNotAllowedException;
 use Symfony\Component\Routing\Exception\ResourceNotFoundException;
 use Symfony\Component\Routing\Exception\RouteNotFoundException;
+use Symfony\Component\Routing\Matcher\RequestMatcherInterface;
+use Symfony\Component\Routing\RequestContext;
 use Symfony\Component\Routing\RouteCollection;
 use Symfony\Component\HttpFoundation\Request;
 
 use Symfony\Cmf\Component\Routing\ChainRouter;
 use Symfony\Cmf\Component\Routing\Test\CmfUnitTestCase;
+use Symfony\Component\Routing\RouterInterface;
 
 class ChainRouterTest extends CmfUnitTestCase
 {
+    /**
+     * @var ChainRouter
+     */
+    private $router;
+    /**
+     * @var RequestContext|\PHPUnit_Framework_MockObject_MockObject
+     */
+    private $context;
+
     public function setUp()
     {
         $this->router = new ChainRouter($this->getMock('Psr\Log\LoggerInterface'));
@@ -54,6 +68,7 @@ public function testSortRouters()
     {
         list($low, $medium, $high) = $this->createRouterMocks();
         // We're using a mock here and not $this->router because we need to ensure that the sorting operation is done only once.
+        /** @var $router ChainRouter|\PHPUnit_Framework_MockObject_MockObject */
         $router = $this->buildMock('Symfony\Cmf\Component\Routing\ChainRouter', array('sortRouters'));
         $router
             ->expects($this->once())
@@ -87,6 +102,7 @@ public function testReSortRouters()
         list($low, $medium, $high) = $this->createRouterMocks();
         $highest = clone $high;
         // We're using a mock here and not $this->router because we need to ensure that the sorting operation is done only once.
+        /** @var $router ChainRouter|\PHPUnit_Framework_MockObject_MockObject */
         $router = $this->buildMock('Symfony\Cmf\Component\Routing\ChainRouter', array('sortRouters'));
         $router
             ->expects($this->at(0))
@@ -253,7 +269,6 @@ public function testMatchRequest()
     public function testMatchWithRequestMatchers()
     {
         $url = '/test';
-        $request = Request::create('/test');
 
         list($low) = $this->createRouterMocks();
 
@@ -262,7 +277,9 @@ public function testMatchWithRequestMatchers()
         $high
             ->expects($this->once())
             ->method('matchRequest')
-            ->with($request)
+            ->with($this->callback(function (Request $r) use ($url) {
+                return $r->getPathInfo() === $url;
+            }))
             ->will($this->throwException(new \Symfony\Component\Routing\Exception\ResourceNotFoundException))
         ;
         $low
@@ -386,6 +403,31 @@ public function testMatchRequestNotFound()
     }
 
     /**
+     * Call match on ChainRouter that has RequestMatcher in the chain.
+     *
+     * @expectedException \Symfony\Component\Routing\Exception\ResourceNotFoundException
+     * @expectedExceptionMessage None of the routers in the chain matched url '/test'
+     */
+    public function testMatchWithRequestMatchersNotFound()
+    {
+        $url = '/test';
+        $request = Request::create('/test');
+
+        $high = $this->getMock('Symfony\Cmf\Component\Routing\Tests\Routing\RequestMatcher');
+
+        $high
+            ->expects($this->once())
+            ->method('matchRequest')
+            ->with($request)
+            ->will($this->throwException(new \Symfony\Component\Routing\Exception\ResourceNotFoundException))
+        ;
+
+        $this->router->add($high, 20);
+
+        $this->router->match($url);
+    }
+
+    /**
      * If any of the routers throws a not allowed exception and no other matches, we need to see this
      *
      * @expectedException \Symfony\Component\Routing\Exception\MethodNotAllowedException
@@ -530,7 +572,7 @@ public function testGenerateObjectNotFoundVersatile()
         $name = new \stdClass();
         $parameters = array('test' => 'value');
 
-        $chainedRouter = $this->getMock('Symfony\Cmf\Component\Routing\ChainedRouterInterface');
+        $chainedRouter = $this->getMock('Symfony\Cmf\Component\Routing\Tests\Routing\VersatileRouter');
         $chainedRouter
             ->expects($this->once())
             ->method('supports')
@@ -558,7 +600,7 @@ public function testGenerateObjectName()
         $parameters = array('test' => 'value');
 
         $defaultRouter = $this->getMock('Symfony\Component\Routing\RouterInterface');
-        $chainedRouter = $this->getMock('Symfony\Cmf\Component\Routing\ChainedRouterInterface');
+        $chainedRouter = $this->getMock('Symfony\Cmf\Component\Routing\Tests\Routing\VersatileRouter');
 
         $defaultRouter
             ->expects($this->never())
@@ -644,7 +686,7 @@ public function testRouteCollection()
     public function testSupport()
     {
 
-        $router = $this->getMock('Symfony\Cmf\Component\Routing\ChainedRouterInterface');
+        $router = $this->getMock('Symfony\Cmf\Component\Routing\Tests\Routing\VersatileRouter');
         $router
             ->expects($this->once())
             ->method('supports')
@@ -662,6 +704,9 @@ public function testSupport()
         $this->router->generate('foobar');
     }
 
+    /**
+     * @return RouterInterface[]|\PHPUnit_Framework_MockObject_MockObject[]
+     */
     protected function createRouterMocks()
     {
         return array(
@@ -672,10 +717,14 @@ protected function createRouterMocks()
     }
 }
 
-abstract class WarmableRouterMock implements \Symfony\Component\Routing\RouterInterface, \Symfony\Component\HttpKernel\CacheWarmer\WarmableInterface
+abstract class WarmableRouterMock implements RouterInterface, WarmableInterface
+{
+}
+
+abstract class RequestMatcher implements RouterInterface, RequestMatcherInterface
 {
 }
 
-abstract class RequestMatcher implements \Symfony\Component\Routing\RouterInterface, \Symfony\Component\Routing\Matcher\RequestMatcherInterface
+abstract class VersatileRouter implements VersatileGeneratorInterface, RequestMatcherInterface
 {
 }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ContentAwareGeneratorTest.php b/core/vendor/symfony-cmf/routing/Tests/Routing/ContentAwareGeneratorTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ContentAwareGeneratorTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Routing/ContentAwareGeneratorTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/DynamicRouterTest.php b/core/vendor/symfony-cmf/routing/Tests/Routing/DynamicRouterTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/DynamicRouterTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Routing/DynamicRouterTest.php
diff --git a/core/vendor/symfony-cmf/routing/Tests/Routing/LazyRouteCollectionTest.php b/core/vendor/symfony-cmf/routing/Tests/Routing/LazyRouteCollectionTest.php
new file mode 100644
index 0000000..95d3ad2
--- /dev/null
+++ b/core/vendor/symfony-cmf/routing/Tests/Routing/LazyRouteCollectionTest.php
@@ -0,0 +1,42 @@
+<?php
+
+/*
+ * This file is part of the Symfony CMF package.
+ *
+ * (c) 2011-2014 Symfony CMF
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Cmf\Component\Routing;
+
+use Symfony\Cmf\Component\Routing\Test\CmfUnitTestCase;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Tests the lazy route collection.
+ *
+ * @group cmf/routing
+ */
+class LazyRouteCollectionTest extends CmfUnitTestCase
+{
+    /**
+     * Tests the iterator without a paged route provider.
+     */
+    public function testGetIterator()
+    {
+        $routeProvider = $this->getMock('Symfony\Cmf\Component\Routing\RouteProviderInterface');
+        $testRoutes = array(
+          'route_1' => new Route('/route-1'),
+          'route_2"' => new Route('/route-2'),
+        );
+        $routeProvider->expects($this->exactly(2))
+            ->method('getRoutesByNames')
+            ->with(null)
+            ->will($this->returnValue($testRoutes));
+        $lazyRouteCollection = new LazyRouteCollection($routeProvider);
+        $this->assertEquals($testRoutes, iterator_to_array($lazyRouteCollection->getIterator()));
+        $this->assertEquals($testRoutes, $lazyRouteCollection->all());
+    }
+}
diff --git a/core/vendor/symfony-cmf/routing/Tests/Routing/PagedRouteCollectionTest.php b/core/vendor/symfony-cmf/routing/Tests/Routing/PagedRouteCollectionTest.php
new file mode 100644
index 0000000..741beaa
--- /dev/null
+++ b/core/vendor/symfony-cmf/routing/Tests/Routing/PagedRouteCollectionTest.php
@@ -0,0 +1,132 @@
+<?php
+
+/*
+ * This file is part of the Symfony CMF package.
+ *
+ * (c) 2011-2014 Symfony CMF
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ */
+
+namespace Symfony\Cmf\Component\Routing;
+
+use Symfony\Cmf\Component\Routing\Test\CmfUnitTestCase;
+use Symfony\Component\Routing\Route;
+
+/**
+ * Tests the page route collection.
+ *
+ * @group cmf/routing
+ */
+class PagedRouteCollectionTest extends CmfUnitTestCase
+{
+    /**
+     * Contains a mocked route provider.
+     *
+     * @var \Symfony\Cmf\Component\Routing\PagedRouteProviderInterface|\PHPUnit_Framework_MockObject_MockObject
+     */
+    protected $routeProvider;
+
+    protected function setUp()
+    {
+        $this->routeProvider = $this->getMock('Symfony\Cmf\Component\Routing\PagedRouteProviderInterface');
+    }
+
+    /**
+     * Tests iterating a small amount of routes.
+     *
+     * @dataProvider providerIterator
+     */
+    public function testIterator($amountRoutes, $routesLoadedInParallel, $expectedCalls = array())
+    {
+        $routes = array();
+        for ($i = 0; $i < $amountRoutes; $i++) {
+            $routes['test_' . $i] = new Route("/example-$i");
+        }
+        $names = array_keys($routes);
+
+        foreach ($expectedCalls as $i => $range)
+        {
+            $this->routeProvider->expects($this->at($i))
+              ->method('getRoutesPaged')
+              ->with($range[0], $range[1])
+              ->will($this->returnValue(array_slice($routes, $range[0], $range[1])));
+        }
+
+        $route_collection = new PagedRouteCollection($this->routeProvider, $routesLoadedInParallel);
+
+        $counter = 0;
+        foreach ($route_collection as $route_name => $route) {
+            // Ensure the route did not changed.
+            $this->assertEquals($routes[$route_name], $route);
+            // Ensure that the order did not changed.
+            $this->assertEquals($route_name, $names[$counter]);
+            $counter++;
+        }
+    }
+
+    /**
+     * Provides test data for testIterator().
+     */
+    public function providerIterator()
+    {
+        $data = array();
+        // Non total routes.
+        $data[] = array(0, 20, array(array(0, 20)));
+        // Less total routes than loaded in parallel.
+        $data[] = array(10, 20, array(array(0, 20)));
+        // Exact the same amount of routes then loaded in parallel.
+        $data[] = array(20, 20, array(array(0, 20), array(20, 20)));
+        // Less than twice the amount.
+        $data[] = array(39, 20, array(array(0, 20), array(20, 20)));
+        // More total routes than loaded in parallel.
+        $data[] = array(40, 20, array(array(0, 20), array(20, 20), array(40, 20)));
+        $data[] = array(41, 20, array(array(0, 20), array(20, 20), array(40, 20)));
+        // why not.
+        $data[] = array(42, 23, array(array(0, 23), array(23, 23)));
+        return $data;
+    }
+
+    /**
+     * Tests the count() method.
+     */
+    public function testCount()
+    {
+        $this->routeProvider->expects($this->once())
+            ->method('getRoutesCount')
+            ->will($this->returnValue(12));
+        $routeCollection = new PagedRouteCollection($this->routeProvider);
+        $this->assertEquals(12, $routeCollection->count());
+    }
+
+    /**
+     * Tests the rewind method once the iterator is at the end.
+     */
+    public function testIteratingAndRewind()
+    {
+        $routes = array();
+        for ($i = 0; $i < 30; $i++) {
+            $routes['test_' . $i] = new Route("/example-$i");
+        }
+        $this->routeProvider->expects($this->any())
+            ->method('getRoutesPaged')
+            ->will($this->returnValueMap(array(
+                array(0, 10, array_slice($routes, 0, 10)),
+                array(10, 10, array_slice($routes, 9, 10)),
+                array(20, 10, array()),
+            )));
+
+        $routeCollection = new PagedRouteCollection($this->routeProvider, 10);
+
+        // Force the iterating process.
+        $routeCollection->rewind();
+        for ($i = 0; $i < 29; $i++) {
+            $routeCollection->next();
+        }
+        $routeCollection->rewind();
+
+        $this->assertEquals('test_0', $routeCollection->key());
+        $this->assertEquals($routes['test_0'], $routeCollection->current());
+    }
+}
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ProviderBasedGeneratorTest.php b/core/vendor/symfony-cmf/routing/Tests/Routing/ProviderBasedGeneratorTest.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/ProviderBasedGeneratorTest.php
rename to core/vendor/symfony-cmf/routing/Tests/Routing/ProviderBasedGeneratorTest.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/RouteMock.php b/core/vendor/symfony-cmf/routing/Tests/Routing/RouteMock.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/Routing/RouteMock.php
rename to core/vendor/symfony-cmf/routing/Tests/Routing/RouteMock.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/bootstrap.php b/core/vendor/symfony-cmf/routing/Tests/bootstrap.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/Tests/bootstrap.php
rename to core/vendor/symfony-cmf/routing/Tests/bootstrap.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/VersatileGeneratorInterface.php b/core/vendor/symfony-cmf/routing/VersatileGeneratorInterface.php
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/VersatileGeneratorInterface.php
rename to core/vendor/symfony-cmf/routing/VersatileGeneratorInterface.php
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/composer.json b/core/vendor/symfony-cmf/routing/composer.json
similarity index 83%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/composer.json
rename to core/vendor/symfony-cmf/routing/composer.json
index 768a7a1..8594e38 100644
--- a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/composer.json
+++ b/core/vendor/symfony-cmf/routing/composer.json
@@ -19,7 +19,7 @@
         "psr/log": "~1.0"
     },
     "require-dev": {
-        "symfony/dependency-injection": "~2.0",
+        "symfony/dependency-injection": "~2.0@stable",
         "symfony/config": "~2.2",
         "symfony/event-dispatcher": "~2.1"
     },
@@ -27,12 +27,13 @@
         "symfony/event-dispatcher": "DynamicRouter can optionally trigger an event at the start of matching. Minimal version ~2.1"
     },
     "autoload": {
-        "psr-0": { "Symfony\\Cmf\\Component\\Routing": "" }
+        "psr-4": {
+            "Symfony\\Cmf\\Component\\Routing\\": ""
+        }
     },
-    "target-dir": "Symfony/Cmf/Component/Routing",
     "extra": {
         "branch-alias": {
-            "dev-master": "1.2-dev"
+            "dev-master": "1.3-dev"
         }
     }
 }
diff --git a/core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/phpunit.xml.dist b/core/vendor/symfony-cmf/routing/phpunit.xml.dist
similarity index 100%
rename from core/vendor/symfony-cmf/routing/Symfony/Cmf/Component/Routing/phpunit.xml.dist
rename to core/vendor/symfony-cmf/routing/phpunit.xml.dist
