diff --git includes/form.inc includes/form.inc
index b54beeb..c377586 100644
--- includes/form.inc
+++ includes/form.inc
@@ -129,6 +129,11 @@ function ctools_build_form($form_id, &$form_state) {
   if (!empty($form_state['rebuild']) || !empty($form_state['storage'])) {
     $form = ctools_rebuild_form($form_id, $form_state, $args);
   }
+  else {
+    // As some new form elements might have been added while processing the form
+    // (e.g. the submit handler added elements), we re-build the form.
+    $form = form_builder($form_id, $form, $form_state);
+  }
 
   // If whoever is calling this wants the $form array (so that it can render it
   // another way, for example) then return it.
