diff --git a/drush_make.drush.inc b/drush_make.drush.inc
index 169269a..7673514 100644
--- a/drush_make.drush.inc
+++ b/drush_make.drush.inc
@@ -171,6 +171,7 @@ function drush_make_projects($recursion, $contrib_destination, $info, $build_pat
       'location'            => drush_get_option('drush-make-update-default-url'),
       'subdir'              => '',
       'directory_name'      => '',
+      'options'             => array(),
     );
     if ($project['location'] != 'http://updates.drupal.org/release-history' && !isset($project['type'])) {
       $project = drush_make_updatexml($project);
diff --git a/drush_make.project.inc b/drush_make.project.inc
index c82d823..5b5c705 100644
--- a/drush_make.project.inc
+++ b/drush_make.project.inc
@@ -301,15 +301,27 @@ class DrushMakeProject {
     }
     drush_log(dt("Found makefile: %makefile", array("%makefile" => basename($makefile))), 'ok');
 
-    $info = drush_make_parse_info_file($makefile);
+    // Save the original state of the 'custom' context
+    $custom_context =& drush_get_context('custom');
+    $original_custom_context_values = $custom_context;
+
+    $info = drush_make_parse_info_file($makefile, TRUE, $this->options);
     if (!($info = drush_make_validate_info_file($info))) {
-      return FALSE;
+      $result = FALSE;
     }
-    $build_path = $this->buildPath($this->name);
-    drush_make_projects(TRUE, trim($build_path, '/'), $info, $this->build_path);
-    drush_make_libraries(trim($build_path, '/'), $info, $this->build_path);
+    else {
+      $build_path = $this->buildPath($this->name);
+      drush_make_projects(TRUE, trim($build_path, '/'), $info, $this->build_path);
+      drush_make_libraries(trim($build_path, '/'), $info, $this->build_path);
 
-    return TRUE;
+      $result = TRUE;
+    }
+
+    // Restore original 'custom' context so that any
+    // settings changes made 
+    $custom_context = $original_custom_context_values;
+
+    return $result;
   }
 }
 
diff --git a/drush_make.utilities.inc b/drush_make.utilities.inc
index a944b23..af64c48 100644
--- a/drush_make.utilities.inc
+++ b/drush_make.utilities.inc
@@ -19,13 +19,34 @@ function drush_make_ensure_version() {
  *
  * @see drupal_parse_info_file
  */
-function drush_make_parse_info_file($makefile, $parsed = TRUE) {
+function drush_make_parse_info_file($makefile, $parsed = TRUE, $makefile_options = array()) {
   if (!($data = drush_make_get_data($makefile))) {
     return drush_set_error(dt('Invalid or empty make file: %makefile', array('%makefile' => $makefile)));
   }
   if (!($info = _drush_make_parse_info_file($data))) {
     return FALSE;
   }
+  // $makefile_options are from projects[projectname][options][...] = value in the makefile that included us,
+  // whereas $info['options'] is from options[...] = value in this makefile.
+  $makefile_options = array_merge($makefile_options, empty($info['options']) ? array() : $info['options']);
+  if(!empty($makefile_options)) {
+    $allow_override = drush_get_option('allow-override', 'all');
+    if ($allow_override != 'none') {
+      if ($allow_override == 'all') {
+        $allow_override = array();
+      }
+      if (!is_array($allow_override)) {
+        $allow_override = explode(',', $allow_override);
+      }
+      foreach( $makefile_options as $key => $value) {
+        if((empty($allow_override)) || (in_array($key, $allow_override))) {
+          // n.b. 'custom' context has lower priority than 'cli', so
+          // options entered on the command line will "mask" makefile options.
+          drush_set_option($key, $value, 'custom');
+        }
+      }
+    }
+  }
   if (!empty($info['includes'])) {
     $include_path = dirname($makefile);
     $includes = array();
