diff --git a/core/lib/Drupal/Core/Extension/ExtensionBase.php b/core/lib/Drupal/Core/Extension/ExtensionBase.php
new file mode 100644
index 0000000..e8a1b5f
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/ExtensionBase.php
@@ -0,0 +1,80 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Extension\ExtensionBase
+ */
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Defines a base class for Drupal extensions.
+ */
+class ExtensionBase implements ExtensionInterface {
+
+  /**
+   * The name of the extension for display purposes.
+   *
+   * @var string
+   */
+  protected $name;
+
+  /**
+   * A brief description of the extension.
+   *
+   * @var string
+   */
+  protected $description;
+
+  /**
+   * The array of this extension info as parsed by the .info.yml file.
+   *
+   * @var array
+   *
+   * @see drupal_parse_info_file()
+   */
+  protected $info;
+
+  /**
+   * Constructs an ExtensionBase class.
+   *
+   * @param array $info
+   *   An array of data from the parsed .info.yml file.
+   *    - name: The name of the extension for display purposes.
+   *    - description: A brief description of the extension.
+   *    - package: The name of the package this extension belongs to.
+   *
+   * @see drupal_parse_info_file()
+   */
+  public function __construct(array $info) {
+    $this->name = $info['name'];
+    $this->description = $info['description'];
+    $this->package = $info['package'];
+    $this->info = $info;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getInfo($key = NULL) {
+    if ($key !== NULL) {
+      return isset($this->info[$key]) ? $this->info[$key] : NULL;
+    }
+    return $this->info;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getName() {
+    return $this->name;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return $this->description;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Extension/ExtensionInterface.php b/core/lib/Drupal/Core/Extension/ExtensionInterface.php
new file mode 100644
index 0000000..10b5ab7
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/ExtensionInterface.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Extension\ExtensionInterface.
+ */
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Common interface for extension classes.
+ */
+interface ExtensionInterface {
+
+  /**
+   * Retrieves this extension's name.
+   *
+   * @return string
+   *   The extension's name.
+   */
+  public function getName()
+
+  /**
+   * Retrieves this extension's type.
+   *
+   * @return string
+   *   The extension's type.
+   */
+  public function getType();
+
+  /**
+   * Retrieves this extension's version.
+   *
+   * @return string
+   *   The extension's version.
+   */
+  public function getVersion();
+
+  /**
+   * Retrieves this extension's description.
+   *
+   * @return string|null
+   *   The extension's description if available. NULL otherwise.
+   */
+  public function getDescription();
+
+  /**
+   * Retrieves this extension's info.
+   *
+   * @param string $key
+   *   (optional) Specify a key to retrieve a specific value. Available keys
+   *   vary between extensions. See drupal_parse_info_file() for more info.
+   *
+   * @return mixed
+   *   If no key is specified, all available extension info are returned.
+   *   If a key is specified but information does not exist NULL is returned.
+   */
+  public function getInfo($key = NULL);
+
+}
diff --git a/core/lib/Drupal/Core/Extension/Module.php b/core/lib/Drupal/Core/Extension/Module.php
new file mode 100644
index 0000000..4c77b54
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/Module.php
@@ -0,0 +1,55 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Extension\Module
+ */
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Defines a module extension class.
+ */
+class Module implements ModuleInterface {
+
+  /**
+   * An array of names of other modules this module requires.
+   *
+   * @var array
+   */
+  protected $dependencies = array();
+
+  /**
+   * Constructs a Module class.
+   *
+   * @param array $info
+   *   An array of data from the parsed .info.yml file.
+   *    - name: The real name of the module for display purposes.
+   *    - description: A brief description of the module.
+   *    - dependencies: An array of names of other modules this module requires.
+   *    - package: The name of the package of modules this module belongs to.
+   *
+   * @see drupal_parse_info_file()
+   */
+  public function __construct(array $info) {
+    parent::__construct($info);
+    if (isset($info['dependencies'])) {
+      $this->dependencies = $info['dependencies'];
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getType() {
+    return 'module';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDependencies() {
+    return $this->dependencies;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Extension/ModuleInterface.php b/core/lib/Drupal/Core/Extension/ModuleInterface.php
new file mode 100644
index 0000000..77c6afd
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/ModuleInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Extension\ModuleInterface.
+ */
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Common interface for module extension classes.
+ */
+interface ModuleInterface extends ExtensionInterface {
+
+  /**
+   * Retrieves this module's dependencies.
+   *
+   * @return array
+   *   An array containing dependant module names.
+   */
+  public function getDependencies();
+
+}
diff --git a/core/lib/Drupal/Core/Extension/Profile.php b/core/lib/Drupal/Core/Extension/Profile.php
new file mode 100644
index 0000000..ed7deff
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/Profile.php
@@ -0,0 +1,17 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Extension\Profile
+ */
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Defines a profile extension class.
+ *
+ * Profiles are actually modules, so just extend the Module class.
+ */
+class Profile extends Module {
+
+}
diff --git a/core/lib/Drupal/Core/Extension/Theme.php b/core/lib/Drupal/Core/Extension/Theme.php
new file mode 100644
index 0000000..77db8b0
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/Theme.php
@@ -0,0 +1,60 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Extension\Theme
+ */
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Defines a theme extension class.
+ */
+class Theme implements ModuleInterface {
+
+  /**
+   * Name of a base theme, if applicable.
+   *
+   * @var string
+   */
+  protected $baseTheme = NULL;
+
+  /**
+   * Constructs a Theme class.
+   *
+   * @param array $info
+   *   An array of data from the parsed .info.yml file.
+   *    - name: The real name of the theme for display purposes.
+   *    - description: Brief description.
+   *    - screenshot: Path to screenshot relative to the theme's .info.yml file.
+   *    - engine: Theme engine; typically twig.
+   *    - base theme: Name of a base theme, if applicable.
+   *    - regions: Listed regions.
+   *    - features: Features available.
+   *    - stylesheets: Theme stylesheets.
+   *    - scripts: Theme scripts.
+   *
+   * @see drupal_parse_info_file()
+   */
+  public function __construct(array $info) {
+    parent::__construct($info);
+    if (isset($info['base theme'])) {
+      $this->baseTheme = $info['base theme'];
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getType() {
+    return 'theme';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getBaseTheme() {
+    return $this->baseTheme;
+  }
+
+}
diff --git a/core/lib/Drupal/Core/Extension/ThemeInterface.php b/core/lib/Drupal/Core/Extension/ThemeInterface.php
new file mode 100644
index 0000000..011032c
--- /dev/null
+++ b/core/lib/Drupal/Core/Extension/ThemeInterface.php
@@ -0,0 +1,23 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\Core\Extension\ThemeInterface.
+ */
+
+namespace Drupal\Core\Extension;
+
+/**
+ * Common interface for theme extension classes.
+ */
+interface ThemeInterface extends ExtensionInterface {
+
+  /**
+   * Retrieves this theme's base theme name.
+   *
+   * @return string|null
+   *   The base theme name, if there is one. NULL otherwise.
+   */
+  public function getBaseTheme();
+
+}
