Multiple forms on one page - gather values
You can nest form elements, so there is effectively only one form. That case you'll only need one validation and submit handler. In the end all results will be in $form_state['values'].

function form_a($form, &amp;$form_states) {
  ..
  return $form;
}

function form_b($form, &amp;$form_states) {
  ..
  return $form;
}

function my_form($form, &amp;$form_states) {
  if ($need_a) {
    $form += form_a($form, &amp;$form_states);
  }
  if ($need_b) {
    $form += form_a($form, &amp;$form_states);
  }

  // Add the buttons.
  $form['actions'] = array('#type' =&gt; 'actions');
  $form['actions']['submit'] = array(
    '#type' =&gt; 'submit',
    '#value' =&gt; t('Save'),
    '#weight' =&gt; 5,
  );

  return $form;
}

function my_form_submit($form, &amp;$form_states) {
  drupal_set_message(print_r($form_state['values'], TRUE));
}