diff --git a/drush/provision_civicrm.inc b/drush/provision_civicrm.inc
index 763af5b..1da2832 100644
--- a/drush/provision_civicrm.inc
+++ b/drush/provision_civicrm.inc
@@ -649,6 +649,29 @@ function _provision_civicrm_upgradedb() {
   drush_log(dt("CiviCRM: finished _provision_civicrm_upgradedb()"));
 }
 
+function _provision_civicrm_get_url_settings() {
+  return array(
+    'userFrameworkResourceURL',
+    'imageUploadURL',
+    'customCSSURL',
+    'extensionsURL',
+  );
+}
+
+/**
+ * @return array
+ */
+function _provision_civicrm_get_path_settings() {
+  return array(
+    'uploadDir',
+    'imageUploadDir',
+    'customFileUploadDir',
+    'customTemplateDir',
+    'customPHPPathDir',
+    'extensionsDir',
+  );
+}
+
 /**
  * EXPERIMENTAL AND EVIL: forking the code from civicrm_update_config()
  * and CRM/Core/BAO/Setting.php doSiteMove() because doSiteMove() in
@@ -691,95 +714,24 @@ function _provision_civicrm_do_site_move($defaultValues = array()) {
 
   $moveStatus = ts('Beginning site move process...') . '<br />';
 
-  // get the current and guessed values
-  list($oldURL, $oldDir, $oldSiteName, $oldSiteRoot) = provision_civicrm_get_config_settings();
-  list($newURL, $newDir, $newSiteName, $newSiteRoot) = provision_civicrm_get_best_guess_settings();
-
-  require_once 'CRM/Utils/Request.php';
-
-  // retrieve these values from the argument list
-  $variables = array( 'URL', 'Dir', 'SiteName', 'SiteRoot', 'Val_1', 'Val_2', 'Val_3' );
-  $states     = array( 'old', 'new' );
-  foreach ( $variables as $varSuffix ) {
-      foreach ( $states as $state ) {
-          $var = "{$state}{$varSuffix}";
-          if ( ! isset( $$var ) ) {
-              if ( isset( $defaultValues[$var] ) ) {
-                  $$var = $defaultValues[$var];
-              } else {
-                  $$var = null;
-              }
+  require_once 'Civi.php';
+  $settings = Civi::settings();
+
+  foreach (array_merge(_provision_civicrm_get_path_settings(), _provision_civicrm_get_url_settings()) as $key) {
+    $value = $settings->get($key);
+    if ($value && $value != $settings->getDefault($key)) {
+      if ($settings->getMandatory($key) === NULL) {
+        $settings->revert($key);
+        $moveStatus .= ts("WARNING: The setting (%1) has been reverted.", array(
+          1 => $key,
+        ));
+        $moveStatus .= '<br />';
           }
-          $$var = CRM_Utils_Request::retrieve( $var,
-                                               'String',
-                                               CRM_Core_DAO::$_nullArray,
-                                               false,
-                                               $$var,
-                                               'REQUEST' );
-      }
-  }
-
-  $from = $to = array( );
-  foreach ( $variables as $varSuffix ) {
-      $oldVar = "old{$varSuffix}";
-      $newVar = "new{$varSuffix}";
-      //skip it if either is empty or both are exactly the same
-      if ( $$oldVar &&
-           $$newVar &&
-           $$oldVar != $$newVar ) {
-          $from[]  = $$oldVar;
-          $to[]    = $$newVar;
-      }
-  }
-
-  $sql = "
-SELECT config_backend
-FROM   civicrm_domain
-WHERE  id = %1
-";
-  $params = array( 1 => array( CRM_Core_Config::domainID( ), 'Integer' ) );
-  $configBackend = CRM_Core_DAO::singleValueQuery( $sql, $params );
-  if ( ! $configBackend ) {
-      CRM_Core_Error::fatal( ts('Returning early due to unexpected error - civicrm_domain.config_backend column value is NULL. Try visiting CiviCRM Home page.') );
-  }
-  $configBackend = unserialize( $configBackend );
-
-  $configBackend = str_replace( $from,
-                                $to  ,
-                                $configBackend );
-
-  $configBackend = serialize( $configBackend );
-  $sql = "
-UPDATE civicrm_domain
diff --git a/drush/provision_civicrm.inc b/drush/provision_civicrm.inc
index 763af5b..1da2832 100644
--- a/drush/provision_civicrm.inc
+++ b/drush/provision_civicrm.inc
@@ -649,6 +649,29 @@ function _provision_civicrm_upgradedb() {
   drush_log(dt("CiviCRM: finished _provision_civicrm_upgradedb()"));
 }
 
diff --git a/drush/provision_civicrm.inc b/drush/provision_civicrm.inc
index 763af5b..1da2832 100644
--- a/drush/provision_civicrm.inc
+++ b/drush/provision_civicrm.inc
@@ -649,6 +649,29 @@ function _provision_civicrm_upgradedb() {
   drush_log(dt("CiviCRM: finished _provision_civicrm_upgradedb()"));
 }
 
+function _provision_civicrm_get_url_settings() {
+  return array(
+    'userFrameworkResourceURL',
+    'imageUploadURL',
+    'customCSSURL',
+    'extensionsURL',
+  );
+}
+
+/**
+ * @return array
+ */
+function _provision_civicrm_get_path_settings() {
+  return array(
+    'uploadDir',
+    'imageUploadDir',
+    'customFileUploadDir',
+    'customTemplateDir',
+    'customPHPPathDir',
+    'extensionsDir',
+  );
+}
+
 /**
  * EXPERIMENTAL AND EVIL: forking the code from civicrm_update_config()
  * and CRM/Core/BAO/Setting.php doSiteMove() because doSiteMove() in
@@ -691,95 +714,24 @@ function _provision_civicrm_do_site_move($defaultValues = array()) {
 
   $moveStatus = ts('Beginning site move process...') . '<br />';
 
-  // get the current and guessed values
-  list($oldURL, $oldDir, $oldSiteName, $oldSiteRoot) = provision_civicrm_get_config_settings();
-  list($newURL, $newDir, $newSiteName, $newSiteRoot) = provision_civicrm_get_best_guess_settings();
-
-  require_once 'CRM/Utils/Request.php';
-
-  // retrieve these values from the argument list
-  $variables = array( 'URL', 'Dir', 'SiteName', 'SiteRoot', 'Val_1', 'Val_2', 'Val_3' );
-  $states     = array( 'old', 'new' );
-  foreach ( $variables as $varSuffix ) {
-      foreach ( $states as $state ) {
-          $var = "{$state}{$varSuffix}";
-          if ( ! isset( $$var ) ) {
-              if ( isset( $defaultValues[$var] ) ) {
-                  $$var = $defaultValues[$var];
-              } else {
-                  $$var = null;
-              }
+  require_once 'Civi.php';
+  $settings = Civi::settings();
+
+  foreach (array_merge(_provision_civicrm_get_path_settings(), _provision_civicrm_get_url_settings()) as $key) {
+    $value = $settings->get($key);
+    if ($value && $value != $settings->getDefault($key)) {
+      if ($settings->getMandatory($key) === NULL) {
+        $settings->revert($key);
+        $moveStatus .= ts("WARNING: The setting (%1) has been reverted.", array(
+          1 => $key,
+        ));
+        $moveStatus .= '<br />';
           }
-          $$var = CRM_Utils_Request::retrieve( $var,
-                                               'String',
-                                               CRM_Core_DAO::$_nullArray,
-                                               false,
-                                               $$var,
-                                               'REQUEST' );
-      }
-  }
-
-  $from = $to = array( );
-  foreach ( $variables as $varSuffix ) {
-      $oldVar = "old{$varSuffix}";
-      $newVar = "new{$varSuffix}";
-      //skip it if either is empty or both are exactly the same
-      if ( $$oldVar &&
-           $$newVar &&
-           $$oldVar != $$newVar ) {
-          $from[]  = $$oldVar;
-          $to[]    = $$newVar;
-      }
-  }
-
-  $sql = "
-SELECT config_backend
-FROM   civicrm_domain
-WHERE  id = %1
-";
-  $params = array( 1 => array( CRM_Core_Config::domainID( ), 'Integer' ) );
-  $configBackend = CRM_Core_DAO::singleValueQuery( $sql, $params );
-  if ( ! $configBackend ) {
-      CRM_Core_Error::fatal( ts('Returning early due to unexpected error - civicrm_domain.config_backend column value is NULL. Try visiting CiviCRM Home page.') );
-  }
-  $configBackend = unserialize( $configBackend );
-
-  $configBackend = str_replace( $from,
-                                $to  ,
-                                $configBackend );
-
-  $configBackend = serialize( $configBackend );
-  $sql = "
-UPDATE civicrm_domain
-SET    config_backend = %2
-WHERE  id = %1
-";
-  $params[2] = array( $configBackend, 'String' );
-  CRM_Core_DAO::executeQuery( $sql, $params );
-
-  // Apply the changes to civicrm_option_values
-  $optionGroups = array('url_preferences', 'directory_preferences');
-  foreach ($optionGroups as $option) {
-      foreach ( $variables as $varSuffix ) {
-          $oldVar = "old{$varSuffix}";
-          $newVar = "new{$varSuffix}";
-
-          $from = $$oldVar;
-          $to   = $$newVar;
-
-          if ($from && $to && $from != $to) {
-              $sql = '
-UPDATE civicrm_option_value
-SET    value = REPLACE(value, %1, %2)
-WHERE  option_group_id = (
-SELECT id
-FROM   civicrm_option_group
-WHERE  name = %3 )
-';
-              $params = array( 1 => array ( $from, 'String' ),
-                               2 => array ($to, 'String'),
-                               3 => array($option, 'String') );
-              CRM_Core_DAO::executeQuery( $sql, $params );
+          else {
+            $moveStatus .= ts("WARNING: The setting (%1) is overridden and could not be reverted.", array(
+              1 => $key,
+            ));
+            $moveStatus .= '<br />';
           }
       }
   }
