diff --git a/drupalorg_drush.drush.inc b/drupalorg_drush.drush.inc
index 114fe79..5619584 100644
--- a/drupalorg_drush.drush.inc
+++ b/drupalorg_drush.drush.inc
@@ -86,19 +86,44 @@ function drupalorg_drush_make_options() {
 /**
  * Drush callback; verify a .make file is in a drupal.org friendly format.
  */
-function drush_drupalorg_drush_verify_makefile($makefile) {
+function drush_drupalorg_drush_verify_makefile($makefile = '') {
   // If --version option is supplied, print make's version and bail.
   if (drush_get_option('version', FALSE)) {
     return drush_make();
   }
 
-  // Force the --drupal-org option, it's required to trigger the drupal.org
-  // specific validation.
-  drush_set_option('drupal-org', TRUE);
-  $info = make_validate_info_file(make_parse_info_file($makefile));
-  $errors = drush_get_error();
-  if (empty($errors)) {
-    drush_log(dt('Makefile @makefile passed.', array('@makefile' => $makefile)), 'ok');
+  // Figure out what file(s) to process and what validation rules to use.
+  $makefiles = array();
+  if (!empty($makefile)) {
+    $makefiles[$makefile] = drush_get_option('drupal-org', 'contrib');
+  }
+  else {
+    if (file_exists('drupal-org.make')) {
+      $makefiles['drupal-org.make'] = 'contrib';
+    }
+    if (file_exists('drupal-org-core.make')) {
+      $makefiles['drupal-org-core.make'] = 'core';
+    }
+  }
+  if (empty($makefiles)) {
+    make_error('FILE_ERROR', dt('You must either specify a .make filename as an argument or have a drupal-org.make and/or drupal-org-core.make file in the current directory.'));
+    return FALSE;
+  }
+
+  $core_version = NULL;
+  foreach ($makefiles as $filename => $validation_type) {
+    drush_set_option('drupal-org', $validation_type);
+    $info = make_validate_info_file(make_parse_info_file($filename));
+    if (empty($core_version)) {
+      $core_version = $info['core'];
+    }
+    if ($core_version != $info['core']) {
+      make_error('BUILD_ERROR', dt("The 'core' attribute must be the same in both drupal-org.make and drupal-org-core.make."));
+    }
+    $errors = drush_get_error();
+    if (empty($errors)) {
+      drush_log(dt('Makefile @makefile passed.', array('@makefile' => $filename)), 'ok');
+    }
   }
 }
 
@@ -127,14 +152,17 @@ function drush_drupalorg_drush_convert_makefile($from, $to = NULL) {
 function drupalorg_drush_drush_init() {
   $release_info = drush_get_option('release-info', 'updatexml');
   drush_include_engine('release_info', $release_info);
-  if (drush_get_option('drupal-org')) {
+  $drupal_org = drush_get_option('drupal-org');
+  if (!empty($drupal_org)) {
     // The --drupal-org switch implies these defaults:
     // Location to put our custom build files.
     drush_set_default('drupal-org-build-root', '.');
     // The destination of the downloaded contrib projects.
     drush_set_default('contrib-destination', '.');
-    // Whether to allow a build without core.
-    drush_set_default('no-core', TRUE);
+    if ($drupal_org !== 'core') {
+      // Whether to allow a build without core.
+      drush_set_default('no-core', TRUE);
+    }
 
     // Optionally set up a custom error logger.
     if (drush_get_option('drupal-org-log-errors-to-file')) {
@@ -163,8 +191,11 @@ function drupalorg_drush_drush_init() {
  * Implement EXTENSION_make_validate_info().
  */
 function drupalorg_drush_make_validate_info($info) {
-  if (drush_get_option('drupal-org')) {
+  $drupal_org = drush_get_option('drupal-org');
+  if (!empty($drupal_org)) {
     drush_log(dt("Starting drupal.org makefile validation"), 'debug');
+    // First, define common transformers shared by both 'core' and 'contrib'
+    // validation.
     $transformers = array(
       'top' => array(
         'DrushMakeDo_TopWhitelist',
@@ -178,6 +209,14 @@ function drupalorg_drush_make_validate_info($info) {
         'DrushMakeDo_ProjectPatch',
       ),
     );
+    
+
+    if ($drupal_org === 'core') {
+
+    }
+    // If --drupal-org is defined but has no value, assume 'contrib'.
+    else {
+    }
     $pass = TRUE;
     foreach ($transformers['top'] as $transformer) {
       drush_log(dt("Running transformer !transformer on .make file", array('!transformer' => $transformer)), 'debug');
@@ -189,6 +228,18 @@ function drupalorg_drush_make_validate_info($info) {
 
     if (!empty($info['projects'])) {
       foreach ($info['projects'] as $project => $project_data) {
+        if ($drupal_org === 'core') {
+          if ($project != 'drupal') {
+            make_error('BUILD_ERROR', dt("Project %project is not allowed for a core-only .make file.", array('%project' => $project)));
+            $pass = FALSE;
+          }
+        }
+        else {
+          if ($project == 'drupal') {
+            make_error('BUILD_ERROR', dt("The Drupal core project is not allowed in a regular drupal-org.make file."));
+            $pass = FALSE;
+          }
+        }
         foreach ($transformers['project'] as $transformer) {
           drush_log(dt("Running transformer !transformer on .make file for project !project", array('!transformer' => $transformer, '!project' => $project)), 'debug');
           $object = new $transformer('make');
@@ -196,34 +247,37 @@ function drupalorg_drush_make_validate_info($info) {
             $pass = FALSE;
           }
         }
-        // Record metadata about this project (if we care). Since --no-core is
-        // always set, we need to skip recording the 'drupal' project itself.
-        if ($project != 'drupal') {
-          drupalorg_drush_record_project_metadata($project, $project_data, $info['core']);
-        }
+        // Record metadata about this project (if we care).
+        drupalorg_drush_record_project_metadata($project, $project_data, $info['core']);
         // Save all the changes back into the $info array for this project.
         $info['projects'][$project] = $project_data;
       }
     }
 
     if (!empty($info['libraries'])) {
-      $library_transformer = new DrushMakeDo_LibraryWhitelist('make');
-      if ($library_transformer->whitelist_loaded()) {
-        foreach ($info['libraries'] as $library => $library_data) {
-          drush_log(dt("Running transformer DrushMakeDo_LibraryWhitelist on .make file for library !library", array('!library' => $library)), 'debug');
-          if ($library_transformer->verify($library_data, $library)) {
-            if (drupalorg_drush_metadata_file()) {
-              drupalorg_drush_metadata('library', $library, drupalorg_drush_get_library_metadata($library_data));
+      if ($drupal_org === 'core') {
+        make_error('BUILD_ERROR', dt('Defining libraries in a drupal-org-core.make file is not permitted.'));
+        $pass = FALSE;
+      }
+      else {
+        $library_transformer = new DrushMakeDo_LibraryWhitelist('make');
+        if ($library_transformer->whitelist_loaded()) {
+          foreach ($info['libraries'] as $library => $library_data) {
+            drush_log(dt("Running transformer DrushMakeDo_LibraryWhitelist on .make file for library !library", array('!library' => $library)), 'debug');
+            if ($library_transformer->verify($library_data, $library)) {
+              if (drupalorg_drush_metadata_file()) {
+                drupalorg_drush_metadata('library', $library, drupalorg_drush_get_library_metadata($library_data));
+              }
             }
+            else {
+              $pass = FALSE;
+            }
+            $info['libraries'][$library] = $library_data;
           }
-          else {
-            $pass = FALSE;
-          }
-          $info['libraries'][$library] = $library_data;
         }
-      }
-      else {
-        $pass = FALSE;
+        else {
+          $pass = FALSE;
+        }
       }
     }
 
