diff --git a/composer.json b/composer.json
index 722f1faa6194115f988e388f41234ad7ab41e78e..8f68f6c022532af4c3887a129f91a0bcff0844c2 100644
--- a/composer.json
+++ b/composer.json
@@ -1,48 +1,24 @@
 {
   "name": "drupal/drupal",
   "description": "Drupal is an open source content management platform powering millions of websites and applications.",
-  "type": "drupal-core",
+  "type": "project",
   "license": "GPL-2.0+",
   "require": {
-    "php": ">=5.4.5",
-    "sdboyer/gliph": "0.1.*",
-    "symfony/class-loader": "2.6.*",
-    "symfony/css-selector": "2.6.*",
-    "symfony/dependency-injection": "2.6.*",
-    "symfony/event-dispatcher": "2.6.*",
-    "symfony/http-foundation": "2.6.*",
-    "symfony/http-kernel": "2.6.*",
-    "symfony/routing": "2.6.*",
-    "symfony/serializer": "2.6.*",
-    "symfony/validator": "2.6.*",
-    "symfony/process": "2.6.*",
-    "symfony/yaml": "2.6.*",
-    "twig/twig": "1.16.*",
-    "doctrine/common": "dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5",
-    "doctrine/annotations": "1.2.*",
-    "guzzlehttp/guzzle": "~5.0",
-    "symfony-cmf/routing": "1.3.*",
-    "easyrdf/easyrdf": "0.9.*",
-    "phpunit/phpunit": "4.1.*",
-    "phpunit/phpunit-mock-objects": "dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
-    "zendframework/zend-feed": "2.3.*",
-    "mikey179/vfsStream": "1.*",
-    "stack/builder": "1.0.*",
-    "egulias/email-validator": "1.2.*"
-  },
-  "autoload": {
-    "psr-4": {
-      "Drupal\\Core\\": "core/lib/Drupal/Core",
-      "Drupal\\Component\\": "core/lib/Drupal/Component",
-      "Drupal\\Driver\\": "drivers/lib/Drupal/Driver"
-    },
-    "files": [
-      "core/lib/Drupal.php"
-    ]
+    "drupal/core": "~8.0"
   },
+  "minimum-stability": "dev",
+  "prefer-stable": true,
+  "repositories": [],
   "config": {
-    "vendor-dir": "core/vendor",
     "preferred-install": "dist",
     "autoloader-suffix": "Drupal8"
+  },
+  "extra": {
+    "_readme": [
+      "This is an example file to show how a Drupal website can be managed via",
+      "Composer. It does not work out of the box but requires a Git subtree",
+      "split of the core directory to be added to the repositories",
+      "section above."
+    ]
   }
 }
diff --git a/core/UPGRADE.txt b/core/UPGRADE.txt
index 7c43bbca8ce1350854bc0a06c97ef78f43bea4cb..9b834565c697a1b53afc12c01b2d482f2e007fe0 100644
--- a/core/UPGRADE.txt
+++ b/core/UPGRADE.txt
@@ -58,8 +58,9 @@ following the instructions in the INTRODUCTION section at the top of this file:
 3. Remove all old core files and directories, except for the 'sites' directory
    and any custom files you added elsewhere.
 
-   If you made modifications to files like .htaccess or robots.txt, you will
-   need to re-apply them from your backup, after the new files are in place.
+   If you made modifications to files like .htaccess, composer.json, or
+   robots.txt you will need to re-apply them from your backup, after the new
+   files are in place.
 
    Sometimes an update includes changes to default.settings.php (this will be
    noted in the release notes). If that's the case, follow these steps:
@@ -93,7 +94,8 @@ following the instructions in the INTRODUCTION section at the top of this file:
    from http://drupal.org using your web browser, extract it, and then use an
    FTP client to upload the files to your web root.
 
-5. Re-apply any modifications to files such as .htaccess or robots.txt.
+5. Re-apply any modifications to files such as .htaccess, composer.json, or
+   robots.txt.
 
 6. Run update.php by visiting http://www.example.com/update.php (replace
    www.example.com with your domain name). This will update the core database
diff --git a/core/composer.json b/core/composer.json
new file mode 100644
index 0000000000000000000000000000000000000000..4c2e76fe003ed26cfd0a553345be9b8d36e31e1a
--- /dev/null
+++ b/core/composer.json
@@ -0,0 +1,47 @@
+{
+  "name": "drupal/core",
+  "description": "Drupal is an open source content management platform powering millions of websites and applications.",
+  "type": "drupal-core",
+  "license": "GPL-2.0+",
+  "require": {
+    "php": ">=5.4.5",
+    "sdboyer/gliph": "0.1.*",
+    "symfony/class-loader": "2.6.*",
+    "symfony/css-selector": "2.6.*",
+    "symfony/dependency-injection": "2.6.*",
+    "symfony/event-dispatcher": "2.6.*",
+    "symfony/http-foundation": "2.6.*",
+    "symfony/http-kernel": "2.6.*",
+    "symfony/routing": "2.6.*",
+    "symfony/serializer": "2.6.*",
+    "symfony/validator": "2.6.*",
+    "symfony/process": "2.6.*",
+    "symfony/yaml": "2.6.*",
+    "twig/twig": "1.16.*",
+    "doctrine/common": "dev-master#a45d110f71c323e29f41eb0696fa230e3fa1b1b5",
+    "doctrine/annotations": "1.2.*",
+    "guzzlehttp/guzzle": "~5.0",
+    "symfony-cmf/routing": "1.3.*",
+    "easyrdf/easyrdf": "0.9.*",
+    "phpunit/phpunit": "4.1.*",
+    "phpunit/phpunit-mock-objects": "dev-master#e60bb929c50ae4237aaf680a4f6773f4ee17f0a2",
+    "zendframework/zend-feed": "2.3.*",
+    "mikey179/vfsStream": "1.*",
+    "stack/builder": "1.0.*",
+    "egulias/email-validator": "1.2.*"
+  },
+  "autoload": {
+    "psr-4": {
+      "Drupal\\Core\\": "lib/Drupal/Core",
+      "Drupal\\Component\\": "lib/Drupal/Component",
+      "Drupal\\Driver\\": "../drivers/lib/Drupal/Driver"
+    },
+    "files": [
+      "lib/Drupal.php"
+    ]
+  },
+  "config": {
+    "preferred-install": "dist",
+    "autoloader-suffix": "Drupal8"
+  }
+}
diff --git a/composer.lock b/core/composer.lock
similarity index 100%
rename from composer.lock
rename to core/composer.lock
diff --git a/core/vendor/composer/autoload_classmap.php b/core/vendor/composer/autoload_classmap.php
index 670145c037f577e50ab0ef45caddcabb788f2c2d..9f66986c9cf5b6db905add7de1bfc67c260f9200 100644
--- a/core/vendor/composer/autoload_classmap.php
+++ b/core/vendor/composer/autoload_classmap.php
@@ -3,7 +3,7 @@
 // autoload_classmap.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     'File_Iterator' => $vendorDir . '/phpunit/php-file-iterator/File/Iterator.php',
diff --git a/core/vendor/composer/autoload_files.php b/core/vendor/composer/autoload_files.php
index de3bf98e84019ddb6e61333503534cabb1cfb3e8..c85d22cbdb208093fcdffacbfbd0bd88224aa179 100644
--- a/core/vendor/composer/autoload_files.php
+++ b/core/vendor/composer/autoload_files.php
@@ -3,9 +3,9 @@
 // autoload_files.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     $vendorDir . '/react/promise/src/functions.php',
-    $baseDir . '/core/lib/Drupal.php',
+    $baseDir . '/lib/Drupal.php',
 );
diff --git a/core/vendor/composer/autoload_namespaces.php b/core/vendor/composer/autoload_namespaces.php
index 54e2998cc44cc37844dae599815aa74afaea8ded..ffe0cd5b9f9f2621297a9c06cc009d3283ffcc45 100644
--- a/core/vendor/composer/autoload_namespaces.php
+++ b/core/vendor/composer/autoload_namespaces.php
@@ -3,7 +3,7 @@
 // autoload_namespaces.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     'org\\bovigo\\vfs\\' => array($vendorDir . '/mikey179/vfsStream/src/main/php'),
diff --git a/core/vendor/composer/autoload_psr4.php b/core/vendor/composer/autoload_psr4.php
index 1b053f1695a7ba6f2e2ea40aa070f650138a90af..8b6150bd3acb1842e73f375fc76b021e5667f777 100644
--- a/core/vendor/composer/autoload_psr4.php
+++ b/core/vendor/composer/autoload_psr4.php
@@ -3,7 +3,7 @@
 // autoload_psr4.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     'Symfony\\Cmf\\Component\\Routing\\' => array($vendorDir . '/symfony-cmf/routing'),
@@ -11,7 +11,7 @@
     'GuzzleHttp\\Stream\\' => array($vendorDir . '/guzzlehttp/streams/src'),
     'GuzzleHttp\\Ring\\' => array($vendorDir . '/guzzlehttp/ringphp/src'),
     'GuzzleHttp\\' => array($vendorDir . '/guzzlehttp/guzzle/src'),
-    'Drupal\\Driver\\' => array($baseDir . '/drivers/lib/Drupal/Driver'),
-    'Drupal\\Core\\' => array($baseDir . '/core/lib/Drupal/Core'),
-    'Drupal\\Component\\' => array($baseDir . '/core/lib/Drupal/Component'),
+    'Drupal\\Driver\\' => array($baseDir . '/../drivers/lib/Drupal/Driver'),
+    'Drupal\\Core\\' => array($baseDir . '/lib/Drupal/Core'),
+    'Drupal\\Component\\' => array($baseDir . '/lib/Drupal/Component'),
 );
diff --git a/core/vendor/composer/include_paths.php b/core/vendor/composer/include_paths.php
index b43900abbddcc5b23b7ca54e4204addee88d5888..b3ec291e3e3088968c7837366ef9787f34d69b33 100644
--- a/core/vendor/composer/include_paths.php
+++ b/core/vendor/composer/include_paths.php
@@ -3,7 +3,7 @@
 // include_paths.php @generated by Composer
 
 $vendorDir = dirname(dirname(__FILE__));
-$baseDir = dirname(dirname($vendorDir));
+$baseDir = dirname($vendorDir);
 
 return array(
     $vendorDir . '/phpunit/php-text-template',
diff --git a/example.gitignore b/example.gitignore
index e6c22130f03091a89812662b876e01bd9eab3218..e2f0124547ca498a63559956432b5897e6e290ff 100644
--- a/example.gitignore
+++ b/example.gitignore
@@ -7,6 +7,10 @@
 # Because .gitignore can be specific to your site, this file has a different
 # name; updating Drupal core will not override your custom .gitignore file.
 
+# Ignore core and vendor when managing dependencies with Composer.
+# core
+# vendor
+
 # Ignore configuration files that may contain sensitive information.
 sites/*/settings*.php
 sites/*/services*.yml