diff -ruN nodereview/css/admin.css nodereview/css/admin.css
--- nodereview/css/admin.css	1970-01-01 01:00:00.000000000 +0100
+++ nodereview/css/admin.css	2008-07-03 01:15:41.000000000 +0100
@@ -0,0 +1,15 @@
+.two .column { 
+  width: 50%;
+}
+.three .column { 
+  width: 33%;
+}
+.four .column { 
+  width: 25%;
+}
+.five .column { 
+  width: 20%;
+}
+.columns .column { 
+  float: left; /* rtl */
+}
diff -ruN nodereview/nodereview.module nodereview/nodereview.module
--- nodereview/nodereview.module	2008-05-15 18:27:14.000000000 +0100
+++ nodereview/nodereview.module	2008-07-03 08:24:39.000000000 +0100
@@ -114,14 +114,14 @@
       'path' => 'admin/content/nodereview',
       'title' => t('Review types'),
       'callback' => 'drupal_get_form',
-      'callback arguments' => t('nodereview_configure'),
+      'callback arguments' => 'nodereview_configure',
       'access' => user_access('administer reviews'),
     );
     $items[] = array(
       'path' => 'admin/content/nodereview/types',
       'title' => t('List'),
       'callback' => 'drupal_get_form',
-      'callback arguments' => t('nodereview_configure'),
+      'callback arguments' => 'nodereview_configure',
       'access' => user_access('administer reviews'),
       'type' => MENU_DEFAULT_LOCAL_TASK,
       'weight' => -1,
@@ -290,6 +290,8 @@
     $options[$type] = $info->name;
     if (variable_get('nodereview_use_'. $type, 0)) {
       $default[] = $type;
+      if (variable_get('nodereview_tally_node_'. $type, 0)) $tally_node[] = $type;
+      if (variable_get('nodereview_tally_view_'. $type, 0)) $tally_view[] = $type;
     }
   }
 
@@ -298,6 +300,8 @@
     '#title' => t('Review types'),
     '#collapsible' => FALSE,
     '#collapsed' => FALSE,
+    '#prefix' => '<div class="three columns">',
+    '#suffix' => '</div>',
   );
   $form['nodereview']['types'] = array(
     '#type' => 'checkboxes',
@@ -305,6 +309,26 @@
     '#default_value' => $default,
     '#options' => $options,
     '#description' => t('Specify which content types can be reviewed.'),
+    '#prefix' => '<div class="column">',
+    '#suffix' => '</div>',
+  );
+  $form['nodereview']['show_tally_node'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Which content types have table'),
+    '#default_value' => $tally_node,
+    '#options' => $options,
+    '#description' => t('Specify which content types will be displayed with a table of averages at the top.'),
+    '#prefix' => '<div class="column">',
+    '#suffix' => '</div>',
+  );
+  $form['nodereview']['show_tally_view'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Which content types have table with reviews'),
+    '#default_value' => $tally_view,
+    '#options' => $options,
+    '#description' => t('Specify which content types will have their list of reviews displayed with a table of averages at the top.'),
+    '#prefix' => '<div class="column">',
+    '#suffix' => '</div>',
   );
 
   if (module_exists('fivestar')) {
@@ -333,6 +357,7 @@
     '#type' => 'submit', 
     '#value' => t('Save'),
   );
+  drupal_add_css(drupal_get_path('module', 'nodereview') .'/css/admin.css', 'module', 'all', FALSE);
 
   return $form;
 
@@ -345,6 +370,12 @@
   foreach ($form_values['types'] as $type => $checked) {
     variable_set('nodereview_use_'. $type, (bool)$checked);
   }
+  foreach ($form_values['show_tally_node'] as $type => $checked) {
+    variable_set('nodereview_tally_node_'. $type, (bool)$checked);
+  }
+  foreach ($form_values['show_tally_view'] as $type => $checked) {
+    variable_set('nodereview_tally_view_'. $type, (bool)$checked);
+  }
   foreach ($form_values['fivestar'] as $option => $value) {
     variable_set('nodereview_fivestar_'. $option, $value);
   }
@@ -484,7 +515,7 @@
   static $axes = array();
 
   if (! isset($axes[$node_type])) {
-    $result = db_query("SELECT na.aid, na.tag FROM {nodereview_axes} na WHERE na.node_type='%s'", $node_type);
+    $result = db_query("SELECT na.aid, na.tag FROM {nodereview_axes} na WHERE na.node_type='%s' ORDER BY weight, tag", $node_type);
     while ($record = db_fetch_object($result)) {
       $axes[$node_type][$record->aid] = $record->tag;
     }
diff -ruN nodereview/nodereview_node_nodereview.inc nodereview/nodereview_node_nodereview.inc
--- nodereview/nodereview_node_nodereview.inc	2008-05-15 18:27:14.000000000 +0100
+++ nodereview/nodereview_node_nodereview.inc	2008-07-03 09:07:25.000000000 +0100
@@ -257,9 +257,6 @@
 function nodereview_view($node, $teaser = FALSE, $page = FALSE) {
   //$node = node_prepare($node, $teaser);
 
-  $aids = array_keys($node->reviews);
-  $num_aids = sizeof($aids);
-
   // Previews are just plain ugly, because the $node object is not really a node
   // but a mutated $_POST.  It has to be handled completely differently.
   if ($node->in_preview) {
@@ -284,14 +281,14 @@
     $node = node_prepare($node, $teaser);
 
     // Do a markup check on the fields
-    for ($i=0; $i < $num_aids; $i++) {
-      $node->reviews[$aids[$i]]->review = check_markup($node->reviews[$aids[$i]]->review);
+    foreach ($node->reviews as $review) {
+      $review->review = check_markup($review->review);
     }
 
     if ($teaser) {
       $node->content['reviews'] = array(
-          '#value' => theme('nodereview_teaser', $node),
-        );
+        '#value' => theme('nodereview_teaser', $node),
+      );
     }
 
     if ($page) {
@@ -306,6 +303,40 @@
   }
 }
 
+function nodereview_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
+  switch ($op) {
+    case 'view':
+      // if not teaser view
+      if (!$a3 && (variable_get('nodereview_tally_node_'. $node->type, 0))) {
+        $node->content['axes_tallies'] = array(
+          '#value'  => _nodereview_tally($node->nid, $node->type),
+          '#weight' => -10,
+        );
+      }
+      break;
+  }
+}
+
+function _nodereview_tally($nid, $type) {
+  $votes_obj = votingapi_get_voting_results('node', $nid);
+  if ($votes_obj) {
+    $avg = array();
+    foreach ($votes_obj as $vote) {
+      if ($vote->function == 'average') $avg[$vote->tag] = $vote->value;
+    }
+
+    $axes = nodereview_list_axes($type);
+    $header[] = t('aspect');
+    $row[] = array('class' => 'row_title', 'header' => true, 'data' => t('average'));
+    foreach ($axes as $axis) {
+      $header[] = $axis;
+      $row[] = (NODEREVIEW_FIVESTAR_ENABLE) ?
+        theme('fivestar_static', $avg[$axis], variable_get('nodereview_fivestar_stars', 5)):
+        $avg[$axis]/10 . '/10';
+    }
+    return $output = theme('table', $header, array($row), array('class'=>'axes_tallies'));
+  }
+}
 /* ----- Theme functions ----- */
 
 function theme_nodereview_review_body($review, $node) {
diff -ruN nodereview/nodereview_views.inc nodereview/nodereview_views.inc
--- nodereview/nodereview_views.inc	2007-02-25 02:50:10.000000000 +0000
+++ nodereview/nodereview_views.inc	2008-07-03 08:57:56.000000000 +0100
@@ -151,3 +151,8 @@
   
   return $views;
 }
+
+function nodereview_views_pre_view(&$view, &$items) {
+  $tp = node_load($view->args[0])->type;
+  if (variable_get('nodereview_tally_view_'. $tp, 0)) return _nodereview_tally($view->args[0], $tp);
+}
