diff --git a/commands/pm/pm.drush.inc b/commands/pm/pm.drush.inc
index ed3e972..633c5d0 100644
--- a/commands/pm/pm.drush.inc
+++ b/commands/pm/pm.drush.inc
@@ -165,6 +165,7 @@ function pm_drush_command() {
     'options' => array(
       'pipe' => 'Returns a space delimited list of projects with any of its extensions enabled and their respective version and update information, one project per line. Order: project name, current version, recommended version, update status.',
       'notes' => 'Show release notes for each project to be updated.',
+      'no-core' => 'Only update modules and skip the core update.',
     ) + $update_options,
     'sub-options' => $update_suboptions,
     'aliases' => array('upc'),
diff --git a/commands/pm/updatecode.pm.inc b/commands/pm/updatecode.pm.inc
index 9a29234..9525900 100644
--- a/commands/pm/updatecode.pm.inc
+++ b/commands/pm/updatecode.pm.inc
@@ -184,7 +184,12 @@ function drush_pm_updatecode() {
       else {
         drush_print(dt("NOTE: A code update for the Drupal core is available."));
       }
-      drush_print(dt("Drupal core will be updated after all of the non-core modules are updated.\n"));
+      if (drush_get_option('no-core', FALSE)) {
+        drush_print(dt('Skipping core update (--no-core specified).'));
+      }
+      else {
+        drush_print(dt("Drupal core will be updated after all of the non-core modules are updated.\n"));  
+      } 
     }
   }
 
@@ -209,7 +214,7 @@ function drush_pm_updatecode() {
   }
 
   // After projects are updated we can update core.
-  if ($core_update_available) {
+  if ($core_update_available && !drush_get_option('no-core', FALSE)) {
     drush_print();
     return _pm_update_core($drupal_project, $tmpfile);
   }
diff --git a/commands/pm/version_control/backup.inc b/commands/pm/version_control/backup.inc
index d46d490..1bcf4a5 100644
--- a/commands/pm/version_control/backup.inc
+++ b/commands/pm/version_control/backup.inc
@@ -43,7 +43,7 @@ class drush_pm_version_control_backup implements drush_pm_version_control {
     if (drush_get_option('no-backup', FALSE)) {
       return;
     }
-    if (drush_move_dir($project['backup_target'], $project['full_project_path'])) {
+    if (drush_move_dir($project['backup_target'], $project['full_project_path'], TRUE)) {
       return drush_log(dt("Backups were restored successfully."), 'ok');
     }
     return drush_set_error('DRUSH_PM_BACKUP_ROLLBACK_FAILED', dt('Could not restore backup and rollback from failed upgrade. You will need to resolve manually.'));
