diff --git a/includes/form.inc b/includes/form.inc
index ea41b572ef7b80b239d69a2e703cbe587d612dfd..2c3344f6cdfd023974120c1b06c77d8cbe3db2aa 100644
--- a/includes/form.inc
+++ b/includes/form.inc
@@ -498,13 +498,21 @@ function form_render(&$elements) {
   uasort($elements, "_form_sort");
 
   if (!isset($elements['#children'])) {
-    /* render all the children using a theme function */
+    /* Render all the children that use a theme function */
     if (isset($elements['#theme']) && !$elements['#theme_used']) {
       $elements['#theme_used'] = TRUE;
+
+      $previous_value = $elements['#value'];
       $previous_type = $elements['#type'];
+      $elements['#value'] = '';
       $elements['#type'] = 'markup';
+
       $content = theme($elements['#theme'], $elements);
+
+      $elements['#value'] = $previous_value;
       $elements['#type'] = $previous_type;
+
+      unset($elements['#prefix'], $elements['#suffix']);
     }
     /* render each of the children using form_render and concatenate them */
     if (!$content) {