diff --git a/theme.inc b/theme.inc
index 6216549..47ec953 100644
--- a/theme.inc
+++ b/theme.inc
@@ -181,11 +181,14 @@ function template_preprocess_views_calc_table(&$vars) {
       $vars['fields'][$field] .= ' ' . drupal_clean_css_identifier($options['info'][$field]['align']);
     }
   }
+  // Fields must be rendered in order as of Views 2.3, so we will pre-render
+  // everything.
+  $renders = $handler->render_fields($result);
 
   // Render each field into its appropriate column. Preserve rows.
   foreach ($result as $num => $row) {
     foreach ($columns as $field => $column) {
-      $field_output = $fields[$field]->theme($row);
+      $field_output = $renders[$num][$field];
       if (!empty($fields[$field]) && empty($fields[$field]->options['exclude'])) {
 
         // Don't bother with separators and stuff if the field does not show up.
@@ -308,7 +311,7 @@ function views_calc_table_total(&$vars, $key, $totals) {
             // and in ->options for other fields that are based on the numeric field handler.
             if (isset($fields[$field]->field_info)) {
               $separator = !empty($fields[$field]->options['settings']['thousands_separator']) ? $fields[$field]->options['settings']['thousands_separator'] : $options['separator'];
-              $$decimal = !empty($fields[$field]->options['settings']['decimal_separator']) ? $fields[$field]->options['settings']['decimal_separator'] : $options['decimal'];
+              $decimal = !empty($fields[$field]->options['settings']['decimal_separator']) ? $fields[$field]->options['settings']['decimal_separator'] : $options['decimal'];
               $precision = !empty($fields[$field]->options['settings']['scale']) ? $fields[$field]->options['settings']['scale'] : $options['precision'];
             }
             else {
