diff --git a/core/lib/Drupal/Core/Routing/RouteBuilder.php b/core/lib/Drupal/Core/Routing/RouteBuilder.php
index fc12ee8..f5a342a 100644
--- a/core/lib/Drupal/Core/Routing/RouteBuilder.php
+++ b/core/lib/Drupal/Core/Routing/RouteBuilder.php
@@ -80,7 +80,7 @@ public function rebuild() {
     //   http://drupal.org/node/1331486.
     foreach (module_list() as $module) {
       $collection = new RouteCollection();
-      $routing_file = DRUPAL_ROOT . '/' . drupal_get_path('module', $module) . '/' . $module . '.routing.yml';
+      $routing_file = "module://{$module}/{$module}.routing.yml";
       if (file_exists($routing_file)) {
         $routes = $parser->parse(file_get_contents($routing_file));
         if (!empty($routes)) {
diff --git a/core/lib/Drupal/Core/StreamWrapper/ModuleStream.php b/core/lib/Drupal/Core/StreamWrapper/ModuleStream.php
new file mode 100644
index 0000000..41b31e0
--- /dev/null
+++ b/core/lib/Drupal/Core/StreamWrapper/ModuleStream.php
@@ -0,0 +1,25 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\Core\StreamWrapper\ModuleStream.
+ */
+
+namespace Drupal\Core\StreamWrapper;
+
+/**
+ * Defines a read-only Drupal stream wrapper base class for modules.
+ *
+ * This class extends the complete stream wrapper implementation in LocalStream.
+ * URIs such as "module://system" are expanded to a normal filesystem path
+ * such as "modules/system" and then PHP filesystem functions are
+ * invoked.
+ */
+class ModuleStream extends SystemStream {
+
+  /**
+   * Implements abstract public function getDirectoryPath()
+   */
+  public function getDirectoryPath() {
+    return drupal_get_path('module', $this->getSystemName());
+  }
+}
\ No newline at end of file
diff --git a/core/lib/Drupal/Core/StreamWrapper/ProfileStream.php b/core/lib/Drupal/Core/StreamWrapper/ProfileStream.php
new file mode 100644
index 0000000..a21c896
--- /dev/null
+++ b/core/lib/Drupal/Core/StreamWrapper/ProfileStream.php
@@ -0,0 +1,41 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\Core\StreamWrapper\ProfileStream.
+ */
+
+namespace Drupal\Core\StreamWrapper;
+
+/**
+ * Defines a read-only Drupal stream wrapper base class for profiles.
+ *
+ * This class extends the complete stream wrapper implementation in LocalStream.
+ * URIs such as "profile://default" are expanded to a normal filesystem path
+ * such as "profiles/default" and then PHP filesystem functions are
+ * invoked.
+ *
+ * Specifying "profile://current" will return a stream for the currently
+ * installed profile.
+ */
+class ProfileStream extends SystemStream {
+
+  /**
+   * Override SystemSteam::getSystemName() to support profile://current
+   */
+  protected function getSystemName($uri = NULL) {
+    $name = parent::getSystemName($uri);
+    if ($name == 'current') {
+      return drupal_get_profile();
+    }
+    else {
+      return $name;
+    }
+  }
+
+  /**
+   * Implements abstract public function getDirectoryPath()
+   */
+  public function getDirectoryPath() {
+    return drupal_get_path('profile', $this->getSystemName());
+  }
+}
\ No newline at end of file
diff --git a/core/lib/Drupal/Core/StreamWrapper/SystemStream.php b/core/lib/Drupal/Core/StreamWrapper/SystemStream.php
new file mode 100644
index 0000000..55211d5
--- /dev/null
+++ b/core/lib/Drupal/Core/StreamWrapper/SystemStream.php
@@ -0,0 +1,61 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\Core\StreamWrapper\SystemStream.
+ */
+
+namespace Drupal\Core\StreamWrapper;
+
+/**
+ * Defines a read-only Drupal stream wrapper base class for system files such as
+ * modules, themes and profiles.
+ *
+ * This class provides a base stream wrapper implementation.
+ */
+abstract class SystemStream extends LocalReadOnlyStream {
+
+  /**
+   * Get the module, theme, or profile name of the current URI.
+   */
+  protected function getSystemName($uri = NULL) {
+    if (!isset($uri)) {
+      $uri = $this->uri;
+    }
+    list($scheme, $target) = explode('://', $uri, 2);
+    $pos = strpos($target, '/');
+    return $pos === FALSE ? $target : substr($target, 0, $pos);
+  }
+
+  protected function getTarget($uri = NULL) {
+    if (!isset($uri)) {
+      $uri = $this->uri;
+    }
+
+    list($scheme, $target) = explode('://', $uri, 2);
+
+    // Remove erroneous leading or trailing, forward-slashes and backslashes.
+    $target = trim($target, '\/');
+
+    // Remove the module/theme/profile name form the file path.
+    $target = substr($target, strlen($this->getSystemName()));
+
+    // Trim again.
+    $target = trim($target, '\/');
+    return $target;
+  }
+
+  /**
+   * Overrides getExternalUrl().
+   *
+   * Return the HTML URI of a system file.
+   */
+  public function getExternalUrl() {
+    $dir = $this->getDirectoryPath();
+    if (empty($dir)) {
+      return FALSE;
+    }
+
+    $path = str_replace('\\', '/', $this->getTarget());
+    return $GLOBALS['base_url'] . '/' . $dir . '/' . drupal_encode_path($path);
+  }
+}
diff --git a/core/lib/Drupal/Core/StreamWrapper/ThemeStream.php b/core/lib/Drupal/Core/StreamWrapper/ThemeStream.php
new file mode 100644
index 0000000..f872347
--- /dev/null
+++ b/core/lib/Drupal/Core/StreamWrapper/ThemeStream.php
@@ -0,0 +1,43 @@
+<?php
+/**
+ * @file
+ * Definition of Drupal\Core\StreamWrapper\ThemeStream.
+ */
+
+namespace Drupal\Core\StreamWrapper;
+
+/**
+ * Defines a read-only Drupal stream wrapper base class for themes.
+ *
+ * This class extends the complete stream wrapper implementation in LocalStream.
+ * URIs such as "theme://bartik" are expanded to a normal filesystem path
+ * such as "themes/default" and then PHP filesystem functions are
+ * invoked.
+ */
+class ThemeStream extends SystemStream {
+
+  /**
+   * Implements abstract public function getDirectoryPath()
+   */
+  public function getDirectoryPath() {
+    return drupal_get_path('theme', $this->getSystemName());
+  }
+
+  /**
+   * Override SystemSteam::getSystemName() to support theme://current and
+   * theme://admin.
+   */
+  protected function getSystemName($uri = NULL) {
+    global $theme_key;
+    $name = parent::getSystemName($uri);
+    if ($name == 'current') {
+      return $theme_key;
+    }
+    else if ($name == 'admin') {
+      return variable_get('admin_theme', 'seven');
+    }
+    else {
+      return $name;
+    }
+  }
+}
\ No newline at end of file
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index ed4f0c2..2394ebd 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -2019,6 +2019,24 @@ function system_stream_wrappers() {
       'description' => t('Temporary local files for upload and previews.'),
       'type' => STREAM_WRAPPERS_LOCAL_HIDDEN,
     ),
+    'module' => array(
+      'name' => t('Module files'),
+      'class' => 'Drupal\Core\StreamWrapper\ModuleStream',
+      'description' => t('Local module files.'),
+      'type' => STREAM_WRAPPERS_READ,
+    ),
+    'theme' => array(
+      'name' => t('Theme files'),
+      'class' => 'Drupal\Core\StreamWrapper\ThemeStream',
+      'description' => t('Local theme files.'),
+      'type' => STREAM_WRAPPERS_READ,
+    ),
+    'profile' => array(
+      'name' => t('Profile files'),
+      'class' => 'Drupal\Core\StreamWrapper\ProfileStream',
+      'description' => t('Local profile files.'),
+      'type' => STREAM_WRAPPERS_READ,
+    ),
   );
 
   // Only register the private file stream wrapper if a file path has been set.
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index c272180..6370f3c 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -1941,7 +1941,7 @@ public function buildOptionsForm(&$form, &$form_state) {
 
         // Field templates aren't registered the normal way...and they're always
         // this one, anyhow.
-        $output .= '<pre>' . check_plain(file_get_contents(drupal_get_path('module', 'views') . '/theme/views-view-field.tpl.php')) . '</pre>';
+        $output .= '<pre>' . check_plain(file_get_contents("module://views/theme/views-view-field.tpl.php")) . '</pre>';
 
         $form['analysis'] = array(
           '#markup' => '<div class="form-item">' . $output . '</div>',
