Question: I am building a multistep form using ctools, basically following [this approach](http://preprocess.me/multi-steps-form-in-drupal-7-with-ctools). Now I want the following behaviour:

* user is at step 1
* enters data for step 1
* clicks continue and gets to step 2
* enters data for step 2
* clicks *back* and gets to step 1
* **sees the data he entered previously** (works already)
* clicks *continue* and gets to step 2
* **sees the data he entered previously** (works not yet)

To show the previously entered data after clicking *continue*, I simply set `$form[$name]['#default_value']` with values from `$form_state['values']` (with a detour via ctools object cache). So this works already.

The problem is with clicking *back*: After clicking *back*, $form\_state['values'] does **not** contain any entered values. So I don't have the values to populate `$form[$name]['#default_value']` and this is my current problem.

So I wonder: How can I send entered values with the *back* button submit?

Answer: 
To get ctools wizard to save values when the user presses the back button, you would have to remove it's '#limit\_validation\_errors' property that is set by default in ctools\_wizard\_wrapper(). There is no convenient switch or form\_info property to do this so you have to use a form alter hook similar to this:

```
function test_form_alter(&$form, &$form_state, $form_id) {
  if (isset($form_state['wrapper_callback']) && $form_state['wrapper_callback'] == 'ctools_wizard_wrapper' && $form_state['form_info']['id'] == 'test_wizard') {
    if (isset($form['buttons']['previous'])) {
      unset($form['buttons']['previous']['#limit_validation_errors']);
    }
  }
}

```
I know this question is a bit old, but might help someone in the same situation as I was.

If you end up creating custom submit handlers and having to take care of saving the step values manually then you are not fully taking advantage of what ctools has to offer.
The documentation on using and creating multi step forms is quite poor, but following this blog post helped me understand better all the different callbacks that the ctools wizard offers:
<http://www.grasmash.com/article/building-multistep-registration-form-drupal-7-using-ctools>

The only thing missing from the 'next callback' in that tutorial is 'merging' the existing values from the cache with the new ones from your current step (see below).

When you define your '$form\_info' and specify all the ctools steps and options, you have the ability to set callback for 'next', 'finish', 'return', and 'cancel' actions.
The way I ended up saving my step data when going back and forward is by setting the 'next callback' and then saving the `$form_state['values']` in the ctools object cache.

```
'next callback' => 'my_module_subtask_next',

```

Then in the actual callback function you basically merge your current cached object with the new $form\_state['values']:

```
function my_module_subtask_next(&$form_state) {
  $values = (array) my_module_get_page_cache('my_module');
  my_module_set_page_cache('my_module', array_merge($values, $form_state['values']));
}

```

Then when setting up your $form fields you can retrieve this ctools cache object and set your `#default_value`:

```
// ctools automatically adds the cache object in your $form_state
$form_values = $form_state['my_module_object'];
$form['example'] = array(
  '#type' => 'texfield',
  '#title' => t('Example field'),
  '#default_value' => (isset($form_values['example'])) ? $form_values['example'] : NULL,,
);

```