diff --git a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
index f4b8a31..15f1b96 100644
--- a/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
+++ b/core/lib/Drupal/Core/ParamConverter/ParamConverterManager.php
@@ -156,7 +156,12 @@ public function enhance(array $defaults, Request $request) {
     // variables in the route path pattern.
     $route = $defaults[RouteObjectInterface::ROUTE_OBJECT];
     $variables = array_flip($route->compile()->getVariables());
-    $defaults['_raw_variables'] = new ParameterBag(array_intersect_key($defaults, $variables));
+    // Explicitly copy values to break references.
+    $raw_variables = array();
+    foreach (array_intersect_key($defaults, $variables) as $key => $value) {
+      $raw_variables[$key] = $value;
+    }
+    $defaults['_raw_variables'] = new ParameterBag($raw_variables);
 
     // Skip this enhancer if there are no parameter definitions.
     if (!$parameters = $route->getOption('parameters')) {
diff --git a/core/tests/Drupal/Tests/Core/ParamConverter/ParamConverterManagerTest.php b/core/tests/Drupal/Tests/Core/ParamConverter/ParamConverterManagerTest.php
index 6e9a018..942a3f2 100644
--- a/core/tests/Drupal/Tests/Core/ParamConverter/ParamConverterManagerTest.php
+++ b/core/tests/Drupal/Tests/Core/ParamConverter/ParamConverterManagerTest.php
@@ -9,7 +9,10 @@
 
 use Drupal\Core\ParamConverter\ParamConverterManager;
 use Drupal\Tests\UnitTestCase;
+use Symfony\Cmf\Component\Routing\RouteObjectInterface;
 use Symfony\Component\DependencyInjection\ContainerBuilder;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\Routing\Route;
 
 /**
  * Tests the typed data resolver manager.
@@ -142,4 +145,45 @@ public function providerTestGetConverter() {
     );
   }
 
+  /**
+   * Tests the enhance method.
+   *
+   * @see \Drupal\Core\ParamConverter\ParamConverterManager::enhance().
+   */
+  public function testEnhance() {
+    $converter = $this->getMock('Drupal\Core\ParamConverter\ParamConverterInterface');
+    $this->manager->addConverter('test_convert');
+
+    $this->container->set('test_convert', $converter);
+
+    $route = new Route('/test/{id}');
+    $parameters = array();
+    $parameters['id'] = array(
+      'converter' => 'test_convert'
+    );
+    $route->setOption('parameters', $parameters);
+
+    $defaults = array();
+    $defaults[RouteObjectInterface::ROUTE_OBJECT] = $route;
+    $defaults['id'] = 1;
+    $defaults['_entity'] = &$defaults['id'];
+
+    $request = new Request();
+
+    $entity = $this->getMockBuilder('\Drupal\user\Entity\User')
+      ->disableOriginalConstructor()
+      ->getMock();
+
+    $converter->expects($this->once())
+      ->method('convert')
+      ->with($this->equalTo(1))
+      ->will($this->returnValue($entity));
+
+    $defaults = $this->manager->enhance($defaults, $request);
+
+    $this->assertSame($entity, $defaults['id']);
+    $this->assertTrue($defaults['_raw_variables']->has('id'));
+    $this->assertEquals(1, $defaults['_raw_variables']->get('id'));
+  }
+
 }
