diff --git a/ds.field_ui.inc b/ds.field_ui.inc
index de0330d..f96cf39 100644
--- a/ds.field_ui.inc
+++ b/ds.field_ui.inc
@@ -32,6 +32,24 @@ function ds_field_ui_fields_layouts(&$form, &$form_state) {
   // Add process function to add the regions.
   $form['#process'][] = 'ds_field_ui_regions';
 
+  // Add a destination so we can get back if layout has been changed.
+  $form['ds_destination'] = array(
+    '#type' => 'hidden',
+    '#value' => drupal_get_destination(),
+  );
+  $form['ds_entity_type'] = array(
+    '#type' => 'hidden',
+    '#value' => $entity_type,
+  );
+  $form['ds_bundle'] = array(
+    '#type' => 'hidden',
+    '#value' => $bundle,
+  );
+  $form['ds_view_mode'] = array(
+    '#type' => 'hidden',
+    '#value' => $view_mode,
+  );
+
   // Alter the text of the custom display settings.
   if (isset($form['modes'])) {
     $form['modes']['view_modes_custom']['#description'] = t('<a href="!url">Manage view modes</a>', array('!url' => url('admin/structure/ds/view_modes')));
@@ -206,6 +224,128 @@ function ds_field_ui_layouts_validate($form, &$form_state) {
 }
 
 /**
+ * Get a layout for a given entity.
+ *
+ * @param $entity_type
+ *   The name of the entity.
+ * @param $bundle
+ *   The name of the bundle.
+ * @param $view_mode
+ *   The name of the view mode.
+ */
+function ds_field_ui_layout_change($form, $form_state, $entity_type = '', $bundle = '', $view_mode = '', $new_layout = '') {
+
+  $layout = NULL;
+  if (!empty($entity_type) && !empty($bundle) && !empty($view_mode)) {
+    $layout = ds_get_layout($entity_type, $bundle, $view_mode, FALSE);
+  }
+  $all_layouts = ds_get_layout_info();
+
+  if ($layout && isset($all_layouts[$new_layout])) {
+
+    $new_layout_key = $new_layout;
+    $new_layout = $all_layouts[$new_layout];
+
+    $form['#entity_type'] = $entity_type;
+    $form['#bundle'] = $bundle;
+    $form['#view_mode'] = $view_mode;
+    $form['#layout'] = $layout;
+    $form['#new_layout'] = $new_layout;
+    $form['#new_layout_key'] = $new_layout_key;
+    $form['#export_id'] = $entity_type . '|' . $bundle . '|' . $view_mode;
+
+    $form['info'] = array(
+      '#markup' => t('You are changing from !old to %new layout for !bundle in !view_mode view mode. On this screen, you can move the fields to the new regions.', array('!old' => $layout['label'], '%new' => $new_layout['label'], '!bundle' => $bundle, '!view_mode' => $view_mode)),
+    );
+
+    // New region options.
+    $regions = array();
+    foreach ($new_layout['regions'] as $key => $title) {
+      $regions[$key] = $title;
+    }
+
+    // Create field selects. Use their previous region as default value.
+    foreach ($layout['settings']['fields'] as $field => $region) {
+      $form['ds_' . $field] = array(
+        '#type' => 'select',
+        '#title' => ucfirst(str_replace('_', ' ', $field)),
+        '#options' => $regions,
+        '#default_value' => $region,
+      );
+    }
+
+    $form['actions'] = array('#type' => 'actions');
+    $form['actions']['submit'] = array(
+      '#type' => 'submit',
+      '#value' => t('Save'),
+    );
+    $form['actions']['cancel'] = array(
+      '#type' => 'link',
+      '#title' => t('Cancel'),
+      '#href' => isset($_REQUEST['destination']) ? $_REQUEST['destination'] : '',
+    );
+  }
+  else {
+    $form['nothing'] = array('#markup' => t('No valid configuration found.'));
+  }
+
+  return $form;
+}
+
+/**
+ * Submit callback: save the layout change.
+ */
+function ds_field_ui_layout_change_submit($form, &$form_state) {
+
+  // Prepare some variables.
+  $layout = $form['#layout'];
+  $new_layout = $form['#new_layout'];
+  $new_layout_key = $form['#new_layout_key'];
+  $entity_type = $form['#entity_type'];
+  $bundle = $form['#bundle'];
+  $view_mode = $form['#view_mode'];
+
+  // Create new record.
+  $record = new stdClass();
+  $record->id = $form['#export_id'];
+  $record->entity_type = $entity_type;
+  $record->bundle = $bundle;
+  $record->view_mode = $view_mode;
+  $record->layout = $new_layout_key;
+  $record->settings = $layout['settings'];
+  unset($record->settings['regions']);
+  unset($record->settings['fields']);
+
+  // Set the field configuration.
+  foreach ($layout['settings']['fields'] as $field => $region) {
+
+    $region_value = $form_state['values']['ds_' . $field];
+
+    if (!isset($record->settings['regions'][$region_value])) {
+      $record->settings['regions'][$region_value] = array();
+    }
+    $record->settings['regions'][$region_value][] = $field;
+    $record->settings['fields'][$field] = $region_value;
+  }
+
+  // Remove old record.
+  db_delete('ds_layout_settings')
+    ->condition('entity_type', $entity_type)
+    ->condition('bundle', $bundle)
+    ->condition('view_mode', $view_mode)
+    ->execute();
+
+  // Save new record.
+  drupal_write_record('ds_layout_settings', $record);
+
+  // Clear entity info cache.
+  cache_clear_all('entity_info', 'cache', TRUE);
+
+  // Show message.
+  drupal_set_message(t('The layout change has been saved.'));
+}
+
+/**
  * Save the layout settings from the 'Manage display' screen.
  */
 function ds_field_ui_layouts_save($form, &$form_state) {
diff --git a/ds.module b/ds.module
index 70356c9..529b8e6 100644
--- a/ds.module
+++ b/ds.module
@@ -207,10 +207,12 @@ function ds_get_layout_info() {
  *   The name of the bundle.
  * @param $view_mode
  *   The name of the view mode.
+ * @param $fallback
+ *   Whether to fallback to default or not.
  * @return $layout
  *   Array of layout variables for the regions.
  */
-function ds_get_layout($entity_type, $bundle, $view_mode) {
+function ds_get_layout($entity_type, $bundle, $view_mode, $fallback = TRUE) {
 
   static $layouts = array();
   $layout_key = $entity_type . '_' . $bundle . '_' . $view_mode;
@@ -229,7 +231,7 @@ function ds_get_layout($entity_type, $bundle, $view_mode) {
 
     // In case $view_mode is not form and not found, check if we have a default layout,
     // but only if the view mode settings aren't overridden for this view mode.
-    if ($view_mode != 'default' && !$overriden && isset($entity_info[$entity_type]['bundles'][$bundle]['layouts']['default'])) {
+    if ($view_mode != 'default' && !$overriden && $fallback && isset($entity_info[$entity_type]['bundles'][$bundle]['layouts']['default'])) {
       $layouts[$layout_key] = $entity_info[$entity_type]['bundles'][$bundle]['layouts']['default'];
     }
 
diff --git a/ds.registry.inc b/ds.registry.inc
index 7889b81..aee9990 100644
--- a/ds.registry.inc
+++ b/ds.registry.inc
@@ -40,6 +40,17 @@ function _ds_menu() {
     'access arguments' => array('admin_display_suite'),
   );
 
+  // Change layout.
+  $items['admin/structure/ds/layout-change'] = array(
+    'title' => 'Change layout',
+    'description' => 'Act on layout change to move fields elsewhere',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('ds_field_ui_layout_change'),
+    'access arguments' => array('admin_display_suite'),
+    'file' => 'ds.field_ui.inc',
+    'type' => MENU_VISIBLE_IN_BREADCRUMB,
+  );
+
   // Revert layout.
   $items['admin/structure/ds/revert-layout'] = array(
     'title' => 'Revert layout',
diff --git a/js/ds.js b/js/ds.js
index 0b66e8d..596e0d9 100644
--- a/js/ds.js
+++ b/js/ds.js
@@ -3,7 +3,29 @@
 
 Drupal.DisplaySuite = Drupal.DisplaySuite || {};
 Drupal.DisplaySuite.fieldopened = '';
-  
+Drupal.DisplaySuite.layout_original = '';
+
+/**
+ * Layout change.
+ */
+Drupal.behaviors.layoutChange = {
+  attach: function (context) {  
+    if ($('#edit-additional-settings-layout').length > 0) {
+      Drupal.DisplaySuite.layout_original = $('#edit-additional-settings-layout').val();
+      $('#edit-additional-settings-layout').change(function() {
+        layout = $('#edit-additional-settings-layout').val();
+        if (layout != '' && layout != Drupal.DisplaySuite.layout_original) {
+          entity_type = $('input[name="ds_entity_type"]').val();
+          bundle = $('input[name="ds_bundle"]').val();
+          view_mode = $('input[name="ds_view_mode"]').val();
+          args = entity_type + '/' + bundle + '/' + view_mode + '/' + layout;
+          window.location = '/admin/structure/ds/layout-change/' + args + '?destination=' + $('input[name="ds_destination"]').val();
+        }
+      });
+    }
+  }
+};
+
 /**
  * Field template.
  */
