diff --git a/SystemStreamWrapper.inc b/SystemStreamWrapper.inc
deleted file mode 100644
index d9eee80..0000000
--- a/SystemStreamWrapper.inc
+++ /dev/null
@@ -1,182 +0,0 @@
-<?php
-
-/**
- * Drupal system stream wrapper abstract class.
- */
-abstract class SystemStreamWrapper extends DrupalLocalStreamWrapper {
-
-  /**
-   * 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. This is always
-    // the first part of the path.
-    $target = explode('/', $target);
-    array_shift($target);
-    $target = implode('/', $target);
-
-    // Trim again.
-    $target = trim($target, '\/');
-    return $target;
-  }
-
-  /**
-   * Gets the path that the wrapper is responsible for.
-   *
-   * @return
-   *   String specifying the path.
-   */
-  //abstract public function getDirectoryPath();
-
-  /**
-   * 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);
-  }
-
-  /**
-   * DrupalStreamWrapperInterface requires that these methods be implemented,
-   * but none of them apply to a read-only stream wrapper. On failure they
-   * are expected to return FALSE.
-   */
-
-  public function stream_write($data) {
-    return FALSE;
-  }
-  public function unlink($uri) {
-    // Although the remote file itself can't be deleted, return TRUE so that
-    // file_delete() can remove the file record from the database.
-    return TRUE;
-  }
-  public function rename($from_uri, $to_uri) {
-    return FALSE;
-  }
-  public function mkdir($uri, $mode, $options) {
-    return FALSE;
-  }
-  public function rmdir($uri, $options) {
-    return FALSE;
-  }
-  public function chmod($mode) {
-    return FALSE;
-  }
-  public function dirname($uri = NULL) {
-    return FALSE;
-  }
-}
-
-class ModuleSystemStreamWrapper extends SystemStreamWrapper {
-
-  /**
-   * Implements abstract public function getDirectoryPath()
-   */
-  public function getDirectoryPath() {
-    return drupal_get_path('module', $this->getSystemName());
-  }
-}
-
-/**
- * Stream wrapper for theme files using theme://.
- */
-class ThemeSystemStreamWrapper extends SystemStreamWrapper {
-
-  /**
-   * Override SystemSteamWrapper::getSystemName() to support theme://current,
-   * theme://default, and theme://admin
-   */
-  protected function getSystemName($uri = NULL) {
-    $name = parent::getSystemName($uri);
-    if ($name == 'current') {
-      return $GLOBALS['theme'];
-    }
-    elseif ($name == 'default') {
-      return variable_get('theme_default', 'stark');
-    }
-    elseif ($name == 'admin') {
-      return variable_get('admin_theme', variable_get('theme_default', 'stark'));
-    }
-    else {
-      return $name;
-    }
-  }
-
-  /**
-   * Implements abstract public function getDirectoryPath()
-   */
-  public function getDirectoryPath() {
-    return drupal_get_path('theme', $this->getSystemName());
-  }
-}
-
-/**
- * Stream wrapper for profile files using profile://.
- */
-class ProfileSystemStreamWrapper extends SystemStreamWrapper {
-
-  /**
-   * Override SystemSteamWrapper::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() {
-    // We cannot use drupal_get_path() here as it actually doesn't work if
-    // $type is 'profile'.
-    // @see http://drupal.org/node/1006714
-    if ($profile = $this->getSystemName()) {
-      return 'profiles/' . $profile;
-    }
-  }
-}
-
-/**
- * Stream wrapper for library files using library://.
- */
-class LibrarySystemStreamWrapper extends SystemStreamWrapper {
-
-  /**
-   * Implements abstract public function getDirectoryPath()
-   */
-  public function getDirectoryPath() {
-    if ($library = $this->getSystemName()) {
-      return libraries_get_path($library);
-    }
-  }
-}
diff --git a/lib/Drupal/system_stream_wrapper/LibrarySystemStreamWrapper.php b/lib/Drupal/system_stream_wrapper/LibrarySystemStreamWrapper.php
new file mode 100644
index 0000000..1965416
--- /dev/null
+++ b/lib/Drupal/system_stream_wrapper/LibrarySystemStreamWrapper.php
@@ -0,0 +1,25 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system_stream_wrapper\LibrarySystemStreamWrapper.
+ */
+
+namespace Drupal\system_stream_wrapper;
+
+use Drupal\system_stream_wrapper\SystemStreamWrapper;
+
+/**
+ * Stream wrapper for library files using library://.
+ */
+class LibrarySystemStreamWrapper extends SystemStreamWrapper {
+
+  /**
+   * Implements abstract public function getDirectoryPath()
+   */
+  public function getDirectoryPath() {
+    if ($library = $this->getSystemName()) {
+      return libraries_get_path($library);
+    }
+  }
+}
diff --git a/lib/Drupal/system_stream_wrapper/ModuleSystemStreamWrapper.php b/lib/Drupal/system_stream_wrapper/ModuleSystemStreamWrapper.php
new file mode 100644
index 0000000..5a7066a
--- /dev/null
+++ b/lib/Drupal/system_stream_wrapper/ModuleSystemStreamWrapper.php
@@ -0,0 +1,20 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system_stream_wrapper\ModuleSystemStreamWrapper.
+ */
+
+namespace Drupal\system_stream_wrapper;
+
+use Drupal\system_stream_wrapper\SystemStreamWrapper;
+
+class ModuleSystemStreamWrapper extends SystemStreamWrapper {
+
+  /**
+   * Implements abstract public function getDirectoryPath()
+   */
+  public function getDirectoryPath() {
+    return drupal_get_path('module', $this->getSystemName());
+  }
+}
diff --git a/lib/Drupal/system_stream_wrapper/ProfileSystemStreamWrapper.php b/lib/Drupal/system_stream_wrapper/ProfileSystemStreamWrapper.php
new file mode 100644
index 0000000..6ba69db
--- /dev/null
+++ b/lib/Drupal/system_stream_wrapper/ProfileSystemStreamWrapper.php
@@ -0,0 +1,41 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system_stream_wrapper\ProfileSystemStreamWrapper.
+ */
+
+namespace Drupal\system_stream_wrapper;
+
+use Drupal\system_stream_wrapper\SystemStreamWrapper;
+
+/**
+ * Stream wrapper for profile files using profile://.
+ */
+class ProfileSystemStreamWrapper extends SystemStreamWrapper {
+
+  /**
+   * Override SystemSteamWrapper::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() {
+    // We cannot use drupal_get_path() here as it actually doesn't work if
+    // $type is 'profile'.
+    // @see http://drupal.org/node/1006714
+    if ($profile = $this->getSystemName()) {
+      return 'profiles/' . $profile;
+    }
+  }
+}
diff --git a/lib/Drupal/system_stream_wrapper/SystemStreamWrapper.php b/lib/Drupal/system_stream_wrapper/SystemStreamWrapper.php
new file mode 100644
index 0000000..4637b29
--- /dev/null
+++ b/lib/Drupal/system_stream_wrapper/SystemStreamWrapper.php
@@ -0,0 +1,102 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system_stream_wrapper\SystemStreamWrapper.
+ */
+
+namespace Drupal\system_stream_wrapper;
+
+use Drupal\Core\StreamWrapper\LocalStream;
+
+/**
+ * Drupal system stream wrapper abstract class.
+ */
+abstract class SystemStreamWrapper extends LocalStream {
+
+  /**
+   * 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. This is always
+    // the first part of the path.
+    $target = explode('/', $target);
+    array_shift($target);
+    $target = implode('/', $target);
+
+    // Trim again.
+    $target = trim($target, '\/');
+    return $target;
+  }
+
+  /**
+   * Gets the path that the wrapper is responsible for.
+   *
+   * @return
+   *   String specifying the path.
+   */
+  //abstract public function getDirectoryPath();
+
+  /**
+   * 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);
+  }
+
+  /**
+   * DrupalStreamWrapperInterface requires that these methods be implemented,
+   * but none of them apply to a read-only stream wrapper. On failure they
+   * are expected to return FALSE.
+   */
+
+  public function stream_write($data) {
+    return FALSE;
+  }
+  public function unlink($uri) {
+    // Although the remote file itself can't be deleted, return TRUE so that
+    // file_delete() can remove the file record from the database.
+    return TRUE;
+  }
+  public function rename($from_uri, $to_uri) {
+    return FALSE;
+  }
+  public function mkdir($uri, $mode, $options) {
+    return FALSE;
+  }
+  public function rmdir($uri, $options) {
+    return FALSE;
+  }
+  public function chmod($mode) {
+    return FALSE;
+  }
+  public function dirname($uri = NULL) {
+    return FALSE;
+  }
+}
diff --git a/lib/Drupal/system_stream_wrapper/ThemeSystemStreamWrapper.php b/lib/Drupal/system_stream_wrapper/ThemeSystemStreamWrapper.php
new file mode 100644
index 0000000..49d0dde
--- /dev/null
+++ b/lib/Drupal/system_stream_wrapper/ThemeSystemStreamWrapper.php
@@ -0,0 +1,43 @@
+<?php
+
+/**
+ * @file
+ * Definition of Drupal\system_stream_wrapper\ThemeSystemStreamWrapper.
+ */
+
+namespace Drupal\system_stream_wrapper;
+use Drupal\system_stream_wrapper\SystemStreamWrapper;
+
+
+/**
+ * Stream wrapper for theme files using theme://.
+ */
+class ThemeSystemStreamWrapper extends SystemStreamWrapper {
+
+  /**
+   * Override SystemSteamWrapper::getSystemName() to support theme://current,
+   * theme://default, and theme://admin
+   */
+  protected function getSystemName($uri = NULL) {
+    $name = parent::getSystemName($uri);
+    if ($name == 'current') {
+      return $GLOBALS['theme'];
+    }
+    elseif ($name == 'default') {
+      return variable_get('theme_default', 'stark');
+    }
+    elseif ($name == 'admin') {
+      return variable_get('admin_theme', variable_get('theme_default', 'stark'));
+    }
+    else {
+      return $name;
+    }
+  }
+
+  /**
+   * Implements abstract public function getDirectoryPath()
+   */
+  public function getDirectoryPath() {
+    return drupal_get_path('theme', $this->getSystemName());
+  }
+}
diff --git a/system_stream_wrapper.info b/system_stream_wrapper.info
index 92348b3..7070dd9 100644
--- a/system_stream_wrapper.info
+++ b/system_stream_wrapper.info
@@ -1,4 +1,3 @@
 name = System stream wrapper
 description = Provides stream wrappers to access files in module, theme, profile, and library files and directories.
-core = 7.x
-files[] = SystemStreamWrapper.inc
+core = 8.x
diff --git a/system_stream_wrapper.module b/system_stream_wrapper.module
index 0f336a4..2f9b8b2 100644
--- a/system_stream_wrapper.module
+++ b/system_stream_wrapper.module
@@ -6,19 +6,19 @@
 function system_stream_wrapper_stream_wrappers() {
   $wrappers['module'] = array(
     'name' => t('Module files'),
-    'class' => 'ModuleSystemStreamWrapper',
+    'class' => 'Drupal\system_stream_wrapper\ModuleSystemStreamWrapper',
     'description' => t('Local module files.'),
     'type' => STREAM_WRAPPERS_READ,
   );
   $wrappers['theme'] = array(
     'name' => t('Theme files'),
-    'class' => 'ThemeSystemStreamWrapper',
+    'class' => 'Drupal\system_stream_wrapper\ThemeSystemStreamWrapper',
     'description' => t('Local theme files.'),
     'type' => STREAM_WRAPPERS_READ,
   );
   $wrappers['profile'] = array(
     'name' => t('Profile files'),
-    'class' => 'ProfileSystemStreamWrapper',
+    'class' => 'Drupal\system_stream_wrapper\ProfileSystemStreamWrapper',
     'description' => t('Local profile files.'),
     'type' => STREAM_WRAPPERS_READ,
   );
@@ -27,7 +27,7 @@ function system_stream_wrapper_stream_wrappers() {
   if (module_exists('libraries')) {
     $wrappers['library'] = array(
       'name' => t('Library files'),
-      'class' => 'LibrarySystemStreamWrapper',
+      'class' => 'Drupal\system_stream_wrapper\LibrarySystemStreamWrapper',
       'description' => t('Local library files.'),
       'type' => STREAM_WRAPPERS_READ,
     );
